1
1
#include "conv1d.h"
2
2
#include "conv_utils.h"
3
+ #include <stdlib.h>
4
+ #include <math.h>
5
+ #include <stdio.h>
3
6
4
- int Conv1D_LR (float * output_signal , unsigned out_channels , const float * input_signal ,
7
+ int Conv1D_LR (float * output_signal , unsigned out_T , unsigned out_channels , const float * input_signal ,
5
8
unsigned N , unsigned in_T , unsigned in_channels , int padding , unsigned kernel_size ,
6
- const void * params ,int normalize , int activations ){
9
+ const void * params , int activations ){
7
10
8
11
const ConvLayers_LR_Params * tparams = (ConvLayers_LR_Params * ) params ;
9
12
10
13
if (padding == -1 ){
11
14
padding = kernel_size >> 1 ;
12
15
}
13
16
float * tempW = (float * )malloc (out_channels * in_channels * kernel_size * sizeof (float )) ;
14
- prepareLowRankConvMat (tempW , tparams -> W1 , tparams -> W2 , tparams -> rank , out_channels , in_channels * kernel_size )
17
+ prepareLowRankConvMat (tempW , tparams -> W1 , tparams -> W2 , tparams -> rank , out_channels , in_channels * kernel_size );
15
18
16
19
// Perform the Convolution
17
- // input.shape = [N, in_T, in_channels]
18
- // output.shape = [N, out_T, out_channels]
20
+ // input.shape = [in_T, in_channels]
21
+ // output.shape = [out_T, out_channels]
19
22
// filter.shape = [out_channels, in_channels, kernel_size]
20
23
for (int t = 0 ; t < out_T ; t ++ ){
21
- if (normalize ) {
22
- for (unsigned d = 0 ; d < in_channels ; d ++ )
23
- input_signal [t * in_channels + d ] = ((input_signal [t * in_channels + d ] - tparams -> mean [d ]) / tparams -> stdDev [d ]);
24
- // v_add(1.0f, input_signal + t * in_channels, -1.0f, tparams->mean,
25
- // in_channels, tbuffers->normFeatures);
26
- // v_div(tparams->stdDev + t * in_channels, tbuffers->normFeatures, in_channels,
27
- // tbuffers->normFeatures);
28
- }
29
-
30
24
for (int co = 0 ; co < out_channels ; co ++ ){
31
25
float sum = 0 ;
32
26
for (int tf = 0 ; tf < kernel_size ; tf ++ ){
@@ -36,52 +30,45 @@ int Conv1D_LR(float *output_signal, unsigned out_channels, const float *input_si
36
30
}
37
31
}
38
32
if (activations == 1 ){
39
- output_signal [n * out_channels * out_T + t * out_channels + co ] = sigmoid (sum + tparams -> B [co ]);
33
+ output_signal [t * out_channels + co ] = sigmoid (sum + tparams -> B [co ]);
40
34
}
41
35
else if (activations == 2 ){
42
- output_signal [n * out_channels * out_T + t * out_channels + co ] = tanh (sum + tparams -> B [co ]);
36
+ output_signal [t * out_channels + co ] = tanh (sum + tparams -> B [co ]);
43
37
}
44
38
else if (activations == 3 ){
45
- output_signal [n * out_channels * out_T + t * out_channels + co ] = relu (sum + tparams -> B [co ]);
39
+ output_signal [t * out_channels + co ] = relu (sum + tparams -> B [co ]);
46
40
}
47
41
else {
48
- output_signal [n * out_channels * out_T + t * out_channels + co ] = sum + tparams -> B [co ];
42
+ output_signal [t * out_channels + co ] = sum + tparams -> B [co ];
49
43
}
50
44
}
51
45
}
52
- free (tempW )
46
+ free (tempW );
53
47
return 0 ;
54
48
}
55
49
56
-
57
- int Conv1D_Depth_LR (float * output_signal , const float * input_signal ,
50
+ int Conv1D_Depth_LR (float * output_signal , unsigned out_T , const float * input_signal ,
58
51
unsigned N , unsigned in_T , unsigned in_channels , int padding , unsigned kernel_size ,
59
- const void * params ,int normalize , int activations ){
52
+ const void * params , int activations ){
60
53
61
54
const ConvLayers_LR_Params * tparams = (ConvLayers_LR_Params * ) params ;
62
55
63
- if (tempW == 0 ) return ERR_TEMPW_NOT_INIT ;
64
-
65
56
if (padding == -1 ){
66
57
padding = kernel_size >> 1 ;
67
58
}
68
59
69
- float * tempW = (float * )malloc (out_channels * in_channels * kernel_size * sizeof (float )) ;
70
- prepareLowRankConvMat (tempW , tparams -> W1 , tparams -> W2 , tparams -> rank , in_channels , in_channels * kernel_size )
60
+ float * tempW = (float * )malloc (in_channels * kernel_size * sizeof (float )) ;
61
+ prepareLowRankConvMat (tempW , tparams -> W1 , tparams -> W2 , tparams -> rank , in_channels , in_channels * kernel_size );
71
62
// Perform the Convolution
72
63
// input.shape = [N, in_T, in_channels]
73
64
// output.shape = [N, out_T, in_channels]
74
65
// filter.shape = [(out)in_channels, in_channels, kernel_size]
75
66
for (int t = 0 ; t < out_T ; t ++ ){
76
- if (normalize ) {
77
- for (unsigned d = 0 ; d < in_channels ; d ++ )
78
- input_signal [t * in_channels + d ] = ((input_signal [t * in_channels + d ] - tparams -> mean [d ]) / tparams -> stdDev [d ]);
79
- }
80
67
for (int ci = 0 ; ci < in_channels ; ci ++ ){
81
68
float sum = 0 ;
82
69
for (int tf = 0 ; tf < kernel_size ; tf ++ ){
83
70
float a = ((((t + tf ) < padding ) || ((t + tf ) >= (in_T + padding ))) ? 0 : input_signal [((tf + t ) - padding ) * in_channels + ci ]);
84
- sum += (a * tempW [ci * in_channels * kernel_size + ci * kernel_size + tf ]);
71
+ sum += (a * tempW [ci * kernel_size + tf ]);
85
72
}
86
73
if (activations == 1 ){
87
74
output_signal [t * in_channels + ci ] = sigmoid (sum + tparams -> B [ci ]);
@@ -97,62 +84,57 @@ int Conv1D_Depth_LR(float *output_signal, const float *input_signal,
97
84
}
98
85
}
99
86
}
100
- free (tempW )
87
+ free (tempW );
101
88
return 0 ;
102
89
}
103
90
104
91
105
92
106
- int Conv1D (float * output_signal , unsigned out_channels , const float * input_signal ,
93
+ int Conv1D (float * output_signal , unsigned out_T , unsigned out_channels , const float * input_signal ,
107
94
unsigned N , unsigned in_T , unsigned in_channels , int padding , unsigned kernel_size ,
108
- const void * params ,int normalize , int activations ){
109
-
95
+ const void * params , int activations ){
96
+
110
97
const ConvLayers_Params * tparams = (ConvLayers_Params * ) params ;
111
98
112
99
if (padding == -1 ){
113
100
padding = kernel_size >> 1 ;
114
101
}
115
-
102
+ float sum ;
116
103
// Perform the Convolution
117
104
// input.shape = [N, in_T, in_channels]
118
105
// output.shape = [N, out_T, out_channels]
119
106
// filter.shape = [out_channels, in_channels, kernel_size]
120
107
for (int t = 0 ; t < out_T ; t ++ ){
121
- if (normalize ) {
122
- for (unsigned d = 0 ; d < in_channels ; d ++ )
123
- input_signal [t * in_channels + d ] = ((input_signal [t * in_channels + d ] - tparams -> mean [d ]) / tparams -> stdDev [d ]);
124
- }
125
-
126
108
for (int co = 0 ; co < out_channels ; co ++ ){
127
- float sum = 0 ;
109
+ sum = 0 ;
128
110
for (int tf = 0 ; tf < kernel_size ; tf ++ ){
129
111
for (int ci = 0 ; ci < in_channels ; ci ++ ){
130
- float a = ((((t + tf ) < padding ) || ((t + tf ) >= (in_T + padding ))) ? continue : input_signal [((tf + t ) - padding ) * in_channels + ci ]);
112
+ float a = ((((t + tf ) < padding ) || ((t + tf ) >= (in_T + padding ))) ? 0 : input_signal [((tf + t ) - padding ) * in_channels + ci ]);
131
113
sum += (a * tparams -> W [co * in_channels * kernel_size + ci * kernel_size + tf ]);
132
114
}
133
115
}
134
116
if (activations == 1 ){
135
- output_signal [n * out_channels * out_T + t * out_channels + co ] = sigmoid (sum + tparams -> B [co ]);
117
+ output_signal [t * out_channels + co ] = sigmoid (sum + tparams -> B [co ]);
136
118
}
137
119
else if (activations == 2 ){
138
- output_signal [n * out_channels * out_T + t * out_channels + co ] = tanh (sum + tparams -> B [co ]);
120
+ output_signal [t * out_channels + co ] = tanh (sum + tparams -> B [co ]);
139
121
}
140
122
else if (activations == 3 ){
141
- output_signal [n * out_channels * out_T + t * out_channels + co ] = relu (sum + tparams -> B [co ]);
123
+ output_signal [t * out_channels + co ] = relu (sum + tparams -> B [co ]);
142
124
}
143
125
else {
144
- output_signal [n * out_channels * out_T + t * out_channels + co ] = sum + tparams -> B [co ];
126
+ output_signal [t * out_channels + co ] = sum + tparams -> B [co ];
145
127
}
146
128
}
147
129
}
148
130
return 0 ;
149
131
}
150
132
151
- int Conv1D_Depth (float * output_signal , const float * input_signal ,
133
+ int Conv1D_Depth (float * output_signal , unsigned out_T , const float * input_signal ,
152
134
unsigned N , unsigned in_T , unsigned in_channels , int padding , unsigned kernel_size ,
153
- const void * params ,int normalize , int activations ){
135
+ const void * params , int activations ){
154
136
155
- const ConvLayers_LR_Params * tparams = (ConvLayers_LR_Params * ) params ;
137
+ const ConvLayers_Params * tparams = (ConvLayers_Params * ) params ;
156
138
157
139
if (padding == -1 ){
158
140
padding = kernel_size >> 1 ;
@@ -163,15 +145,11 @@ int Conv1D_Depth(float *output_signal, const float *input_signal,
163
145
// output.shape = [N, out_T, in_channels]
164
146
// filter.shape = [(out)in_channels, in_channels, kernel_size]
165
147
for (int t = 0 ; t < out_T ; t ++ ){
166
- if (normalize ) {
167
- for (unsigned d = 0 ; d < in_channels ; d ++ )
168
- input_signal [t * in_channels + d ] = ((input_signal [t * in_channels + d ] - tparams -> mean [d ]) / tparams -> stdDev [d ]);
169
- }
170
148
for (int ci = 0 ; ci < in_channels ; ci ++ ){
171
149
float sum = 0 ;
172
150
for (int tf = 0 ; tf < kernel_size ; tf ++ ){
173
151
float a = ((((t + tf ) < padding ) || ((t + tf ) >= (in_T + padding ))) ? 0 : input_signal [((tf + t ) - padding ) * in_channels + ci ]);
174
- sum += (a * tparams -> W [ci * in_channels * kernel_size + ci * kernel_size + tf ]);
152
+ sum += (a * tparams -> W [ci * kernel_size + tf ]);
175
153
}
176
154
if (activations == 1 ){
177
155
output_signal [t * in_channels + ci ] = sigmoid (sum + tparams -> B [ci ]);
@@ -198,9 +176,9 @@ int AvgPool1D(float *output_signal, unsigned out_T, const float *input_signal, u
198
176
}
199
177
200
178
for (int t = 0 ; t < out_T ; t ++ ){
201
- for (int ci = 0 ; ci < in_channels ){
179
+ for (int ci = 0 ; ci < in_channels ; ci ++ ){
202
180
float sum = 0 ;
203
- for (int tf = ; tf < kernel_size ; tf ++ ){
181
+ for (int tf = 0 ; tf < kernel_size ; tf ++ ){
204
182
sum += ((((t + tf ) < padding ) || ((t + tf ) >= (in_T + padding ))) ? 0 : input_signal [((tf + t ) - padding ) * in_channels + ci ]);
205
183
}
206
184
if (activations == 1 ){
0 commit comments