public static LabelWithConfidence LabelWithConfidence(NeuralNet model, NNInstrumentation instr, double[] datum, bool crop) { Vector <double> datum_v = DenseVector.OfArray(datum); if (crop) { datum_v = model.CropMaybe(datum_v); } double[] outs = model.EvaluateNNConcretePostCrop(datum_v, instr); // Console.WriteLine("Outs = {0}", DenseVector.OfArray(outs)); Tuple <double, int> max = UMath.Max(outs); Tuple <double, int> secmax = UMath.MaxExcluding(max.Item2, outs); UMath.SoftMax(outs); var result = new LabelWithConfidence { datum = datum, actualLabel = max.Item2, secBestLabel = secmax.Item2, softMaxValue = outs[max.Item2], diffFromSecondBest = Math.Abs(outs[max.Item2] - outs[secmax.Item2]) }; return(result); }
// Protected methods ///////////////// protected virtual void Init(UltimateTerrain uTerrain) { converter = uTerrain.Converter; var halfSize = new Vector3d(radius, radius, radius).Rounded; halfSize.x += 1; halfSize.y += 1; halfSize.z += 1; var startVoxelPos = start.Rounded; var endVoxelPos = end.Rounded; from = UMath.Min(startVoxelPos, endVoxelPos) - halfSize; to = UMath.Max(startVoxelPos, endVoxelPos) + halfSize; direction = (end - start).Normalized; length = (end - start).Magnitude; voxelSizeInverse = 1.0 / uTerrain.Params.SizeXVoxel; }