深度学习入门(一)以MNIST为例

深度学习通常用于两种场景,一种是图像,一种是语音。本文讲解图像分类的Hello World程序:使用深度学习模型对手写体数字进行分类。

一、MNIST数据集介绍

MNIST数据集包含70000张手写数字的灰度图片,下面是其中的40张,我们需要训练一个深度学习模型用于识别这些手写数字。

二、数据处理

1、加载数据集

keras提供了很多有用方法,可以容易的加载常见的数据集,比如MNIST:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.datasets import mnist

# 将数据划分成训练数据(图片数据、标签)和测试数据(图片数据、标签)
(x_train, y_train), (x_test, y_test) = mnist.load_data()

MNIST包含70000张图片和标签,load_data()会将其中60,000张划入训练集,10,000张划入测试集。

  • x_train:用于训练神经网络的图像
  • y_train:正确的x_train图片标签,用于在训练期间评估模型的预测
  • x_test:单独留出来的图像,用来在训练模型后测试模型的性能
  • y_test:正确的x_test图像标签,用于在训练模型后评估模型的预测

2、数据预处理

为了方便处理,我们首先将图片数据展平,从28*28的二维数组变为长度为784的一维数组。

x_train = x_train.reshape(60000, 784)
x_test = x_test.reshape(10000, 784)

再对数据进行归一化。

x_train = x_train/255
x_test = x_test/255

将标签进行多分类编码。

num_categories = 10

y_train = keras.utils.to_categorical(y_train, num_categories)
y_test = keras.utils.to_categorical(y_test, num_categories)

三、创建模型

我们创建一个两层的网络,隐藏层的大小为512。

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

model = Sequential()
model.add(Dense(units=512, activation='relu', input_shape=(784,)))
model.add(Dense(units=512, activation='relu'))
model.add(Dense(units=10, activation='softmax'))
model.summary()

四、训练模型

编译并且训练五轮。

model.compile(loss='categorical_crossentropy', metrics=['accuracy'])
history = model.fit(x_train, y_train, epochs=5, verbose=1, validation_data=(x_test, y_test))

五、进行推理

1、首先使用画图自己乱画一个数字

大小无所谓,背景黑色,铅笔用白色,保存。

2、读取图片

使用keras的工具读取上述图片为28*28的灰度图片。

from tensorflow.keras.preprocessing import image as image_utils

image = image_utils.load_img(r'e:/7.png', color_mode='grayscale', target_size=(28, 28))
image = image_utils.img_to_array(image)
image = image.reshape(1, 784)

3、进行推理

prediction = model.predict(image)
prediction

推理结果为多分类编码格式。

array([[0., 0., 0., 0., 0., 1., 0., 0., 0., 0.]], dtype=float32)

可以简单的转换成数字5。

import numpy as np
np.argmax(prediction)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值