使用传统全连接神经网络训练minist数据集(一)

"""
使用全连接神经网络训练minist数据集
"""

# 导入模块
import tensorflow as tf
from tensorflow.keras.utils import to_categorical
from tensorflow.keras import models, layers, regularizers
from tensorflow.keras.optimizers import RMSprop
from tensorflow.keras.datasets import mnist
import matplotlib.pyplot as plt
import cv2

"""
一、认识minist数据集
"""
# 加载数据集
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
# print(train_images.shape, test_images.shape)  # 打印训练集的数据和大小
# print("train_images:\n", train_images[0])  # 打印训练集第0组图像
# print("test_images:\n", test_images[0])  # 打印测试集第0组图像
# cv2.imshow('train_images[0]:', train_images[0])  # 以OpenCV中的imshow方式显示训练集第0组图像
# cv2.waitKey(0)
# cv2.destroyWindow()
# plt.imshow(train_images[0])  # 显示训练集第0组图像
# plt.show()

# 将图片由二维铺展成为一维
train_images = train_images.reshape(60000, 28 * 28).astype('float')
test_images = test_images.reshape(10000, 28 * 28).astype('float')
train_labels = to_categorical(train_labels)  # 将训练集标签转换为独热编码
test_labels = to_categorical(test_labels)  # 将测试集标签转换为独热编码
# print("train_images_shape_to_categorical:", train_labels[0])
# print("test_images_shape_to_categorical:", test_labels[0])

"""
二、搭建一个神经网络
"""
network = models.Sequential()  # Sequential表示按层顺序构建网络
# Dense表示全连接层
network.add(layers.Dense(units=128, activation='relu', input_shape=(28 * 28,),
                         kernel_regularizer=regularizers.l1(0.0001)))  # 轻微过拟合用较小的值,过度过拟合用较大的值
network.add(layers.Dropout(0.01))
network.add(layers.Dense(units=32, activation='relu',
                         kernel_regularizer=regularizers.l1(0.0001)))  # 一般都用10^-n(0.0001,0.001,0.01,0.1等)
network.add(layers.Dropout(0.01))
network.add(layers.Dense(units=10, activation='softmax'))
# print(network.summary())

"""
三、神经网络的训练

1.编译:确定优化器和损失函数等
2.训练网络:确定训练的数据、训练的轮数和每次训练的样本数等
"""
# 编译步骤
network.compile(optimizer=RMSprop(lr=0.001), loss='categorical_crossentropy', metrics=['accuracy'])
# 训练网络,用fit函数,epochs表示训练多少个回合,batch_size表示每次训练给多大的数据,
# verbose=2表示每个epoch都在控制台输出一行记录,verbose=1表示为输出进度条记录(默认为1)
network.fit(train_images, train_labels, epochs=20, batch_size=128, verbose=2)

"""
四、用训练好的模型进行预测,并在测试集上做出评价
"""
# 在测试集上测试一下模型的性能
y_pre = network.predict(test_images[:5])  # 在测试集上测试前五张图片
print(y_pre, "\n", test_labels[:5])  # 将网络中前五张测试图片和真实图片对比,看是否正确
test_loss, test_accuracy = network.evaluate(test_images, test_labels)  # 保存网络中测试集的损失和准确率的评估值
print("test_loss:", test_loss, "test_accuracy:", test_accuracy)  # 打印损失函数和准确率的评估值

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
首先,我们需要导入必要的库和数据集: ```python import tensorflow as tf from tensorflow.keras import layers from tensorflow.keras.datasets import mnist # 加载数据集 (x_train, y_train), (x_test, y_test) = mnist.load_data() # 将像素值归一化到0-1之间 x_train, x_test = x_train / 255.0, x_test / 255.0 ``` 接下来,我们可以定义神经网络模型: ```python model = tf.keras.Sequential([ layers.Flatten(input_shape=(28, 28)), # 将图片展平为一维数组 layers.Dense(128, activation='relu'), # 全连接层,128个节点 layers.Dropout(0.2), # dropout层,防止过拟合 layers.Dense(10, activation='softmax') # 输出层,10个节点,使用softmax激活函数 ]) ``` 然后,我们可以编译模型,指定损失函数、优化器和评估指标: ```python model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) ``` 接下来,我们可以训练模型: ```python model.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test)) ``` 最后,我们可以评估模型性能: ```python model.evaluate(x_test, y_test, verbose=2) ``` 完整代码如下: ```python import tensorflow as tf from tensorflow.keras import layers from tensorflow.keras.datasets import mnist # 加载数据集 (x_train, y_train), (x_test, y_test) = mnist.load_data() # 将像素值归一化到0-1之间 x_train, x_test = x_train / 255.0, x_test / 255.0 # 定义神经网络模型 model = tf.keras.Sequential([ layers.Flatten(input_shape=(28, 28)), # 将图片展平为一维数组 layers.Dense(128, activation='relu'), # 全连接层,128个节点 layers.Dropout(0.2), # dropout层,防止过拟合 layers.Dense(10, activation='softmax') # 输出层,10个节点,使用softmax激活函数 ]) # 编译模型 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # 训练模型 model.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test)) # 评估模型性能 model.evaluate(x_test, y_test, verbose=2) ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

星辰同学wwq

你的鼓励是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值