Keras搭建序贯式模型

学习Keras搭建序贯式模型,并学习使用MNIST手写数字识别例子

from tensorflow.keras import layers, models

# 创建一个序贯式模型对象
model = models.Sequential()

# 添加第一个网络层(作为输入层)
# 参数1:本层神经元个数,2:激活函数类型,3:输入样本的形状
model.add(layers.Dense(512, activation='relu', input_shape=(28*28,)))

# 添加第二个网络层(作为输出层)
# 参数1:输出个数,2:激活函数类型
model.add(layers.Dense(10, activation='softmax'))

# 输出模型的概览
model.summary()

使用MNIST手写数字识别例子,MNIST是经典的手写数字图片数据集,下载地址:https://s3.amazonaws.com/img-datasets/mnist.npz,下载后存放于python代码的目录下

from tensorflow.keras import datasets

# 1.加载MNIST数据集

# 加载数据集
(X_train, y_train),(X_test, y_test)=datasets.mnist.load_data()

# 查看拆分结果
print(X_train.shape, y_train.shape)
print(X_test.shape, y_test.shape)

# 2.使用Matplotlib查看图片
import matplotlib.pyplot as plt

# 查看训练集前10张图片
fig = plt.figure(figsize=(12,4))   #定义画板
for i in range(10):
  ax = fig.add_subplot(2,5, i+1)
  ax.matshow(X_train[i])
plt.show()

# 3.数据预处理,搭建前馈神经网络
#搭建序贯式模型,第一个网络层作为输入层,使用512个神经元(可以自定义),第二个网络层作为输出层,使用10个神经元(对应10个类别),激活函数使用softmax
from tensorflow.keras import layers, models

# 转换数据集的形状,(转成二维)
X_train = X_train.reshape(60000, 28*28)
X_test = X_test.reshape(10000, 28*28)
print(X_train.shape)

# 创建一个序贯式模型对象
model = models.Sequential()

# 添加第一个网络层(作为输入层)
# 参数1:本层神经元个数,2:激活函数类型,3:输入样本的形状
model.add(layers.Dense(512, activation='relu', input_shape=(28*28,)))

# 添加第二个网络层(作为输出层)
model.add(layers.Dense(10, activation='softmax'))

# 输出模型的概览
model.summary()

# 4.编译、训练模型,评估准确率
# 编译参数包括优化器、损失函数、评价指标
# 编译模型
model.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy',metrics=['accuracy'])

# 训练模型
# 训练参数包括:训练集数据、训练集标签、训练迭代次数、批尺寸
model.fit(X_train, y_train, epochs = 5, batch_size = 128)

# 在测试集上评估模型
# 评估参数包括:测试集数据、测试集标签
test_loss,test_acc = model.evaluate(X_test, y_test)
print(test_acc)

# 5.使用模型识别手写数字图片
import numpy as np
index = 9

plt.matshow(X_test[index].reshape(28,28)) # 查看图片
plt.show()

# 使用模型识别该图片
result = model.predict(X_test[index].reshape(-1,28*28))
print(np.around(result))
print(np.argmax(result))

# 保存模型
# 策略一:保存全模型(网络结构+权重+编译配置)
# model.save('mnist_model.h5')
# model = models.load_model('mnist_model.h5')
# 策略二:仅保存权重
# model.save_weights('mnist_weight_model.h5')
# model.load_weights('mnist_weight_model.h5')
# 策略三:仅保存网络结构
# json_string = model.to_json()
# with open('mnist_model_json.json', 'w') as f:
#   f.write(json_string)
# with open('mnist_model_json.json', 'r') as f:
#   json_string = f.read()
# model = models.model_from_json(json_string)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值