packages feed

hmatrix-backprop 0.1.1.0 → 0.1.2.0

raw patch · 3 files changed

+46/−20 lines, 3 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Numeric.LinearAlgebra.Static.Backprop: dzipWithVector :: (Reifies s W, KnownNat n, Domain field vec mat, Num (vec n), Num field) => (forall s'. Reifies s' W => BVar s' field -> BVar s' field -> BVar s' field) -> BVar s (vec n) -> BVar s (vec n) -> BVar s (vec n)
- Numeric.LinearAlgebra.Static.Backprop: mmap :: (Reifies s W, KnownNat n, KnownNat m) => (BVar s Double -> BVar s Double) -> BVar s (L n m) -> BVar s (L n m)
+ Numeric.LinearAlgebra.Static.Backprop: mmap :: (Reifies s W, KnownNat n, KnownNat m) => (BVar s ℝ -> BVar s ℝ) -> BVar s (L n m) -> BVar s (L n m)
- Numeric.LinearAlgebra.Static.Backprop: vmap :: (Reifies s W, KnownNat n) => (BVar s Double -> BVar s Double) -> BVar s (R n) -> BVar s (R n)
+ Numeric.LinearAlgebra.Static.Backprop: vmap :: (Reifies s W, KnownNat n) => (BVar s ℝ -> BVar s ℝ) -> BVar s (R n) -> BVar s (R n)
- Numeric.LinearAlgebra.Static.Backprop: zipWithVector :: (Reifies s W, Num (vec n), Storable field, Storable (field, field, field), Sized field (vec n) Vector) => (forall s'. Reifies s' W => BVar s' field -> BVar s' field -> BVar s' field) -> BVar s (vec n) -> BVar s (vec n) -> BVar s (vec n)
+ Numeric.LinearAlgebra.Static.Backprop: zipWithVector :: (Reifies s W, KnownNat n) => (BVar s ℝ -> BVar s ℝ -> BVar s ℝ) -> BVar s (R n) -> BVar s (R n) -> BVar s (R n)
- Numeric.LinearAlgebra.Static.Backprop: zipWithVector' :: (Reifies s W, KnownNat n, Domain field vec mat, Num (vec n), Num field) => (forall s'. Reifies s' W => BVar s' field -> BVar s' field -> BVar s' field) -> BVar s (vec n) -> BVar s (vec n) -> BVar s (vec n)
+ Numeric.LinearAlgebra.Static.Backprop: zipWithVector' :: (Reifies s W, Num (vec n), Storable field, Sized field (vec n) Vector) => (forall s'. Reifies s' W => BVar s' field -> BVar s' field -> BVar s' field) -> BVar s (vec n) -> BVar s (vec n) -> BVar s (vec n)

Files

