Kann ich TensorBoard mit Google Colab verwenden?


Antworten:


83

EDIT: Sie möchten wahrscheinlich die offizielle %tensorboardMagie ausprobieren, die ab TensorFlow 1.13 verfügbar ist.


Vor der Existenz der %tensorboardMagie bestand der Standardweg, dies zu erreichen, darin, den Netzwerkverkehr mithilfe von ngrok an die Colab-VM zu übertragen . Ein Colab-Beispiel finden Sie hier .

Dies sind die Schritte (die Codefragmente repräsentieren Zellen vom Typ "Code" in colab):

  1. Lassen Sie TensorBoard im Hintergrund laufen.
    Inspiriert von dieser Antwort .

    LOG_DIR = '/tmp/log'
    get_ipython().system_raw(
        'tensorboard --logdir {} --host 0.0.0.0 --port 6006 &'
        .format(LOG_DIR)
    )
    
  2. Laden Sie ngrok herunter und entpacken Sie es .
    Ersetzen Sie den übergebenen Link wgetdurch den richtigen Download-Link für Ihr Betriebssystem.

    ! wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
    ! unzip ngrok-stable-linux-amd64.zip
    
  3. Starten Sie den ngrok-Hintergrundprozess ...

    get_ipython().system_raw('./ngrok http 6006 &')
    

    ... und öffentliche URL abrufen. Quelle

    ! curl -s http://localhost:4040/api/tunnels | python3 -c \
        "import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"
    

Ich versuche, das Tensorbaord in meiner colabVM auszuführen. Müssen die Ereignisse und Checkpoints auch in meinem Google-Laufwerk gespeichert werden? Hilft Ihre Lösung in dieser Hinsicht? Darüber hinaus wäre es sehr hilfreich, wenn Sie etwas näher erläutern könnten, wie Ihre in Ihrem Colab geschriebene Methode dies erreichen könnte. Haben Sie die Ereignisse von colabVM mit dieser Methode auf den lokalen Desktop übertragen?
Anu

1
@anu Es gibt Beispielnotizbücher für diese Anwendungsfälle: Laufwerks-E / A , System-Aliase .
Joppe Geluykens

34

Viele der Antworten hier sind inzwischen veraltet. Ich bin mir sicher, dass es in ein paar Wochen mein sein wird. Aber zum Zeitpunkt dieses Schreibens musste ich nur diese Codezeilen von colab ausführen. Und Tensorboard öffnete sich ganz gut.

%load_ext tensorboard
%tensorboard --logdir logs

2
Hallo, danke für den Kommentar. Haben Sie diese beiden Zeilen in einem Colab-Notizbuch ausgeführt? Ich habe ein TensorBoard-Fenster in meinem Notizbuch mit der Meldung "Für den aktuellen Datensatz sind keine Dashboards aktiv." Botschaft. Können Sie mir helfen?
Desmond13

Hallo! @ desmond13 hast du das Training überhaupt begonnen oder nur diese beiden Zeilen ausgeführt? Nachdem genau diese beiden Zeilen ausgeführt wurden, zeigt Tensorboard zunächst diese Meldung an, die völlig normal ist. Aber wenn das Training beginnt und nach einer Weile, wenn Tensorboard einige Daten zum Zeichnen erhält, beginnt es, sie zu zeichnen. Tensorboard aktualisiert auch automatisch die Diagramme. Sie können das Tensorboard auch manuell mit dem dort verfügbaren Aktualisierungssymbol aktualisieren.
hafiz031

Hallo! @ RajV Ich folge auch der gleichen Methode. Die Download-Links für die Skalare funktionieren jedoch nicht. Wie ich festgestellt habe, enthalten alle diese Links den Begriff "localhost". Nach meinem Verständnis beziehen sich diese Links auf einen bestimmten Ort in der virtuellen Maschine des Colab, und wahrscheinlich funktionieren diese Links nicht Browser meines PCs. Können Sie mir sagen, wie ich diese Skalare von den angegebenen Links (CSV oder JSON) herunterladen kann? Wenn Sie es wissen, beantworten Sie dies bitte hier: stackoverflow.com/questions/62660156/…
hafiz031

@ desmond13 Wenn Sie es separat ausführen möchten, stellen Sie sicher, dass der Befehl diesen Ordner "logs" ordnungsgemäß findet und der Ordner die zum Plotten erforderlichen Daten enthält.
hafiz031

