Est-il possible d'utiliser TensorBoard lors de la formation d'un modèle TensorFlow sur Google Colab?
EDIT: Vous voulez probablement donner au fonctionnaire %tensorboard
magic un essai, disponible à partir de TensorFlow 1.13.
Avant l'existence de la magie %tensorboard
, le moyen standard d'y parvenir consistait à effectuer un proxy du trafic réseau vers Colab VM à l'aide de ngrok . Un exemple de Colab peut être trouvé ici .
Voici les étapes (les extraits de code représentent des cellules de type "code" dans colab):
Faites fonctionner TensorBoard en arrière-plan.
Inspiré par cette réponse .
LOG_DIR = '/tmp/log'
get_ipython().system_raw(
'tensorboard --logdir {} --Host 0.0.0.0 --port 6006 &'
.format(LOG_DIR)
)
Téléchargez et décompressez ngrok .
Remplace le lien passé à wget
par le lien de téléchargement correspondant à votre système d'exploitation.
! wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-AMD64.Zip
! unzip ngrok-stable-linux-AMD64.Zip
Lancer le processus en arrière-plan de ngrok ...
get_ipython().system_raw('./ngrok http 6006 &')
... et récupérer l'URL publique. Source
! curl -s http://localhost:4040/api/tunnels | python3 -c \
"import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"
Voici un moyen plus simple de faire la même méthode de tunneling ngrok sur Google Colab.
!pip install tensorboardcolab
ensuite,
from tensorboardcolab import TensorBoardColab, TensorBoardColabCallback
tbc=TensorBoardColab()
En supposant que vous utilisez Keras:
model.fit(......,callbacks=[TensorBoardColabCallback(tbc)])
Vous pouvez lire le message original ici .
TensorBoard for TensorFlow s'exécutant sur Google Colab à l'aide de tensorboardcolab. Ceci utilise ngrok en interne pour la tunnelisation.
!pip install tensorboardcolab
tbc = TensorBoardColab()
Cela crée automatiquement un lien TensorBoard qui peut être utilisé. Ce Tensorboard lit les données sur './Graph'
summary_writer = tbc.get_writer()
la bibliothèque tensorboardcolab a la méthode qui renvoie l'objet FileWriter pointant au-dessus de l'emplacement './Graph'.
Vous pouvez ajouter des informations scalaires ou des données de graphique ou d'histogramme.
J'ai essayé mais je n'ai pas obtenu le résultat, mais j'ai utilisé les résultats ci-dessous.
import tensorboardcolab as tb
tbc = tb.TensorBoardColab()
import tensorflow as tf
import numpy as np
graph = tf.Graph()
with graph.as_default()
Exemple complet:
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'
Voici comment afficher vos modèles en ligne sur Google Colab. Voici un exemple très simple qui affiche un espace réservé:
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)
Actuellement, vous ne pouvez pas exécuter un service Tensorboard sur Google Colab de la manière dont vous l'exécutez localement. En outre, vous ne pouvez pas exporter l'intégralité de votre journal sur votre lecteur via quelque chose comme summary_writer = tf.summary.FileWriter('./logs', graph_def=sess.graph_def)
afin de pouvoir le télécharger et le consulter localement.
Je me sers de la sauvegarde et de la synchronisation de google drive https://www.google.com/drive/download/backup-and-sync/ . Les fichiers d'événements, qui sont pré-enregistrés dans mon lecteur google pendant l'entraînement, sont automatiquement synchronisés dans un dossier de mon propre ordinateur. Appelons ce dossier logs
. Pour accéder aux visualisations dans tensorboard, ouvrez la commande Invite, naviguez jusqu'au dossier google drive synchronisé et tapez: tensorboard --logdir=logs
.
Ainsi, en synchronisant automatiquement mon disque avec mon ordinateur (en utilisant la sauvegarde et la synchronisation), je peux utiliser tensorboard comme si je m'entraînais sur mon propre ordinateur.
Edit: Voici un carnet de notes qui pourrait être utile. https://colab.research.google.com/Gist/MartijnCa/961c5f4c774930f4bdd32d51829da6f6/tensorboard-with-google-drive-backup-and-sync.ipynb
TensorBoard fonctionne avec Google Colab et TensorFlow 2.0
!pip install tensorflow==2.0.0-alpha0
%load_ext tensorboard.notebook
J'ai essayé de montrer TensorBoard sur google colab aujourd'hui,
# 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
'#################
faire de la formation
'#################
# show tensorboard
%tensorboard --logdir logs/fit
voici l'exemple réel fait par google. https://colab.research.google.com/github/tensorflow/tensorboard/blob/master/docs/r2/get_started.ipynb
Pour rejoindre la réponse @ solver149, voici un exemple simple d'utilisation de TensorBoard dans 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
==> Résultat dans mon cas:
Requirement already satisfied: tensorboardcolab in /usr/local/lib/python3.6/dist-packages (0.0.22)
Importez tout d'abord TensorBoard de tensorboaedcolab (vous pouvez utiliser import*
pour tout importer en une fois), puis créez votre tensorboeardcolab après que vous y attachez un écrivain comme ceci:
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()
==> Résultat
Using TensorFlow backend.
Wait for 8 seconds...
TensorBoard link:
http://cf426c39.ngrok.io
Cet exemple était un jeton du guide TF: TensorBoard .
Il existe une solution alternative mais nous devons utiliser l'aperçu TFv2.0. Donc, si vous n'avez pas de problèmes avec la migration, essayez ceci:
installer tfv2.0 pour GPU ou CPU (TPU non encore disponible)
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
importer TensorBoard comme d'habitude:
from tensorflow.keras.callbacks import TensorBoard
Nettoyer ou créer un dossier où enregistrer les journaux (exécutez ces lignes avant de lancer la formation 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)
Amusez-vous avec TensorBoard! :)
%tensorboard --logdir logs/fit
Ici le cahier officiel de la colab et le repo sur github
Nouvelle version alpha de TFv2.0:
CPU!pip install -q tensorflow==2.0.0-alpha0
GPU!pip install -q tensorflow-gpu==2.0.0-alpha0
Oui, utiliser tensorboard dans Google Colab est très simple. Suivez les étapes suivantes
1) Charger l’extension tensorboard
%load_ext tensorboard.notebook
2) l'ajouter au rappel de keras
tensorboard_callback = tf.keras.callbacks.TensorBoard(logdir, histogram_freq=1)
3) Démarrer tensorboard
%tensorboard — logdir logs
J'espère que ça aide.
Beaucoup de réponses ici sont maintenant obsolètes. Donc ce sera le mien, j'en suis sûr, dans quelques semaines. Mais au moment d'écrire ces lignes, il ne me restait plus qu'à exécuter ces lignes de code à partir de colab. Et le tensorboard s'est très bien ouvert.
%load_ext tensorboard
%tensorboard --logdir logs
Le moyen le plus simple et le plus simple que j'ai trouvé jusqu'à présent:
Obtenez le fichier setup_google_colab.py à l'aide de 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
Pour exécuter tensorboard en arrière-plan, exposez le port et cliquez sur le lien.
Je suppose que vous avez une valeur ajoutée appropriée à visualiser dans votre résumé, puis à fusionner tous les résumés.
import os
os.system("tensorboard --logdir=./logs --Host 0.0.0.0 --port 6006 &")
setup_google_colab.expose_port_on_colab(6006)
Après avoir exécuté les instructions ci-dessus, un lien comme celui-ci vous sera demandé:
Open https://a1b2c34d5.ngrok.io to access your 6006 port
Reportez-vous à git suivant pour obtenir de l'aide:
https://github.com/MUmarAmanat/MLWithTensorflow/blob/master/colab_tensorboard.ipynb