keras 学习笔记:从头开始构建网络处理 mnist

全文参考 《 基于 python 的深度学习实战》

import numpy as np
from keras.datasets import mnist

from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers.convolutional import Conv2D, MaxPooling2D

(x_train, y_train), (x_test, y_test) = mnist.load_data()

print(x_train[0].shape)
print(y_train)

########################### x 处理 ##################################
# 将训练集合中的数字变成标准的四维张量形式(样本数量、长、宽、深(灰度图 1))
# 并将像素值变成浮点格式
width = 28
height = 28
depth = 1 
x_train = x_train.reshape(x_train.shape[0], width, height, depth).astype('float32')
x_test = x_test.reshape(x_test.shape[0], width, height, depth).astype('float32')

# 归一化处理,将像素值控制在 0 - 1
x_train /= 255
x_test /= 255
classes = 10

####################### y 处理 #######################################
# one host 编码
def tran_y(y):
    y_ohe = np.zeros(10)
    y_ohe[y] = 1
    return y_ohe

# 标签将 one-hot 编码重排
y_train_ohe = np.array([tran_y(y_train[i]) for i in range(len(y_train))])
y_test_ohe = np.array([tran_y(y_train[i]) for i in range(len(y_test))])

###################### 搭建卷积神经网络 ###############################
model = Sequential()
# 添加卷积层,构造 64 个过滤器,过滤器范围 3x3x1, 过滤器步长为 1, 图像四周补一圈 0, 并用 relu 非线性变换
model.add(Conv2D(filters=64, kernel_size=(3,3), strides=(1,1), padding='same', input_shape=(width, height, 1), activation='relu'))
# 添加 Max_Pooling , 2 x 2 取最大值
model.add(MaxPooling2D(pool_size=(2, 2)))
# 设立 Dropout , 将概率设为 0.5
model.add(Dropout(0.5))

#重复构造, 搭建神经网络
model.add(Conv2D(128, kernel_size=(3, 3), strides=(1,1), padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(256, kernel_size=(3,3), strides=(1, 1), padding='same', activation='relu'))
model.add((MaxPooling2D(pool_size=(2, 2))))
model.add(Dropout(0.5))

# 将当前节点展平, 构造全连神经网络
model.add(Flatten())

# 构造全连接神经网络
model.add(Dense(128, activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dense(32, activation='reul'))
model.add(Dense(classes, activation='softmax'))

################################ 编译模型 ##########################
# 一般,分类问题的损失函数才有交叉熵 (Cross Entropy)
model.compile(loss='categorical_crossentropy', optimizer='adagrad', metrics=['accuracy'])

######################### 训练模型 ################################
model.fit(x_train, y_train_ohe, validation_data=(x_test, y_test_ohe), epochs=20, batch_size=128)

######################## 评价模型 ################################
scores = model.evaluate(x_test, y_test_ohe, verbose=0)

######################## 保持模型与权重 ################################
# 保持整个模型(包括结构、权重)
model.save("mnist_model.h5")

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI-Master

TensorFlow实现XOR

tf.train.GradientDescentOptimizer是实现梯度下降算法的优化器。

1081
来自专栏数据科学学习手札

(数据科学学习手札44)在Keras中训练多层感知机

  Keras是有着自主的一套前端控制语法,后端基于tensorflow和theano的深度学习框架,因为其搭建神经网络简单快捷明了的语法风格,可以帮助使用者更...

2086
来自专栏Brian

深度学习笔记-深层神经网络

---- 深层神经网络符号表示 我们先来看一下深层神经网络的结构, ? 我们先表示一下符号: 用L=n表示一个n层的神经网络。 image.png 核对矩阵...

3423
来自专栏大数据挖掘DT机器学习

百度魅族深度学习大赛初赛冠军作品(图像识别.源码)

赛题以识别类似手写体的四则运算式为主题,参赛者需要在充满干扰信息的10万张图片中,设计算法识别图片上数学运算式并计算结果。决赛在初赛的基础上,引入分数和更加复杂...

5616
来自专栏杨熹的专栏

机器学习算法应用中常用技巧-2

7. 降维-PCA n_components为降到多少维,用原数据fit后,再用transform转换成降维后的数据。 from sklearn.decompo...

3744
来自专栏小鹏的专栏

机器学习算法应用中常用技巧-2

7. 降维-PCA n_components为降到多少维,用原数据fit后,再用transform转换成降维后的数据。 from sklearn.decom...

19510
来自专栏素质云笔记

python︱sklearn一些小技巧的记录(pipeline...)

sklearn里面包含内容太多,所以一些实用小技巧还是挺好用的。 1、LabelEncoder 简单来说 LabelEncoder 是对不连续的数字或者文本进行...

1.8K8
来自专栏素质云笔记

SELU︱在keras、tensorflow中使用SELU激活函数

arXiv 上公开的一篇 NIPS 投稿论文《Self-Normalizing Neural Networks》引起了圈内极大的关注,它提出了缩放指数型线性单...

6018
来自专栏AI研习社

一文教你如何用神经网络识别验证码!

AI 研习社按:本文作者 Slyne_D,原载于作者个人博客,雷锋网 AI 研习社已获授权。文中相关链接详见文末“阅读原文”。 这是去年博主心血来潮实现的一个小...

3013
来自专栏小鹏的专栏

03 Linear Regression

Introduction:         线性回归可能是统计学,机器学习和科学中最重要的算法之一。 它是最常用的算法之一,了解如何实现它和其各种avors是非...

4388

扫码关注云+社区

领取腾讯云代金券