写在前面

准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正。

如果有朋友对此感兴趣,可以加入我:https://github.com/feiyun0112/machinelearning-samples.zh-cn

图像分类 - 评分示例

问题

图像分类是许多业务场景中的常见情况。 对于这些情况,您可以使用预先训练的模型或训练自己的模型来对特定于自定义域的图像进行分类。

数据集

有两个数据源:tsv文件和图像文件。tsv 文件 包含2列:第一个定义为ImagePath,第二个定义为对应于图像的Label。正如你所看到的,文件没有标题行,看起来像这样:

broccoli.jpg	broccoli
broccoli.png broccoli
canoe2.jpg canoe
canoe3.jpg canoe
canoe4.jpg canoe
coffeepot.jpg coffeepot
coffeepot2.jpg coffeepot
coffeepot3.jpg coffeepot
coffeepot4.jpg coffeepot
pizza.jpg pizza
pizza2.jpg pizza
pizza3.jpg pizza
teddy1.jpg teddy bear
teddy2.jpg teddy bear
teddy3.jpg teddy bear
teddy4.jpg teddy bear
teddy6.jpg teddy bear
toaster.jpg toaster
toaster2.png toaster
toaster3.jpg toaster

训练和测试图像位于assets文件夹中。这些图像属于维基共享资源。

维基共享资源, 免费媒体存储库。 于 10:48, October 17, 2018 检索自:

https://commons.wikimedia.org/wiki/Pizza

https://commons.wikimedia.org/wiki/Coffee_pot

https://commons.wikimedia.org/wiki/Toaster

https://commons.wikimedia.org/wiki/Category:Canoes

https://commons.wikimedia.org/wiki/Teddy_bear

预训练模型

有多个模型被预先训练用于图像分类。在本例中,我们将使用基于Inception拓扑的模型,并用来自Image.Net的图像进行训练。这个模型可以从 https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip 下载, 也可以在 / src / ImageClassification / assets /inputs / inception / tensorflow_inception_graph.pb 找到。

解决方案

控制台应用程序项目ImageClassification.Score可用于基于预先训练的Inception-v3 TensorFlow模型对样本图像进行分类。

再次注意,此示例仅使用预先训练的TensorFlow模型和ML.NET API。 因此,它不会训练任何ML.NET模型。 目前,在ML.NET中仅支持使用现有的TensorFlow训练模型进行评分/预测。

您需要按照以下步骤执行分类测试:

  1. 设置VS默认启动项目:ImageClassification.Score设置为Visual Studio中的启动项目。
  2. 运行训练模型控制台应用程序: 在Visual Studio中按F5。 在执行结束时,输出将类似于此屏幕截图:

代码演练

解决方案中有一个名为ImageClassification.Score的项目,它负责以TensorFlow格式加载模型,然后对图像进行分类。

ML.NET:模型评分

TextLoader.CreateReader()用于定义将用于在ML.NET模型中加载图像的文本文件的模式。

 var loader = new TextLoader(env,
new TextLoader.Arguments
{
Column = new[] {
new TextLoader.Column("ImagePath", DataKind.Text, 0)
}
}); var data = loader.Read(new MultiFileSource(dataLocation));

用于加载图像的图像文件有两列:第一列定义为ImagePath ,第二列是与图像对应的Label

需要强调的是,在使用TensorFlow模型进行评分时,这里并没有真正使用标签。该文件仅作为测试预测时的参考,以便您可以将每个样本数据的实际标签与TensorFlow模型提供的预测标签进行比较。这就是为什么当使用上面的'TextLoader'加载文件时,您只需要获取ImagePath或文件的名称,但不需要获取标签。

broccoli.jpg	broccoli
bucket.png bucket
canoe.jpg canoe
snail.jpg snail
teddy1.jpg teddy bear

正如您所看到的,文件没有标题行。

第二步是定义估计器流水线。通常,在处理深度神经网络时,必须使图像适应网络期望的格式。这就是为什么图像被调整大小然后被转换的原因(主要是,像素值在所有R、G、B通道上被标准化)。

 var pipeline = new ImageLoaderEstimator(env, imagesFolder, ("ImagePath", "ImageReal"))
.Append(new ImageResizerEstimator(env, "ImageReal", "ImageReal", ImageNetSettings.imageHeight, ImageNetSettings.imageWidth))
.Append(new ImagePixelExtractorEstimator(env, new[] { new ImagePixelExtractorTransform.ColumnInfo("ImageReal", "input", interleave: ImageNetSettings.channelsLast, offset: ImageNetSettings.mean) }))
.Append(new TensorFlowEstimator(env, modelLocation, new[] { "input" }, new[] { "softmax2" }));

您还需要检查神经网络,并检查输入/输出节点的名称。为了检查模型,可以使用Netron,它会随Visual Studio Tools for AI一起安装。

这些名称稍后在评估器管道的定义中使用:在初始网络的情况下,输入张量被命名为“input”,输出被命名为“softmax2”。

最后,我们在拟合评估器管道之后提取预测函数。 预测函数接收类型为ImageNetData的对象(包含2个属性:ImagePathLabel)作为参数,然后返回类型为ImagePrediction的对象。

 var modeld = pipeline.Fit(data);
var predictionFunction = modeld.MakePredictionFunction<ImageNetData, ImageNetPrediction>(env);

在获得预测时,我们得到属性PredictedLabels中的浮点数数组。数组中的每个位置都被分配给一个标签,例如,如果模型有5个不同的标签,那么数组长度将等于5。数组中的每个位置的值表示标签在该位置上的概率;所有数组值(概率)的总和等于1。然后,您需要选择最大值(概率)并检查指定给该位置的标签。

