Skip to content

Commit 190d3b4

Browse files
Conv1d minor changes and type casting
1 parent 5435f0f commit 190d3b4

File tree

17 files changed

+80
-75
lines changed

17 files changed

+80
-75
lines changed

c_reference/include/conv1d.h

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
* @var B pointer to the bias vector for the convolution, size = out_channels
1111
*/
1212
typedef struct ConvLayers_Params {
13-
float* W;
14-
float* B;
13+
const float* const W;
14+
const float* const B;
1515
} ConvLayers_Params;
1616

1717
/**
@@ -36,7 +36,7 @@ typedef struct ConvLayers_Params {
3636
*/
3737
int conv1d(float* output_signal, unsigned out_time, unsigned out_channels, const float* input_signal,
3838
unsigned in_time, unsigned in_channels, unsigned padding, unsigned kernel_size,
39-
const void* params, unsigned stride, int activation);
39+
const void* params, unsigned stride, unsigned activation);
4040

4141
/**
4242
* @brief Model definition for the 1D Depthwise Convolution Layer. Currently only for dilation = 1
@@ -60,7 +60,7 @@ int conv1d(float* output_signal, unsigned out_time, unsigned out_channels, const
6060
*/
6161
int conv1d_depth(float* output_signal, unsigned out_time, const float* input_signal,
6262
unsigned in_time, unsigned in_channels, unsigned padding, unsigned kernel_size,
63-
const void* params, unsigned stride, int activation);
63+
const void* params, unsigned stride, unsigned activation);
6464

6565
/**
6666
* @brief Model parameters for the 1D Low Rank Convolution Layer.
@@ -70,9 +70,9 @@ int conv1d_depth(float* output_signal, unsigned out_time, const float* input_sig
7070
* @var rank rank of the weight tensor. A low-rank decomposition typically used to reduce computation and storage
7171
*/
7272
typedef struct ConvLayers_LR_Params {
73-
float* W1;
74-
float* W2;
75-
float* B;
73+
const float* const W1;
74+
const float* const W2;
75+
const float* const B;
7676
unsigned rank;
7777
} ConvLayers_LR_Params;
7878

@@ -100,7 +100,7 @@ typedef struct ConvLayers_LR_Params {
100100
*/
101101
int conv1d_lr(float* output_signal, unsigned out_time, unsigned out_channels, const float* input_signal,
102102
unsigned in_time, unsigned in_channels, unsigned padding, unsigned kernel_size,
103-
const void* params, unsigned stride, int activation);
103+
const void* params, unsigned stride, unsigned activation);
104104

105105
/**
106106
* @brief Model definition for the 1D Low-Rank Depthwise Convolution Layer. Currently only for dilation = 1
@@ -126,7 +126,7 @@ int conv1d_lr(float* output_signal, unsigned out_time, unsigned out_channels, co
126126
*/
127127
int conv1d_depth_lr(float* output_signal, unsigned out_time, const float* input_signal,
128128
unsigned in_time, unsigned in_channels, unsigned padding, unsigned kernel_size,
129-
const void* params, unsigned stride, int activation);
129+
const void* params, unsigned stride, unsigned activation);
130130

131131
// Auxiliary Layers
132132
/**
@@ -150,7 +150,7 @@ int conv1d_depth_lr(float* output_signal, unsigned out_time, const float* input_
150150
*/
151151
int avgpool1d(float* output_signal, unsigned out_time, const float* input_signal,
152152
unsigned in_time, unsigned in_channels,
153-
unsigned padding, unsigned kernel_size, unsigned stride, int activation);
153+
unsigned padding, unsigned kernel_size, unsigned stride, unsigned activation);
154154

155155
/**
156156
* @brief Model definition for the 1D batch Normalization Layer
@@ -168,7 +168,8 @@ int avgpool1d(float* output_signal, unsigned out_time, const float* input_signal
168168
*/
169169
int batchnorm1d(float* output_signal, float* input_signal,
170170
unsigned in_time, unsigned in_channels,
171-
float* mean, float* var, unsigned affine, float* gamma , float* beta,
171+
const float* const mean, const float* const var,
172+
unsigned affine, const float* const gamma , const float* const beta,
172173
unsigned in_place, float eps);
173174

174175
#endif

