C#使用TensorFlow.NET训练自己的数据集的方法

2020-03-22 20:01:38王冬梅

测试集预测

训练完成的模型对test数据集进行预测,并统计准确率

计算图中增加了一个提取预测结果Top-1的概率的节点,最后测试集预测的时候可以把详细的预测数据进行输出,方便实际工程中进行调试和优化。

public void Test(Session sess)
{
 (loss_test, accuracy_test) = sess.run((loss, accuracy), (x, x_test), (y, y_test));
 print("CNN:" + "---------------------------------------------------------");
 print("CNN:" + $"Test loss: {loss_test.ToString("0.0000")}, test accuracy: {accuracy_test.ToString("P")}");
 print("CNN:" + "---------------------------------------------------------");

 (Test_Cls, Test_Data) = sess.run((cls_prediction, prob), (x, x_test));

}
private void TestDataOutput()
{
 for (int i = 0; i < ArrayLabel_Test.Length; i++)
 {
  Int64 real = ArrayLabel_Test[i];
  int predict = (int)(Test_Cls[i]);
  var probability = Test_Data[i, predict];
  string result = (real == predict) ? "OK" : "NG";
  string fileName = ArrayFileName_Test[i];
  string real_str = Dict_Label[real];
  string predict_str = Dict_Label[predict];
  print((i + 1).ToString() + "|" + "result:" + result + "|" + "real_str:" + real_str + "|"
    + "predict_str:" + predict_str + "|" + "probability:" + probability.GetSingle().ToString() + "|"
    + "fileName:" + fileName);
 }
}

总结

本文主要是.NET下的TensorFlow在实际工业现场视觉检测项目中的应用,使用SciSharp的TensorFlow.NET构建了简单的CNN图像分类模型,该模型包含输入层、卷积与池化层、扁平化层、全连接层和输出层,这些层都是CNN分类模型的必要的层,针对工业现场的实际图像进行了分类,分类准确性较高。

完整代码可以直接用于大家自己的数据集进行训练,已经在工业现场经过大量测试,可以在GPU或CPU环境下运行,只需要更换tensorflow.dll文件即可实现训练环境的切换。

同时,训练完成的模型文件,可以使用 “CKPT+Meta” 或 冻结成“PB” 2种方式,进行现场的部署,模型部署和现场应用推理可以全部在.NET平台下进行,实现工业现场程序的无缝对接。摆脱了以往Python下 需要通过Flask搭建服务器进行数据通讯交互 的方式,现场部署应用时无需配置Python和TensorFlow的环境【无需对工业现场的原有PC升级安装一大堆环境】,整个过程全部使用传统的.NET的DLL引用的方式。

到此这篇关于C#使用TensorFlow.NET训练自己的数据集的方法的文章就介绍到这了,更多相关C# TensorFlow.NET训练数据集内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!