anchor.diff:      let w = Parameter <| Weight.standard([|outChannels; inChannels; kernelSizes.[0]; kernelSizes.[1]|], k)
       let b = Parameter <| if bias then Weight.standard([|outChannels|], k) else dsharp.zero()
       do base.add([w;b],["Conv2d__weight";"Conv2d__bias"])
  -    override c.ToString() = sprintf "Conv2d(%A, %A, %A)" inChannels outChannels kernelSizes
  -    override c.forward(value) =
  +    override _.ToString() = sprintf "Conv2d(%A, %A, %A)" inChannels outChannels kernelSizes
  +    override _.forward(value) =
           let f = dsharp.conv2d(value, w.value, ?stride=stride, ?strides=strides, ?padding=padding, ?paddings=paddings, ?dilation=dilation, ?dilations=dilations)
           if bias then f + b.value.expand([value.shape.[0]; outChannels]).view([value.shape.[0]; outChannels; 1; 1]) else f
   
  
positive.code:     let w = Parameter <| Weight.standard([|outChannels; inChannels; kernelSizes.[0]; kernelSizes.[1]; kernelSizes.[2]|], k)
      let b = Parameter <| if bias then Weight.standard([|outChannels|], k) else dsharp.zero()
      do base.add([w;b],["Conv3d__weight";"Conv3d__bias"])
      override c.ToString() = sprintf "Conv3d(%A, %A, %A)" inChannels outChannels kernelSizes
      override c.forward(value) =
          let f = dsharp.conv3d(value, w.value, ?stride=stride, ?strides=strides, ?padding=padding, ?paddings=paddings, ?dilation=dilation, ?dilations=dilations)
          if bias then f + b.value.expand([value.shape.[0]; outChannels]).view([value.shape.[0]; outChannels; 1; 1; 1]) else f
  
  
  type Dropout(?p:double) =
      inherit Model()
      override d.ToString() = sprintf "Dropout()"
      override d.forward(value) =
          if d.mode = Mode.Train then value.dropout(?p=p) else value
  
  
  type Dropout2d(?p:double) =
      inherit Model()
      override d.ToString() = sprintf "Dropout2d()"
      override d.forward(value) =
          if d.mode = Mode.Train then value.dropout2d(?p=p) else value
  
  
  type Dropout3d(?p:double) =
      inherit Model()
      override d.ToString() = sprintf "Dropout3d()"
      override d.forward(value) =
          if d.mode = Mode.Train then value.dropout3d(?p=p) else value
negative.code:     let k = 1./sqrt (float outFeatures)
      let b = Parameter(if bias then Weight.standard([|outFeatures|], k) else dsharp.zero())
      do base.add([w;b],["Linear__weight";"Linear__bias"])
      override _.ToString() = sprintf "Linear(%A, %A)" inFeatures outFeatures
      override _.forward(value) =
          let f = dsharp.matmul(value, w.value)
          if bias then f + b.value else f
  
  