24

Hier ist eine einfachere Möglichkeit, dieselbe ngrok-Tunnelmethode in Google Colab durchzuführen.

!pip install tensorboardcolab

dann,

from tensorboardcolab import TensorBoardColab, TensorBoardColabCallback

tbc=TensorBoardColab()

Angenommen, Sie verwenden Keras:

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

Sie können die Original - Beitrag lesen Sie hier .


1
Hallo, das scheint wirklich cool zu sein, aber ich bekomme diesen Fehler in Colab:FailedPreconditionError: Error while reading resource variable conv_dw_8/depthwise_kernel from Container: localhost. This could mean that the variable was uninitialized.
Austin

@Austin Der Autor von Tensorboardcolab hat eine Problemumgehung dafür gefunden: "Ich finde, dass es gelegentlich vorkommt und gelöst werden kann durch: 1. Warten 2. Colab-Server neu starten 3. Colab-Servertypen ändern (CPU / GPU / TPU), und dann wieder ändern ". Siehe seinen Kommentar hier
NeStack

Stellen Sie außerdem sicher, dass Ihr Modell direkt aus Keras besteht und nicht in Tensorflow eingebettet ist. Zum Beispiel statt zu model.add(tf.keras.layers.LSTM(....))tun model.add(keras.layers.LSTM(...)). Andernfalls kann es zu Fehlermeldungen kommen.
NeStack

12

TensorBoard für TensorFlow läuft auf Google Colab mit Tensorboardcolab. Dies verwendet ngrok intern zum Tunneln.

  1. Installieren Sie TensorBoardColab

!pip install tensorboardcolab

  1. Erstellen Sie ein Tensorboardcolab-Objekt

tbc = TensorBoardColab()

Dadurch wird automatisch ein TensorBoard-Link erstellt, der verwendet werden kann. Dieses Tensorboard liest die Daten unter './Graph'.

  1. Erstellen Sie einen FileWriter, der auf diesen Speicherort verweist

summary_writer = tbc.get_writer()

Die Tensorboardcolab-Bibliothek verfügt über die Methode, die das FileWriter-Objekt zurückgibt, das auf die Position './Graph' oben zeigt.

  1. Fügen Sie mithilfe des Objekts summary_writer zusammenfassende Informationen zu Ereignisdateien am Speicherort './Graph' hinzu

Sie können skalare Informationen oder Diagramm- oder Histogrammdaten hinzufügen.

Referenz: https://github.com/taomanwai/tensorboardcolab


6

Ich habe versucht, aber nicht das Ergebnis erhalten, aber wenn wie unten verwendet, habe ich die Ergebnisse erhalten

import tensorboardcolab as tb
tbc = tb.TensorBoardColab()

Danach öffnen Sie den Link von der Ausgabe.

import tensorflow as tf
import numpy as np

Erstellen Sie explizit ein Diagrammobjekt

graph = tf.Graph()
with graph.as_default()

Vollständiges Beispiel:

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

So können Sie Ihre Modelle in Google Colab inline anzeigen. Unten sehen Sie ein sehr einfaches Beispiel, in dem ein Platzhalter angezeigt wird:

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)

Derzeit können Sie einen Tensorboard-Dienst in Google Colab nicht so ausführen, wie Sie ihn lokal ausführen. Außerdem können Sie nicht Ihr gesamtes Protokoll über so etwas auf Ihr Laufwerk exportieren summary_writer = tf.summary.FileWriter('./logs', graph_def=sess.graph_def), um es dann herunterzuladen und lokal anzuzeigen.


4

Ich verwende die Sicherung von Google Drive und synchronisiere https://www.google.com/drive/download/backup-and-sync/ . Die Ereignisdateien, die während des Trainings vorab auf meinem Google Drive gespeichert werden, werden automatisch mit einem Ordner auf meinem eigenen Computer synchronisiert. Nennen wir diesen Ordner logs. Um auf die Visualisierungen in Tensorboard zuzugreifen, öffne ich die Eingabeaufforderung, navigiere zum synchronisierten Google Drive-Ordner und gebe Folgendes ein:tensorboard --logdir=logs .

