protected virtual void InitBilinear(string name, NdArray arr) { var shape = arr.GetShape().Data(); var prodShape = Util.Prod(shape); float[] weight = new float[prodShape]; var f = Math.Ceiling(shape[3] / 2.0); var c = (2 * f - 1 - f % 2) / (2.0 * f); for (int i = 0; i < prodShape; i++) { var x = i % shape[3]; var y = (i / shape[3]) % shape[2]; weight[i] = (float)((1 - Math.Abs(x / f - c)) * (1 - Math.Abs(y / f - c))); } arr.SyncCopyFromCpu(weight); }
protected virtual void InitLocBias(string name, NdArray arr) { Util.Assert(arr.GetShape()[0] == 6); arr.SyncCopyFromCpu(new[] { 1.0f, 0, 0, 0, 1.0f, 0 }); }