#coding:utf-8
import tensorflow as tf
from tensorflow import keras
from keras import layers
"""
基于tensorflow框架/mnist数据集,建一个三层全连接神经网络的10分类模型;
python代码的简单实现
参考文献:
Tensorflow文档 函数式API部分 https://tensorflow.google.cn/guide/keras/functional
详细解释:Epoch、batch_size批处理⼤⼩、迭代次数之间的关系 https://wenku.baidu.com/view/0655cd1540323968011ca300a6c30c225901f096.html
"""
#####1.定义一个三层全连接神经网络结构
inputs = keras.Input(shape=(784,)) #定义输入数据结构
dense1 = layers.Dense(64, activation="relu") #定义网络第一层,64个神经元,激活函数relu
dense_out1 = dense1(inputs) #网络第一层输出
dense_out2 = layers.Dense(64, activation="relu")(dense_out1) #定义网络第二层,64个神经元,激活函数relu;且输出第二层计算结果
outputs = layers.Dense(10)(dense_out2) #定义网络第三层(输出层),10个神经元;且输出第三层计算结果
model = keras.Model(inputs=inputs, outputs=outputs, name="mnist_model") #定义model模型
model.summary()
#####2.获取训练测试集
"""
原始数据
x_train:shape(60000,28,28) ,numpy.ndarray
y_train: shape(60000) ,numpy.ndarray
x_test:shape(10000,28,28) ,numpy.ndarray
y_test: shape(10000) ,numpy.ndarray
"""
#原始数据
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
"""
转换后数据
x_train:shape(60000,784) ,numpy.ndarray
y_train: shape(60000) ,numpy.ndarray
x_test:shape(10000,784) ,numpy.ndarray
y_test: shape(10000) ,numpy.ndarray
"""
#转换后数据
x_train = x_train.reshape(60000, 784).astype("float32") / 255
x_test = x_test.reshape(10000, 784).astype("float32") / 255
#####3.训练模型
#定义损失函数loss;优化器optimizer;评价函数metrics
model.compile(
loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
optimizer=keras.optimizers.RMSprop(),
metrics=["accuracy"],
)
#batch_size每次迭代的数据量;epochs全部数据要完成的训练次数;validation_split分割的验证数据比例
history = model.fit(x_train, y_train, batch_size=64, epochs=2, validation_split=0.2)
model.save("path_to_my_model") #保存模型至文件目录
del model
#####4.预测
model = keras.models.load_model("path_to_my_model") #从文件目录加载模型
test_scores = model.evaluate(x_test, y_test, verbose=2)
print("Test loss:", test_scores[0])
print("Test accuracy:", test_scores[1])
tensorflow mnist数据集全连接神经网络 python简单实现
于 2022-05-10 17:44:38 首次发布