Чи можу я використовувати TensorBoard з Google Colab?


Відповіді:


84

РЕДАГУВАТИ: Ви, мабуть, хочете дати офіційну %tensorboardмагію , доступну від TensorFlow 1.13 і далі.


До існування %tensorboardмагії стандартним способом досягнення цього був проксі мережевий трафік до віртуальної машини Colab за допомогою ngrok . Приклад Colab можна знайти тут .

Ось такі кроки (фрагменти коду представляють комірки типу "код" у colab):

  1. Запустіть TensorBoard у фоновому режимі.
    Натхненний цією відповіддю .

    LOG_DIR = '/tmp/log'
    get_ipython().system_raw(
        'tensorboard --logdir {} --host 0.0.0.0 --port 6006 &'
        .format(LOG_DIR)
    )
    
  2. Завантажте та розпакуйте ngrok .
    Замініть передане посилання wgetна правильне посилання для завантаження для вашої ОС.

    ! wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
    ! unzip ngrok-stable-linux-amd64.zip
    
  3. Запуск фонового процесу 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'])"
    

Я намагаюся запустити тензорбаорд у своєму colabVM, а також потребую, щоб події та контрольні точки зберігалися на моєму диску Google? Чи допомагає ваше рішення в цьому відношенні ?. Більше того, було б дуже корисно, якби ви могли трохи детальніше пояснити, як ваш метод, написаний у вашій колабі, міг би цього досягти. Чи переніс події з colabVM на локальний робочий стіл за допомогою цього методу?
Ану,

1
@anu Є приклади блокнотів для таких випадків використання: Drive IO , системні псевдоніми .
Йоппе Гелуйкенс,

37

Зараз багато відповідей застаріли. Так буде і моє, я впевнений через кілька тижнів. Але на момент написання цієї статті мені потрібно було лише запустити ці рядки коду з colab. І тензордна дошка відкрилася просто чудово.

%load_ext tensorboard
%tensorboard --logdir logs

2
Привіт, дякую за коментар. Ви провели ці два рядки в зошиті colab? Я зробив це, і у своєму блокноті з’являється вікно TensorBoard із написом "Жодні інформаційні панелі не активні для поточного набору даних". повідомлення. Можеш допомогти мені?
desmond13

24

Ось простіший спосіб зробити той самий метод тунелювання ngrok на Google Colab.

!pip install tensorboardcolab

тоді,

from tensorboardcolab import TensorBoardColab, TensorBoardColabCallback

tbc=TensorBoardColab()

Припускаючи, що ви використовуєте Keras:

model.fit(......,callbacks=[TensorBoardColabCallback(tbc)])

Ви можете прочитати оригінальний пост тут .


1
Привіт, це здається справді крутим, але я отримую цю помилку в Colab:FailedPreconditionError: Error while reading resource variable conv_dw_8/depthwise_kernel from Container: localhost. This could mean that the variable was uninitialized.
Остін,

@Austin Автор tensorboardcolab знайшов для цього обхідне: "Я вважаю, що це трапляється іноді і може бути вирішене за допомогою: 1. Очікування 2. Перезапуску сервера Colab 3. Змінення типів серверів Colab (CPU / GPU / TPU), а потім змінити його назад ". Дивіться його коментар тут
NeStack

Крім того, переконайтеся, що ваша модель побудована безпосередньо нашою з Keras, а не вбудована tensorflow. Наприклад, замість model.add(tf.keras.layers.LSTM(....))do model.add(keras.layers.LSTM(...)). В іншому випадку можуть бути повідомлення про помилки.
NeStack

12

TensorBoard для TensorFlow працює на Google Colab за допомогою tensorboardcolab. Це використовує ngrok внутрішньо для тунелювання.

  1. Встановіть TensorBoardColab

!pip install tensorboardcolab

  1. Створіть об'єкт tensorboardcolab

tbc = TensorBoardColab()

Це автоматично створює посилання TensorBoard, яке можна використовувати. Ця Tensorboard зчитує дані за адресою './Graph'

  1. Створіть FileWriter, вказуючи на це місце

summary_writer = tbc.get_writer()

Бібліотека tensorboardcolab має метод, який повертає об'єкт FileWriter, що вказує на розташування вище ./Graph.

  1. Почніть додавати зведену інформацію до файлів подій за адресою './Graph' за допомогою об'єкта summary_writer

Ви можете додати скалярну інформацію, дані графіків або гістограм.

Довідково: https://github.com/taomanwai/tensorboardcolab


6

Я спробував, але не отримав результату, але при використанні, як показано нижче, отримав результати

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'

5