CHANGELOG.md view
@@ -1,6 +1,18 @@ Changelog ========= +Version 0.1.2.0+---------------++*Mar 30, 2018*++<https://github.com/mstksg/hmatrix-backprop/releases/tag/v0.1.2.0>++*   `zipWithVector` family rewritten in the same way as `dvmap`/`dvmap` were+    for version 0.1.1.0, which is a breaking API change.  However, again, it is+    unlikely that any code using the previous versions compiled at all, so in+    practicality, no actual code that previously worked is now breaking.+ Version 0.1.1.0 --------------- 
hmatrix-backprop.cabal view
@@ -1,11 +1,11 @@--- This file has been generated from package.yaml by hpack version 0.20.0.+-- This file has been generated from package.yaml by hpack version 0.21.2. -- -- see: https://github.com/sol/hpack ----- hash: 7bd7d72297fd6caf75a31bbc3856f764f21999255f99a4f6bcad71e4739acf2a+-- hash: 11c33ad908b833f31f1c4bbe92635523c13c44f590d50114a5e0a4992e1c47a1  name:           hmatrix-backprop-version:        0.1.1.0+version:        0.1.2.0 synopsis:       hmatrix operations lifted for backprop description:    hmatrix operations lifted for backprop.                 .
src/Numeric/LinearAlgebra/Static/Backprop.hs view
@@ -157,6 +157,7 @@   , outer   , zipWithVector   , zipWithVector'+  , dzipWithVector   , det   , invlndet   , lndet@@ -793,7 +794,7 @@     :: ( Reifies s W        , KnownNat n        )-    => (BVar s Double -> BVar s Double)+    => (BVar s H.ℝ -> BVar s H.ℝ)     -> BVar s (H.R n)     -> BVar s (H.R n) vmap f = isoVar (H.vecR . SVG.convert @V.Vector) (SVG.convert . H.rVec)@@ -846,7 +847,7 @@        , KnownNat n        , KnownNat m        )-    => (BVar s Double -> BVar s Double)+    => (BVar s H.ℝ -> BVar s H.ℝ)     -> BVar s (H.L n m)     -> BVar s (H.L n m) mmap f = isoVar (H.vecL . SVG.convert @V.Vector) (SVG.convert . H.lVec)@@ -917,31 +918,44 @@     ) {-# INLINE outer #-} +-- | Note: if possible, use the potentially much more performant+-- 'zipWithVector''. zipWithVector+    :: ( Reifies s W, KnownNat n )+    => (BVar s H.ℝ -> BVar s H.ℝ -> BVar s H.ℝ)+    -> BVar s (H.R n)+    -> BVar s (H.R n)+    -> BVar s (H.R n)+zipWithVector f x y = isoVar (H.vecR . SVG.convert) (SVG.convert . H.rVec)+                    $ B.liftA2 @(SV.Vector _) f (iv x) (iv y)+  where+    iv = isoVar (SVG.convert . H.rVec) (H.vecR . SVG.convert)+{-# INLINE zipWithVector #-}++zipWithVector'     :: ( Reifies s W        , Num (vec n)        , Storable field-       , Storable (field, field, field)        , H.Sized field (vec n) HU.Vector        )     => (forall s'. Reifies s' W => BVar s' field -> BVar s' field -> BVar s' field)     -> BVar s (vec n)     -> BVar s (vec n)     -> BVar s (vec n)-zipWithVector f = liftOp2 . op2 $ \(H.extract->x) (H.extract->y) ->-    let (z,dx,dy) = VG.unzip3-                  $ VG.zipWith (\x' y' ->-                      let (z', (dx', dy')) = backprop2 f x' y'-                      in  (z', dx', dy')-                    ) x y-    in  ( fromJust (H.create z)-        , \d -> (d * fromJust (H.create dx), d * fromJust (H.create dy))+zipWithVector' f = liftOp2 . op2 $ \(VG.convert.H.extract->x) (VG.convert.H.extract->y) ->+    let (z, dx, dy) = V.unzip3 $ V.zipWith (\x' -> retup . backprop2 f x') x y+    in  ( fromJust (H.create (VG.convert z))+        , \d -> ( d * fromJust (H.create (VG.convert dx))+                , d * fromJust (H.create (VG.convert dy))+                )         )-{-# INLINE zipWithVector #-}+  where+    retup (x, (y, z)) = (x, y, z)+{-# INLINE zipWithVector' #-} --- | A version of 'zipWithVector' that is less performant but is based on--- 'H.zipWithVector' from 'H.Domain'.-zipWithVector'+-- | A version of 'zipWithVector'' that is potentially less performant but+-- is based on 'H.zipWithVector' from 'H.Domain'.+dzipWithVector     :: ( Reifies s W        , KnownNat n        , H.Domain field vec mat@@ -952,13 +966,13 @@     -> BVar s (vec n)     -> BVar s (vec n)     -> BVar s (vec n)-zipWithVector' f = liftOp2 . op2 $ \x y ->+dzipWithVector f = liftOp2 . op2 $ \x y ->     ( H.zipWithVector (evalBP2 f) x y     , \d -> let dx = H.zipWithVector (\x' -> fst . gradBP2 f x') x y                 dy = H.zipWithVector (\x' -> snd . gradBP2 f x') x y             in  (d * dx, d * dy)     )-{-# INLINE zipWithVector' #-}+{-# INLINE dzipWithVector #-}  det :: ( Reifies s W        , KnownNat n