public override void Update(NDArray labels, NDArray preds) { if (labels == null) { throw new ArgumentNullException(nameof(labels)); } if (preds == null) { throw new ArgumentNullException(nameof(preds)); } Logging.CHECK_EQ(labels.GetShape().Count, 1); var len = labels.GetShape()[0]; var predData = new mx_float[len]; var labelData = new mx_float[len]; preds.ArgmaxChannel().SyncCopyToCPU(predData); labels.SyncCopyToCPU(labelData); for (var i = 0; i < len; ++i) { this.SumMetric += Math.Abs(predData[i] - labelData[i]) < float.Epsilon ? 1 : 0; this.NumInst += 1; } }
protected override void CreateState(int index, NDArray weight) { this._Mean[index] = new NDArray(weight.GetShape()); this._Mean[index].Set(0); this._Var[index] = new NDArray(weight.GetShape()); this._Var[index].Set(0); }
protected override void CreateState(int index, NDArray weight) { this._AccG[index] = new NDArray(weight.GetShape(), weight.GetContext()); this._AccG[index].Set(0); this._AccDelta[index] = new NDArray(weight.GetShape(), weight.GetContext()); this._AccDelta[index].Set(0); }
protected override void CreateState(int index, NDArray weight) { this._N[index] = new NDArray(weight.GetShape()); this._N[index].Set(0); this._G[index] = new NDArray(weight.GetShape()); this._G[index].Set(0); this._Delta[index] = new NDArray(weight.GetShape()); this._Delta[index].Set(0); }
public override void Update(NDArray labels, NDArray preds) { if (labels == null) { throw new ArgumentNullException(nameof(labels)); } if (preds == null) { throw new ArgumentNullException(nameof(preds)); } var len = labels.GetShape()[0]; var m = preds.GetShape()[1]; var predData = new mx_float[len * m]; var labelData = new mx_float[len]; preds.SyncCopyToCPU(predData); labels.SyncCopyToCPU(labelData); for (var i = 0; i < len; ++i) { // ToDo: (int)(i * m + labelData[i]) is no problem? this.SumMetric += (float)(-Math.Log(Math.Max(predData[(int)(i * m + labelData[i])], Epsilon))); this.NumInst += 1; } }
protected static void CheckLabelShapes(NDArray labels, NDArray preds, bool strict = false) { if (strict) { Logging.CHECK_EQ(new Shape(labels.GetShape()), new Shape(preds.GetShape())); } else { Logging.CHECK_EQ(labels.Size, preds.Size); } }
protected override void CreateState(int index, NDArray weight) { if (!this.Params.ContainsKey("momentum")) { this._States[index] = null; } else { this._States[index] = new NDArray(weight.GetShape(), weight.GetContext()); this._States[index].Set(0); } }
/// <summary> /// /// </summary> /// <param name="lhs">first input</param> /// <param name="rhs">second input</param> /// <returns>returns new symbol</returns> public static NDArray GreaterEqual(NDArray lhs, float rhs) { float[] rhsdata = new float[lhs.Size]; for (ulong i = 0; i < lhs.Size; i++) { rhsdata[i] = rhs; } NDArray rhsArray = new NDArray(rhsdata, new Shape(lhs.GetShape())); return(new Operator("_greater_equal") .SetInput("lhs", lhs) .SetInput("rhs", rhsArray) .Invoke().First()); }
protected virtual void InitBilinear(NDArray array) { var shape = new Shape(array.GetShape()); var size = (int)shape.Size; var weight = new float[size]; var f = Math.Ceiling(shape[3] / 2.0f); var c = (2 * f - 1 - f % 2) / (2.0 * f); for (var i = 0; i < size; ++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))); } array.SyncCopyFromCPU(weight); }
public override void Operator(string name, NDArray array) { var shape = new Shape(array.GetShape()); var hwScale = 1.0f; if (shape.Dimension > 2) { for (uint i = 2; i < shape.Dimension; ++i) { hwScale *= shape[i]; } } var @in = shape[1] * hwScale; var @out = shape[0] * hwScale; var factor = 1.0f; switch (this.Factor) { case FactorType.Average: factor = (@in + @out) / 2.0f; break; case FactorType.In: factor = @in; break; case FactorType.Out: factor = @out; break; } var scale = (float)Math.Sqrt(this.Magnitude / factor); switch (this.Rand) { case RandType.Uniform: NDArray.SampleUniform(-scale, scale, array); break; case RandType.Gaussian: NDArray.SampleGaussian(0, scale, array); break; } }