Durch die automatische Synchronisierung meines Laufwerks mit meinem Computer (durch Sichern und Synchronisieren) kann ich Tensorboard so verwenden, als würde ich auf meinem eigenen Computer trainieren.

Bearbeiten: Hier ist ein Notizbuch, das hilfreich sein könnte. https://colab.research.google.com/gist/MartijnCa/961c5f4c774930f4bdd32d51829da6f6/tensorboard-with-google-drive-backup-and-sync.ipynb


Könnten Sie bitte Ihre Methode in ein gemeinsam nutzbares Colab schreiben und hier in Ihrem Beitrag teilen. Das wäre sehr hilfreich und schnell!
Anu

1
Wenn ich Ihren Rat befolge, kann ich nur über colab auf die Dateien in "Mein Laufwerk" zugreifen, nicht jedoch in "Computer", wo sich mein synchronisierter Computer befindet. Und Ihr Notebook meldet sich auch nicht bei Ihrem synchronisierten Computer an, sondern im Ordner "Mein Laufwerk" - siehe Zeile os.chdir('/content/drive/My Drive'). Können Sie weiter erklären, wie Sie auf Ihren synchronisierten Computer zugreifen?
NeStack

1
@NeStack Sie haben Recht, meine Lösung verwendet nur den Ordner "Mein Laufwerk". Entschuldigung für die Verwirrung, ich benutze keine "Computer". Mit dem Sicherungs- und Synchronisierungsprogramm können Sie den Ordner "Mein Laufwerk" mit Ihrem eigenen Computer synchronisieren. Auf diese Weise können Sie auf die Ereignisdateien im Datei-Explorer auf Ihrem eigenen Computer zugreifen.
Martijn Cazemier

@MartijnCazemier Okay, das macht Sinn. Es ist eine Option, die auch für mich funktionieren würde
NeStack

@MartijnCazemier erlaubt es mir nicht, weil mein Laufwerk einen Speicherplatz hat, und es erlaubt auch nicht, ihm zu entkommen.
Technazi

3

2.0 Kompatible Antwort : Ja, Sie können Tensorboard in Google Colab verwenden. Hier finden Sie den folgenden Code, der das vollständige Beispiel zeigt.

!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

Die Arbeitskopie von Google Colab finden Sie unter diesem Link . Weitere Informationen erhalten Sie über diesen Link .


3

Laut Dokumentation müssen Sie lediglich Folgendes tun:

%load_ext tensorboard
!rm -rf ./logs/ #to delete previous runs
%tensorboard --logdir logs/
tensorboard = TensorBoard(log_dir="./logs")

Und nennen Sie es einfach in der Fit-Methode:

model.fit(X_train, y_train, epochs = 1000,
         callbacks=[tensorboard], validation_data=(X_test, y_test))

Und das sollte dir so etwas geben:

Ich kann noch kein Bild posten, benutze also den Link.


2

Ich habe heute versucht, TensorBoard auf Google Colab zu zeigen.

# 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

'#################
trainiere
' ##################

# show tensorboard
%tensorboard --logdir logs/fit

Hier ist ein aktuelles Beispiel von Google. https://colab.research.google.com/github/tensorflow/tensorboard/blob/master/docs/r2/get_started.ipynb


2

Ja, die Verwendung von Tensorboard in Google Colab ist auf jeden Fall recht einfach. Befolgen Sie die folgenden Schritte:

1) Laden Sie die Tensorboard-Verlängerung

%load_ext tensorboard.notebook

2) Fügen Sie es zum Keras-Rückruf hinzu

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

3) Tensorboard starten

%tensorboard — logdir logs

Ich hoffe es hilft.


2

Es gibt eine alternative Lösung, aber wir müssen die TFv2.0-Vorschau verwenden. Wenn Sie also keine Probleme mit der Migration haben, versuchen Sie Folgendes:

Installieren Sie tfv2.0 für GPU oder CPU (TPU noch nicht verfügbar).

CPU
tf-nightly-2.0-Vorschau
GPU
tf-nightly-gpu-2.0-Vorschau

%%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 wie gewohnt importieren:

from tensorflow.keras.callbacks import TensorBoard

Bereinigen oder Ordner erstellen, in dem die Protokolle gespeichert werden sollen (führen Sie diese Zeilen aus, bevor Sie das Training ausführen 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)

Viel Spaß mit TensorBoard! :) :)