Ось як ви можете відображати свої моделі в рядку на 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('"', '&quot;'))
    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)щоб потім можна було завантажити його та переглянути його локально.


4

Я використовую резервне копіювання та синхронізацію диска 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


Не могли б ви написати свій метод у спільній колабі та поділитися тут у вашому дописі. Це було б дуже корисно і швидко!
Ану

1
Дотримуючись ваших порад, я можу отримати доступ лише через colab до файлів у "Моєму диску", але не в "Комп'ютерах", де знаходиться мій синхронізований комп'ютер. І ваш ноутбук не входить у ваш синхронізований комп’ютер, а в папку "Мій диск" - див. Рядок os.chdir('/content/drive/My Drive'). Чи можете ви пояснити далі, як ви отримуєте доступ до синхронізованого комп’ютера?
NeStack

1
@NeStack Ви праві, моє рішення використовує лише папку "Мій диск". Вибачте за плутанину, я не використовую "комп'ютери". Ви можете використовувати програму резервного копіювання та синхронізації, щоб синхронізувати папку "Мій диск" із власним комп'ютером. Таким чином ви можете отримати доступ до файлів подій у провіднику файлів на власному комп’ютері.
Martijn Cazemier

@MartijnCazemier Добре, це має сенс. Це варіант, який би спрацював і для мене
NeStack

@MartijnCazemier це не дозволяє мені, оскільки на моєму диску є простір, а також не дозволяє врятуватися від нього.
техназі

3

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 перейдіть за цим посиланням . Щоб отримати додаткову інформацію, перейдіть за цим посиланням .


3

Відповідно до документації все, що вам потрібно зробити, це:

%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))

І це повинно дати вам щось подібне:

Я ще не можу опублікувати зображення, тому використовуйте посилання.


2

Сьогодні я намагався показати 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


2

Так, безумовно, використовувати tensorboard в google colab досить просто. Виконайте наступні кроки -

1) Завантажте розтяжку тензорної дошки

%load_ext tensorboard.notebook

2) Додайте його до зворотного виклику keras

tensorboard_callback = tf.keras.callbacks.TensorBoard(logdir, histogram_freq=1)

3) Почніть тензорд

%tensorboard — logdir logs

Сподіваюся, це допоможе.


2

Існує альтернативне рішення, але ми повинні використовувати попередній перегляд 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



1

Щоб приєднатися до відповіді @ solver149, ось простий приклад використання TensorBoard у google colab

1. Створіть графік, наприклад:

a = tf.constant(3.0, dtype=tf.float32)
b = tf.constant(4.0) 
total = a + b

2. Встановіть Tensorboard

!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)

3. Використовуй :)

Кулак усього імпорту 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

4. Перевірте вказане посилання: D

Tensorboard_Result_Graph_Image

Цей приклад було позначено керівництвом TF: TensorBoard .


1
Єдине рішення, яке для мене ідеально працювало на Colab. Дякую @Dina Taklit!
JChat

Я отримую повідомлення про помилку,AttributeError: module 'tensorflow_core.summary' has no attribute 'FileWriter'
sarannns

@sarannns Я сподіваюся , що це допоможе stackoverflow.com/questions/43304270 / ...
ДІНА TAKLIT

1

TensorBoard працює з Google Colab та TensorFlow 2.0

!pip install tensorflow==2.0.0-alpha0 
%load_ext tensorboard.notebook

1

Використання summary_writer для запису журналу в кожну епоху в папці, а потім запуск наступної магії мені спрацював.

%load_ext tensorboard 
%tensorboard --logdir=./logs 

0

Найпростіший і найпростіший спосіб, який я знайшов до цього часу:

Отримайте файл 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

Подивіться на інші відповіді, наведені вище варіанти виглядають краще, оскільки вони не вимагають кроку вручну.
lucid_dreamer

@lucid_dreamer, без сумніву, вище відповідь має краще пояснення, кроки, а також простий, але якщо ми знаємо, що інші відповіді дозволяють іншим людям знати всі методи, деякі методи можуть бути корисними для деяких людей. Все залежить від вашого вибору.
Мухаммед Умар Аманат,

Я отримуюAttributeError: module 'setup_google_colab' has no attribute 'expose_port_on_colab'
Біранчі

@Biranchi expose_port_on_colab is function is in setup_google_colab.py, you can visit this link for reference github.com/hse-aml/intro-to-dl/blob/master/…
Muhammad Umar Amanat

0

Я використовую tensorflow == 1.15.

%load_ext tensorboard
%tensorboard --logdir /content/logs

працює для мене.

/content/logs

- шлях до моїх журналів на Google Drive.


-1

Спробуйте це, це працює на мене

%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])
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.