tensorflow mnist数据集全连接神经网络 python简单实现

#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])

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值