[][src]Crate autograph_derive

Derive Layer and implement Forward

Layer can be derived for a struct composed of other layers
#[impl_forward(D, Dy)] generates an sequential implementation for Forward<D, OutputDim=Dy>
use #[autograph(skip)] to skip fields

 use autograph::autograd::{Variable, ParameterD};
 use autograph::layer::{
    Layer, 
    Forward,
    Dense,
    Conv2d,
    MaxPool2d,
    Relu,
    Flatten
 }; 
 use ndarray::{Ix2, Ix4};

 #[impl_forward(Ix4, Ix2)] 
 #[derive(Layer)]
 struct Lenet5 (
     Conv2d,
     Relu,
     MaxPool2d,
     Conv2d,
     Relu,
     MaxPool2d,
     Flatten,
     Dense,
     Relu,
     Dense,
     Relu,
     Dense
 );

Generates:

impl Layer for Lenet5 {
    fn parameters(&self) -> Vec<ParameterD> {
        self.0
            .parameters()
            .into_iter()
            .chain(self.1.parameters())
            .chain(self.2.parameters())
            .chain(self.3.parameters())
            .chain(self.4.parameters())
            .chain(self.5.parameters())
            .chain(self.6.parameters())
            .chain(self.7.parameters())
            .chain(self.8.parameters())
            .chain(self.9.parameters())
            .chain(self.10.parameters())
            .chain(self.11.parameters())
            .collect()
    }
    fn set_training(&mut self, training: bool) {
        self.0.set_training(training);
        self.1.set_training(training);
        self.2.set_training(training);
        self.3.set_training(training);
        self.4.set_training(training);
        self.5.set_training(training);
        self.6.set_training(training);
        self.7.set_training(training);
        self.8.set_training(training);
        self.9.set_training(training);
        self.10.set_training(training);
        self.11.set_training(training);
   }
}
impl Forward<Ix4> for Lenet5 {
    type OutputDim = Ix2;
    fn forward(&self, input: &Variable<Ix4>) -> Variable<Ix2> {
        input
            .forward(&self.0)
            .forward(&self.1)
            .forward(&self.2)
            .forward(&self.3)
            .forward(&self.4)
            .forward(&self.5)
            .forward(&self.6)
            .forward(&self.7)
            .forward(&self.8)
            .forward(&self.9)
            .forward(&self.10)
            .forward(&self.11)
    }
}

Attribute Macros

impl_forward

Derive Macros

Layer