anchor.diff:      let dilation = defaultArg dilation 1
       let bias = defaultArg bias true
       let k = 1./ sqrt (float (inChannels*kernelSize))
  -    let w = Parameter <| -k + dsharp.rand([outChannels; inChannels; kernelSize]) * 2*k
  -    let b = Parameter <| if bias then -k + dsharp.rand(outChannels) * 2*k else dsharp.zero()
  +    let w = Parameter <| Init.init([|outChannels; inChannels; kernelSize|], k)
  +    let b = Parameter <| if bias then Init.init([|outChannels|], k) else dsharp.zero()
       do base.add(["weight", w; "bias", b])
       override c.forward(value) =
           let f = dsharp.conv1d(value, w.value, stride=stride, padding=padding, dilation=dilation)
  
positive.code:     let kernelSize = kernelSize |> Array.ofSeq
      let bias = defaultArg bias true
      let k = 1./ sqrt (float (inChannels*kernelSize.[0]*kernelSize.[1]))
      let w = Parameter <| -k + dsharp.rand([outChannels; inChannels; kernelSize.[0]; kernelSize.[1]]) * 2*k
      let b = Parameter <| if bias then -k + dsharp.rand(outChannels) * 2*k else dsharp.zero()
      do base.add(["weight", w; "bias", b])
      override c.forward(value) =
          let f = dsharp.conv2d(value, w.value, ?stride=stride, ?strides=strides, ?padding=padding, ?paddings=paddings, ?dilation=dilation, ?dilations=dilations)
  
negative.code:         let w = dsharp.randn([fanIn; fanOut])
          let s = sqrt (2. / ((1. + a*a) * (float fanIn)))
          w * s
      static member init(shape:int[], k:float) =
          -k + dsharp.rand(shape) * 2*k
  
  
  type Linear(inFeatures, outFeatures, ?bias:bool) =
      inherit Model()
      let bias = defaultArg bias true
      let k = 1./sqrt (float outFeatures)
      let w = Parameter(Init.kaiming(inFeatures, outFeatures))
      let b = Parameter(if bias then Init.init([|outFeatures|], k) else dsharp.zero())
      do base.add(["weight", w; "bias", b])
      override l.forward(value) =
          let f = dsharp.matmul(value, w.value)
  