Bagaimana cara menggunakan panggilan balik Tensorboard Keras?

143

Saya telah membangun jaringan saraf dengan Keras. Saya akan memvisualisasikan datanya oleh Tensorboard, oleh karena itu saya telah memanfaatkan:

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

seperti yang dijelaskan dalam keras.io . Ketika saya menjalankan panggilan balik yang saya dapatkan <keras.callbacks.TensorBoard at 0x7f9abb3898>, tetapi saya tidak mendapatkan file apa pun di folder saya "Grafik". Apakah ada yang salah dalam cara saya menggunakan panggilan balik ini?

Simone
sumber
3
Saya akan menyarankan pengaturan histogram_frequntuk 1. "histogram_freq: frekuensi (dalam zaman) di mana untuk menghitung histogram aktivasi untuk lapisan model. Jika diatur ke 0, histogram tidak akan dihitung."
Matt Kleinsmith
10
Hati-hati: "/ Grafik" membuat direktori di direktori root, sementara "./Graph" membuatnya di direktori yang berfungsi.
Matt Kleinsmith
@MattKleinsmith Jika diatur ke 0, hanya histogram aktivasi dan berat untuk lapisan model tidak akan dihitung melalui data Validasi, metrik masih akan dicatat.
BugKiller
Saya pikir lebih baik memberikan nama yang unik untuk tampilan logdir di stackoverflow.com/a/54949146/1179925
mrgloom

Jawaban:

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

Baris ini menciptakan objek Callback Tensorboard, Anda harus menangkap objek itu dan memberikannya ke fitfungsi model Anda.

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

Dengan cara ini Anda memberikan objek panggilan balik ke fungsi. Ini akan dijalankan selama pelatihan dan akan menampilkan file yang dapat digunakan dengan tensorboard.

Jika Anda ingin memvisualisasikan file yang dibuat selama pelatihan, jalankan di terminal Anda

tensorboard --logdir path_to_current_dir/Graph 

Semoga ini membantu !

Nassim Ben
sumber
Saya menggunakan ini dengan kesalahan berikut ketika write_images = Salah
abdul qayyum
InvalidArgumentError (lihat di atas untuk traceback): Tensor harus 4-D dengan redup terakhir 1, 3, atau 4, bukan [1,3,3,256,256,1]] [[Node: conv_3.2_2 / kernel_0_1 = ImageSummary [T = DT_FLOAT, bad_color = Tensor <type: uint8 shape: [4] nilai: 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
Dan sesuatu yang mengatakan placeholder hilang dtype = mengambang ketika True Any Idea?
abdul qayyum
2
Tab Scalars masih kosong, meskipun saya bisa melihat arsitektur model saya di tab Grafik?
iratzhash
1
ini hanya menghasilkan skalar untuk kehilangan & akurasi pelatihan. bagaimana Anda melakukan hal yang sama untuk validation_data yang diteruskan ke fungsi fit?
Utku Ufuk
46

Ini adalah bagaimana Anda menggunakan panggilan balik 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])
Martin Thoma
sumber
2
Apakah ada cara untuk menyusun output papan tensor lebih baik? Apakah Keras melakukan beberapa optimasi dalam hal itu?
Nickpick
2
@nickpick, saya tidak tahu maksud Anda. Tapi saya pikir ini mungkin kandidat untuk pertanyaan lain.
Martin Thoma
Penting untuk diperhatikan adalah bahwa histogram_freq=0ini diatur jika tensorboard tidak mencatat histogram apa pun tf.summary.histogram- jika histogram_freqtidak BUKAN 0
Agile Bean
20

Perubahan

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

untuk

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

dan atur model Anda

tbCallback.set_model(model)

Jalankan di terminal Anda

tensorboard  --logdir Graph/
Leandro Souza
sumber
Saya punya AttributeError: 'TensorBoard' object has no attribute 'set_model'.
Fábio Perez
15

Jika Anda bekerja dengan pustaka Keras dan ingin menggunakan papan tensor untuk mencetak grafik keakuratan dan variabel lainnya, Maka di bawah ini adalah langkah-langkah untuk diikuti.

langkah 1: Inisialisasi pustaka callback keras untuk mengimpor tensorboard dengan menggunakan perintah di bawah ini

from keras.callbacks import TensorBoard

langkah 2: Sertakan perintah di bawah ini di program Anda sebelum perintah "model.fit ()".

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

Catatan: Gunakan "./graph". Ini akan menghasilkan folder grafik di direktori kerja Anda saat ini, hindari menggunakan "/ grafik".

langkah 3: Sertakan callback Tensorboard di "model.fit ()". Sampel diberikan di bawah ini.

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

langkah 4: Jalankan kode Anda dan periksa apakah folder grafik Anda ada di direktori kerja Anda. jika kode di atas berfungsi dengan benar Anda akan memiliki folder "Grafik" di direktori kerja Anda.

langkah 5: Buka Terminal di direktori kerja Anda dan ketik perintah di bawah ini.

tensorboard --logdir ./Graph

langkah 6: Sekarang buka browser web Anda dan masukkan alamat di bawah ini.

http://localhost:6006

Setelah masuk, halaman Tensorbaord akan terbuka di mana Anda dapat melihat grafik berbagai variabel Anda.

Sunil Sharma
sumber
Penting untuk diperhatikan adalah bahwa histogram_freq=0ini diatur jika tensorboard tidak mencatat histogram apa pun tf.summary.histogram- jika histogram_freqtidak BUKAN 0
Agile Bean
9

Ini beberapa kode:

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)

