@@ -183,13 +183,11 @@ int Conv1dApplyTrainingBatch(Conv1d filter, const float *input, float *output) {
183183}
184184
185185void 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