莫烦大大keras学习Mnist识别(3)-----CNN
一、步骤:
导入模块以及读取数据
数据预处理
构建模型
编译模型
训练模型
测试
二、代码:
导入模块以及读取数据
#导包
import numpy as np
np.random.seed(1337)
# from keras.datasets import mnist
from keras.utils import np_utils # 主要采用这个模块下的to_categorical函数,将该函数转成one_hot向量
from keras.models import Sequential #keras的模型模块
from keras.layers import Dense , Activation , Convolution2D, MaxPooling2D, Flatten #keras的层模块
from keras.optimizers import Adam #keras的优化器 #读取数据,因为本地已经下载好数据在绝对路径:E:\jupyter\TensorFlow\MNIST_data下,直接采用TensorFlow来读取
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('E:\jupyter\TensorFlow\MNIST_data',one_hot = True) X_train = mnist.train.images
Y_train = mnist.train.labels
X_test = mnist.test.images
Y_test = mnist.test.labels
2、数据预处理
x原本的shape为(55000,784),55000表示样本数量,784表示一个图像样本拉成一个向量的大小,故要将其转成28*28这种长×宽的形式。(-1,1,28,28)中的-1是之后batch_size的大小,即一次取batch大小的样本来训练,1,28,28表示高为1,长为28,宽为28。
#数据预处理
X_train = X_train.reshape(-1,1,28,28)
X_test = X_test.reshape(-1,1,28,28)
y_train = np_utils.to_categorical(Y_train,num_classes = 10)#to_categorical将标签转化成ont-hot
y_test = np_utils.to_categorical(Y_test,num_classes = 10)
3、构建模型
2个卷积层【包括卷积+激活relu+最大池化】+2个全连接层
#模型构建
model = Sequential() #建立一个序列模型 #在这个模型首层添加一个卷积层,一个卷积过滤器大小为5*5,32个过滤器,采用的padding模式是same,即通过补0使输入输出大小一下。首层要加一个输入大小(1,28,28)
model.add(Convolution2D(
nb_filter = 32,
nb_row = 5,
nb_col = 5,
border_mode = 'same',
input_shape = (1,28,28)
)) #接着加一个激活层
model.add(Activation('relu')) #接着加一个最大池化层,pool大小为(2,2),strides步长长移动2,宽移动2。padding采用same模式
model.add(MaxPooling2D(
pool_size = (2,2),
strides = (2,2),
border_mode = 'same',
)) #卷积层2
model.add(Convolution2D(64,5,5,border_mode = 'same')) #激活层2
model.add(Activation('relu')) #池化层2
model.add(MaxPooling2D(pool_size = (2,2),border_mode = 'same')) #进行全连接之前将矩阵展开成一个长向量
model.add(Flatten()) #全连接层1,大小有1024个参数
model.add(Dense(1024)) #激活层
model.add(Activation('relu')) #全连接层2,大小为10
model.add(Dense(10)) #输出层加一个softmax处理
model.add(Activation('softmax'))
4、编译模型:model.compile
采用model.compile来编译,函数内参数说明优化器optimizer、损失函数loss、评价标准metrics。
#编译模型
adam = Adam(lr = 1e-4)
model.compile(optimizer=adam,
loss = 'categorical_crossentropy',
metrics = ['accuracy'])
5、训练模型:model.fit
类似sklearn中的形式
model.fit(X_train,Y_train,nb_epoch = 20,batch_size = 32)
6、测试:model.evaluate
输出测试的损失和准确度
loss , acc = model.evaluate(X_test,y_test)
莫烦大大keras学习Mnist识别(3)-----CNN的更多相关文章
- 莫烦大大keras学习Mnist识别(4)-----RNN
一.步骤: 导入包以及读取数据 设置参数 数据预处理 构建模型 编译模型 训练以及测试模型 二.代码: 1.导入包以及读取数据 #导入包 import numpy as np np.random.se ...
- 莫烦大大keras的Mnist手写识别(5)----自编码
一.步骤: 导入包和读取数据 数据预处理 编码层和解码层的建立 + 构建模型 编译模型 训练模型 测试模型[只用编码层来画图] 二.代码: 1.导入包和读取数据 #导入相关的包 import nump ...
- 莫烦大大TensorFlow学习笔记(9)----可视化
一.Matplotlib[结果可视化] #import os #os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' import tensorflow as tf i ...
- 莫烦python教程学习笔记——总结篇
一.机器学习算法分类: 监督学习:提供数据和数据分类标签.--分类.回归 非监督学习:只提供数据,不提供标签. 半监督学习 强化学习:尝试各种手段,自己去适应环境和规则.总结经验利用反馈,不断提高算法 ...
- 莫烦大大TensorFlow学习笔记(8)----优化器
一.TensorFlow中的优化器 tf.train.GradientDescentOptimizer:梯度下降算法 tf.train.AdadeltaOptimizer tf.train.Adagr ...
- 莫烦python教程学习笔记——保存模型、加载模型的两种方法
# View more python tutorials on my Youtube and Youku channel!!! # Youtube video tutorial: https://ww ...
- 莫烦python教程学习笔记——validation_curve用于调参
# View more python learning tutorial on my Youtube and Youku channel!!! # Youtube video tutorial: ht ...
- 莫烦python教程学习笔记——learn_curve曲线用于过拟合问题
# View more python learning tutorial on my Youtube and Youku channel!!! # Youtube video tutorial: ht ...
- 莫烦python教程学习笔记——利用交叉验证计算模型得分、选择模型参数
# View more python learning tutorial on my Youtube and Youku channel!!! # Youtube video tutorial: ht ...
随机推荐
- 淘宝信海龙 --PHP系统
https://yq.aliyun.com/users/1467229535950742?spm=5176.100239.blogrightarea56002.3.RoToxZ
- Java 递归、尾递归、非递归、栈 处理 三角数问题
import java.io.BufferedReader; import java.io.InputStreamReader; //1,3,6,10,15...n 三角数 /* * # 1 * ## ...
- 被AppStore拒绝理由(一)
July 8, 2015 at 7:06 AM 发件人 Apple 17.1 - Apps cannot transmit data about a user without obtaining th ...
- Wscript对象具体解释
15.6 Windows脚本宿主的内建对象 每一个编程环境都提供了自己的对象模型,开发者 能够使用这些对象模型实现各种解决方式,WSH也不例外.WSH包括了一组核心对象,分别包括了属性和方法,能够用 ...
- Jemeter命令执行
http://mp.weixin.qq.com/s?__biz=MzAxOTg2NDUyOA==&mid=2657555034&idx=1&sn=9e6a3fbd5eed859 ...
- 基于ArcGIS Flex API实现动态标绘(1.1)
动态标绘API 1.1版本号.相较前一版本号1.0(点击进入).该版本号提供标绘符号的编辑功能. 编辑功能包含两种编辑状态:编辑控制点.对标绘符号进行旋转.八方向拉伸.平移. 编辑控制点例如以下图所看 ...
- luogu2152 [SDOI2009]SuperGCD
要你求两个非常大的数字的GCD. 不要想复杂,用高精度整更相减损术即可. #include <cstdio> #include <cstring> #include <a ...
- luogu2278 [HNOI2003]操作系统
题目大意 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自然数表示,数字越大,则优先级越高.如果一个进程到达的时候 ...
- python pickle to json
ref: https://gist.github.com/Samurais/567ebca0f59c612eb977065008aad867 ''' Convert a pkl file into j ...
- poj3926
dp+优化 很明显可以用单调队列优化. 记录下自己犯的sb错误: 数组开小,sum没搞清... #include<cstdio> #include<cstring> usin ...