Чи є спосіб використовувати TensorBoard під час навчання моделі TensorFlow на Google Colab?
Відповіді:
РЕДАГУВАТИ: Ви, мабуть, хочете дати офіційну %tensorboard
магію , доступну від TensorFlow 1.13 і далі.
До існування %tensorboard
магії стандартним способом досягнення цього був проксі мережевий трафік до віртуальної машини Colab за допомогою
ngrok . Приклад Colab можна знайти тут .
Ось такі кроки (фрагменти коду представляють комірки типу "код" у colab):
Запустіть TensorBoard у фоновому режимі.
Натхненний цією відповіддю .
LOG_DIR = '/tmp/log'
get_ipython().system_raw(
'tensorboard --logdir {} --host 0.0.0.0 --port 6006 &'
.format(LOG_DIR)
)
Завантажте та розпакуйте ngrok .
Замініть передане посилання wget
на правильне посилання для завантаження для вашої ОС.
! wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
! unzip ngrok-stable-linux-amd64.zip
Запуск фонового процесу ngrok ...
get_ipython().system_raw('./ngrok http 6006 &')
... і отримати загальнодоступну URL-адресу. Джерело
! curl -s http://localhost:4040/api/tunnels | python3 -c \
"import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"
Зараз багато відповідей застаріли. Так буде і моє, я впевнений через кілька тижнів. Але на момент написання цієї статті мені потрібно було лише запустити ці рядки коду з colab. І тензордна дошка відкрилася просто чудово.
%load_ext tensorboard
%tensorboard --logdir logs
Ось простіший спосіб зробити той самий метод тунелювання ngrok на Google Colab.
!pip install tensorboardcolab
тоді,
from tensorboardcolab import TensorBoardColab, TensorBoardColabCallback
tbc=TensorBoardColab()
Припускаючи, що ви використовуєте Keras:
model.fit(......,callbacks=[TensorBoardColabCallback(tbc)])
Ви можете прочитати оригінальний пост тут .
FailedPreconditionError: Error while reading resource variable conv_dw_8/depthwise_kernel from Container: localhost. This could mean that the variable was uninitialized.
model.add(tf.keras.layers.LSTM(....))
do model.add(keras.layers.LSTM(...))
. В іншому випадку можуть бути повідомлення про помилки.
TensorBoard для TensorFlow працює на Google Colab за допомогою tensorboardcolab. Це використовує ngrok внутрішньо для тунелювання.
!pip install tensorboardcolab
tbc = TensorBoardColab()
Це автоматично створює посилання TensorBoard, яке можна використовувати. Ця Tensorboard зчитує дані за адресою './Graph'
summary_writer = tbc.get_writer()
Бібліотека tensorboardcolab має метод, який повертає об'єкт FileWriter, що вказує на розташування вище ./Graph.
Ви можете додати скалярну інформацію, дані графіків або гістограм.
Я спробував, але не отримав результату, але при використанні, як показано нижче, отримав результати
import tensorboardcolab as tb
tbc = tb.TensorBoardColab()
після цього відкрийте посилання з виводу.
import tensorflow as tf
import numpy as np
Явно створіть об'єкт Graph
graph = tf.Graph()
with graph.as_default()
Повний приклад:
with tf.name_scope("variables"):
# Variable to keep track of how many times the graph has been run
global_step = tf.Variable(0, dtype=tf.int32, name="global_step")
# Increments the above `global_step` Variable, should be run whenever the graph is run
increment_step = global_step.assign_add(1)
# Variable that keeps track of previous output value:
previous_value = tf.Variable(0.0, dtype=tf.float32, name="previous_value")
# Primary transformation Operations
with tf.name_scope("exercise_transformation"):
# Separate input layer
with tf.name_scope("input"):
# Create input placeholder- takes in a Vector
a = tf.placeholder(tf.float32, shape=[None], name="input_placeholder_a")
# Separate middle layer
with tf.name_scope("intermediate_layer"):
b = tf.reduce_prod(a, name="product_b")
c = tf.reduce_sum(a, name="sum_c")
# Separate output layer
with tf.name_scope("output"):
d = tf.add(b, c, name="add_d")
output = tf.subtract(d, previous_value, name="output")
update_prev = previous_value.assign(output)
# Summary Operations
with tf.name_scope("summaries"):
tf.summary.scalar('output', output) # Creates summary for output node
tf.summary.scalar('product of inputs', b, )
tf.summary.scalar('sum of inputs', c)
# Global Variables and Operations
with tf.name_scope("global_ops"):
# Initialization Op
init = tf.initialize_all_variables()
# Collect all summary Ops in graph
merged_summaries = tf.summary.merge_all()
# Start a Session, using the explicitly created Graph
sess = tf.Session(graph=graph)
# Open a SummaryWriter to save summaries
writer = tf.summary.FileWriter('./Graph', sess.graph)
# Initialize Variables
sess.run(init)
def run_graph(input_tensor):
"""
Helper function; runs the graph with given input tensor and saves summaries
"""
feed_dict = {a: input_tensor}
output, summary, step = sess.run([update_prev, merged_summaries, increment_step], feed_dict=feed_dict)
writer.add_summary(summary, global_step=step)
# Run the graph with various inputs
run_graph([2,8])
run_graph([3,1,3,3])
run_graph([8])
run_graph([1,2,3])
run_graph([11,4])
run_graph([4,1])
run_graph([7,3,1])
run_graph([6,3])
run_graph([0,2])
run_graph([4,5,6])
# Writes the summaries to disk
writer.flush()
# Flushes the summaries to disk and closes the SummaryWriter
writer.close()
# Close the session
sess.close()
# To start TensorBoard after running this file, execute the following command:
# $ tensorboard --logdir='./improved_graph'
Ось як ви можете відображати свої моделі в рядку на Google Colab. Нижче наведено дуже простий приклад, який відображає заповнювач:
from IPython.display import clear_output, Image, display, HTML
import tensorflow as tf
import numpy as np
from google.colab import files
def strip_consts(graph_def, max_const_size=32):
"""Strip large constant values from graph_def."""
strip_def = tf.GraphDef()
for n0 in graph_def.node:
n = strip_def.node.add()
n.MergeFrom(n0)
if n.op == 'Const':
tensor = n.attr['value'].tensor
size = len(tensor.tensor_content)
if size > max_const_size:
tensor.tensor_content = "<stripped %d bytes>"%size
return strip_def
def show_graph(graph_def, max_const_size=32):
"""Visualize TensorFlow graph."""
if hasattr(graph_def, 'as_graph_def'):
graph_def = graph_def.as_graph_def()
strip_def = strip_consts(graph_def, max_const_size=max_const_size)
code = """
<script>
function load() {{
document.getElementById("{id}").pbtxt = {data};
}}
</script>
<link rel="import" href="https://tensorboard.appspot.com/tf-graph-basic.build.html" onload=load()>
<div style="height:600px">
<tf-graph-basic id="{id}"></tf-graph-basic>
</div>
""".format(data=repr(str(strip_def)), id='graph'+str(np.random.rand()))
iframe = """
<iframe seamless style="width:1200px;height:620px;border:0" srcdoc="{}"></iframe>
""".format(code.replace('"', '"'))
display(HTML(iframe))
"""Create a sample tensor"""
sample_placeholder= tf.placeholder(dtype=tf.float32)
"""Show it"""
graph_def = tf.get_default_graph().as_graph_def()
show_graph(graph_def)
Наразі ви не можете запустити послугу Tensorboard на Google Colab так, як ви запускаєте її локально. Крім того, ви не можете експортувати весь журнал на свій диск через щось подібне, summary_writer = tf.summary.FileWriter('./logs', graph_def=sess.graph_def)
щоб потім можна було завантажити його та переглянути його локально.
Я використовую резервне копіювання та синхронізацію диска Google https://www.google.com/drive/download/backup-and-sync/ . Файли подій, які попередньо зберігаються на моєму диску Google під час навчання, автоматично синхронізуються з папкою на моєму власному комп’ютері. Давайте назвемо цю папку logs
. Щоб отримати доступ до візуалізації в tensorboard, я відкриваю командний рядок, переходжу до синхронізованої папки google drive та вводжу:tensorboard --logdir=logs
.
Отже, автоматично синхронізуючи мій диск із комп’ютером (за допомогою резервного копіювання та синхронізації), я можу користуватися тензорковою дошкою, як ніби тренуюся на своєму комп’ютері.
Редагувати: Ось блокнот, який може бути корисним.https://colab.research.google.com/gist/MartijnCa/961c5f4c774930f4bdd32d51829da6f6/tensorboard-with-google-drive-backup-and-sync.ipynb
os.chdir('/content/drive/My Drive')
. Чи можете ви пояснити далі, як ви отримуєте доступ до синхронізованого комп’ютера?
2.0 Сумісна відповідь : Так, ви можете використовувати Tensorboard в Google Colab. Будь ласка, знайдіть наведений нижче код, який показує повний приклад.
!pip install tensorflow==2.0
import tensorflow as tf
# The function to be traced.
@tf.function
def my_func(x, y):
# A simple hand-rolled layer.
return tf.nn.relu(tf.matmul(x, y))
# Set up logging.
logdir = './logs/func'
writer = tf.summary.create_file_writer(logdir)
# Sample data for your function.
x = tf.random.uniform((3, 3))
y = tf.random.uniform((3, 3))
# Bracket the function call with
# tf.summary.trace_on() and tf.summary.trace_export().
tf.summary.trace_on(graph=True, profiler=True)
# Call only one tf.function when tracing.
z = my_func(x, y)
with writer.as_default():
tf.summary.trace_export(
name="my_func_trace",
step=0,
profiler_outdir=logdir)
%load_ext tensorboard
%tensorboard --logdir ./logs/func
Для отримання робочої копії Google Colab перейдіть за цим посиланням . Щоб отримати додаткову інформацію, перейдіть за цим посиланням .
Відповідно до документації все, що вам потрібно зробити, це:
%load_ext tensorboard
!rm -rf ./logs/ #to delete previous runs
%tensorboard --logdir logs/
tensorboard = TensorBoard(log_dir="./logs")
І просто назвіть це методом підгонки:
model.fit(X_train, y_train, epochs = 1000,
callbacks=[tensorboard], validation_data=(X_test, y_test))
І це повинно дати вам щось подібне:
Сьогодні я намагався показати TensorBoard на Google Colab,
# in case of CPU, you can this line
# !pip install -q tf-nightly-2.0-preview
# in case of GPU, you can use this line
!pip install -q tf-nightly-gpu-2.0-preview
# %load_ext tensorboard.notebook # not working on 22 Apr
%load_ext tensorboard # you need to use this line instead
import tensorflow as tf
'#################
пройти навчання
' #################
# show tensorboard
%tensorboard --logdir logs/fit
ось фактичний приклад, зроблений google. https://colab.research.google.com/github/tensorflow/tensorboard/blob/master/docs/r2/get_started.ipynb
Так, безумовно, використовувати tensorboard в google colab досить просто. Виконайте наступні кроки -
1) Завантажте розтяжку тензорної дошки
%load_ext tensorboard.notebook
2) Додайте його до зворотного виклику keras
tensorboard_callback = tf.keras.callbacks.TensorBoard(logdir, histogram_freq=1)
3) Почніть тензорд
%tensorboard — logdir logs
Сподіваюся, це допоможе.
Існує альтернативне рішення, але ми повинні використовувати попередній перегляд TFv2.0. Тож якщо у вас немає проблем із міграцією, спробуйте наступне:
встановити tfv2.0 для графічного процесора або центрального процесора (TPU ще не доступний)
CPU
tf-nightly-2.0-preview
GPU
tf-nightly-gpu-2.0-preview
%%capture
!pip install -q tf-nightly-gpu-2.0-preview
# Load the TensorBoard notebook extension
# %load_ext tensorboard.notebook # For older versions
%load_ext tensorboard
імпортувати TensorBoard як зазвичай:
from tensorflow.keras.callbacks import TensorBoard
Очистити або створити папку, куди зберігати журнали (запустіть ці рядки перед запуском тренінгу fit()
)
# Clear any logs from previous runs
import time
!rm -R ./logs/ # rf
log_dir="logs/fit/{}".format(time.strftime("%Y%m%d-%H%M%S", time.gmtime()))
tensorboard = TensorBoard(log_dir=log_dir, histogram_freq=1)
Веселіться з TensorBoard! :)
%tensorboard --logdir logs/fit
Ось офіційний блокнот колабу та репо на github
Новий альфа-випуск TFv2.0:
CPU
!pip install -q tensorflow==2.0.0-alpha0
GPU
!pip install -q tensorflow-gpu==2.0.0-alpha0
Ви можете безпосередньо підключитися до тензордної дошки в Google Colab, використовуючи нещодавнє оновлення від Google Colab.
https://medium.com/@today.rafi/tensorboard-in-google-colab-bd49fa554f9b
Щоб приєднатися до відповіді @ solver149, ось простий приклад використання TensorBoard у google colab
a = tf.constant(3.0, dtype=tf.float32)
b = tf.constant(4.0)
total = a + b
!pip install tensorboardcolab # to install tensorboeadcolab if it does not it not exist
==> Результат у моєму випадку:
Requirement already satisfied: tensorboardcolab in /usr/local/lib/python3.6/dist-packages (0.0.22)
Кулак усього імпорту TensorBoard з tensorboaedcolab (ви можете використовувати, import*
щоб імпортувати все відразу), а потім створіть свою tensorboeardcolab після цього, приєднайте до нього письменника так:
from tensorboardcolab import *
tbc = TensorBoardColab() # To create a tensorboardcolab object it will automatically creat a link
writer = tbc.get_writer() # To create a FileWriter
writer.add_graph(tf.get_default_graph()) # add the graph
writer.flush()
==> Результат
Using TensorFlow backend.
Wait for 8 seconds...
TensorBoard link:
http://cf426c39.ngrok.io
Цей приклад було позначено керівництвом TF: TensorBoard .
AttributeError: module 'tensorflow_core.summary' has no attribute 'FileWriter'
Використання summary_writer для запису журналу в кожну епоху в папці, а потім запуск наступної магії мені спрацював.
%load_ext tensorboard
%tensorboard --logdir=./logs
Найпростіший і найпростіший спосіб, який я знайшов до цього часу:
Отримайте файл setup_google_colab.py за допомогою wget
!wget https://raw.githubusercontent.com/hse-aml/intro-to- dl/master/setup_google_colab.py -O setup_google_colab.py
import setup_google_colab
Щоб запустити Tensorboard у фоновому режимі, відкрийте порт і натисніть на посилання.
Я припускаю, що ви маєте належну додану вартість для візуалізації у своєму резюме, а потім об’єднайте всі резюме.
import os
os.system("tensorboard --logdir=./logs --host 0.0.0.0 --port 6006 &")
setup_google_colab.expose_port_on_colab(6006)
Після запуску вищезазначених інструкцій вам буде запропоновано посилання на зразок:
Open https://a1b2c34d5.ngrok.io to access your 6006 port
Зверніться до наступного git для отримання додаткової допомоги:
https://github.com/MUmarAmanat/MLWithTensorflow/blob/master/colab_tensorboard.ipynb
AttributeError: module 'setup_google_colab' has no attribute 'expose_port_on_colab'
Спробуйте це, це працює на мене
%load_ext tensorboard
import datetime
logdir = os.path.join("logs", datetime.datetime.now().strftime("%Y%m%d-%H%M%S"))
tensorboard_callback = tf.keras.callbacks.TensorBoard(logdir, histogram_freq=1)
model.fit(x=x_train,
y=y_train,
epochs=5,
validation_data=(x_test, y_test),
callbacks=[tensorboard_callback])