Skip to content

Commit c280665

Browse files
Definition and test scripts for dscnn layer 1
1 parent 073d1da commit c280665

File tree

4 files changed

+96
-0
lines changed

4 files changed

+96
-0
lines changed

c_reference/include/dscnn.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#ifndef __DSCNN__
2+
#define __DSCNN__
3+
4+
#include"conv1d.h"
5+
#include"conv_utils.h"
6+
#include<stdlib.h>
7+
#include<math.h>
8+
9+
int DSCNN_LR(float* output_signal, float* input_signal, unsigned in_T, unsigned in_channels, float* mean, float* var,
10+
unsigned affine, float* gamma, float* beta, unsigned in_place, unsigned cnn_hidden, int cnn_padding, unsigned cnn_kernel_size,
11+
const void* cnn_params, int cnn_activations);
12+
13+
14+
#endif

c_reference/src/dscnn.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#include"dscnn.h"
2+
#include"conv1d.h"
3+
#include"conv_utils.h"
4+
5+
int DSCNN_LR(float* output_signal, float* input_signal, unsigned in_T, unsigned in_channels, float* mean, float* var,
6+
unsigned affine, float* gamma, float* beta, unsigned in_place, unsigned cnn_hidden, int cnn_padding, unsigned cnn_kernel_size,
7+
const void* cnn_params, int cnn_activations){
8+
9+
float out_T;
10+
11+
// BatchNorm
12+
float* norm_out = (float*)malloc(in_T*in_channels*sizeof(float));
13+
BatchNorm1d(norm_out, input_signal, in_T, in_channels,
14+
mean, var, affine, gamma, beta, in_place);
15+
16+
// CNN
17+
out_T = in_T - cnn_kernel_size + 2*cnn_padding + 1;
18+
Conv1D_LR(output_signal, out_T, cnn_hidden, norm_out,
19+
in_T, in_channels, cnn_padding, cnn_kernel_size,
20+
cnn_params, cnn_activations);
21+
free(norm_out);
22+
return 0;
23+
}

c_reference/tests/dscnn/dscnn_lr.h

Lines changed: 23 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#include<stdio.h>
2+
#include<stdlib.h>
3+
4+
#include"dscnn_lr.h"
5+
#include"conv1d.h"
6+
#include"dscnn.h"
7+
#include"conv_utils.h"
8+
9+
int main(){
10+
11+
ConvLayers_LR_Params conv_params = {
12+
.W1 = CNN1_W1,
13+
.W2 = CNN1_W2,
14+
.B = CNN1_BIAS,
15+
.rank = LOW_RANK
16+
};
17+
18+
float pred[O_T * O_F] = {};
19+
// int DSCNN_LR(float* output_signal, float* input_signal, unsigned in_T, unsigned in_channels, float* mean, float* stddev,
20+
// unsigned affine, float* gamma, float* beta, unsigned in_place, unsigned cnn_hidden, int cnn_padding, unsigned cnn_kernel_size,
21+
// const void* cnn_params, int cnn_activations)
22+
DSCNN_LR(pred, INPUT, I_T, I_F, BNORM_CNN1_MEAN, BNORM_CNN1_VAR,
23+
0, 0, 0, 0, O_F, 2, FILT,
24+
&conv_params, 0);
25+
float error = 0;
26+
for(int t = 0 ; t < O_T ; t++){
27+
for(int d = 0 ; d < O_F ; d++){
28+
error += ((pred[t * O_F + d] - OUTPUT[t * O_F + d]) * (pred[t * O_F + d] - OUTPUT[t * O_F + d]));
29+
}
30+
}
31+
float avg_error = error/(O_T*O_F);
32+
printf("DSCNN K5 Block\n");
33+
printf("Aggregate Squared Error : %f ; Mean Sqaured Error : %f \n", error, avg_error);
34+
35+
return 0 ;
36+
}

0 commit comments

Comments
 (0)