引用

训练和预测图像

维基共享资源, 免费媒体存储库。 于 10:48, October 17, 2018 检索自 https://commons.wikimedia.org/w/index.php?title=Main_Page&oldid=313158208.

ML.NET 示例:深度学习之集成TensorFlow的更多相关文章

  1. 深度学习利器: TensorFlow系统架构及高性能程序设计

    2015年11月9日谷歌开源了人工智能平台TensorFlow,同时成为2015年最受关注的开源项目之一.经历了从v0.1到v0.12的12个版本迭代后,谷歌于2017年2月15日发布了TensorF ...

  2. 深度学习框架集成平台C++ Guide指南

    深度学习框架集成平台C++ Guide指南 这个指南详细地介绍了神经网络C++的API,并介绍了许多不同的方法来处理模型. 提示 所有框架运行时接口都是相同的,因此本指南适用于所有受支持框架(包括Te ...

  3. 问题集录--新手入门深度学习,选择TensorFlow 好吗?

    新手入门深度学习,选择 TensorFlow 有哪些益处? 佟达:首先,对于新手来说,TensorFlow的环境配置包装得真心非常好.相较之下,安装Caffe要痛苦的多,如果还要再CUDA环境下配合O ...

  4. 深度学习利器:TensorFlow在智能终端中的应用——智能边缘计算,云端生成模型给移动端下载,然后用该模型进行预测

    前言 深度学习在图像处理.语音识别.自然语言处理领域的应用取得了巨大成功,但是它通常在功能强大的服务器端进行运算.如果智能手机通过网络远程连接服务器,也可以利用深度学习技术,但这样可能会很慢,而且只有 ...

  5. 深度学习的集成方法——Ensemble Methods for Deep Learning Neural Networks

    本文主要参考Ensemble Methods for Deep Learning Neural Networks一文. 1. 前言 神经网络具有很高的方差,不易复现出结果,而且模型的结果对初始化参数异 ...

  6. 《深度学习原理与TensorFlow实践》喻俨,莫瑜

    1. 深度学习简介 2. TensorFlow系统介绍 3. Hello TensorFlow 4. CNN看懂世界 5. RNN能说会道 6. CNN LSTM看图说话 7. 损失函数与优化算法 T ...

  7. 常用深度学习框——Caffe/ TensorFlow / Keras/ PyTorch/MXNet

    常用深度学习框--Caffe/ TensorFlow / Keras/ PyTorch/MXNet 一.概述 近几年来,深度学习的研究和应用的热潮持续高涨,各种开源深度学习框架层出不穷,包括Tenso ...

  8. 人工智能不过尔尔,基于Python3深度学习库Keras/TensorFlow打造属于自己的聊天机器人(ChatRobot)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_178 聊天机器人(ChatRobot)的概念我们并不陌生,也许你曾经在百无聊赖之下和Siri打情骂俏过,亦或是闲暇之余与小爱同学谈 ...

  9. 机器学习&深度学习基础(tensorflow版本实现的算法概述0)

    tensorflow集成和实现了各种机器学习基础的算法,可以直接调用. 代码集:https://github.com/ageron/handson-ml 监督学习 1)决策树(Decision Tre ...

随机推荐

  1. Gson解析空字符串异常的处理

    面对一些不规范的json,我们的gson解析经常会抛出各种异常导致app崩溃,这里可以采取一些措施来避免. 我们期望在后台返回的json异常时,也能解析成功,空值对应的转换为默认值,如:newsId= ...

  2. 四则运算 Java 杨辉鹏,郑冠华

    四则运算 Java 杨辉鹏,郑冠华 GitHub链接:https://github.com/yanghuipeng/arithmetic 项目相关要求 使用 -n 参数控制生成题目的个数,例如 -n ...

  3. [20180927]ora-01426.txt

    [20180927]ora-01426.txt --//链接:http://www.itpub.net/thread-2105458-1-1.html1.环境:SCOTT@test01p> @ ...

  4. C#核心基础--类的继承

    继承 一个类可以继承自另一个类.在 C#中,类与类之间只存在单一继承.也就是说,一个类的直接基类只能有一个.当类与类之间实现继承的时候,子类可以将它的直接基类的所有成员当做自己的成员,除了类的静态构造 ...

  5. KMP算法详解-彻底清楚了(转载+部分原创)

    引言 KMP算法指的是字符串模式匹配算法,问题是:在主串T中找到第一次出现完整子串P时的起始位置.该算法是三位大牛:D.E.Knuth.J.H.Morris和V.R.Pratt同时发现的,以其名字首字 ...

  6. SQL SERVER启动步骤

    第一步 从注册表读取SQL SERVER启动信息 (1)Audit  Level:设置SQL SERVER是否记录用户登陆信息 Login Mode:设置SQL SERVER登陆类型是只接受windo ...

  7. Powershell远程执行命令

    $Username = 'xx' $Password = 'xx' $ComputerName='xx' $pass = ConvertTo-SecureString -AsPlainText $Pa ...

  8. hive笔记:时间格式的统一

    一.string类型,年月日部分包含的时间统一格式: 原数据格式(时间字段为string类型) 取数时间和格式的语法  2018-11-01 00:12:49.0 substr(regexp_repl ...

  9. Ubuntu下使用终端ssh访问设置了密钥的云服务器

    首先先安装OpenSSH客户端,可以直接apt-get安装 sudo apt-get install openssh-server 然后将私钥权限修改为600 chmod 600 keyfile 最后 ...

  10. 爬楼梯的golang实现

    假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 输入: 输出: 解释: 有两种方法可以爬到楼顶. ...