Safe Haskell | None |
---|---|
Language | Haskell2010 |
This module is the core of TensorSafe. It defines all Network data structures -- and types functions that respresent Layers modifications of shapes, as well as -- all needed information for compiling the Network structures to CNetworks for later code -- generation.
Synopsis
- data Network :: [Type] -> Type where
- data INetwork :: [Type] -> [Shape] -> Type where
- type family MkINetwork (layers :: [Type]) (sIn :: Shape) (sOut :: Shape) :: Type where ...
- class ValidNetwork (xs :: [Type]) (ss :: [Shape])
- mkINetwork :: ValidNetwork xs ss => INetwork xs ss
- toCNetwork :: forall i x xs ss. (SingI i, Layer x, ValidNetwork (x ': xs) (i ': ss)) => INetwork (x ': xs) (i ': ss) -> CNetwork
Documentation
data Network :: [Type] -> Type where Source #
A network that defines a specific sequence of layers
data INetwork :: [Type] -> [Shape] -> Type where Source #
A network that defines a specific sequence of layers with the corresponding shape
transformation along the network. It's an Instance of a Network: given a Network and a initial
Shape, this type structure can be generated automatically using the type functions defined in
this module, like Out
and MkINetwork
.
INNil :: SingI i => INetwork '[] '[i] | |
(:~>) :: (SingI i, SingI h, Layer x) => !x -> !(INetwork xs (h ': hs)) -> INetwork (x ': xs) (i ': (h ': hs)) infixr 5 |
type family MkINetwork (layers :: [Type]) (sIn :: Shape) (sOut :: Shape) :: Type where ... Source #
Creates an INetwork type validating the the expected output and the computed one match.
MkINetworkUnconstrained ls sIn sOut = MaybeType (INetwork ls (ComposeOut ls sIn)) (ValidateOutput ls sIn sOut) |
class ValidNetwork (xs :: [Type]) (ss :: [Shape]) Source #
Instanciates a Network after defining a type definition, using MkINetworkUnconstrained or MkINetwork, for example. After defining a variable with INetwork type, you can instanciate that variable like this: ``` myNet :: MNIST myNet = mkINetwork ```
Instances
SingI i => ValidNetwork ([] :: [Type]) (i ': ([] :: [Shape])) Source # | |
Defined in TensorSafe.Network mkINetwork :: INetwork [] (i ': []) Source # | |
(SingI i, SingI o, Layer x, ValidNetwork xs (o ': rs), Out x i ~ o) => ValidNetwork (x ': xs) (i ': (o ': rs)) Source # | |
Defined in TensorSafe.Network mkINetwork :: INetwork (x ': xs) (i ': (o ': rs)) Source # |
mkINetwork :: ValidNetwork xs ss => INetwork xs ss Source #
Makes a valid instance of INetwork
toCNetwork :: forall i x xs ss. (SingI i, Layer x, ValidNetwork (x ': xs) (i ': ss)) => INetwork (x ': xs) (i ': ss) -> CNetwork Source #
Compilation: Gets the initial shape using Singleton instances. Since this is the function we
run for transforming an INetwork to CNetwork, the nested argument of toCNetwork'
is set
to False.