Основы TensorFlow

Визуализация графа и кривых обучения с использованием TensorBoard

In [21]:
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 будет объединять статистические данные из разных запусков, что испортит визуализации.

Простейшим решением является включение отметки времени в имя журнального каталога.

Добавить в начало программы следующий код:

In [22]:
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)
In [23]:
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)
In [24]:
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()
Epoch 0 MSE = 7.247842
Epoch 100 MSE = 4.945986
Epoch 200 MSE = 4.8804398
Epoch 300 MSE = 4.861396
Epoch 400 MSE = 4.848447
Epoch 500 MSE = 4.838641
Epoch 600 MSE = 4.8311086
Epoch 700 MSE = 4.825287
Epoch 800 MSE = 4.8207636
Epoch 900 MSE = 4.817231

в конце программы Fi leWriter желательно закрыть:

In [25]:
file_writer.close()

В комндной строке Линукс запускается TensorBoard

~$ tensorboard --logdir /home/projects/monitor19/tf_logs/

Для выхода из TensorBoard - Ctrl+C

Открыть браузер и перейдти на

http://0.0.0.0:6006/

(или http://localhost:6006/).

Порт 6006 - перевернутое "goog".

In [ ]: