前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数字图片分类实例--玩转R中的Tensorflow

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

作者头像
1480
发布2019-07-10 15:15:21
8970
发布2019-07-10 15:15:21
举报
文章被收录于专栏:数据分析1480数据分析1480

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

查看 tensorflow 版本

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)。
  • 训练数据是用来训练模型。测试数据不参加建模,而是模型建立后是用来测试模型的效果。

这些图片长这个样

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

embedding:

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

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

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

数据处理前

  • 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 是什么?后续文章再聊)

神经网络型图:

神经网络公式:

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

模型的架构:

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

05 Complie模型

loss function是categorial_crossentropy

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

optimizer是optimize_rmsprop

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

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

06 训练模型 trainning

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

x_train为训练数据集特征

(6万张照片)

y_train 为训练数据集标签

(6万个数字)

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

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

训练时间大概为5分钟。

07 模型效果 performance

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

08 模型对比 benchmark

Naive benchmark:

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

决策树模型 Decision tree benchmark:

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

随机森林模型 random forest benchmark:

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

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

09 总结 summary

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

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

如果您喜欢本文。请分享出去。

后续分享:

Tensorflow in R 系列(2) :时装分类 Fashion-MNIST image classification with CNN

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据分析1480 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装 R 和 R studio
  • 安装 keras package
    • 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
        • embedding:
          • 建立深度神经网络模型(deep neural network)
            • 神经网络型图:
              • 神经网络公式:
                • 模型的架构:
                  • Naive benchmark:
                    • 如果我们什么都不知道,瞎猜0-9的话。准确度是10%
                      • 决策树模型 Decision tree benchmark:
                        • 随机森林模型 random forest benchmark:
                          • 后续分享:
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档