on master help sign in
Minor changes
commitff208556765a36ded682f495981d6c71b8af3c2a authorHuw Campbell <huw.campbell@ambiata.com> dateThu 8 Dec 2016, 10:32 (10 years ago) parent2433e1f
1 file changed+6−10
src/Grenade/Layers/Internal/Convolution.hs+6−10
src/Grenade/Layers/Internal/Convolution.hs+6−10
@@ -10,6 +10,7 @@ import Control.Monad.ST ( runST )
1010
1111import Data.STRef ( newSTRef, modifySTRef, writeSTRef, readSTRef )
1212import Data.Foldable ( forM_ )
13+import Data.Traversable ( forM )
1314
1415import Numeric.LinearAlgebra hiding ( uniformSample, konst )
1516import qualified Numeric.LinearAlgebra.Devel as U
@@ -96,14 +97,11 @@ col2vidUnsafe kernelRows kernelColumns strideRows strideColumns destinationRows
9697 let columnMatrixRows = rows columnMatrix
9798 let filters = cols columnMatrix `div` (kernelRows * kernelColumns)
9899
99− dataIms <- traverse (\_ -> U.newMatrix 0 destinationRows destinationCols) [0 .. filters-1]
100−
101− offsetM <- newSTRef 0
102−
103− forM_ dataIms $ \dataIm -> do
100+ forM [0 .. filters - 1] $ \iter -> do
101+ let offsetM = iter * (kernelRows * kernelColumns)
102+ dataIm <- U.newMatrix 0 destinationRows destinationCols
104103 offsetR <- newSTRef 0
105104 offsetC <- newSTRef 0
106− offsetM' <- readSTRef offsetM
107105 forM_ [0 .. columnMatrixRows - 1] $ \ir -> do
108106 inputColumn <- newSTRef 0
109107 forM_ [0 .. kernelRows -1] $ \kr ->
@@ -111,7 +109,7 @@ col2vidUnsafe kernelRows kernelColumns strideRows strideColumns destinationRows
111109 ic <- readSTRef inputColumn
112110 offsetR' <- readSTRef offsetR
113111 offsetC' <- readSTRef offsetC
114− U.modifyMatrix dataIm (kr + offsetR') (kc + offsetC') (+ U.atM' columnMatrix ir (ic + offsetM'))
112+ U.modifyMatrix dataIm (kr + offsetR') (kc + offsetC') (+ U.atM' columnMatrix ir (ic + offsetM))
115113 modifySTRef inputColumn (+1)
116114
117115 offsetC' <- readSTRef offsetC
@@ -119,9 +117,7 @@ col2vidUnsafe kernelRows kernelColumns strideRows strideColumns destinationRows
119117 then modifySTRef offsetC (+ strideColumns)
120118 else writeSTRef offsetC 0 >> modifySTRef offsetR (+ strideRows)
121119
122− modifySTRef offsetM (+ (kernelRows * kernelColumns))
123−
124− traverse U.unsafeFreezeMatrix dataIms
120+ U.unsafeFreezeMatrix dataIm
125121
126122vid2colUnsafe :: Int -> Int -> Int -> Int -> Int -> Int -> [Matrix Double] -> Matrix Double
127123vid2colUnsafe kernelRows kernelColumns striderows stridecols vidrows vidcols dataVid = U.runSTMatrix $ do