tensorflow - google colaboratory tensorboard
¿Puedo usar TensorBoard con Google Colab? (12)
¿Hay alguna forma de usar TensorBoard al entrenar un modelo TensorFlow en Google Colab?
Aquí es cómo puede mostrar sus modelos en línea en Google Colab. A continuación se muestra un ejemplo muy simple que muestra un marcador de posición:
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)
Actualmente, no puede ejecutar un servicio de Tensorboard en Google Colab de la forma en que lo ejecuta localmente.
Además, no puede exportar todo su registro a su Drive a través de algo como
summary_writer = tf.summary.FileWriter(''./logs'', graph_def=sess.graph_def)
para que luego pueda descargarlo y mirarlo localmente.
Aquí hay una manera más fácil de hacer el mismo método de túnel ngrok en Google Colab.
!pip install tensorboardcolab
entonces,
from tensorboardcolab import TensorBoardColab, TensorBoardColabCallback
tbc=TensorBoardColab()
Suponiendo que está usando Keras:
model.fit(......,callbacks=[TensorBoardColabCallback(tbc)])
Puedes leer la publicación original here .
Hago uso de la copia de seguridad y sincronización de Google Drive
https://www.google.com/drive/download/backup-and-sync/
.
Los archivos de eventos, que se guardan de forma periódica en mi unidad de Google durante el entrenamiento, se sincronizan automáticamente con una carpeta en mi propia computadora.
Llamemos a esta carpeta
logs
.
Para acceder a las visualizaciones en el tensorboard, abro el símbolo del sistema, navego a la carpeta sincronizada de Google Drive y
tensorboard --logdir=logs
:
tensorboard --logdir=logs
.
Entonces, al sincronizar automáticamente mi disco con mi computadora (usando copia de seguridad y sincronización), puedo usar el tensorboard como si estuviera entrenando en mi propia computadora.
Editar: Aquí hay un cuaderno que puede ser útil. https://colab.research.google.com/gist/MartijnCa/961c5f4c774930f4bdd32d51829da6f6/tensorboard-with-google-drive-backup-and-sync.ipynb
Hay una solución alternativa, pero tenemos que usar la vista previa TFv2.0. Entonces, si no tiene problemas con la migración, intente esto:
instale tfv2.0 para GPU o CPU (TPU aún no disponible)
UPC
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
importa TensorBoard como de costumbre:
from tensorflow.keras.callbacks import TensorBoard
Limpie o cree una carpeta donde guardar los registros (ejecute estas líneas antes de ejecutar el
fit()
entrenamiento
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)
Diviértete con TensorBoard! :)
%tensorboard --logdir logs/fit
Here el cuaderno oficial de colab y el repo en github
Nueva versión alfa de TFv2.0:
UPC
!pip install -q tensorflow==2.0.0-alpha0
GPU
!pip install -q tensorflow-gpu==2.0.0-alpha0
Intenté pero no obtuve el resultado, pero cuando se usó de la siguiente manera, obtuve los resultados
import tensorboardcolab as tb
tbc = tb.TensorBoardColab()
después de esto, abra el enlace desde la salida.
import tensorflow as tf
import numpy as np
Crear explícitamente un objeto Graph
graph = tf.Graph()
with graph.as_default()
Ejemplo completo:
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''
La forma más simple y fácil que he encontrado hasta ahora:
Obtenga el archivo setup_google_colab.py usando 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
Para ejecutar el tensorboard en segundo plano, exponga el puerto y haga clic en el enlace.
Supongo que tiene un valor agregado adecuado para visualizar en su resumen y luego combinar todos los resúmenes.
import os
os.system("tensorboard --logdir=./logs --host 0.0.0.0 --port 6006 &")
setup_google_colab.expose_port_on_colab(6006)
Después de ejecutar las declaraciones anteriores, aparecerá un enlace como:
Open https://a1b2c34d5.ngrok.io to access your 6006 port
Consulte el siguiente git para obtener más ayuda:
https://github.com/MUmarAmanat/MLWithTensorflow/blob/master/colab_tensorboard.ipynb
Para unirse a la respuesta @ solver149, aquí hay un ejemplo simple de cómo usar TensorBoard en google colab
1.Cree el gráfico, por ejemplo:
a = tf.constant(3.0, dtype=tf.float32)
b = tf.constant(4.0)
total = a + b
2. Instalar Tensorboard
!pip install tensorboardcolab # to install tensorboeadcolab if it does not it not exist
==> Resultado en mi caso:
Requirement already satisfied: tensorboardcolab in /usr/local/lib/python3.6/dist-packages (0.0.22)
3. Úselo :)
Puño de todos los TensorBoard importados de tensorboaedcolab (puede usar
import*
para importar todo de una vez), luego cree su tensorboeardcolab después de eso adjunte un escritor de esta manera:
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()
==> Resultado
Using TensorFlow backend.
Wait for 8 seconds...
TensorBoard link:
http://cf426c39.ngrok.io
4.Compruebe el enlace dado: D
Este ejemplo fue token de la guía TF: TensorBoard .
Sí, definitivamente, usar tensorboard en google colab es bastante fácil. Sigue los siguientes pasos:
1) Cargue la extensión del tensorboard
%load_ext tensorboard.notebook
2) Agregarlo a la devolución de llamada keras
tensorboard_callback = tf.keras.callbacks.TensorBoard(logdir, histogram_freq=1)
3) Iniciar tensorboard
%tensorboard — logdir logs
Espero eso ayude.
TensorBoard funciona con Google Colab y TensorFlow 2.0
!pip install tensorflow==2.0.0-alpha0
%load_ext tensorboard.notebook
TensorBoard para TensorFlow que se ejecuta en Google Colab usando tensorboardcolab. Esto usa ngrok internamente para hacer túneles.
- Instalar TensorBoardColab
!pip install tensorboardcolab
- Crear un objeto tensorboardcolab
tbc = TensorBoardColab()
Esto crea automáticamente un enlace de TensorBoard que se puede usar. Este Tensorboard está leyendo los datos en ''./Graph''
- Cree un FileWriter que apunte a esta ubicación
summary_writer = tbc.get_writer()
La biblioteca tensorboardcolab tiene el método que devuelve el objeto FileWriter apuntando a la ubicación ''./Graph'' anterior.
- Comience a agregar información de resumen a los archivos de eventos en la ubicación ''./Graph'' usando el objeto summary_writer
Puede agregar información escalar o datos de gráfico o histograma.
Referencia: https://github.com/taomanwai/tensorboardcolab
Traté de mostrar TensorBoard en Google Colab hoy,
# 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
''################
hacer entrenamiento
''################
# show tensorboard
%tensorboard --logdir logs/fit
Aquí hay un ejemplo real hecho por Google. https://colab.research.google.com/github/tensorflow/tensorboard/blob/master/docs/r2/get_started.ipynb
EDITAR:
Probablemente quieras
%tensorboard
magia
oficial de
%tensorboard
, disponible desde TensorFlow 1.13 en adelante.
Antes de la existencia de la magia
%tensorboard
, la forma estándar de lograr esto era proxy del tráfico de red a la VM Colab usando
ngrok
.
Un ejemplo de Colab se puede encontrar
here
.
Estos son los pasos (los fragmentos de código representan celdas de tipo "código" en colab):
-
Haga que TensorBoard se ejecute en segundo plano.
Inspirado por esta respuesta .LOG_DIR = ''/tmp/log'' get_ipython().system_raw( ''tensorboard --logdir {} --host 0.0.0.0 --port 6006 &'' .format(LOG_DIR) )
-
Descargar y descomprimir ngrok .
Reemplace el enlace pasado awget
con el enlace de descarga correcto para su sistema operativo.! wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip ! unzip ngrok-stable-linux-amd64.zip
-
Iniciar proceso de fondo ngrok ...
get_ipython().system_raw(''./ngrok http 6006 &'')
... y recuperar la url pública. Source
! curl -s http://localhost:4040/api/tunnels | python3 -c / "import sys, json; print(json.load(sys.stdin)[''tunnels''][0][''public_url''])"