GraphSpec Convolutional Classifier #
A graph-authored classifier with two convolution-pooling blocks and a linear head. Every spatial
quantity is a TorchLean.Tensor Nat [d], so the definition applies unchanged to signals, images,
volumes, and higher-dimensional grids.
def
NN.GraphSpec.Models.twoConvOutputSpatial
{d : ℕ}
(spatial kernel convStride₁ convPadding₁ convStride₂ convPadding₂ poolKernel poolStride₁ poolPadding₁ poolStride₂
poolPadding₂ : TorchLean.Tensor ℕ [d])
:
Spatial extent after the two convolution-pooling blocks.
Instances For
def
NN.GraphSpec.Models.twoConvFeatureShape
{d channels : ℕ}
(spatial kernel convStride₁ convPadding₁ convStride₂ convPadding₂ poolKernel poolStride₁ poolPadding₁ poolStride₂
poolPadding₂ : TorchLean.Tensor ℕ [d])
:
Shape of the final convolutional feature map.
Instances For
def
NN.GraphSpec.Models.twoConvFeatureSize
{d channels : ℕ}
(spatial kernel convStride₁ convPadding₁ convStride₂ convPadding₂ poolKernel poolStride₁ poolPadding₁ poolStride₂
poolPadding₂ : TorchLean.Tensor ℕ [d])
:
Number of scalar features consumed by the linear head.
Instances For
def
NN.GraphSpec.Models.twoConvCnn
{d inChannels firstChannels secondChannels outputSize : ℕ}
(spatial kernel convStride₁ convPadding₁ convStride₂ convPadding₂ poolKernel poolStride₁ poolPadding₁ poolStride₂
poolPadding₂ : TorchLean.Tensor ℕ [d])
{hPoolKernel : ∀ (i : Fin d), poolKernel.getScalar i ≠ 0}
{hPoolStride₁ : ∀ (i : Fin d), poolStride₁.getScalar i ≠ 0}
{hPoolStride₂ : ∀ (i : Fin d), poolStride₂.getScalar i ≠ 0}
:
Chain
[Spec.Shape.ofList (firstChannels :: inChannels :: kernel.to (List ℕ)), [firstChannels], Spec.Shape.ofList (secondChannels :: firstChannels :: kernel.to (List ℕ)), [secondChannels], [outputSize, twoConvFeatureSize spatial kernel convStride₁ convPadding₁ convStride₂ convPadding₂ poolKernel poolStride₁
poolPadding₁ poolStride₂ poolPadding₂], [outputSize]]
(Spec.Shape.ofList (inChannels :: spatial.to (List ℕ))) [outputSize]
Two convolution-pooling blocks followed by a linear classifier.
The parameter list records both convolution kernels and biases followed by the linear head. The
input has shape (inChannels, spatial...); no batch axis is built into the architecture.
Instances For
def
NN.GraphSpec.Models.twoConvCnnDAGModelZeroInit
{d inChannels firstChannels secondChannels outputSize : ℕ}
(spatial kernel convStride₁ convPadding₁ convStride₂ convPadding₂ poolKernel poolStride₁ poolPadding₁ poolStride₂
poolPadding₂ : TorchLean.Tensor ℕ [d])
{hPoolKernel : ∀ (i : Fin d), poolKernel.getScalar i ≠ 0}
{hPoolStride₁ : ∀ (i : Fin d), poolStride₁.getScalar i ≠ 0}
{hPoolStride₂ : ∀ (i : Fin d), poolStride₂.getScalar i ≠ 0}
:
DAG.Model
[Spec.Shape.ofList (firstChannels :: inChannels :: kernel.to (List ℕ)), [firstChannels], Spec.Shape.ofList (secondChannels :: firstChannels :: kernel.to (List ℕ)), [secondChannels], [outputSize, twoConvFeatureSize spatial kernel convStride₁ convPadding₁ convStride₂ convPadding₂ poolKernel poolStride₁
poolPadding₁ poolStride₂ poolPadding₂], [outputSize]]
[Spec.Shape.ofList (inChannels :: spatial.to (List ℕ))] [outputSize]
Lower twoConvCnn structurally to the DAG representation with zero-initialized parameters.