Skip to content

Commit 47649f6

Browse files
author
Oleksii Moiseenko
committed
conv grad;
1 parent 2ea5c81 commit 47649f6

2 files changed

Lines changed: 17 additions & 11 deletions

File tree

CMakeLists.txt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ set (PUBLIC_HEADERS
3636
nntoolkitcore/layers/batch_norm.h
3737
nntoolkitcore/layers/conv_1d.h
3838
nntoolkitcore/core/debug.h
39-
)
40-
39+
)
4140

4241
set(PRIVATE_HEADERS
4342
nntoolkitcore/core/types.h
@@ -64,7 +63,10 @@ set(SOURCES
6463
nntoolkitcore/layers/private/recurrent_private.h
6564
nntoolkitcore/core/memory.c
6665
nntoolkitcore/layers/bidirectional.c
67-
nntoolkitcore/layers/private/weights_private.c nntoolkitcore/layers/private/weights_private.h nntoolkitcore/layers/recurrent.c)
66+
nntoolkitcore/layers/private/weights_private.c
67+
nntoolkitcore/layers/private/weights_private.h
68+
nntoolkitcore/layers/recurrent.c
69+
)
6870

6971
if(APPLE)
7072
list(APPEND SOURCES nntoolkitcore/core/apple_ops.c)

nntoolkitcore/layers/conv_1d.c

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -183,13 +183,11 @@ int Conv1dApplyTrainingBatch(Conv1d filter, const float *input, float *output) {
183183
}
184184

185185
void Conv1dCalculateGradient(Conv1d filter, ConvGradient *gradient, const float *d_out) {
186-
int db_size = filter->config.output_feature_channels *
187-
filter->training_data->config.mini_batch_size;
188-
for (int o = 0; o < filter->config.output_size; ++o) {
189-
op_vec_add(gradient->d_b,d_out + o * db_size, gradient->d_b, db_size);
190-
}
191-
192-
186+
// int db_size = filter->config.output_feature_channels *
187+
// filter->training_data->config.mini_batch_size;
188+
// for (int o = 0; o < filter->config.output_size; ++o) {
189+
// op_vec_add(gradient->d_b,d_out + o * db_size, gradient->d_b, db_size);
190+
// }
193191
int k_size = filter->config.kernel_size;
194192
int batch = filter->training_data->config.mini_batch_size;
195193
int in_ftrs = filter->config.input_feature_channels;
@@ -208,6 +206,12 @@ void Conv1dCalculateGradient(Conv1d filter, ConvGradient *gradient, const float
208206
// out_n d4 d5 d6
209207

210208
for (int b = 0; b < batch; ++b) {
209+
//db
210+
float *db_batched = filter->training_data->batch_gradients[b]->d_b;
211+
for (int o = 0; o < filter->config.output_size; ++o){
212+
op_vec_add(db_batched, d_out + o * out_ftrs + b * out_size, db_batched, out_ftrs);
213+
}
214+
211215
for (int out_f = 0; out_f < out_ftrs; ++out_f) {
212216
for (int out_n = 0; out_n < filter->config.output_size; ++out_n) {
213217

@@ -242,7 +246,7 @@ void Conv1dCalculateGradient(Conv1d filter, ConvGradient *gradient, const float
242246
}
243247
op_mat_transp(d_x_transposed + b * inp_size, gradient->d_X + b * inp_size, filter->config.input_size, in_ftrs);
244248
}
245-
249+
default_gradient_sum(filter->training_data->batch_gradients, gradient, conv1d_weight_size_from_config(filter->config), batch);
246250
}
247251

248252

0 commit comments

Comments
 (0)