c_reference/include/dscnn.h

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,10 @@
3030
*/
3131
int phon_pred_lr_cnn(float* output_signal, float* input_signal,
3232
unsigned in_time, unsigned in_channels,
33-
float* mean, float* var, unsigned affine, float* gamma, float* beta, unsigned in_place,
33+
const float* const mean, const float* const var,
34+
unsigned affine, float* gamma, float* beta, unsigned in_place,
3435
unsigned cnn_hidden, unsigned cnn_padding, unsigned cnn_kernel_size,
35-
const void* cnn_params, unsigned cnn_stride, int cnn_activation);
36+
const void* cnn_params, unsigned cnn_stride, unsigned cnn_activation);
3637

3738
/**
3839
* @brief Model definition for the 1D Convolution block applied after the RNN
@@ -47,7 +48,6 @@ int phon_pred_lr_cnn(float* output_signal, float* input_signal,
4748
* @param[in] gamma pointer to the scaling factors for the post-norm affine operation, size = in_channels
4849
* @param[in] beta pointer to the offsets for the post-norm affine operation, size = in_channels
4950
* @param[in] in_place in-place computation of the batchnorm. Storage efficient
50-
* @param[in] depth_cnn_hidden hidden state/out_channels dimensions for the depth CNN
5151
* @param[in] depth_cnn_padding padding for the depth CNN layer. Note: applied to both sides of the input to the depth CNN
5252
* @param[in] depth_cnn_kernel_size kernel size of the depth CNN
5353
* @param[in] depth_cnn_params weights, bias and other essential parameters used to describe the depth CNN
@@ -78,11 +78,12 @@ int phon_pred_lr_cnn(float* output_signal, float* input_signal,
7878
*/
7979
int phon_pred_depth_point_lr_cnn(float* output_signal, float* input_signal,
8080
unsigned in_time, unsigned in_channels,
81-
float* mean, float* var, unsigned affine, float* gamma, float* beta, unsigned in_place,
82-
unsigned depth_cnn_hidden, unsigned depth_cnn_padding, unsigned depth_cnn_kernel_size,
83-
const void* depth_cnn_params, unsigned depth_cnn_stride, int depth_cnn_activation,
81+
const float* const mean, const float* const var,
82+
unsigned affine, const float* const gamma, const float* const beta, unsigned in_place,
83+
unsigned depth_cnn_padding, unsigned depth_cnn_kernel_size,
84+
const void* depth_cnn_params, unsigned depth_cnn_stride, unsigned depth_cnn_activation,
8485
unsigned point_cnn_hidden, unsigned point_cnn_padding, unsigned point_cnn_kernel_size,
85-
const void* point_cnn_params, unsigned point_cnn_stride, int point_cnn_activation,
86-
unsigned pool_padding, unsigned pool_kernel_size, unsigned pool_stride, int pool_activation);
86+
const void* point_cnn_params, unsigned point_cnn_stride, unsigned point_cnn_activation,
87+
unsigned pool_padding, unsigned pool_kernel_size, unsigned pool_stride, unsigned pool_activation);
8788

8889
#endif

c_reference/include/rnn_bricked.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
#ifndef __RNN_BRICKED_H__
55
#define __RNN_BRICKED_H__
66

7-
// Function Pointer for the RNN to be passed as a parameter
8-
typedef int (*rnn_t)(float* const, unsigned, const float* const, unsigned,
7+
// Function pointer for the RNN to be passed as a parameter
8+
typedef int (*rnn_layer)(float* const, unsigned, const float* const, unsigned,
99
unsigned, const void*, void*, int, int);
1010

1111
// NOTES for bi-direction
@@ -52,8 +52,8 @@ typedef int (*rnn_t)(float* const, unsigned, const float* const, unsigned,
5252
*/
5353
int forward_bricked_rnn(float* output_signal, unsigned rnn_hidden, float* input_signal,
5454
unsigned in_time, unsigned in_dims, unsigned window, unsigned hop,
55-
rnn_t rnn, const void* params, void* buffers,
56-
int bi_direction, int sample_first_brick, int normalize);
55+
rnn_layer rnn, const void* params, void* buffers,
56+
unsigned bi_direction, unsigned sample_first_brick, int normalize);
5757

5858
/** Backward Bricking and application of the backward RNN for an input signal
5959
* @param[out] output_signal pointer to output signal. size = out_time * rnn_hidden
@@ -73,8 +73,8 @@ int forward_bricked_rnn(float* output_signal, unsigned rnn_hidden, float* input_
7373
*/
7474
int backward_bricked_rnn(float* output_signal, unsigned rnn_hidden, float* input_signal,
7575
unsigned in_time, unsigned in_dims, unsigned window, unsigned hop,
76-
rnn_t rnn, const void* params, void* buffers,
77-
int bi_direction, int sample_last_brick, int normalize);
76+
rnn_layer rnn, const void* params, void* buffers,
77+
unsigned bi_direction, unsigned sample_last_brick, int normalize);
7878

