KerasのTensorboardコールバックを使用するにはどうすればよいですか?


143

Kerasでニューラルネットワークを構築しました。Tensorboardでデータを視覚化するため、以下を利用しました。

keras.callbacks.TensorBoard(log_dir='/Graph', histogram_freq=0,
                            write_graph=True, write_images=True)

keras.ioで説明されています。コールバックを実行するとが取得され<keras.callbacks.TensorBoard at 0x7f9abb3898>ますが、「Graph」フォルダにファイルがありません。このコールバックの使用方法に何か問題がありますか?


3
に設定histogram_freqすることをお勧めします1。「histogram_freq:モデルのレイヤーのアクティベーションヒストグラムを計算する頻度(エポック単位)。0に設定すると、ヒストグラムは計算されません。」
マットクラインスミス2017年

10
注意: "/ Graph"はルートディレクトリにディレクトリを作成し、 "./ Graph"は作業ディレクトリにディレクトリを作成します。
Matt Kleinsmith 2017

@MattKleinsmith 0に設定すると、モデルのレイヤーのアクティブ化と重みのヒストグラムのみが検証データを介して計算されなくなり、メトリックは引き続きログに記録されます。
BugKiller 2018

私は、logdirに一意の名前を付けて、stackoverflow.com
a /

回答:


219
keras.callbacks.TensorBoard(log_dir='./Graph', histogram_freq=0,  
          write_graph=True, write_images=True)

この行はCallback Tensorboardオブジェクトを作成します。そのオブジェクトをキャプチャしてfit、モデルの関数に与える必要があります。

tbCallBack = keras.callbacks.TensorBoard(log_dir='./Graph', histogram_freq=0, write_graph=True, write_images=True)
...
model.fit(...inputs and parameters..., callbacks=[tbCallBack])

この方法で、コールバックオブジェクトを関数に渡しました。トレーニング中に実行され、テンソルボードで使用できるファイルを出力します。

トレーニング中に作成されたファイルを視覚化する場合は、ターミナルで実行します

tensorboard --logdir path_to_current_dir/Graph 

お役に立てれば !


write_images = Falseの場合、次のエラーでこれを使用しました
abdul qayyum

InvalidArgumentError(トレースバックについては上記を参照):Tensorは、[1,3,3,256,256,1]ではなく、最後のディムが1、3、または4の4次元でなければなりません[[Node:conv_3.2_2 / kernel_0_1 = ImageSummary [T = DT_FLOAT、 bad_color = Tensor <type:uint8 shape:[4]値:255 0 0 ...>、max_images = 3、_device = "/ job:localhost / replica:0 / task:0 / cpu:0"](conv_3。 2_2 / kernel_0_1 / tag、ExpandDims_50)]]
abdul qayyum

そして、True Any Ideaのときにプレースホルダにdtype = floatが欠落していると言っていることはありますか
abdul qayyum

2
[スカラー]タブはまだ空ですが、[グラフ]タブでモデルアーキテクチャを確認できますか?
iratzhash

1
これは、トレーニングの損失と精度のためのスカラーのみを生成します。関数fitに渡されるvalidation_dataに対して同じようにするにはどうすればよいですか?
Utku Ufuk 2018

46

これがTensorBoardコールバックの使用方法です。

from keras.callbacks import TensorBoard

tensorboard = TensorBoard(log_dir='./logs', histogram_freq=0,
                          write_graph=True, write_images=False)
# define model
model.fit(X_train, Y_train,
          batch_size=batch_size,
          epochs=nb_epoch,
          validation_data=(X_test, Y_test),
          shuffle=True,
          callbacks=[tensorboard])

2
テンソルボードの出力をよりよく構造化する方法はありますか?Kerasはその点でいくつかの最適化を行いますか?
Nickpick 2017

2
@nickpickどういう意味かわかりません。しかし、これは別の質問の候補になるかもしれないと思います。
Martin Thoma


注意する必要があるのhistogram_freq=0は、テンソルボードがヒストグラムを記録しない場合に設定されることです。tf.summary.histogramそれ以外の場合 histogram_freqは0に等しくありません。
アジャイルBean

20

変化する

keras.callbacks.TensorBoard(log_dir='/Graph', histogram_freq=0,  
          write_graph=True, write_images=True)

tbCallBack = keras.callbacks.TensorBoard(log_dir='Graph', histogram_freq=0,  
          write_graph=True, write_images=True)

モデルを設定します

tbCallback.set_model(model)

端末で実行する

tensorboard  --logdir Graph/

わかったAttributeError: 'TensorBoard' object has no attribute 'set_model'
ファビオ・ペレス

15

Kerasライブラリを使用していて、テンソルボードを使用して精度やその他の変数のグラフを印刷する場合は、以下の手順に従います。

ステップ1:以下のコマンドを使用してテンソルボードをインポートするようにkerasコールバックライブラリを初期化します

from keras.callbacks import TensorBoard

ステップ2:以下のコマンドをプログラムの「model.fit()」コマンドの直前に含めます。

tensor_board = TensorBoard(log_dir='./Graph', histogram_freq=0, write_graph=True, write_images=True)

注:「./graph」を使用してください。現在の作業ディレクトリにグラフフォルダを生成します。「/ graph」の使用は避けてください。

ステップ3:Tensorboardコールバックを「model.fit()」に含めます。サンプルを以下に示します。

model.fit(X_train,y_train, batch_size=batch_size, epochs=nb_epoch, verbose=1, validation_split=0.2,callbacks=[tensor_board])

ステップ4:コードを実行し、グラフフォルダが作業ディレクトリにあるかどうかを確認します。上記のコードが正しく機能する場合、作業ディレクトリに「Graph」フォルダがあります。

