Google ColabでTensorFlowモデルをトレーニングするときにTensorBoardを使用する方法はありますか?
EDIT:おそらく、公式の %tensorboard
magic を試してみてください。TensorFlow1.13以降で利用できます。
%tensorboard
マジックが存在する前は、これを達成する標準的な方法は、ネットワークトラフィックを ngrok を使用してColab VMにプロキシすることでした。 Colabの例は here にあります。
手順は次のとおりです(コードスニペットは、colabの「コード」タイプのセルを表します)。
TensorBoardをバックグラウンドで実行します。
この答え 。に触発された
LOG_DIR = '/tmp/log'
get_ipython().system_raw(
'tensorboard --logdir {} --Host 0.0.0.0 --port 6006 &'
.format(LOG_DIR)
)
ngrok をダウンロードして解凍します。wget
に渡されたリンクをOSの正しいダウンロードリンクに置き換えます。
! wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-AMD64.Zip
! unzip ngrok-stable-linux-AMD64.Zip
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'])"
Google Colabで同じngrokトンネリング方法を実行する簡単な方法を次に示します。
!pip install tensorboardcolab
その後、
from tensorboardcolab import TensorBoardColab, TensorBoardColabCallback
tbc=TensorBoardColab()
Kerasを使用していると仮定します:
model.fit(......,callbacks=[TensorBoardColabCallback(tbc)])
元の投稿を読むことができます こちら 。
Tensorboardcolabを使用してGoogle Colabで実行されるTensorFlowのTensorBoard。これは、トンネリングに内部的にngrokを使用します。
!pip install tensorboardcolab
tbc = TensorBoardColab()
これにより、使用可能なTensorBoardリンクが自動的に作成されます。このTensorboardは './Graph'のデータを読み取っています
summary_writer = tbc.get_writer()
tensorboardcolabライブラリには、上記の './Graph'の場所を指すFileWriterオブジェクトを返すメソッドがあります。
スカラー情報、グラフ、またはヒストグラムデータを追加できます。
試しましたが結果は得られませんでしたが、以下のように使用すると結果が得られました
import tensorboardcolab as tb
tbc = tb.TensorBoardColab()
import tensorflow as tf
import numpy as np
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'
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('"', '"'))
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)
現在、ローカルで実行する方法でGoogle ColabでTensorboardサービスを実行することはできません。また、summary_writer = tf.summary.FileWriter('./logs', graph_def=sess.graph_def)
などの方法でログ全体をドライブにエクスポートすることはできません。したがって、ダウンロードしてローカルで見ることができます。
Googleドライブのバックアップと同期を利用します https://www.google.com/drive/download/backup-and-sync/ 。トレーニング中にGoogleドライブに定期的に保存されるイベントファイルは、自分のコンピューター上のフォルダーに自動的に同期されます。このフォルダーをlogs
と呼びましょう。テンソルボードの視覚化にアクセスするには、コマンドプロンプトを開き、同期されたGoogleドライブフォルダーに移動して、tensorboard --logdir=logs
と入力します。
したがって、ドライブをコンピューターと自動的に同期することにより(バックアップと同期を使用)、自分のコンピューターでトレーニングしているようにテンソルボードを使用できます。
編集:これは役に立つかもしれないノートブックです。 https://colab.research.google.com/Gist/MartijnCa/961c5f4c774930f4bdd32d51829da6f6/tensorboard-with-google-drive-backup-and-sync.ipynb
TensorBoardはGoogle ColabおよびTensorFlow 2.0で動作します
!pip install tensorflow==2.0.0-alpha0
%load_ext tensorboard.notebook
今日、Google colabでTensorBoardを表示しようとしましたが、
# 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
@ solver149の回答に参加するために、Google colabでTensorBoardを使用する簡単な例を示します
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
==>私の場合の結果:
Requirement already satisfied: tensorboardcolab in /usr/local/lib/python3.6/dist-packages (0.0.22)
TensorboaedcolabからTensorBoardをインポートするすべての拳(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
この例は、TFガイドのトークンでした: TensorBoard 。
代替ソリューションがありますが、TFv2.0プレビューを使用する必要があります。移行に問題がない場合は、これを試してください:
gPUまたはCPU用の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
通常どおり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
新しいTFv2.0アルファリリース:
CPU!pip install -q tensorflow==2.0.0-alpha0
GPU!pip install -q tensorflow-gpu==2.0.0-alpha0
はい、Google colabでテンソルボードを使用するのは非常に簡単です。次の手順に従ってください
1)テンソルボード拡張機能をロードする
%load_ext tensorboard.notebook
2)kerasコールバックに追加します
tensorboard_callback = tf.keras.callbacks.TensorBoard(logdir, histogram_freq=1)
3)テンソルボードを開始
%tensorboard — logdir logs
それが役に立てば幸い。
ここでの回答の多くは廃止されました。数週間後にはきっと私のものになるでしょう。しかし、これを書いている時点で私がしなければならなかったのは、コラボからこれらのコード行を実行することだけでした。そして、テンソルボードはうまく開きました。
%load_ext tensorboard
%tensorboard --logdir logs
これまでに見つけたシンプルで簡単な方法:
Wgetを使用してsetup_google_colab.pyファイルを取得します
!wget https://raw.githubusercontent.com/hse-aml/intro-to- dl/master/setup_google_colab.py -O setup_google_colab.py
import setup_google_colab
テンソルボードをバックグラウンドで実行するには、ポートを公開してリンクをクリックします。
サマリーで視覚化してからすべてのサマリーをマージするための適切な付加価値があると想定しています。
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