@@ -93,22 +93,22 @@ prop_simple_conv_forwards = once $
93 -- Create a convolution kernel with 4 filters.
93 -- Create a convolution kernel with 4 filters.
94 -- [ 1, 0 [ 0, 1 [ 0, 1 [ 0, 0
94 -- [ 1, 0 [ 0, 1 [ 0, 1 [ 0, 0
95 -- , 0,-1 ] ,-1, 0 ] , 1, 0 ] ,-1,-1 ]
95 -- , 0,-1 ] ,-1, 0 ] , 1, 0 ] ,-1,-1 ]
96− let myKernel = (HStatic.matrix
96+ let myKernel = HStatic.matrix
97 [ 1.0, 0.0, 0.0, 0.0
97 [ 1.0, 0.0, 0.0, 0.0
98 , 0.0, 1.0, 1.0, 0.0
98 , 0.0, 1.0, 1.0, 0.0
99 , 0.0, -1.0, 1.0, -1.0
99 , 0.0, -1.0, 1.0, -1.0
100− ,-1.0, 0.0, 0.0, -1.0 ] :: HStatic.L 4 4)
100+ ,-1.0, 0.0, 0.0, -1.0 ] :: HStatic.L 4 4
101− zeroKernel = (HStatic.matrix
101+ zeroKernel = HStatic.matrix
102 [ 0.0, 0.0, 0.0, 0.0
102 [ 0.0, 0.0, 0.0, 0.0
103 , 0.0, 0.0, 0.0, 0.0
103 , 0.0, 0.0, 0.0, 0.0
104 , 0.0, 0.0, 0.0, 0.0
104 , 0.0, 0.0, 0.0, 0.0
105− , 0.0, 0.0, 0.0, 0.0 ] :: HStatic.L 4 4)
105+ , 0.0, 0.0, 0.0, 0.0 ] :: HStatic.L 4 4
107− expectedGradient = (HStatic.matrix
107+ expectedGradient = HStatic.matrix
108 [ 1.0, 0.0, 0.0, 2.0
108 [ 1.0, 0.0, 0.0, 2.0
109 , 2.0, 0.0, 0.0, 5.0
109 , 2.0, 0.0, 0.0, 5.0
110 , 3.0, 0.0, 0.0, 4.0
110 , 3.0, 0.0, 0.0, 4.0
111− , 4.0, 0.0, 0.0, 6.0 ] :: HStatic.L 4 4)
111+ , 4.0, 0.0, 0.0, 6.0 ] :: HStatic.L 4 4
113 convLayer = Convolution myKernel zeroKernel :: Convolution 1 4 2 2 1 1
113 convLayer = Convolution myKernel zeroKernel :: Convolution 1 4 2 2 1 1
@@ -116,25 +116,25 @@ prop_simple_conv_forwards = once $
116 [ 1.0, 2.0, 5.0
116 [ 1.0, 2.0, 5.0
117 , 3.0, 4.0, 6.0] :: HStatic.L 2 3)
117 , 3.0, 4.0, 6.0] :: HStatic.L 2 3)
119− expect = ([(HStatic.matrix
119+ expect = [ HStatic.matrix
120− [ -3.0 , -4.0 ] :: HStatic.L 1 2)
120+ [ -3.0 , -4.0 ] :: HStatic.L 1 2
121− ,(HStatic.matrix
121+ , HStatic.matrix
122− [ -1.0 , 1.0 ] :: HStatic.L 1 2)
122+ [ -1.0 , 1.0 ] :: HStatic.L 1 2
123− ,(HStatic.matrix
123+ , HStatic.matrix
124− [ 5.0 , 9.0 ] :: HStatic.L 1 2)
124+ [ 5.0 , 9.0 ] :: HStatic.L 1 2
125− ,(HStatic.matrix
125+ , HStatic.matrix
126− [ -7.0 , -10.0 ] :: HStatic.L 1 2)]) :: [HStatic.L 1 2]
126+ [ -7.0 , -10.0 ] :: HStatic.L 1 2] :: [HStatic.L 1 2]
127 out = runForwards convLayer input :: S' ('D3 1 2 4)
127 out = runForwards convLayer input :: S' ('D3 1 2 4)
129 grad = S3D' ( mkVector
129 grad = S3D' ( mkVector
130− [(HStatic.matrix
130+ [ HStatic.matrix
131− [ 1 , 0 ] :: HStatic.L 1 2)
131+ [ 1 , 0 ] :: HStatic.L 1 2
132− ,(HStatic.matrix
132+ , HStatic.matrix
133− [ 0 , 0 ] :: HStatic.L 1 2)
133+ [ 0 , 0 ] :: HStatic.L 1 2
134− ,(HStatic.matrix
134+ , HStatic.matrix
135− [ 0 , 0 ] :: HStatic.L 1 2)
135+ [ 0 , 0 ] :: HStatic.L 1 2
136− ,(HStatic.matrix
136+ , HStatic.matrix
137− [ 0 , 1 ] :: HStatic.L 1 2)] ) :: S' ('D3 1 2 4)
137+ [ 0 , 1 ] :: HStatic.L 1 2] ) :: S' ('D3 1 2 4)
139 expectBack = (HStatic.matrix
139 expectBack = (HStatic.matrix
140 [ 1.0, 0.0, 0.0
140 [ 1.0, 0.0, 0.0
@@ -144,11 +144,8 @@ prop_simple_conv_forwards = once $
144 in case (out, inX, nc) of
144 in case (out, inX, nc) of
145 (S3D' out' , S2D' inX', Convolution' backGrad)
145 (S3D' out' , S2D' inX', Convolution' backGrad)
146 -> ((HStatic.extract <$> expect) === (HStatic.extract <$> vecToList out'))
146 -> ((HStatic.extract <$> expect) === (HStatic.extract <$> vecToList out'))
147− .&&. ((HStatic.extract expectBack) === (HStatic.extract inX'))
147+ .&&. (HStatic.extract expectBack === HStatic.extract inX')
148− .&&. ((HStatic.extract expectedGradient) === (HStatic.extract backGrad))
148+ .&&. (HStatic.extract expectedGradient === HStatic.extract backGrad)
149− -- Temporarily disabled, as l2 adjustment puts in off 5%
150− -- .&&. HStatic.extract expectedKernel === HStatic.extract kernel'
153prop_vid2col_no_stride = once $
150prop_vid2col_no_stride = once $
154 let input = [(3><4)
151 let input = [(3><4)
@@ -228,25 +225,25 @@ prop_single_conv_forwards = once $
228 [ 1.0, 2.0, 5.0
225 [ 1.0, 2.0, 5.0
229 , 3.0, 4.0, 6.0] :: HStatic.L 2 3] ) :: S' ('D3 2 3 1)
226 , 3.0, 4.0, 6.0] :: HStatic.L 2 3] ) :: S' ('D3 2 3 1)
231− expect = ([(HStatic.matrix
228+ expect = [HStatic.matrix
232− [ -3.0 , -4.0 ] :: HStatic.L 1 2)
229+ [ -3.0 , -4.0 ] :: HStatic.L 1 2
233− ,(HStatic.matrix
230+ ,HStatic.matrix
234− [ -1.0 , 1.0 ] :: HStatic.L 1 2)
231+ [ -1.0 , 1.0 ] :: HStatic.L 1 2
235− ,(HStatic.matrix
232+ ,HStatic.matrix
236− [ 5.0 , 9.0 ] :: HStatic.L 1 2)
233+ [ 5.0 , 9.0 ] :: HStatic.L 1 2
237− ,(HStatic.matrix
234+ ,HStatic.matrix
238− [ -7.0 , -10.0 ] :: HStatic.L 1 2)]) :: [HStatic.L 1 2]
235+ [ -7.0 , -10.0 ] :: HStatic.L 1 2] :: [HStatic.L 1 2]
239 out = runForwards convLayer input :: S' ('D3 1 2 4)
236 out = runForwards convLayer input :: S' ('D3 1 2 4)
241 grad = S3D' ( mkVector
238 grad = S3D' ( mkVector
242− [(HStatic.matrix
239+ [HStatic.matrix
243− [ 1 , 0 ] :: HStatic.L 1 2)
240+ [ 1 , 0 ] :: HStatic.L 1 2
244− ,(HStatic.matrix
241+ ,HStatic.matrix
245− [ 0 , 0 ] :: HStatic.L 1 2)
242+ [ 0 , 0 ] :: HStatic.L 1 2
246− ,(HStatic.matrix
243+ ,HStatic.matrix
247− [ 0 , 0 ] :: HStatic.L 1 2)
244+ [ 0 , 0 ] :: HStatic.L 1 2
248− ,(HStatic.matrix
245+ ,HStatic.matrix
249− [ 0 , 1 ] :: HStatic.L 1 2)] ) :: S' ('D3 1 2 4)
246+ [ 0 , 1 ] :: HStatic.L 1 2] ) :: S' ('D3 1 2 4)
251 expectBack = (HStatic.matrix
248 expectBack = (HStatic.matrix
252 [ 1.0, 0.0, 0.0
249 [ 1.0, 0.0, 0.0
@@ -257,7 +254,7 @@ prop_single_conv_forwards = once $
257 (S3D' out' , S3D' inX', Convolution' backGrad)
254 (S3D' out' , S3D' inX', Convolution' backGrad)
258 -> ((HStatic.extract <$> expect) === (HStatic.extract <$> vecToList out'))
255 -> ((HStatic.extract <$> expect) === (HStatic.extract <$> vecToList out'))
259 .&&. ([HStatic.extract expectBack] === (HStatic.extract <$> vecToList inX'))
256 .&&. ([HStatic.extract expectBack] === (HStatic.extract <$> vecToList inX'))
260− .&&. ((HStatic.extract expectedGradient) === (HStatic.extract backGrad))
257+ .&&. (HStatic.extract expectedGradient === HStatic.extract backGrad)
263tests :: IO Bool
260tests :: IO Bool