R语言玩转TensorFlow:数字图片分类实例

01开篇 Introduction    


  • Tensorflow in R 系列,将分享如何使用R语言在Tensorflow/Keras 框架中训练深度学习模型。
  • MNIST 全称为 Modified National Institute of Standards and Technology。这个名词一点也不重要。
  • MNIST 数据为 7万张(6万张训练+1万张测试 0-9的手写数字图片。建立模型预测图片中的数字是多少。



安装 R 和 R studio

此次省略300字,建议使用云计算平台如Kaggle Kernel/Google Codelab/Google Cloud 等


安装 keras package

数字图片分类实例--玩转R中的Tensorflow_tensorflow

查看 tensorflow 版本

数字图片分类实例--玩转R中的Tensorflow_数据集_02



02导入数据 Input data    

导入4个数据集,分别为:

  • x_train:  6万张训练数字图片
  • y_train   6万个训练数字0-9标签
  • x_test:1万张测试数字图片
  • y_test:1万个测试数字0-9标签


为什么有4个数据集 ?

  • 带x的通常为特征(feature)。带y的为标签(label)。
  • 训练数据是用来训练模型。测试数据不参加建模,而是模型建立后是用来测试模型的效果。

数字图片分类实例--玩转R中的Tensorflow_tensorflow_03

这些图片长这个样

数字图片分类实例--玩转R中的Tensorflow_数据集_04

数字图片分类实例--玩转R中的Tensorflow_数据_05



03数据处理 Data cleaning

reshape:将每个2维的28 × 28 的图片变成1维数据 1× 784 的数据

rescale:将每个由0到255的像素(pixel)转为0到1:原来是0的,现在 0/255=0 原来是255的,现在255/255=1。原来为200,现在200/255=0.78

数字图片分类实例--玩转R中的Tensorflow_数据_06

embedding:

这里对标签作 0,1 embedding 处理。

处理后 y_train 变成了 6万行 ,每行10 个 0或1 的数据。

处理后 y_test 变成了 1万行 ,每行10 个 0或1 的数据

数字图片分类实例--玩转R中的Tensorflow_数据_07



数据处理前

  • x_train: 6万张训练数字图片 60000 * 28 * 28 形状的 0-255的数字
  • y_train:6万个训练数字0-9标签 60000 形状的 0-9的数字
  • x_test:1万个测试数字图片 10000 * 28 * 28 形状的 0-255的数字
  • y_test:1万个测试数字0-9标签 10000 形状的 0-9的数字



数据处理后

  • x_train: 6万张训练数字图片 60000 * 784 形状的 0到1的数字
  • y_train:6万个训练数字0-9标签 60000 * 10 形状的 0或1的数字
  • x_test:1万个测试数字图片 10000 * 784 形状的 0到1的数字
  • y_test:1万个测试数字0-9标签 10000 * 10 形状的 0或1的数字




04建立模型 modeling    


建立深度神经网络模型(deep neural network)


网络结构介绍:

输入层:每个图片的形状为784位数字的输入层

第一层:使用 'relu' 的256个tensor 的隐藏层 (relu 是什么?后续文章再聊)

第二层:使用 'relu' 的128个tensor 的隐藏层

输出层:使用 'softmax' 的 10个 加总为1 的 0到1的概率 的 输出层 (softmax 是什么?后续文章再聊)

数字图片分类实例--玩转R中的Tensorflow_tensorflow_08

神经网络型图:数字图片分类实例--玩转R中的Tensorflow_数据_09

神经网络公式:

公式是我们设计模型的时候定义的。比如图中的模型。W11-W33 9个weight 和 b1-b3 3个bias 经过训练得出。所以模型训练的Learnable Parameters=9+3=12

数字图片分类实例--玩转R中的Tensorflow_tensorflow_10

模型的架构:

Learnable_Parameters=input*output+bias


第一层:使用'relu' 的256个tensor 的隐藏层:

Learnable_Parameters:200960=784*256 + 256


第二层:使用'relu'的128个tensor 的隐藏层:

Learnable_Parameters:32896=256*128+128


输出层:使用 'softmax' 的 10个 0到1的概率 的 输出层:

Learnable_Parameters :1290=128*10+10


总Learnable_Parameters :

235146=200960+32896+129

数字图片分类实例--玩转R中的Tensorflow_数据集_11

数字图片分类实例--玩转R中的Tensorflow_数据集_12


05Complie模型  

loss function是categorial_crossentropy

(loss function 是什么?后续文章再聊)

optimizer是optimize_rmsprop

(optimizer 是什么?后续文章再聊)

metrics 为 accuracy,metrics是评估模型的指标。大多数情况都选accuracy。accuracy=正确预测的个数/总预测个数

数字图片分类实例--玩转R中的Tensorflow_数据_13



06训练模型 trainning    

一堆数据处理转换。模型设计后 。终于可以开始训练模型了。

x_train为训练数据集特征

(6万张照片)

y_train 为训练数据集标签

(6万个数字)

每次读入128张图片。训练10次。

6万张照片80%用来训练。20%用来验证。

训练时间大概为5分钟。

数字图片分类实例--玩转R中的Tensorflow_数据集_14



07模型效果 performance

可见 经过 10次训练后。最终在验证集的accuracy表现为97%。从图中可见其实经过6次的训练。在验证集的表现以达到97%

数字图片分类实例--玩转R中的Tensorflow_数据_15

数字图片分类实例--玩转R中的Tensorflow_数据集_16



08 模型对比 benchmark    

Naive benchmark:

如果我们什么都不知道,瞎猜0-9的话。准确度是10%

决策树模型 Decision tree benchmark:

使用决策树模型。准确度是61%。训练时间大概为10分钟。

随机森林模型 random forest benchmark:

使用随机森林模型。准确度是92%。训练时间大概为15分钟

tensorflow神经网络模型的准确度是97%

数字图片分类实例--玩转R中的Tensorflow_数据集_17


数字图片分类实例--玩转R中的Tensorflow_数据集_18


09 总结 summary    


使用tensorflow 神经网络模型将准确率提高到97%。可以得到如此高的准确率,主要是图片比较简单。只有0-9的标准数字。对于更加困难的问题。比如在自动驾驶中需要精准的物体识别等问题。将需要更加复杂的神经网络模型。

代码:https://tduan.netlify.com/post/tensorflow-in-r-1-mnist-image-classification/


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空