前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >keras 学习笔记:从头开始构建网络处理 mnist

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

作者头像
用户2434869
发布2018-12-18 17:19:06
4100
发布2018-12-18 17:19:06
举报

全文参考 《 基于 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")
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-11-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档