14_模型保存、参数调优

在这里插入图片描述


博文配套视频课程:24小时实现从零到AI人工智能


DNN模型代码

# 完成图形图像的加载 (分辨率和尺寸相同)
from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf

# 通过函数下载或者加载本地的图片资源,建议设置one_hot=True
mnist = input_data.read_data_sets("../data/input_data", one_hot=True)
# 训练的时候不会一次性加载55000,因此需要采用占位符
X = tf.placeholder(tf.float32, [None, 784],name="X")
y_true = tf.placeholder(tf.float32, [None, 10],name="y_true")

#  创建第一个隐藏层: [None,784] matmul [784,500] ==> [None,500]
W1 = tf.Variable(tf.random.normal([784, 500]),name="W1")
b1 = tf.Variable(tf.random.normal([500]),name="b1")
L1 = tf.nn.tanh(tf.matmul(X, W1) + b1,name="L1")  # [None,500]

#  创建第二个隐藏层: [None,500] matmul [500,300] ==> [None,300]
W2 = tf.Variable(tf.random.normal([500, 300]),name="W2")
b2 = tf.Variable(tf.random.normal([300]),name="b2")
L2 = tf.nn.tanh(tf.matmul(L1, W2) + b2,name="L2")

# 输出层,有多少个类别,将会有多少个输出神经元
W3 = tf.Variable(tf.random.normal([300, 10]),name="W")
b3 = tf.Variable(tf.random.normal([10]),name="b3")
y_predict = tf.add(tf.matmul(L2, W3),b3,name="y_predict")  # matmul == dot
# softmax: 就是把向量值归一化到[0,1]之间,总和为1
# y_predict = tf.nn.softmax(y_predict)
# loss = -tf.reduce_mean(y_true * tf.log(y_predict))
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_true, logits=y_predict),name="loss")
# 采用梯度下降公式来减少误差值: 学习率 0,1之间
train_op = tf.train.GradientDescentOptimizer(0.05).minimize(loss)
# 获取神经网络每次运行的正确率
result = tf.equal(tf.argmax(y_predict, axis=1), tf.argmax(y_true, axis=1))
result = tf.cast(result, tf.float32)
accuracy = tf.reduce_mean(result,name="accuracy")
# 收集需要观察的变量
tf.summary.scalar("losses",loss)
tf.summary.scalar("accuracy",accuracy)
# 合并tensor,此方法会生成一个op
merged = tf.summary.merge_all()
# 定义一个保存模型的实例
saver = tf.train.Saver()

# 通过会话连接graph图
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    fileWriter = tf.summary.FileWriter(logdir="../data/",graph=sess.graph)
    for i in range(2000):  # 100 次  70%   1000  85%   2000  94%    5000   95%
        # 每一次获取指定数量的样本和样本的目标值
        mnist_x, mnist_y = mnist.train.next_batch(55)
        d = {X: mnist_x, y_true: mnist_y}
        sess.run(train_op, feed_dict=d)
        print(f'第{i + 1}次训练的正确率为:{sess.run(accuracy, feed_dict=d)}')
        # 运行合并的op,然后把结果保存到硬盘中
        summary = sess.run(merged,feed_dict=d)
        fileWriter.add_summary(summary,i)

TensorBoard查看流程图

TensorFlow最大的优势在于可以把深度学习的流程通过图表的方式展示出来方便我们进一步观察TF的细节

在这里插入图片描述

查看scalar变量

从变量的执行流程很明显看书,随着训练次数越来越多,误差会越来越低,而正确率会越来越高

在这里插入图片描述

在这里插入图片描述

发布了128 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/lsqzedu/article/details/102556983