一、步骤:

  1. 导入模块以及读取数据

  2. 数据预处理

  3. 构建模型

  4. 编译模型

  5. 训练模型

  6. 测试

二、代码:

  1. 导入模块以及读取数据

#导包
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的更多相关文章

  1. 莫烦大大keras学习Mnist识别(4)-----RNN

    一.步骤: 导入包以及读取数据 设置参数 数据预处理 构建模型 编译模型 训练以及测试模型 二.代码: 1.导入包以及读取数据 #导入包 import numpy as np np.random.se ...

  2. 莫烦大大keras的Mnist手写识别(5)----自编码

    一.步骤: 导入包和读取数据 数据预处理 编码层和解码层的建立 + 构建模型 编译模型 训练模型 测试模型[只用编码层来画图] 二.代码: 1.导入包和读取数据 #导入相关的包 import nump ...

  3. 莫烦大大TensorFlow学习笔记(9)----可视化

      一.Matplotlib[结果可视化] #import os #os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' import tensorflow as tf i ...

  4. 莫烦python教程学习笔记——总结篇

    一.机器学习算法分类: 监督学习:提供数据和数据分类标签.--分类.回归 非监督学习:只提供数据,不提供标签. 半监督学习 强化学习:尝试各种手段,自己去适应环境和规则.总结经验利用反馈,不断提高算法 ...

  5. 莫烦大大TensorFlow学习笔记(8)----优化器

    一.TensorFlow中的优化器 tf.train.GradientDescentOptimizer:梯度下降算法 tf.train.AdadeltaOptimizer tf.train.Adagr ...

  6. 莫烦python教程学习笔记——保存模型、加载模型的两种方法

    # View more python tutorials on my Youtube and Youku channel!!! # Youtube video tutorial: https://ww ...

  7. 莫烦python教程学习笔记——validation_curve用于调参

    # View more python learning tutorial on my Youtube and Youku channel!!! # Youtube video tutorial: ht ...

  8. 莫烦python教程学习笔记——learn_curve曲线用于过拟合问题

    # View more python learning tutorial on my Youtube and Youku channel!!! # Youtube video tutorial: ht ...

  9. 莫烦python教程学习笔记——利用交叉验证计算模型得分、选择模型参数

    # View more python learning tutorial on my Youtube and Youku channel!!! # Youtube video tutorial: ht ...

随机推荐

  1. oracle 12c之前用sequence 和 trigger来生成自动增长的列

    SQL> create table scott.t1 (id number, val varchar2(8)); Table created. SQL> CREATE SEQUENCE s ...

  2. java.net.MalformedURLException: unknown protocol: c 这个错一般有两种原因导致: 1、URL协议、格式或者路径错误,

    java.net.MalformedURLException: unknown protocol: c这个错一般有两种原因导致:1.URL协议.格式或者路径错误, 好好检查下你程序中的代码如果是路径问 ...

  3. Git 主要的工作流程

    Git使用个进制字符的SHA- Hash来唯一标识对象 如:e98757d0598ab6eeaf1df0d87dd00826048bd80b git 有种对象 1.blob 表示文本文件,二进制文件或 ...

  4. PPAPI插件的全屏切换处理

    有时你会想让PPAPI插件全屏(比方播放视频时),这次来看看怎么做. PPAPI和CEF App两側都要处理. foruok原创,转载请注明出处.欢迎关注foruok的订阅号"程序视界&qu ...

  5. AppFuse 3常见问题与解决方法

    非常长一段时间没做SSH项目了.近期抽出时间看了一下升级到3.x的appfuse,对新版本号使用过程中出现的一些问题进行了排查.汇总例如以下.以备后用.本文原文出处: http://blog.csdn ...

  6. Android开发趣事记之周期性广告

    前些天做了一个应用,由于怕影响用户体验,所以我将广告设定了一下,就是每启动软件8次.就会弹出一次广告. 在上传到应用宝后.竟然得到了这种结果: 看到了吧.无病毒,无广告. 看来审核人员是不会把应用连续 ...

  7. HDU 3656 二分+dlx判定

    Fire station Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  8. HDU3183 RMQ/贪心

    A Magic Lamp Problem Description Kiki likes traveling. One day she finds a magic lamp, unfortunately ...

  9. Openstack能解决这些问题吗?请各位大侠一起来讨论

    1.10万规模的虚拟机,每一个虚拟机能够在不论什么一个计算节点上启动,该怎样做?计算,存储,网络都是怎么拉通与配合的? 2.用户怎样自己定义业务网络,怎样解决网络不够用的情况?正常就4096个vlan ...

  10. clone的rails目录下命令无效问题

    异常坑爹,在公司克隆自己的项目.然后在项目目录下rails s还有一大堆命令无效,提示 Usage: rails new APP_PATH [options]   找了半天总算找到解决办法了,在项目目 ...