static void Main(string[] args) { var modelPath = "models/resnet50.model"; var width = 224; var tensor = JpegToTensor(GetDataPath("datasets/towers/et1.jpg"), width, width); var model = Sequential.Load(GetDataPath(modelPath)); var prediction1 = model.Predict(tensor).Squeeze(); tensor = JpegToTensor(GetDataPath("datasets/towers/et2.jpg"), width, width); var prediction2 = model.Predict(tensor).Squeeze(); Console.WriteLine($" Distance to picture of the same object: {TensorUtils.EuclideanDistance(prediction1, prediction2).ToString("F2")}"); tensor = JpegToTensor(GetDataPath("datasets/towers/et3.jpg"), width, width); prediction2 = model.Predict(tensor).Squeeze(); Console.WriteLine($" Distance to picture of the same object: {TensorUtils.EuclideanDistance(prediction1, prediction2).ToString("F2")}"); tensor = JpegToTensor(GetDataPath("datasets/towers/pt1.jpg"), width, width); prediction2 = model.Predict(tensor).Squeeze(); Console.WriteLine($" Ddistance to picture of a different object: {TensorUtils.EuclideanDistance(prediction1, prediction2).ToString("F2")}"); }
static void PredictMnist(string modelPath, string xtestPath, string ytestPath = null) { var xtest = TensorUtils.Deserialize(File.OpenRead(xtestPath)); xtest = xtest.Cast(DType.Float32); xtest = Ops.Div(null, xtest, 255f); // xtest = xtest.Narrow(0, 0, 101); var model = Sequential.Load(modelPath); var result = model.Predict(xtest, batchSize: 32); if (ytestPath == null) { return; } var ytest = TensorUtils.Deserialize(File.OpenRead(ytestPath)); ytest = ytest.Cast(DType.Float32); // ytest = ytest.Narrow(0, 0, 101); ytest = Ops.Argmax(null, ytest, 1).Squeeze(); var t = result.Narrow(0, 0, 11); // Console.WriteLine(t.Format()); result = Ops.Argmax(null, result, 1).Squeeze(); t = result.Narrow(0, 0, 11); // Console.WriteLine(t.Format()); double sum = 0.0; for (var i = 0; i < ytest.Sizes[0]; ++i) { sum += (int)ytest.GetElementAsFloat(i) == (int)result.GetElementAsFloat(i) ? 1.0 : 0.0; } Console.WriteLine($"Accuracy: {sum / ytest.Sizes[0] * 100}%"); }