Pada dasarnya, histogram_freq=2adalah parameter yang paling penting untuk dicari saat memanggil panggilan balik ini: ini menetapkan interval zaman untuk memanggil panggilan balik, dengan tujuan menghasilkan lebih sedikit file pada disk.

Jadi di sini adalah contoh visualisasi evolusi nilai untuk konvolusi terakhir sepanjang pelatihan yang pernah terlihat di TensorBoard, di bawah tab "histogram" (dan saya menemukan tab "distribusi" berisi grafik yang sangat mirip, tetapi terbalik):

pemantauan bobot papan tensor

Jika Anda ingin melihat contoh lengkap dalam konteks, Anda dapat merujuk ke proyek sumber terbuka ini: https://github.com/Vooban/Hyperopt-Keras-CNN-CIFAR-100

Guillaume Chevalier
sumber
Saya menurunkan ini karena sebagian besar dari ini sebenarnya adalah pertanyaan dan bukan jawaban untuk pertanyaan itu. Jangan mengajukan pertanyaan baru dalam jawaban, apakah itu bagian atau seluruh tujuan jawaban.
Zoe
Saya mengedit pertanyaan untuk menghapus apa yang Anda sebutkan. Bahkan, panggilan balik ini sangat sulit digunakan dengan benar dari dokumentasi pada saat saya menjawab.
Guillaume Chevalier
Untuk menjawab "Bagaimana saya menggunakan panggilan balik TensorBoard dari Keras?", Semua jawaban lainnya tidak lengkap dan hanya menanggapi konteks kecil dari pertanyaan - misalnya, tidak ada yang menangani embeddings. Setidaknya, saya telah mendokumentasikan kesalahan potensial atau hal-hal yang harus dihindari dalam jawaban saya. Saya pikir saya mengajukan pertanyaan penting yang bahkan belum ada yang memikirkannya. Saya masih menunggu jawaban lengkap. Panggilan balik ini juga tidak didokumentasikan dengan baik, seperti kanker.
Guillaume Chevalier
4

Jika Anda menggunakan google-colab, visualisasi sederhana dari grafik adalah:

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
DINA TAKLIT
sumber
2

Anda menulis yang log_dir='/Graph'Anda maksudkan ./Graphsebagai gantinya? Anda mengirimnya ke /home/user/Graphsaat ini.

Bagian
sumber
1
Mengapa /Graphmembuat folder di direktori home pengguna alih-alih hanya menggunakan /Graphsecara langsung?
Michael Mior
2

Anda harus memeriksa Losswise ( https://losswise.com ), ia memiliki plugin untuk Keras yang lebih mudah digunakan daripada Tensorboard dan memiliki beberapa fitur tambahan yang bagus. Dengan Losswise Anda hanya akan menggunakan from losswise.libs import LosswiseKerasCallbackdan kemudian callback = LosswiseKerasCallback(tag='my fancy convnet 1')dan Anda baik untuk pergi (lihat https://docs.losswise.com/#keras-plugin ).

nicodjimenez
sumber
7
Penafian: OP adalah pendiri Losswise, yang merupakan produk berbayar (walaupun dengan tingkat gratis yang cukup murah hati)
Michael Mior
@MichaelMior benar, meskipun itu belum merupakan produk berbayar dan mungkin tidak akan pernah (selain pada lisensi prem di masa depan)
nicodjimenez
2

Ada beberapa hal.

Pertama, bukan /Graphtapi./Graph

Kedua, ketika Anda menggunakan panggilan balik TensorBoard, selalu berikan data validasi, karena tanpa itu, itu tidak akan mulai.

Ketiga, jika Anda ingin menggunakan apa pun kecuali ringkasan skalar, maka Anda hanya boleh menggunakan fitmetode ini karena fit_generatortidak akan berfungsi. Atau Anda dapat menulis ulang panggilan balik untuk bekerja dengannya fit_generator.

Untuk menambahkan panggilan balik, tambahkan saja ke model.fit(..., callbacks=your_list_of_callbacks)

Andrey Nikishaev
sumber
Tautan terkait pada poin ke-3: github.com/keras-team/keras/issues/3358#issuecomment-312531958
Leo Brueggeman
2

Buat panggilan balik 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)

Lewati panggilan balik Tensorboard ke panggilan yang sesuai:

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

Saat menjalankan model, jika Anda mendapatkan kesalahan Keras

"Anda harus memberi nilai untuk tensor placeholder"

coba atur ulang sesi Keras sebelum membuat model dengan melakukan:

import keras.backend as K
K.clear_session()
rsc
sumber
Ini memperbaiki masalah You must feed a value for placeholder tensor,. Ada yang tahu kenapa?
Ruthvik Vaila