代码如下所示:
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
import os
#一元线性回归
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
# 准备训练数据,假设其分布大致符合 y = 1.2x + 0.0
n_train_samples = 200
X_train = np.linspace(-5, 5, n_train_samples)
Y_train = 1.2*X_train + np.random.uniform(-1.0, 1.0, n_train_samples) # 加一点随机扰动
# 准备验证数据,用于验证模型的好坏
n_test_samples = 50
X_test = np.linspace(-5, 5, n_test_samples)
Y_test = 1.2*X_test
# 参数学习算法相关变量设置
learning_rate = 0.01
batch_size = 20
summary_dir = 'logs'
print('~~~~~~~~~~开始设计计算图~~~~~~~~')
# 使用 placeholder 将训练数据/验证数据送入网络进行训练/验证
# shape=None 表示形状由送入的张量的形状来确定
with tf.name_scope('Input'):
X = tf.placeholder(dtype=tf.float32, shape=None, name='X')
Y = tf.placeholder(dtype=tf.float32, shape=None, name='Y')
# 决策函数(参数初始化)
with tf.name_scope('Inference'):
W = tf.Variable(initial_value=tf.truncated_normal(shape=[1]), name='weight')
b = tf.Variable(initial_value=tf.truncated_normal(shape=[1]), name='bias')
Y_pred = tf.multiply(X, W) + b
# 损失函数(MSE)
with tf.name_scope('Loss'):
loss = tf.reduce_mean(tf.square(Y_pred - Y), name='loss')
tf.summary.scalar('loss', loss)
# 参数学习算法(Mini-batch SGD)
with tf.name_scope('Optimization'):
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
# 初始化所有变量
init = tf.global_variables_initializer()
# 汇总记录节点
merge = tf.summary.merge_all()
# 开启会话,进行训练
with tf.Session() as sess:
sess.run(init)
summary_writer = tf.summary.FileWriter(logdir=summary_dir, graph=sess.graph)
for i in range(201):
j = np.random.randint(0, 10) # 总共200训练数据,分十份[0, 9]
X_batch = X_train[batch_size*j: batch_size*(j+1)]
Y_batch = Y_train[batch_size*j: batch_size*(j+1)]
_, summary, train_loss, W_pred, b_pred = sess.run([optimizer, merge, loss, W, b], feed_dict={X: X_batch, Y: Y_batch})
test_loss = sess.run(loss, feed_dict={X: X_test, Y: Y_test})
# 将所有日志写入文件
summary_writer.add_summary(summary, global_step=i)
print('step:{}, losses:{}, test_loss:{}, w_pred:{}, b_pred:{}'.format(i, train_loss, test_loss, W_pred[0], b_pred[0]))
if i == 200:
# plot the results
plt.plot(X_train, Y_train, 'bo', label='Train data')
plt.plot(X_test, Y_test, 'gx', label='Test data')
plt.plot(X_train, X_train * W_pred + b_pred, 'r', label='Predicted data')
plt.legend()
plt.show()
summary_writer.close()
运行完后在logs文件夹下生成一个events.out.tfevents.……文件
然后运行tensorboard --logdir=logs就ok了
但我犯了几个错误,首次尝试时使用shift按住文件夹,选项中有powershell,进入后并无作用运行时经常报错,tensorboard : 无法将“tensorboard”项识别为 cmdlet、函数、脚本文件或可运行程序的名称;这个错误的出现跟powershell在关;
第二次选择使用cmd,然后直接进入到logs文件夹中,生成了一个浏览器地址,打开后并无任何结果,提示:No dashboards are active for the current data set;因为这个命令执行后,cmd界面一直显示没有结束,还以为是命令没有执行完所导致的结果,一直等待中;这个地方的错误是因为在logs目录下,没有logs文件夹,所有没有相应的文件;
然后跳出logs目录,在test目录下,执行命令:tensorboadr --logdir=logs;生成一个浏览器地址,就可以进行浏览了;这个时候cmd界面仍停留在一个执行命令中,并没有结束;
当我结束命令后,原来的浏览器地址就已经没有作用了,无法显示;故没有结束是正常的,只有这样才可以浏览;
结论:使用cmd不能使用powershell,tensorboard后 --logdir是为了指定event文件所在的目录;tensorboard命令在执行中才能正常浏览,停止则无法浏览;