7979

8080
#endif

c_reference/include/utils.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ void softmax(const float* const input, unsigned len, float* const ret);
7676
in_channels number of input channels. The output will have the half the number of input channels.
7777
Necessary for in_channels % 2 == 0
7878
*/
79-
int semi_sigmoid_tanh(float* output_signal, float* input_signal,
79+
void semi_sigmoid_tanh(float* output_signal, const float* const input_signal,
8080
unsigned in_time, unsigned in_channels);
8181

8282
#endif

c_reference/src/conv1d.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
int conv1d_lr(float* output_signal, unsigned out_time, unsigned out_channels, const float* input_signal,
1010
unsigned in_time, unsigned in_channels, unsigned padding, unsigned kernel_size,
11-
const void* params, unsigned stride, int activation) {
11+
const void* params, unsigned stride, unsigned activation) {
1212

1313
const ConvLayers_LR_Params* tparams= (ConvLayers_LR_Params*) params;
1414

@@ -51,7 +51,7 @@ int conv1d_lr(float* output_signal, unsigned out_time, unsigned out_channels, co
5151

5252
int conv1d_depth_lr(float* output_signal, unsigned out_time, const float* input_signal,
5353
unsigned in_time, unsigned in_channels, unsigned padding, unsigned kernel_size,
54-
const void* params, unsigned stride, int activation) {
54+
const void* params, unsigned stride, unsigned activation) {
5555

5656
const ConvLayers_LR_Params* tparams= (ConvLayers_LR_Params*) params;
5757

@@ -90,11 +90,9 @@ int conv1d_depth_lr(float* output_signal, unsigned out_time, const float* input_
9090
return 0;
9191
}
9292

93-
94-
9593
int conv1d(float* output_signal, unsigned out_time, unsigned out_channels, const float* input_signal,
9694
unsigned in_time, unsigned in_channels, unsigned padding, unsigned kernel_size,
97-
const void* params, unsigned stride, int activation) {
95+
const void* params, unsigned stride, unsigned activation) {
9896

9997
const ConvLayers_Params* tparams= (ConvLayers_Params*) params;
10098

@@ -133,7 +131,7 @@ int conv1d(float* output_signal, unsigned out_time, unsigned out_channels, const
133131

134132
int conv1d_depth(float* output_signal, unsigned out_time, const float* input_signal,
135133
unsigned in_time, unsigned in_channels, unsigned padding, unsigned kernel_size,
136-
const void* params, unsigned stride, int activation) {
134+
const void* params, unsigned stride, unsigned activation) {
137135

138136
const ConvLayers_Params* tparams= (ConvLayers_Params*) params;
139137

@@ -170,7 +168,7 @@ int conv1d_depth(float* output_signal, unsigned out_time, const float* input_sig
170168

171169
int avgpool1d(float* output_signal, unsigned out_time, const float* input_signal,
172170
unsigned in_time, unsigned in_channels,
173-
unsigned padding, unsigned kernel_size, unsigned stride, int activation) {
171+
unsigned padding, unsigned kernel_size, unsigned stride, unsigned activation) {
174172

175173
// Iterate over the time steps and average them. Similar to Conv1D_Dept with a filter kernel of ones
176174
for (unsigned t_in = 0, t_out = 0; t_out < out_time; t_out++, t_in += stride) {
@@ -203,7 +201,8 @@ int avgpool1d(float* output_signal, unsigned out_time, const float* input_signal
203201

204202
int batchnorm1d(float* output_signal, float* input_signal,
205203
unsigned in_time, unsigned in_channels,
206-
float* mean, float* var, unsigned affine, float* gamma , float* beta,
204+
const float* const mean, const float* const var,
205+
unsigned affine, const float* const gamma , const float* const beta,
207206
unsigned in_place, float eps) {
208207
// Check if affine values was learnt
209208
if (affine) {

c_reference/src/dscnn.c

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@
1010

1111
int phon_pred_lr_cnn(float* output_signal, float* input_signal,
1212
unsigned in_time, unsigned in_channels,
13-
float* mean, float* var, unsigned affine, float* gamma, float* beta, unsigned in_place,
13+
const float* const mean, const float* const var,
14+
unsigned affine, float* gamma, float* beta, unsigned in_place,
1415
unsigned cnn_hidden, unsigned cnn_padding, unsigned cnn_kernel_size,
15-
const void* cnn_params, unsigned cnn_stride, int cnn_activation) {
16+
const void* cnn_params, unsigned cnn_stride, unsigned cnn_activation) {
1617

1718
unsigned out_time = in_time - cnn_kernel_size + 2 * cnn_padding + 1;
1819
if (in_place) {
@@ -44,29 +45,31 @@ int phon_pred_lr_cnn(float* output_signal, float* input_signal,
4445

4546
int phon_pred_depth_point_lr_cnn(float* output_signal, float* input_signal,
4647
unsigned in_time, unsigned in_channels,
47-
float* mean, float* var, unsigned affine, float* gamma, float* beta, unsigned in_place,
48-
unsigned depth_cnn_hidden, unsigned depth_cnn_padding, unsigned depth_cnn_kernel_size,
49-
const void* depth_cnn_params, unsigned depth_cnn_stride, int depth_cnn_activation,
48+
const float* const mean, const float* const var,
49+
unsigned affine, const float* const gamma, const float* const beta, unsigned in_place,
50+
unsigned depth_cnn_padding, unsigned depth_cnn_kernel_size,
51+
const void* depth_cnn_params, unsigned depth_cnn_stride, unsigned depth_cnn_activation,
5052
unsigned point_cnn_hidden, unsigned point_cnn_padding, unsigned point_cnn_kernel_size,
51-
const void* point_cnn_params, unsigned point_cnn_stride, int point_cnn_activation,
52-
unsigned pool_padding, unsigned pool_kernel_size, unsigned pool_stride, int pool_activation) {
53+
const void* point_cnn_params, unsigned point_cnn_stride, unsigned point_cnn_activation,
54+
unsigned pool_padding, unsigned pool_kernel_size, unsigned pool_stride, unsigned pool_activation) {
5355

5456
// Activation
55-
unsigned out_time;
57+
5658
float* act_out= (float*)malloc(in_time * (in_channels >> 1) * sizeof(float));
5759
semi_sigmoid_tanh(act_out, input_signal, in_time, in_channels);
5860

5961
in_channels >>= 1;
6062
float* depth_out;
63+
unsigned out_time = in_time - depth_cnn_kernel_size + 2 * depth_cnn_padding + 1;
6164
if (in_place) {
6265
// Norm
6366
batchnorm1d(0, act_out,
6467
in_time, in_channels,
65-
mean, var, affine, gamma, beta,
68+
mean, var,
69+
affine, gamma, beta,
6670
in_place, 0.00001);
6771
// Depth CNN
68-
out_time = in_time - depth_cnn_kernel_size + 2 * depth_cnn_padding + 1;
69-
depth_out = (float*)malloc(out_time * depth_cnn_hidden * sizeof(float));
72+
depth_out = (float*)malloc(out_time * in_channels * sizeof(float));
7073
conv1d_depth(depth_out, out_time, act_out,
7174
in_time, in_channels, depth_cnn_padding, depth_cnn_kernel_size,
7275
depth_cnn_params, depth_cnn_stride, depth_cnn_activation);
@@ -77,12 +80,12 @@ int phon_pred_depth_point_lr_cnn(float* output_signal, float* input_signal,
7780
float* norm_out = (float*)malloc(in_time * in_channels * sizeof(float));
7881
batchnorm1d(norm_out, act_out,
7982
in_time, in_channels,
80-
mean, var, affine, gamma, beta,
83+
mean, var,
84+
affine, gamma, beta,
8185
in_place, 0.00001);
8286
free(act_out);
8387
// Depth CNN
84-
out_time = in_time - depth_cnn_kernel_size + 2 * depth_cnn_padding + 1;
85-
depth_out = (float*)malloc(out_time * depth_cnn_hidden * sizeof(float));
88+
depth_out = (float*)malloc(out_time * in_channels * sizeof(float));
8689
conv1d_depth(depth_out, out_time, norm_out,
8790
in_time, in_channels, depth_cnn_padding, depth_cnn_kernel_size,
8891
depth_cnn_params, depth_cnn_stride, depth_cnn_activation);
@@ -94,7 +97,7 @@ int phon_pred_depth_point_lr_cnn(float* output_signal, float* input_signal,
9497
out_time = in_time - point_cnn_kernel_size + 2 * point_cnn_padding + 1;
9598
float* point_out = (float*)malloc(out_time * point_cnn_hidden * sizeof(float));
9699
conv1d_lr(point_out, out_time, point_cnn_hidden, depth_out,
97-
in_time, depth_cnn_hidden, point_cnn_padding, point_cnn_kernel_size,
100+
in_time, in_channels, point_cnn_padding, point_cnn_kernel_size,
98101
point_cnn_params, point_cnn_stride, point_cnn_activation);
99102
free(depth_out);
100103

c_reference/src/rnn_bricked.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
// Forward Pass
1111
int forward_bricked_rnn(float* output_signal, unsigned rnn_hidden, float* input_signal,
1212
unsigned in_time, unsigned in_dims, unsigned window, unsigned hop,
13-
rnn_t rnn, const void* params, void* buffers,
14-
int bi_direction, int sample_first_brick, int normalize) {
13+
rnn_layer rnn, const void* params, void* buffers,
14+
unsigned bi_direction, unsigned sample_first_brick, int normalize) {
1515
unsigned out_index = 0, t; // t is an index, but we want to remember the value after the loop. Hence we define it outside
1616

1717
unsigned rnn_assign_offset = rnn_hidden;
@@ -61,8 +61,8 @@ int forward_bricked_rnn(float* output_signal, unsigned rnn_hidden, float* input_
6161
// Backward Pass
6262
int backward_bricked_rnn(float* output_signal, unsigned rnn_hidden, float* input_signal,
6363
unsigned in_time, unsigned in_dims, unsigned window, unsigned hop,
64-
rnn_t rnn, const void* params, void* buffers,
65-
int bi_direction, int sample_last_brick, int normalize) {
64+
rnn_layer rnn, const void* params, void* buffers,
65+
unsigned bi_direction, unsigned sample_last_brick, int normalize) {
6666
unsigned out_index = 0, t;
6767

6868
// When bi-direction = 1, an offset of "rnn_hidden" will need to be provided during the function call(to the output_signal).
@@ -88,7 +88,7 @@ int backward_bricked_rnn(float* output_signal, unsigned rnn_hidden, float* input
8888
out_index += window / hop;
8989
// If sample_last_block = 1, sample every hop index only for the last window
9090
// Else the final hidden state(in reverse) is calculated
91-
int stop_time = t;
91+
unsigned stop_time = t;
9292
memset(temp_hiddenstate, 0, rnn_hidden * sizeof(float));
9393
for (t = in_time - 1; t >= stop_time; t--) {
9494
rnn(temp_hiddenstate, rnn_hidden,

c_reference/src/utils.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,9 @@ void matmul(const float* const matA, const float* const matB,
7878
for (unsigned row = 0; row < nrows; row++) {
7979
for (unsigned col = 0; col < ncols; col++) {
8080
float sum = 0;
81-
for (int k = 0; k < ncommon; k++)
81+
for (unsigned k = 0; k < ncommon; k++) {
8282
sum += (matA[row * ncommon + k] * matB[k * ncols + col]);
83+
}
8384
ret[row * ncols + col] = alpha * ret[row * ncols + col] + beta * sum;
8485
}
8586
}
@@ -135,7 +136,7 @@ void softmax(const float* const input, unsigned len, float* const ret) {
135136
ret[i] = expf(input[i] - offset);
136137
}
137138

138-
int semi_sigmoid_tanh(float* output_signal, float* input_signal,
139+
void semi_sigmoid_tanh(float* output_signal, const float* const input_signal,
139140
unsigned in_time, unsigned in_channels) {
140141
unsigned piv = in_channels >> 1;
141142
for (unsigned t = 0; t < in_time; t++) {
@@ -144,5 +145,4 @@ int semi_sigmoid_tanh(float* output_signal, float* input_signal,
144145
* tanh(input_signal[t * in_channels + d + piv]);
145146
}
146147
}
147-
return 0;
148148
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:a68ad85b8af772dcbd486752a8eb73ff667f01e5e8ef6b1b3014bfe1e756cefe
3-
size 39054
2+
oid sha256:d705c8b29a9eaf7255e15fb96314cc5b541d13e8a44494921fa0d00fbe46beee
3+
size 39066
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:8ec14100aaf0cfb424640b49c95bb9138344ff526d1125a0b09de62a129834da
3-
size 66193
2+
oid sha256:a822abfe5a1bd6b3439e7a5d994ef52ceedbd107431e3af8fed1fe28748ea425
3+
size 66211

0 commit comments

Comments
 (0)