Gibt es eine Möglichkeit, TensorBoard beim Training eines TensorFlow-Modells in Google Colab zu verwenden?
Antworten:
EDIT: Sie möchten wahrscheinlich die offizielle %tensorboard
Magie ausprobieren, die ab TensorFlow 1.13 verfügbar ist.
Vor der Existenz der %tensorboard
Magie 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):
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)
)
Laden Sie ngrok herunter und entpacken Sie es .
Ersetzen Sie den übergebenen Link wget
durch 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
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'])"
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
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 .
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(....))
tun model.add(keras.layers.LSTM(...))
. Andernfalls kann es zu Fehlermeldungen kommen.
TensorBoard für TensorFlow läuft auf Google Colab mit Tensorboardcolab. Dies verwendet ngrok intern zum Tunneln.
!pip install tensorboardcolab
tbc = TensorBoardColab()
Dadurch wird automatisch ein TensorBoard-Link erstellt, der verwendet werden kann. Dieses Tensorboard liest die Daten unter './Graph'.
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.
Sie können skalare Informationen oder Diagramm- oder Histogrammdaten hinzufügen.
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()
import tensorflow as tf
import numpy as np
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'
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('"', '"'))
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.
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
os.chdir('/content/drive/My Drive')
. Können Sie weiter erklären, wie Sie auf Ihren synchronisierten Computer zugreifen?
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 .
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 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
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.
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
Mit dem kürzlich durchgeführten Upgrade von Google Colab können Sie direkt eine Verbindung zu Tensorboard in Google Colab herstellen.
https://medium.com/@today.rafi/tensorboard-in-google-colab-bd49fa554f9b
Um der Antwort von @ solver149 beizutreten, finden Sie hier ein einfaches Beispiel für die Verwendung von TensorBoard in 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
==> Ergebnis in meinem Fall:
Requirement already satisfied: tensorboardcolab in /usr/local/lib/python3.6/dist-packages (0.0.22)
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
Dieses Beispiel stammt aus dem TF-Handbuch: TensorBoard .
AttributeError: module 'tensorflow_core.summary' has no attribute 'FileWriter'
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
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
AttributeError: module 'setup_google_colab' has no attribute 'expose_port_on_colab'
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])