5.0 使用Sequential模型实现手写数字的识别

1.keras的minist中有6万条训练集以及1万条测试集。其中每条都是28x28的手写数字。下图所示。可以使用如下的神经元结构进行训练识别。

Sequential模型,使用时的步骤如下:

a.建立模型:

Model = tf.keras.Sequential()

model.add()

b.查看摘要 model.summary()

c.配置训练方法;model.complile()

d.训练模型:model.fit()

e.使用模型:model.predict.

2.代码

import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np

mist = tf.keras.datasets.mnist
(train_x,train_y),(test_x,test_y)=mist.load_data()

X_train=tf.cast(train_x/255.0,tf.float32)
X_test = tf.cast(test_x/255.0, tf.float32)
y_train =tf.cast(train_y,tf.int16)
y_test = tf.cast(test_y,tf.int16)

#1.建立模型
model=tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))
model.add(tf.keras.layers.Dense(128,activation='relu'))
model.add(tf.keras.layers.Dense(10,activation='softmax'))
#2.查看
model.summary()
#3.配置训练方法
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',
              metrics=['sparse_categorical_accuracy'])
#4.训练
model.fit(X_train,y_train,batch_size=64,epochs=5,validation_split=0.2)
#评估
model.evaluate(X_test,y_test,verbose=2)

#5.应用
y_pred = np.argmax(model.predict(X_test[0:4]),axis=1)
for i in range(4):
    plt.subplot(1,4,i+1)
    plt.axis('off')
    plt.imshow(test_x[i],cmap='gray')
    plt.title("y="+str(test_y[i])+"\n y_pred:"+str(y_pred[i]))
plt.show()

summary输出的内容如下:显示有101770个参数。

3.如果需要保存所有模型以及参数。

可以使用model.save来保存模型以及参数。比如
model.save("testmodel.h5")

使用时如下文所示,这样就不需要搭建模型以及训练了。

model = tf.keras.models.load_model("testmodel.h5")

【备注】

Metrics可选:

        'acuracy', 则y_和y都是数值,y_=[1], y=1

        'categorical_accuracy':则y_和y都是独热码(概率分布),y_=[0,1,0]之类

        'sparse_categorical_accuracy':则y_是数值(标准),y都是独热码(概率分布)-计算结果

【附录2】解决keras.datasets 在loaddata时,无法下载的问题

或者将下载好的imdb.npz文件放在主目录下的 .keras/datasets文件夹下

C:\Users\Administrator\.keras\datasets

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_34047402

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值