Squential MNIST识别

import numpy as np
import tensorflow as tf

import tensorflow.keras as keras
import tensorflow.keras.layers as layers
import tensorflow.keras.optimizers as optimizers
import tensorflow.keras.metrics as metrics
import tensorflow.keras.datasets as datasets
from tensorflow.keras import Sequential

import matplotlib.pyplot as plt
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import pandas as pd

#单张图片预处理
def preprocess(x,y):
#修改特征为float32数据类型并归一化
    x=tf.cast(x,tf.float32)
#修改特征形状为[28*28]
    x=tf.reshape(x,[28*28])
#修改标签为int32数据类型
    y=tf.cast(y,tf.int32)
#对标签进行one_hot编码
    y=tf.one_hot(y,depth=10)
    #返回x,y
    return x,y

#加载mnist数据集-tensorflow.keras.datasets.mnist.load_data() 接收训练数据(特征+标签)和测试(验证)数据(特征+标签)
(x,y),(x_val,y_val)=datasets.mnist.load_data()
#查看返回数据的信息-训练集
print('x.shape:',x.shape)
print('x_val.shape:',x_val.shape)
#构建数据集对象-tf.data.Dataset.from_tensor_slice((特征,标签))
db=tf.data.Dataset.from_tensor_slices((x,y))
db_val=tf.data.Dataset.from_tensor_slices((x_val,y_val))
#从训练集中划分0.2的验证集
#预处理数据集对象(训练集和验证集合)-图片预处理+随机打散+分批训练
db=db.map(preprocess).shuffle(100).batch(128)
#验证数据集不需要打散
db_val=db_val.map(preprocess).batch(128)
#从训练集中取出一个batch的数据
sample=next(iter(db))
#构建网络模型-用Sequential实现-5层全连接
network=Sequential([
    layers.Dense(256,activation='relu'),
    layers.Dense(128,activation='relu'),
    layers.Dense(64,activation='relu'),
    layers.Dense(32,activation='relu'),
    layers.Dense(10)
])
#为模型装配工具-优化器+损失函数+测量指标
network.compile(optimizer=optimizers.Adam(0.01),loss=keras.losses.CategoricalCrossentropy(from_logits=True),
                metrics=['accuracy'])
#训练模型
network.fit(db,epochs=3,validation_data=db_val,validation_freq=2)
# #验证模型
network.evaluate(db_val)
#从验证集中取出一个batch的数据
sample=next(iter(db_val))
# print('sample...',sample)
#构建真实特征值-取迭代对象sample的第一个张量(是特征)
x=sample[0]
#构建真实标签值-取迭代对象sample的第二个张量(是标签)
y=sample[1]
#从真实标签值的One_hot编码中恢复类别
y=tf.argmax(y,axis=1)
#预测
pred=network.predict(x)
#从输出概率分布中输出类别
pred=tf.argmax(pred,axis=1)
#手动计算准确率
num=tf.where(y==pred)
num=len(num)
acc=num/128.0
print('预测值:',pred)
print('真实值:',y)
print('acc:',acc)




控制台输出结果:

Epoch 1/3
  1/469 [..............................] - ETA: 8:00 - loss: 46.0076 - accuracy: 0.09382023-07-09 19:42:49.720281: I tensorflow/stream_executor/cuda/cuda_blas.cc:1760] TensorFloat-32 will be used for the matrix multiplication. This will only be logged once.
469/469 [==============================] - 2s 3ms/step - loss: 3.5548 - accuracy: 0.8044
Epoch 2/3
469/469 [==============================] - 2s 3ms/step - loss: 0.2856 - accuracy: 0.9236 - val_loss: 0.2627 - val_accuracy: 0.9266
Epoch 3/3
469/469 [==============================] - 1s 3ms/step - loss: 0.2176 - accuracy: 0.9392
79/79 [==============================] - 0s 2ms/step - loss: 0.2149 - accuracy: 0.9415
预测值: tf.Tensor(
[7 2 1 0 4 1 4 9 8 9 0 6 9 0 1 5 9 7 3 4 9 6 6 5 4 0 7 4 0 1 3 1 3 4 7 2 7
 1 3 1 1 7 4 2 3 5 1 2 4 4 6 3 5 5 6 0 4 1 9 5 7 8 9 3 7 4 0 4 3 0 7 0 2 8
 1 7 3 2 8 7 7 6 2 7 8 4 7 3 6 1 3 6 9 3 1 4 1 7 6 9 6 0 5 4 9 9 2 1 9 4 8
 7 3 9 7 4 4 4 9 2 5 4 7 6 4 9 0 5], shape=(128,), dtype=int64)
真实值: tf.Tensor(
[7 2 1 0 4 1 4 9 5 9 0 6 9 0 1 5 9 7 3 4 9 6 6 5 4 0 7 4 0 1 3 1 3 4 7 2 7
 1 2 1 1 7 4 2 3 5 1 2 4 4 6 3 5 5 6 0 4 1 9 5 7 8 9 3 7 4 6 4 3 0 7 0 2 9
 1 7 3 2 9 7 7 6 2 7 8 4 7 3 6 1 3 6 9 3 1 4 1 7 6 9 6 0 5 4 9 9 2 1 9 4 8
 7 3 9 7 4 4 4 9 2 5 4 7 6 7 9 0 5], shape=(128,), dtype=int64)
acc: 0.953125

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值