%tensorboard --logdir logs/fit

Hier das offizielle Colab-Notizbuch und das Repo auf Github

Neue TFv2.0 Alpha-Version:

CPU-
!pip install -q tensorflow==2.0.0-alpha0 GPU
!pip install -q tensorflow-gpu==2.0.0-alpha0



1

Um der Antwort von @ solver149 beizutreten, finden Sie hier ein einfaches Beispiel für die Verwendung von TensorBoard in Google Colab

1.Erstellen Sie das Diagramm, z.

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

2. Installieren Sie Tensorboard

!pip install tensorboardcolab # to install tensorboeadcolab if it does not it not exist

==> Ergebnis in meinem Fall:

Requirement already satisfied: tensorboardcolab in /usr/local/lib/python3.6/dist-packages (0.0.22)

3. Benutze es :)

Importieren Sie zunächst TensorBoard aus Tensorboaedcolab (Sie können import*damit alles auf einmal importieren) und erstellen Sie anschließend Ihr Tensorboeardcolab. Fügen Sie anschließend einen Writer wie folgt hinzu:

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

==> Ergebnis

Using TensorFlow backend.

Wait for 8 seconds...
TensorBoard link:
http://cf426c39.ngrok.io

4.Überprüfen Sie den angegebenen Link: D.

Tensorboard_Result_Graph_Image

Dieses Beispiel stammt aus dem TF-Handbuch: TensorBoard .


1
Die einzige Lösung, die bei Colab perfekt für mich funktioniert hat. Vielen Dank an @Dina Taklit!
JChat

Ich erhalte eine Fehlermeldung,AttributeError: module 'tensorflow_core.summary' has no attribute 'FileWriter'
Sarannns

@sarannns Ich hoffe, dies hilft stackoverflow.com/questions/43304270/…
DINA TAKLIT

1

TensorBoard funktioniert mit Google Colab und TensorFlow 2.0

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

1

Die Verwendung von summary_writer zum Schreiben eines Protokolls in jeder Epoche in einem Ordner und das Ausführen der folgenden Magie hat bei mir funktioniert.

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

0

Einfacher und einfachster Weg, den ich bisher gefunden habe:

Rufen Sie die Datei setup_google_colab.py mit wget ab

!wget https://raw.githubusercontent.com/hse-aml/intro-to- dl/master/setup_google_colab.py -O setup_google_colab.py
import setup_google_colab

Um Tensorboard im Hintergrund auszuführen, legen Sie den Port frei und klicken Sie auf den Link.
Ich gehe davon aus, dass Sie einen angemessenen Mehrwert haben, um ihn in Ihrer Zusammenfassung zu visualisieren und dann alle Zusammenfassungen zusammenzuführen.

import os
os.system("tensorboard --logdir=./logs --host 0.0.0.0 --port 6006 &")
setup_google_colab.expose_port_on_colab(6006)

Nachdem Sie die obigen Anweisungen ausgeführt haben, werden Sie mit einem Link wie folgt aufgefordert:

Open https://a1b2c34d5.ngrok.io to access your 6006 port

Weitere Hilfe finden Sie im folgenden Git:

https://github.com/MUmarAmanat/MLWithTensorflow/blob/master/colab_tensorboard.ipynb

Schauen Sie sich die anderen Antworten an. Die obigen Optionen sehen besser aus, da kein manueller Schritt erforderlich ist.
lucid_dreamer

@lucid_dreamer, ohne Zweifel oben Antwort haben bessere Erklärungen, Schritte und auch einfach, aber wenn wir wissen, andere Antworten lassen andere Leute alle Techniken kennen, können einige Techniken für einige Leute hilfreich sein. Es hängt alles von Ihrer Wahl ab.
Muhammad Umar Amanat

Ich AttributeError: module 'setup_google_colab' has no attribute 'expose_port_on_colab'
bekomme

@Biranchi expose_port_on_colab ist Funktion ist in setup_google_colab.py, Sie können diesen Link als Referenz besuchen github.com/hse-aml/intro-to-dl/blob/master/…
Muhammad Umar Amanat

0

Ich benutze Tensorflow == 1.15.

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

funktioniert bei mir.

/content/logs

ist der Pfad meiner Protokolle in Google Drive.


-1

Versuchen Sie das, es funktioniert für mich

%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])
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.