栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

MNIST手写数字识别——进阶多层神经网络与应用(使用Keras序列模型建模)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MNIST手写数字识别——进阶多层神经网络与应用(使用Keras序列模型建模)

前言 Keras序列模型建模的一般步骤: (1)创建一个Sequential模型; (2)根据需要,通过“add()”方法在模型中添加所需要的神经网络层, 完成模型构建; (3)编译模型,通过“compile()”定义模型的训练模式; (4)训练模型,通过“fit()”方法进行训练模型; (5)评估模型,通过“evaluate()”进行模型评估; (6)应用模型,通过“predict()”进行模型预测 1、载入数据
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

print("Tensorflow版本是:",tf.__version__)

mnist = tf.keras.datasets.mnist
(train_images,train_labels),(test_images,test_labels)=mnist.load_data()

2、 特征数据归一化
train_images = train_images / 255.0
test_images = test_images / 255.0
3、标签数据独热编码
train_labels_ohe = tf.one_hot(train_labels,depth=10).numpy()

test_labels_ohe = tf.one_hot(test_labels,depth=10).numpy()
4、新建一个序列模型

5、添加输入层 (平坦层,Flatten)

6、添加隐藏层(密集层,Dense)
model.add(tf.keras.layers.Dense(units=64,
                               kernel_initializer='normal',
                               activation='relu'))

model.add(tf.keras.layers.Dense(units=32,
                               kernel_initializer='normal',
                               activation='relu'))
7、添加输出层(还是密集层)
model.add(tf.keras.layers.Dense(10,activation='softmax'))
8、模型摘要
model.summary()
9、定义训练模式
model.compile(optimizer='adam',
             loss='categorical_crossentropy',
             metrics=['accuracy'])
tf.keras.Model.compile 接受 3 个重要的参数: optimizer :优化器,可从 tf.keras.optimizers 中选择; loss :损失函数,可从 tf.keras.losses 中选择; metrics :评估指标,可从 tf.keras.metrics 中选择。
10、设置训练参数
train_epochs=10
batch_size=30
11、模型训练
train_history=model.fit(train_images,train_labels_ohe,
                        validation_split=0.2,
                        epochs=train_epochs,
                        batch_size=batch_size,
                        verbose=2)
tf.keras.Model.fit()常见参数: x :训练数据; y :目标数据(数据标签); epochs :将训练数据迭代多少遍; batch_size :批次的大小; validation_data :验证数据,可用于在训练过程中监控模型的性能。 verbose:训练过程的日志信息显示,0为不在标准输出流输出日志信息,1为输出进度条记录,2为每个epoch输出一行记录
12、训练过程指标数据
train_history.history
        history是一个字典类型数据,包含了4个Key: loss、accuracy、val_loss和val_accuracy,分 别表示训练集上的损失、准确率和验证集上的损 失和准确率。 它们的值都是一个列表,记录了每个周期该指标 的具体数值。 13、训练过程指标可视化
import matplotlib.pyplot as plt
def show_train_history(train_history,train_metric,val_metric):
    plt.plot(train_history.history[train_metric])
    plt.plot(train_history.history[val_metric])
    plt.title('Train History')
    plt.ylabel(train_metric)
    plt.xlabel('Epoch')
    plt.legend(['train','validation'],loc='upper left')
    plt.show()

show_train_history(train_history,'loss','val_loss')

show_train_history(train_history,'accuracy','val_accuracy')
14、评估模型
test_loss,test_acc=model.evaluate(test_images,test_labels_ohe,verbose=2)

15、模型的度量指标
yy=model.evaluate(test_images,test_labels_ohe,verbose=2)

yy

model.metrics_names
      模型评估evaluate()的返回值是一个损失值的标量(如果没有指定其他度量指标), 或者是一个列表(如果指定了其他度量指标)。 16、应用模型
test_pred=model.predict(test_images)
test_pred.shape
np.argmax(test_pred[0])
test_pred=model.predict_classes(test_images)
test_pred[0]
test_labels[0]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/853904.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号