import tensorflow as tf
# 载入数据集
mnist = tf.keras.datasets.mnist
# 训练集数据 x_train 的数据形状为(60000,28,28)
# 训练集标签 y_train 的数据形状为(60000)
# 测试集数据 x_test 的数据形状为(10000,28,28)
# 测试集标签 y_test 的数据形状为(10000)
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 对训练集和测试集的数据进行归一化处理
x_train, x_test = x_train / 255.0, x_test / 255.0
# 把训练集和测试集的标签转为独热编码
# tf.keras.utils.to_categorical
y_train = tf.keras.utils.to_categorical(y_train,num_classes=10)
y_test = tf.keras.utils.to_categorical(y_test,num_classes=10)
# 创建 <<dataset 对象>>,使用 dataset 对象来管理数据
mnist_train = tf.data.Dataset.from_tensor_slices((x_train, y_train))
# 训练周期设置为 1(把所有训练集数据训练一次称为训练一个周期)
mnist_train = mnist_train.repeat(1)
# 批次大小设置为 32(每次训练模型传入 32 个数据进行训练)
mnist_train = mnist_train.batch(32)
# 创建 dataset 对象,使用 dataset 对象来管理数据
mnist_test = tf.data.Dataset.from_tensor_slices((x_test, y_test))
# 训练周期设置为 1(把所有训练集数据训练一次称为训练一个周期)
mnist_test = mnist_test.repeat(1)
# 批次大小设置为 32(每次训练模型传入 32 个数据进行训练)
mnist_test = mnist_test.batch(32)
/*
开发不易,整理也不易,如需要详细的说明文档和程序,以及完整的数据集,训练好的模型,或者进一步开发,
可加作者新联系方式咨询,WX:Q3101759565,QQ:3101759565
*/
# 计算平均值
test_loss = tf.keras.metrics.Mean(name='test_loss')
# 测试准确率计算
test_accuracy = tf.keras.metrics.CategoricalAccuracy(name='test_accuracy')
# @tf.function 装饰器来将 python 代码转成 tensorflow 的图表示代码,用于加速
# 代码运行速度
@tf.function
def train_step(data, label):
with tf.GradientTape() as tape:
# predictions: dim: 10
predictions = model(data)
# label 需要转换为10 dims
loss = tf.keras.losses.MSE(label, predictions)
# 传入 loss 和模型参数,计算权值调整
gradients = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(gradients, model.trainable_variables))
train_loss(loss)
train_accuracy(label, predictions)
@tf.function
def test_step(data, label):
predictions = model(data)
t_loss = tf.keras.losses.MSE(label, predictions)
test_loss(t_loss)
test_accuracy(label, predictions)
# 训练 10 个周期(把所有训练集数据训练一次称为训练一个周期)
EPOCHS = 10
for epoch in range(EPOCHS):
# mnist_train: dataset 对象 (x_train, y_train)
# y_train: one-hot coding
# mnist_train = mnist_train.repeat(1)
# mnist_train = mnist_train.batch(32)
for image, label in mnist_train:
# 执行训练集循环 60000/32=1875 次 完成一个周期的训练
# 每次是一个batch的数据 也就是32
train_step(image, label)
# mnist_test dataset对象
# 运行1次 1个batch
for test_image, test_label in mnist_test:
test_step(test_image, test_label)
# 打印结果
template = 'Epoch {}, Loss: {:.3}, Accuracy: {:.3}, Test Loss: {:.3}, Test Accuracy: {:.3}'
#
print(template.format(epoch + 1,
train_loss.result(),
train_accuracy.result(),
test_loss.result(),
test_accuracy.result()))
基于深度学习人工神经网络的数字识别功能实现
需积分: 5 196 浏览量
2024-03-17
16:12:12
上传
评论
收藏 2KB ZIP 举报
迪哥_AI_人工智能
- 粉丝: 655
- 资源: 187
最新资源
- 基于C#和NET MAUI开发的音乐播放器+源代码+文档说明+sln.zip
- 基于python+flask+mysql实现的豆瓣电影可视化系统+源代码+文档说明+数据库sql.zip
- 程氏舞曲V4.2程氏舞曲V4.2程氏舞曲V4.2程氏舞曲V4.2
- FPGA读写 AD9708+ AD9280 ADDA实验Verilog逻辑源码Quartus工程文件+文档说明+硬件参考原理图
- 基于CH340C设计USB转TLL串口通信模块PADS 9.5设计硬件(原理图+PCB)文件.zip
- 信号与系统大作业-图像处理 实现了直接滤波法维纳滤波法最小二乘滤波法LR递归法matlab源码.zip
- php-leetcode题解之最小栈.zip
- php-leetcode题解之最长不含重复字符的子字符串.zip
- php-leetcode题解之最长公共前缀.zip
- php-leetcode题解之最小差值.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