TorchLean API

NN.GraphSpec.Models.Cnn

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.

          Instances For