Copyright | (c) Huw Campbell 2016-2017 |
---|---|
License | BSD2 |
Stability | experimental |
Safe Haskell | None |
Language | Haskell98 |
A deconvolution layer is in many ways a convolution layer in reverse. It learns a kernel to apply to each pixel location, spreading it out into a larger layer.
This layer is important for image generation tasks, such as GANs on images.
- data Deconvolution :: Nat -> Nat -> Nat -> Nat -> Nat -> Nat -> * where
- Deconvolution :: (KnownNat channels, KnownNat filters, KnownNat kernelRows, KnownNat kernelColumns, KnownNat strideRows, KnownNat strideColumns, KnownNat kernelFlattened, kernelFlattened ~ ((kernelRows * kernelColumns) * filters)) => !(L kernelFlattened channels) -> !(L kernelFlattened channels) -> Deconvolution channels filters kernelRows kernelColumns strideRows strideColumns
- data Deconvolution' :: Nat -> Nat -> Nat -> Nat -> Nat -> Nat -> * where
- Deconvolution' :: (KnownNat channels, KnownNat filters, KnownNat kernelRows, KnownNat kernelColumns, KnownNat strideRows, KnownNat strideColumns, KnownNat kernelFlattened, kernelFlattened ~ ((kernelRows * kernelColumns) * filters)) => !(L kernelFlattened channels) -> Deconvolution' channels filters kernelRows kernelColumns strideRows strideColumns
- randomDeconvolution :: (MonadRandom m, KnownNat channels, KnownNat filters, KnownNat kernelRows, KnownNat kernelColumns, KnownNat strideRows, KnownNat strideColumns, KnownNat kernelFlattened, kernelFlattened ~ ((kernelRows * kernelColumns) * filters)) => m (Deconvolution channels filters kernelRows kernelColumns strideRows strideColumns)
Documentation
data Deconvolution :: Nat -> Nat -> Nat -> Nat -> Nat -> Nat -> * where Source #
A Deconvolution layer for a neural network. This uses the im2col Convolution trick popularised by Caffe.
The Deconvolution layer is a way of spreading out a single response into a larger image, and is useful in generating images.
Deconvolution :: (KnownNat channels, KnownNat filters, KnownNat kernelRows, KnownNat kernelColumns, KnownNat strideRows, KnownNat strideColumns, KnownNat kernelFlattened, kernelFlattened ~ ((kernelRows * kernelColumns) * filters)) => !(L kernelFlattened channels) -> !(L kernelFlattened channels) -> Deconvolution channels filters kernelRows kernelColumns strideRows strideColumns |
Show (Deconvolution c f k k' s s') Source # | |
(KnownNat channels, KnownNat filters, KnownNat kernelRows, KnownNat kernelColumns, KnownNat strideRows, KnownNat strideColumns, KnownNat (* (* kernelRows kernelColumns) filters)) => Serialize (Deconvolution channels filters kernelRows kernelColumns strideRows strideColumns) Source # | |
(KnownNat channels, KnownNat filters, KnownNat kernelRows, KnownNat kernelColumns, KnownNat strideRows, KnownNat strideColumns, KnownNat (* (* kernelRows kernelColumns) filters)) => UpdateLayer (Deconvolution channels filters kernelRows kernelColumns strideRows strideColumns) Source # | |
(KnownNat kernelRows, KnownNat kernelCols, KnownNat strideRows, KnownNat strideCols, KnownNat inputRows, KnownNat inputCols, KnownNat outputRows, KnownNat outputCols, (~) Nat (* ((-) inputRows 1) strideRows) ((-) outputRows kernelRows), (~) Nat (* ((-) inputCols 1) strideCols) ((-) outputCols kernelCols), KnownNat (* (* kernelRows kernelCols) 1), KnownNat (* outputRows 1)) => Layer (Deconvolution 1 1 kernelRows kernelCols strideRows strideCols) (D2 inputRows inputCols) (D2 outputRows outputCols) Source # | A two dimentional image may have a Deconvolution filter applied to it |
(KnownNat kernelRows, KnownNat kernelCols, KnownNat filters, KnownNat strideRows, KnownNat strideCols, KnownNat inputRows, KnownNat inputCols, KnownNat outputRows, KnownNat outputCols, (~) Nat (* ((-) inputRows 1) strideRows) ((-) outputRows kernelRows), (~) Nat (* ((-) inputCols 1) strideCols) ((-) outputCols kernelCols), KnownNat (* (* kernelRows kernelCols) filters), KnownNat (* outputRows filters)) => Layer (Deconvolution 1 filters kernelRows kernelCols strideRows strideCols) (D2 inputRows inputCols) (D3 outputRows outputCols filters) Source # | A two dimentional image may have a Deconvolution filter applied to it |
(KnownNat kernelRows, KnownNat kernelCols, KnownNat strideRows, KnownNat strideCols, KnownNat inputRows, KnownNat inputCols, KnownNat outputRows, KnownNat outputCols, (~) Nat (* ((-) inputRows 1) strideRows) ((-) outputRows kernelRows), (~) Nat (* ((-) inputCols 1) strideCols) ((-) outputCols kernelCols), KnownNat (* (* kernelRows kernelCols) 1), KnownNat (* outputRows 1), KnownNat channels) => Layer (Deconvolution channels 1 kernelRows kernelCols strideRows strideCols) (D3 inputRows inputCols channels) (D2 outputRows outputCols) Source # | A two dimentional image may have a Deconvolution filter applied to it |
(KnownNat kernelRows, KnownNat kernelCols, KnownNat filters, KnownNat strideRows, KnownNat strideCols, KnownNat inputRows, KnownNat inputCols, KnownNat outputRows, KnownNat outputCols, KnownNat channels, (~) Nat (* ((-) inputRows 1) strideRows) ((-) outputRows kernelRows), (~) Nat (* ((-) inputCols 1) strideCols) ((-) outputCols kernelCols), KnownNat (* (* kernelRows kernelCols) filters), KnownNat (* outputRows filters)) => Layer (Deconvolution channels filters kernelRows kernelCols strideRows strideCols) (D3 inputRows inputCols channels) (D3 outputRows outputCols filters) Source # | A three dimensional image (or 2d with many channels) can have an appropriately sized Deconvolution filter run across it. |
type Gradient (Deconvolution channels filters kernelRows kernelCols strideRows strideCols) Source # | |
type Tape (Deconvolution 1 1 kernelRows kernelCols strideRows strideCols) (D2 inputRows inputCols) (D2 outputRows outputCols) Source # | |
type Tape (Deconvolution 1 filters kernelRows kernelCols strideRows strideCols) (D2 inputRows inputCols) (D3 outputRows outputCols filters) Source # | |
type Tape (Deconvolution channels 1 kernelRows kernelCols strideRows strideCols) (D3 inputRows inputCols channels) (D2 outputRows outputCols) Source # | |
type Tape (Deconvolution channels filters kernelRows kernelCols strideRows strideCols) (D3 inputRows inputCols channels) (D3 outputRows outputCols filters) Source # | |
data Deconvolution' :: Nat -> Nat -> Nat -> Nat -> Nat -> Nat -> * where Source #
Deconvolution' :: (KnownNat channels, KnownNat filters, KnownNat kernelRows, KnownNat kernelColumns, KnownNat strideRows, KnownNat strideColumns, KnownNat kernelFlattened, kernelFlattened ~ ((kernelRows * kernelColumns) * filters)) => !(L kernelFlattened channels) -> Deconvolution' channels filters kernelRows kernelColumns strideRows strideColumns |
randomDeconvolution :: (MonadRandom m, KnownNat channels, KnownNat filters, KnownNat kernelRows, KnownNat kernelColumns, KnownNat strideRows, KnownNat strideColumns, KnownNat kernelFlattened, kernelFlattened ~ ((kernelRows * kernelColumns) * filters)) => m (Deconvolution channels filters kernelRows kernelColumns strideRows strideColumns) Source #