from datetime import datetime
import tensorflow as tf
from sklearn.preprocessing import StandardScaler
import numpy as np
from sklearn.datasets import fetch_california_housing
При каждом запуске программы надо использовать другой журнальный каталог, иначе TensorBoard будет объединять статистические данные из разных запусков, что испортит визуализации.
Простейшим решением является включение отметки времени в имя журнального каталога.
Добавить в начало программы следующий код:
now = datetime.utcnow().strftime("%Y%m%d%H%M%S")
root_logdir = "/home/dmitry/projects/monitor19/tf_learning/tf_logs"
logdir = "{}/run-{}/".format(root_logdir, now)
housing = fetch_california_housing()
m, n = housing.data.shape
housing_data_plus_bias = np.c_[np.ones((m, 1)), housing.data]
scaler = StandardScaler()
scaled_housing_data_plus_bias = scaler.fit_transform(housing_data_plus_bias)
n_epochs = 1000
learning_rate = 0.01
X = tf.constant(scaled_housing_data_plus_bias, dtype=tf.float32, name="X")
y = tf.constant(housing.target.reshape(-1, 1), dtype=tf.float32, name="y")
theta = tf.Variable(tf.random_uniform([n + 1, 1], -1.0, 1.0), name="theta")
y_pred = tf.matmul(X, theta, name="predictions")
error = y_pred - y
mse = tf.reduce_mean(tf.square(error), name="mse")
optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)
training_op = optimizer.minimize(mse)
init = tf.global_variables_initializer()
# в самый конец стадии построения такой код:
# Первая строка создает в графе узел, который будет подсчитывать значение MSE
# и записывать его в строку совместимого с TensorBoard двоичного журнала, называемую сводкой (summary).
#
# Вторая строка кода создает объект
# FileWriter,
# который будет применяться для записывания сводок в журнальные файлы внутри журнального каталога.
#
# В первом параметре указывается путь к журнальному каталогу.
# Второй (необязательный параметр) - это граф, который надо визуализировать.
mse_summary = tf.summary.scalar('MSE', mse)
file_writer = tf.summary.FileWriter(logdir, tf.get_default_graph())
with tf.Session() as sess:
sess.run(init)
for epoch in range(n_epochs):
if epoch % 100 == 0:
print("Epoch", epoch, "MSE =", mse.eval())
summary_str = mse_summary.eval()
step = epoch #* n_batches + batch_index
file_writer.add_summary(summary_str, step)
sess.run(training_op)
best_theta = theta.eval()
в конце программы Fi leWriter желательно закрыть:
file_writer.close()
В комндной строке Линукс запускается TensorBoard
~$ tensorboard --logdir /home/projects/monitor19/tf_logs/
Для выхода из TensorBoard - Ctrl+C
Открыть браузер и перейдти на
(или http://localhost:6006/).
Порт 6006 - перевернутое "goog".