【深度学习】实战之MNIST
既是实战,也是入门~
MNIST介绍
MNIST是深度学习领域的一个经典数据集,内含60000张训练图像与10000张预测图像,每张图片为28像素*28像素的灰度图像,并被划分到10个类别中(0-9)。
MNIST手写数字识别,正是深度学习里的Hello World。
加载数据集
mnist数据预加载在keras库中,其中包括4个numpy数组
from keras.datasets import mnist(train_images,train_labels),(test_images,test_labels) = mnist.load_data()print(train_images.shape,test_images.shape)
print(train_labels[:20])
构建网络
网络共2个dense层(即全连接层)
第一层网络共512个隐藏单元(hidden unit),激活函数为relu
第一层网络共10个隐藏单元,激活函数为softmax
关于指定输入数据的shape,可以看http://ducknew.cf/posts/e9e6cec8/
from keras import models,layersnetwork=models.Sequential()
network.add(layers.Dense(512,activation='relu',input_shape=(28*28,)))
network.add(layers.Dense(10,activation='softmax'))
编译
- optimizer(优化器):该参数可指定为已预定义的优化器名,如 rmsprop 、 adagrad ,或一 个 Optimizer 类的对象
- loss(损失函数):该参数为模型试图最小化的目标函数,它可为预定义的损失函数名, 如 categorical_crossentropy 、 mse
- metrics(指标列表):对分类问题,我们一般将该列表设置为 metrics=[‘accuracy’] 。指标可以是一个预 定义指标的名字,也可以是一个用户定制的函数
network.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])
数据预处理
原数据shape为(60000,28,28),类型为uint8,取值范围为【0,255】
转换后数据shape为(60000,28*28),类型为float32,取值范围为【0,1】
train_images=train_images.reshape((60000,28*28))
train_images = train_images.astype('float32') / 255
test_images=test_images.reshape((10000,28*28))
test_images = test_images.astype('float32') / 255
准备标签
对标签进行分类编码
from tensorflow.keras.utils import to_categoricaltrain_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
训练模型
epochs被定义为向前和向后传播中所有批次的单次训练迭代
举个例子
训练集有1000个样本,batchsize=10,那么:
训练完整个样本集需要:
100次iteration,1次epochone epoch = numbers of iterations = N = 训练样本的数量/batch_size
batch_size可以看这里: http://ducknew.cf/posts/e9e6cec8/
network.fit(train_images,train_labels,epochs=10,batch_size=128)
运行过程显示:
Epoch 1/10
469/469 [==============================] - 15s 6ms/step - loss: 0.4178 - accuracy: 0.8784
Epoch 2/10
469/469 [==============================] - 3s 5ms/step - loss: 0.1119 - accuracy: 0.9669
Epoch 3/10
469/469 [==============================] - 2s 5ms/step - loss: 0.0711 - accuracy: 0.9784
Epoch 4/10
469/469 [==============================] - 2s 5ms/step - loss: 0.0504 - accuracy: 0.9852
Epoch 5/10
469/469 [==============================] - 3s 5ms/step - loss: 0.0376 - accuracy: 0.9888
Epoch 6/10
469/469 [==============================] - 2s 5ms/step - loss: 0.0263 - accuracy: 0.9923
Epoch 7/10
469/469 [==============================] - 2s 5ms/step - loss: 0.0201 - accuracy: 0.9942
Epoch 8/10
469/469 [==============================] - 2s 5ms/step - loss: 0.0142 - accuracy: 0.9959
Epoch 9/10
469/469 [==============================] - 3s 5ms/step - loss: 0.0116 - accuracy: 0.9968
Epoch 10/10
469/469 [==============================] - 2s 5ms/step - loss: 0.0094 - accuracy: 0.9977
评估模型
loss是网络在测试数据上的损失,acc是网络在测试数据上的精度
test_loss,test_acc = network.evaluate(test_images,test_labels)
print(f'test_loss: {test_loss}, test_acc: {test_acc}')
结果:
test_loss: 0.0742919072508812, test_acc: 0.9818999767303467
可以发现test_acc
<训练过程中的accuracy
,这种训练精度高而测试精度低的情况一般是**过拟合(overfit)**造成的。
CNN处理MNIST
网络结构
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 26, 26, 32) 320
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 13, 13, 32) 0
_________________________________________________________________
dropout (Dropout) (None, 13, 13, 32) 0
_________________________________________________________________
conv2d_1 (Conv2D) (None, 11, 11, 64) 18496
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 5, 5, 64) 0
_________________________________________________________________
flatten (Flatten) (None, 1600) 0
_________________________________________________________________
dense (Dense) (None, 64) 102464
_________________________________________________________________
dropout_1 (Dropout) (None, 64) 0
_________________________________________________________________
dense_1 (Dense) (None, 10) 650
=================================================================
Total params: 121,930
Trainable params: 121,930
Non-trainable params: 0
网络代码
def build_model():model = models.Sequential()model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28,28,1)))model.add(layers.MaxPooling2D((2, 2)))model.add(layers.Dropout(0.25))model.add(layers.Conv2D(64, (3, 3), activation='relu'))model.add(layers.MaxPooling2D((2, 2)))model.add(layers.Flatten())model.add(layers.Dense(64, activation='relu'))model.add(layers.Dropout(0.5))model.add(layers.Dense(10, activation='softmax'))# print(model.summary())model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])return model
loss与acc曲线
history=model.fit(train_images, train_labels, epochs=15, batch_size=128)print(history.history.keys())acc = history.history['accuracy']loss = history.history['loss']epochs = range(1, len(acc) + 1)plt.plot(epochs, acc, 'bo', label='Training accuracy')plt.title('Training and validation accuracy')plt.legend()plt.figure()plt.plot(epochs, loss, 'bo', label='Training loss')plt.title('Training and validation loss')plt.legend()plt.show()
事实上,卷积神经网络往往能比全连接网络取得更高的预测的精度。
更多小型demo
- CIFAR10 小图片分类:使用CNN和实时数据提升
- IMDB 电影评论观点分类:使用LSTM处理成序列的词语
- Reuters(路透社)新闻主题分类:使用多层感知器(MLP)
- 字符级文本生成:使用LSTM
【深度学习】实战之MNIST相关推荐
- 跨年之际,中文版畅销书《TensorFlow深度学习实战大全》分享,直接送!
点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 跨年之际,给大家一份福利,赠书抽奖,一共4本!感兴趣的同学可以参与一下,奖品是新书&l ...
- Keras深度学习实战(3)——神经网络性能优化技术详解
Keras深度学习实战(3)--神经网络性能优化技术详解 0. 前言 1. 缩放输入数据集 1.1 数据集缩放的合理性解释 1.2 使用缩放后的数据集训练模型 2. 输入值分布对模型性能的影响 3. ...
- Keras深度学习实战(2)——使用Keras构建神经网络
Keras深度学习实战(2)--使用Keras构建神经网络 0 前言 1. Keras 简介与安装 2. Keras 构建神经网络初体验 3. 训练香草神经网络 3.1 香草神经网络与 MNIST 数 ...
- 人工智能AI:TensorFlow Keras PyTorch MXNet PaddlePaddle 深度学习实战 part1
日萌社 人工智能AI:TensorFlow Keras PyTorch MXNet PaddlePaddle 深度学习实战 part1 人工智能AI:TensorFlow Keras PyTorch ...
- 深度学习实战(六):从零开始实现表情识别
深度学习实战(六):从零开始实现表情识别 1. 项目简介 2. 数据获取 2.1 数据爬取 2.2 数据整理 2.3 数据清洗 2.4 提取嘴唇区域 3. 模型训练 3.1 数据接口准备 3.1.1 ...
- TF2.0深度学习实战(一):分类问题之手写数字识别
前言: 本专栏将分享从零开始搭建神经网络的学习过程,力争打造最易上手的小白教程.在这过程中,我将使用谷歌TensorFlow2 框架逐一复现经典的卷积神经网络:LeNet-5.AlexNet.VGG系 ...
- 《纯干货-6》Stanford University 2017年最新《Tensorflow与深度学习实战》视频课程分享
分享一套Stanford University 在2017年1月份推出的一门Tensorflow与深度学习实战的一门课程.该课程讲解了最新版本的Tensorflow中各种概念.操作和使用方法,并且给出 ...
- 北京大学出版社AI类最畅销的5本书!包括机器学习、深度学习实战、数学基础等...
北大出版社AI类最畅销的5本书 1.机器学习入门:基于数学原理的Python实战 本书深入浅出地对机器学习算法的数学原理进行了严谨的推导:并利用Python 3对各种机器学习算法进行复现,还利用介绍的 ...
- NLP机器翻译深度学习实战课程基础 | 深度应用
作者 | 小宋是呢 来源 | CSDN博客 0.前言 深度学习用的有一年多了,最近开始 NLP 自然处理方面的研发.刚好趁着这个机会写一系列 NLP 机器翻译深度学习实战课程. 本系列课程将从原理讲解 ...
- 深度学习实战—基于TensorFlow 2.0的人工智能开发应用
作者:辛大奇 著 出版社:中国水利水电出版社 品牌:智博尚书 出版时间:2020-10-01 深度学习实战-基于TensorFlow 2.0的人工智能开发应用
最新文章
- 记前端项目首屏加载优化(网络篇)
- Python-函数和代码复用
- 从Python的turtle绘图开始学习图形化程序设计
- gba徽章机器人_徽章战士GBA攻略
- 云服务器镜像麻烦吗_云服务器的镜像功能有什么作用?
- 使用FFmpeg类库实现YUV视频序列编码为视频
- JTable 学习一
- Python数据分析:pandas中Dataframe的groupby与索引
- Facebook F8|闲鱼高级技术专家参会分享
- html音乐播放器怎么有黑边框,播放不能满屏有黑边怎么办,怎么剪切视频黑边,剪切黑边...
- Flash Lite作为S40和S60系列上的特性出现在技术规范中
- 正式版TBSA 6.0(用来分析多层及高层建筑结构的专用程序)
- 人工智能发展历程、机器学习分类、人工智能设计到的数学知识
- iOS之UITableView
- R语言Error in model.frame.default(formula = y ~ ., data = exam.data, drop.unused.levels = TRUE) :
- 空气质量(air quality) 简称:AQI 计算AQI等笔记
- 孩子学习arduino好还是单片机好
- 哪款骨传导耳机好用,好用的骨传导耳机汇总
- 神经网络处理表格数据,神经网络如何识别图像
- 《ASP.NET AJAX 应用剖析立即上手》推荐序!
热门文章
- matlab多项式操作
- cve-2008-4609一把梭
- asp.net控件,服务器标记的格式不正确问题解决方法
- 非组蛋白带什么电荷_非组蛋白是构成真核生物染色体的基本结构蛋白, 富含带正电荷的精氨酸( Arg ) 和赖氨酸( Lys ) 等碱 性氨基酸。_学小易找答案...
- 噩梦遇地震,醒后忆岁月
- skimage.io模块读取图片
- 1943中途岛海战2020年8月22日海龟画图版(原雷电模拟升级版)
- MuMu模拟器开发者文档
- python画素描画_使用Python将图片变成铅笔素描
- 计算机基础为什么要学word,计算机基础中word教学探讨