ref: 60d67b11126e87ec41ae09b34aa4a133a3af5f7c
parent: 4171532c80448a36205327e2903d145a5c45e9d9
author: Jean-Marc Valin <jmvalin@amazon.com>
date: Mon Jul 24 17:07:46 EDT 2023
New compute_generic_conv1d()
--- a/dnn/nnet.c
+++ b/dnn/nnet.c
@@ -333,15 +333,22 @@
#define MAX_CONV_INPUTS_ALL IMAX(MAX_CONV_INPUTS, DRED_MAX_CONV_INPUTS)
+void compute_generic_conv1d(const LinearLayer *layer, float *output, float *mem, const float *input, int input_size, int activation)
+{
+ float tmp[MAX_CONV_INPUTS_ALL];
+ celt_assert(input != output);
+ celt_assert(layer->nb_inputs <= MAX_CONV_INPUTS_ALL);
+ OPUS_COPY(tmp, mem, layer->nb_inputs-input_size);
+ OPUS_COPY(&tmp[layer->nb_inputs-input_size], input, input_size);
+ compute_linear(layer, output, tmp);
+ compute_activation(output, output, layer->nb_outputs, activation);
+ OPUS_COPY(mem, &tmp[input_size], layer->nb_inputs-input_size);
+}
+
void compute_conv1d(const Conv1DLayer *layer, float *output, float *mem, const float *input)
{
LinearLayer matrix;
int N, M;
- float tmp[MAX_CONV_INPUTS_ALL];
- celt_assert(input != output);
- celt_assert(layer->nb_inputs*layer->kernel_size <= MAX_CONV_INPUTS_ALL);
- OPUS_COPY(tmp, mem, layer->nb_inputs*(layer->kernel_size-1));
- OPUS_COPY(&tmp[layer->nb_inputs*(layer->kernel_size-1)], input, layer->nb_inputs);
M = layer->nb_inputs*layer->kernel_size;
N = layer->nb_neurons;
matrix.bias = layer->bias;
@@ -353,9 +360,7 @@
matrix.nb_inputs = M;
matrix.nb_outputs = N;
matrix.scale = NULL;
- compute_linear(&matrix, output, tmp);
- compute_activation(output, output, N, layer->activation);
- OPUS_COPY(mem, &tmp[layer->nb_inputs], layer->nb_inputs*(layer->kernel_size-1));
+ compute_generic_conv1d(&matrix, output, mem, input, layer->nb_inputs, layer->activation);
}
void compute_embedding(const EmbeddingLayer *layer, float *output, int input)
--
⑨