手順5:作業ディレクトリでターミナルを開き、以下のコマンドを入力します。

tensorboard --logdir ./Graph

ステップ6:Webブラウザーを開き、以下のアドレスを入力します。

http://localhost:6006

入力後、Tensorbaordページが開き、さまざまな変数のグラフを表示できます。


注意する必要があるのhistogram_freq=0は、テンソルボードがヒストグラムを記録しない場合に設定されることです。tf.summary.histogramそれ以外の場合 histogram_freqは0に等しくありません。
アジャイルBean

9

ここにいくつかのコードがあります:

K.set_learning_phase(1)
K.set_image_data_format('channels_last')

tb_callback = keras.callbacks.TensorBoard(
    log_dir=log_path,
    histogram_freq=2,
    write_graph=True
)
tb_callback.set_model(model)
callbacks = []
callbacks.append(tb_callback)

# Train net:
history = model.fit(
    [x_train],
    [y_train, y_train_c],
    batch_size=int(hype_space['batch_size']),
    epochs=EPOCHS,
    shuffle=True,
    verbose=1,
    callbacks=callbacks,
    validation_data=([x_test], [y_test, y_test_coarse])
).history

# Test net:
K.set_learning_phase(0)
score = model.evaluate([x_test], [y_test, y_test_coarse], verbose=0)

基本的にhistogram_freq=2は、このコールバックを呼び出すときに調整する最も重要なパラメーターです。これは、コールバックを呼び出すエポックの間隔を設定し、ディスク上に生成するファイルの数を減らすことを目的としています。

これが、TensorBoardの「ヒストグラム」タブの下で一度見られた最後の畳み込みの値の進化の視覚化の例です(「分布」タブには非常によく似たグラフが含まれていますが、横が反転しています)。

テンソルボードの重量モニタリング

コンテキストで完全な例を確認したい場合は、このオープンソースプロジェクトを参照できます。https//github.com/Vooban/Hyperopt-Keras-CNN-CIFAR-100


この質問の大部分は実際には質問であり、質問への回答ではないため、これに反対しました。それが回答の一部であろうと全体的な目的であろうと、回答で新しい質問をしないでください。
Zoe

質問を編集して、あなたが言及した内容を削除しました。実際、このコールバックは、私が回答した時点のドキュメントから適切に使用するのが非常に困難です。
Guillaume Chevalier

「KerasのTensorBoardコールバックを使用するにはどうすればよいですか?」と回答するには、他のすべての回答は不完全であり、質問の小さなコンテキストにのみ応答します。たとえば、埋め込みに取り組む人はいません。少なくとも、私は私の潜在的なエラーや回避すべき事柄を私の回答に記録していました。まだ誰も考えていないような重要な問題を提起したと思います。私はまだ完全な答えを待っています。このコールバックも、癌のように文書化されていません。
Guillaume Chevalier、

4

google-colabを使用している場合、グラフの単純な視覚化は次のようになります。

import tensorboardcolab as tb

tbc = tb.TensorBoardColab()
tensorboard = tb.TensorBoardColabCallback(tbc)


history = model.fit(x_train,# Features
                    y_train, # Target vector
                    batch_size=batch_size, # Number of observations per batch
                    epochs=epochs, # Number of epochs
                    callbacks=[early_stopping, tensorboard], # Early stopping
                    verbose=1, # Print description after each epoch
                    validation_split=0.2, #used for validation set every each epoch
                    validation_data=(x_test, y_test)) # Test data-set to evaluate the model in the end of training

2

代わりに書いlog_dir='/Graph'たのです./Graphか?/home/user/Graph現時点でに送信しました。


1
直接/Graph使用/Graphするのではなく、ユーザーのホームディレクトリにフォルダーを作成するのはなぜですか?
Michael Mior

2

Losswise(https://losswise.com)をチェックしてください。Tensorboard よりも使いやすいKerasのプラグインがあり、いくつかの優れた追加機能があります。Losswiseを使用すればfrom losswise.libs import LosswiseKerasCallback、あとは問題なく使用callback = LosswiseKerasCallback(tag='my fancy convnet 1')できます(https://docs.losswise.com/#keras-pluginを参照)。


7
免責事項:OPはLosswiseの創設者であり、有料の製品です(ただし、かなり無料の無料枠があります)
Michael Mior

@MichaelMiorは正しいですが、まだ有料の製品ではなく、今後もそうならない可能性があります(将来的には、プレミアムライセンス以外では)
nicodjimenez

2

いくつかあります。

まず、では/Graphなく./Graph

2つ目は、TensorBoardコールバックを使用するときは、常に検証データを渡すことです。それがないと、検証データが開始されないためです。

3番目に、スカラーサマリー以外のものを使用するfit場合は、fit_generatorが機能しないため、メソッドのみを使用する必要があります。または、で動作するようにコールバックを書き直すことができますfit_generator

コールバックを追加するには、それに追加するだけです model.fit(..., callbacks=your_list_of_callbacks)



2

Tensorboardコールバックを作成します。

from keras.callbacks import TensorBoard
from datetime import datetime
logDir = "./Graph/" + datetime.now().strftime("%Y%m%d-%H%M%S") + "/"
tb = TensorBoard(log_dir=logDir, histogram_freq=2, write_graph=True, write_images=True, write_grads=True)

Tensorboardコールバックをfit呼び出しに渡します。

history = model.fit(X_train, y_train, epochs=200, callbacks=[tb])

モデルを実行しているときに、Kerasエラーが発生した場合

「プレースホルダーテンソルの値をフィードする必要があります」

次のようにして、モデルを作成する前にKerasセッションをリセットしてみてください:

import keras.backend as K
K.clear_session()

問題は修正されましたYou must feed a value for placeholder tensor。なぜか?
Ruthvik Vaila
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.