天天看點

2.tensorflow:使用tensorboard記錄loss變化,模型結構

#coding:utf-8
'''
a liner regression by tenosrflow.
input dimension: 1, output dimension: 1.
顯示每個epoch的loss
儲存模型圖,使用tensorboard

'''
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.python.tools.inspect_checkpoint import print_tensors_in_checkpoint_file


# data
x_train = np.linspace(-1, 1, 100)
y_train = 10 * x_train + np.random.randn(x_train.shape[0])
# plt.plot(x_train, y_train, "ro", label="data")
# plt.legend()
# plt.show()

epochs = 30
display_step = 2
# input, output
x = tf.placeholder(dtype="float", name="input")
y = tf.placeholder(dtype="float", name="label")
# w, b
w = tf.Variable(initial_value=tf.random_normal([1]), name="weight")
b = tf.Variable(initial_value=tf.zeros([1]), name="bias")
# model
z = tf.multiply(x, w) + b
tf.summary.histogram("z", z)  # 把z的值以直方圖顯示

# loss functon
cost = tf.reduce_mean(tf.square(y - z))
tf.summary.scalar("cost functon", cost)  # 把loss函數以标量顯示
# optimizer
optim = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(cost)
saver = tf.train.Saver(max_to_keep=2)  # save 2 model
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    summary_merge = tf.summary.merge_all()  # 合并所有summary
    f_summary = tf.summary.FileWriter(logdir="log", graph=sess.graph)
    for epoch in range(epochs):
        for x_batch, y_batch in zip(x_train, y_train):  # batch is 1 there
            sess.run(optim, feed_dict={x:x_batch, y:y_batch})
            summary_tmp = sess.run(summary_merge, feed_dict={x:x_batch, y:y_batch})  # 計算summary
            f_summary.add_summary(summary=summary_tmp, global_step=epoch)  # 寫入summary
        if epoch % display_step ==0:
            loss = sess.run(cost, feed_dict={x:x_train, y:y_train})
            print("epoch: %d, loss: %d" %(epoch, loss))
            # 儲存訓練過程中的模型
            saver.save(sess, "line_regression_model/regress.cpkt", global_step=epoch)
    print("train finished...")
    # 儲存最終的模型
    saver.save(sess, "line_regression_model/regress.cpkt")
    print("final loss:", sess.run(cost, feed_dict={x:x_train, y:y_train}))
    print("weight:", sess.run(w))
    print("bias:", sess.run(b))

    # show train data and predict data
    plt.plot(x_train, y_train, "ro", label="train")
    predict = sess.run(w) * x_train + sess.run(b)
    plt.plot(x_train, predict, "b", label="predict")
    plt.legend()
    plt.show()

           

運作完畢發現多了一個log檔案夾,裡面檔案為events.out.tfevents.1542444510.mingzhangdeMacBook-Pro.local

在macbook中執行:tensorboard --logdir=log

提示:TensorBoard 1.8.0 at http://mingzhangdeMacBook-Pro.local:6006 (Press CTRL+C to quit)

然而在macbook中這個網址并不能打開(在Ubuntu中可以打開生成多網址),而是在浏覽器中輸入這個才能打開:http://localhost:6006/

2.tensorflow:使用tensorboard記錄loss變化,模型結構

繼續閱讀