@@ -119,17 +119,16 @@ randomConvolution = do
119119 mm = konst 0
120120 return $ Convolution wN mm
121121
122−instance ( Monad m ) => UpdateLayer m (Convolution channels filters kernelRows kernelCols strideRows strideCols) where
122+instance UpdateLayer (Convolution channels filters kernelRows kernelCols strideRows strideCols) where
123123 type Gradient (Convolution channels filters kernelRows kernelCols strideRows strideCols) = (Convolution' channels filters kernelRows kernelCols strideRows strideCols)
124− runUpdate LearningParameters {..} (Convolution oldKernel oldMomentum) (Convolution' kernelGradient) = do
124+ runUpdate LearningParameters {..} (Convolution oldKernel oldMomentum) (Convolution' kernelGradient) =
125125 let newMomentum = konst learningMomentum * oldMomentum - konst learningRate * kernelGradient
126126 regulariser = konst (learningRegulariser * learningRate) * oldKernel
127127 newKernel = oldKernel + newMomentum - regulariser
128− return $ Convolution newKernel newMomentum
128+ in Convolution newKernel newMomentum
129129
130130-- | A two dimentional image may have a convolution filter applied to it
131−instance ( Monad m
132− , KnownNat kernelRows
131+instance ( KnownNat kernelRows
133132 , KnownNat kernelCols
134133 , KnownNat filters
135134 , KnownNat strideRows
@@ -140,7 +139,7 @@ instance ( Monad m
140139 , KnownNat outputCols
141140 , ((outputRows - 1) * strideRows) ~ (inputRows - kernelRows)
142141 , ((outputCols - 1) * strideCols) ~ (inputCols - kernelCols)
143− ) => Layer m (Convolution 1 filters kernelRows kernelCols strideRows strideCols) ('D2 inputRows inputCols) ('D3 outputRows outputCols filters) where
142+ ) => Layer (Convolution 1 filters kernelRows kernelCols strideRows strideCols) ('D2 inputRows inputCols) ('D3 outputRows outputCols filters) where
144143 runForwards (Convolution kernel _) (S2D' input) =
145144 let ex = extract input
146145 ek = extract kernel
@@ -154,7 +153,7 @@ instance ( Monad m
154153 mt = c LA.<> ek
155154 r = col2vid 1 1 1 1 ox oy mt
156155 rs = fmap (fromJust . create) r
157− in return . S3D' $ mkVector rs
156+ in S3D' $ mkVector rs
158157 runBackards (Convolution kernel _) (S2D' input) (S3D' dEdy) =
159158 let ex = extract input
160159 ix = fromIntegral $ natVal (Proxy :: Proxy inputRows)
@@ -176,13 +175,12 @@ instance ( Monad m
176175 dW = vs LA.<> tr ek
177176
178177 xW = col2im kx ky sx sy ix iy dW
179− in return (Convolution' kN, S2D' . fromJust . create $ xW)
178+ in (Convolution' kN, S2D' . fromJust . create $ xW)
180179
181180
182181-- | A three dimensional image (or 2d with many channels) can have
183182-- an appropriately sized convolution filter run across it.
184−instance ( Monad m
185− , KnownNat kernelRows
183+instance ( KnownNat kernelRows
186184 , KnownNat kernelCols
187185 , KnownNat filters
188186 , KnownNat strideRows
@@ -194,7 +192,7 @@ instance ( Monad m
194192 , KnownNat channels
195193 , ((outputRows - 1) * strideRows) ~ (inputRows - kernelRows)
196194 , ((outputCols - 1) * strideCols) ~ (inputCols - kernelCols)
197− ) => Layer m (Convolution channels filters kernelRows kernelCols strideRows strideCols) ('D3 inputRows inputCols channels) ('D3 outputRows outputCols filters) where
195+ ) => Layer (Convolution channels filters kernelRows kernelCols strideRows strideCols) ('D3 inputRows inputCols channels) ('D3 outputRows outputCols filters) where
198196 runForwards (Convolution kernel _) (S3D' input) =
199197 let ex = vecToList $ fmap extract input
200198 ek = extract kernel
@@ -210,7 +208,7 @@ instance ( Monad m
210208 mt = c LA.<> ek
211209 r = col2vid 1 1 1 1 ox oy mt
212210 rs = fmap (fromJust . create) r
213− in return . S3D' $ mkVector rs
211+ in S3D' $ mkVector rs
214212 runBackards (Convolution kernel _) (S3D' input) (S3D' dEdy) =
215213 let ex = vecToList $ fmap extract input
216214 ix = fromIntegral $ natVal (Proxy :: Proxy inputRows)
@@ -233,7 +231,7 @@ instance ( Monad m
233231 dW = vs LA.<> tr ek
234232
235233 xW = col2vid kx ky sx sy ix iy dW
236− in return (Convolution' kN, S3D' . mkVector . fmap (fromJust . create) $ xW)
234+ in (Convolution' kN, S3D' . mkVector . fmap (fromJust . create) $ xW)
237235
238236im2col :: Int -> Int -> Int -> Int -> Matrix Double -> Matrix Double
239237im2col nrows ncols srows scols m =