Keras'ın Tensorboard geri aramasını nasıl kullanırım?


143

Keras ile bir sinir ağı kurdum. Verilerini Tensorboard ile görselleştirirdim, bu yüzden kullandım:

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

olarak açıklanmıştır keras.io . Geri aramayı çalıştırdığımda alıyorum <keras.callbacks.TensorBoard at 0x7f9abb3898>, ancak "Graph" klasörümde herhangi bir dosya almıyorum. Bu geri aramayı nasıl kullandığımda bir sorun mu var?


3
Ben ayarı öneririm histogram_freqiçin 1. "histogram_freq: modelin katmanları için aktivasyon histogramlarının hesaplanacağı frekans (dönem olarak). 0 olarak ayarlanırsa, histogramlar hesaplanmaz."
Matt Kleinsmith

10
Dikkatli olun: "/ Graph" kök dizinde bir dizin oluştururken "./Graph" çalışma dizininde bir dizin oluşturur.
Matt Kleinsmith

@MattKleinsmith 0 olarak ayarlanırsa, modelin katmanları için yalnızca etkinleştirme ve ağırlık histogramları Doğrulama verileriyle hesaplanmaz, metrikler yine de günlüğe kaydedilir.
BugKiller

Logdir'e benzersiz bir isim vermek daha iyidir bence stackoverflow.com/a/54949146/1179925
mrgloom

Yanıtlar:


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

Bu satır bir Geri Arama Tensorboard nesnesi oluşturur, bu nesneyi yakalamalı ve fitmodelinizin işlevine vermelisiniz .

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

Bu şekilde geri arama nesnenizi işleve verdiniz. Eğitim sırasında çalıştırılacak ve tensorboard ile kullanılabilecek dosyalar çıkacaktır.

Egzersiz sırasında oluşturulan dosyaları görselleştirmek istiyorsanız terminalinizde çalıştırın

tensorboard --logdir path_to_current_dir/Graph 

Bu yardımcı olur umarım !


Bunu write_images = False
abdul qayyum

InvalidArgumentError (izleme için yukarıya bakın): Tensör, son dim 1, 3 veya 4 ile 4-D olmalıdır, [1,3,3,256,256,1] değil [T: DT_FLOAT, bad_color = Tensör <type: uint8 şekil: [4] değerler: 255 0 0 ...>, max_images = 3, _device = "/ job: localhost / replica: 0 / görev: 0 / cpu: 0"] (dönş. 2_2 / kernel_0_1 / tag, ExpandDims_50)]]
abdul qayyum

Ve True Any Idea zaman yer tutucusu eksik dtype = float diyor bir şey?
abdul qayyum

2
Modeller mimarimi Grafikler sekmesinde görebilsem de, Taramalar sekmesi hala boş mu?
iratzhash

1
bu sadece egzersiz kaybı ve doğruluğu için skaler üretir. fit fonksiyonuna aktarılan validation_data için aynısını nasıl yaparsınız?
Utku Ufuk

46

TensorBoard geri aramasını şu şekilde kullanırsınız :

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
Tensorboard çıktısını daha iyi yapılandırmanın bir yolu var mı? Keras bu konuda bazı optimizasyonlar yapıyor mu?
Nickpick

2
@nickpick Ne demek istediğini bilmiyorum. Ama bence bu başka bir soru için aday olabilir.
Martin Thoma


dikkat edilmesi gereken nokta, histogram_freq=0tensorboard herhangi bir histogramı günlüğe kaydetmezse ayarlanır tf.summary.histogram- aksi takdirde histogram_freq0'a eşit DEĞİLDİR!
Agile Bean

20

Değişiklik

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

için

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

ve modelini ayarla

tbCallback.set_model(model)

Terminalinizde koşun

tensorboard  --logdir Graph/

Anladım AttributeError: 'TensorBoard' object has no attribute 'set_model'.
Fábio Perez

15

Keras kütüphanesi ile çalışıyorsanız ve doğruluk grafiklerinizi ve diğer değişkenleri yazdırmak için tensorboard kullanmak istiyorsanız, aşağıdaki adımlar aşağıdadır.

1. adım: Aşağıdaki komutu kullanarak tensorboard'u içe aktarmak için keras geri arama kitaplığını başlatın

from keras.callbacks import TensorBoard

2. adım: Aşağıdaki komutu programınıza "model.fit ()" komutundan hemen önce ekleyin.

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

Not: "./graph" kullanın. Geçerli çalışma dizininizde grafik klasörü oluşturur, "/ graph" kullanmaktan kaçının.

adim 3: "model.fit ()" içine Tensorboard geri çağrısını ekleyin Örnek aşağıda verilmiştir.

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

4. adım: Kodunuzu çalıştırın ve grafik klasörünüzün çalışma dizininizde olup olmadığını kontrol edin. yukarıdaki kodlar düzgün çalışıyorsa, çalışma dizininizde "Graph" klasörü bulunacaktır.

Adım 5: Çalışma dizininizde Terminal'i açın ve aşağıdaki komutu yazın.

tensorboard --logdir ./Graph

6. adım: Şimdi web tarayıcınızı açın ve adresi aşağıya girin.

http://localhost:6006

Girdikten sonra, farklı değişkenlerin grafiklerini görebileceğiniz Tensorbaord sayfası açılacaktır.


dikkat edilmesi gereken nokta, histogram_freq=0tensorboard herhangi bir histogramı günlüğe kaydetmezse ayarlanır tf.summary.histogram- aksi takdirde histogram_freq0'a eşit DEĞİLDİR!
Agile Bean

9

İşte bazı kod:

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)

Temel olarak, histogram_freq=2bu geri aramayı çağırırken ayarlanması gereken en önemli parametre: disklerde daha az dosya oluşturmak amacıyla geri aramayı aramak için bir dönem aralığı belirler.

İşte burada TensorBoard'da bir kez "histogramlar" sekmesi altında eğitim sırasında son evrişim için değerlerin evriminin bir örnek görselleştirmesi (ve "dağıtımlar" sekmesini çok benzer grafikler içerdiğini, ancak yan tarafa çevirdiğimi gördüm):

tensorboard ağırlık izleme

Bağlamda tam bir örnek görmek isterseniz, şu açık kaynaklı projeye başvurabilirsiniz: https://github.com/Vooban/Hyperopt-Keras-CNN-CIFAR-100


Bunu reddettim, çünkü bunun büyük bir kısmı aslında sorular ve sorunun cevabı değil. Bir cevabın bir parçası mı yoksa tüm amacı ise cevaplarda yeni sorular sormayın.
Zoe

Bahsettiğiniz şeyi kaldırmak için soruyu düzenledim. Aslında, bu geri aramanın yanıtladığım anda belgelerden düzgün bir şekilde kullanılması çok zordur.
Guillaume Chevalier

"Keras'ın TensorBoard geri aramasını nasıl kullanırım?" Sorusunu yanıtlamak için, diğer tüm cevaplar eksiktir ve yalnızca sorunun küçük bağlamına yanıt verir - kimse örneğin düğünlerle uğraşmaz. En azından cevabımda olası hataları veya kaçınılması gereken şeyleri belgelemiştim. Sanırım henüz kimsenin düşünmeyi bile düşünmediği önemli sorular sordum. Hala tam bir cevap bekliyorum. Bu geri arama da kanser gibi kötü belgelenmiştir.
Guillaume Chevalier

4

Eğer google-colab kullanıyorsanız grafiğin basit görselleştirmesi şu şekildedir :

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

Bunu log_dir='/Graph'mu demek istediniz ./Graph? Şu /home/user/Graphanda gönderdiniz .


1
Neden doğrudan /Graphkullanmak yerine kullanıcının ana dizininde bir klasör oluşturalım /Graph?
Michael Mior

2

Losswise'ya ( https://losswise.com ) göz atmalısınız , Keras için Tensorboard'dan daha kolay ve bazı güzel ekstra özelliklere sahip bir eklentisi var. Losswise ile from losswise.libs import LosswiseKerasCallbackve sonra kullanırsınız ve gitmekte fayda var callback = LosswiseKerasCallback(tag='my fancy convnet 1')(bkz. Https://docs.losswise.com/#keras-plugin ).


7
Feragat: OP, ücretli bir ürün olan Losswise'ın kurucusudur (oldukça cömert bir ücretsiz kademe olmasına rağmen)
Michael Mior

@MichaelMior doğrudur, ancak henüz ücretli bir ürün olmamasına rağmen asla gelmeyebilir (belki de gelecekte yapılacak lisanslar dışında)
nicodjimenez

2

Birkaç şey var.

İlk olarak, değil /Graphama./Graph

İkincisi, TensorBoard geri aramasını kullandığınızda, her zaman doğrulama verilerini iletin, çünkü onsuz başlamaz.

Üçüncüsü, skaler özetler dışında bir şey kullanmak istiyorsanız, o zaman sadece fityöntemi kullanmamalısınız çünkü fit_generatorçalışmaz. Veya çalışmak için geri aramayı yeniden yazabilirsiniz fit_generator.

Geri arama eklemek için şunu ekleyin: model.fit(..., callbacks=your_list_of_callbacks)



2

Tensorboard geri aramasını oluşturma:

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 geri aramasını uygun aramaya iletin:

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

Modeli çalıştırırken, bir Keras hatası alırsanız

"Yer tutucu tensörü için bir değer beslemelisiniz"

yaparak model oluşturmadan önce Keras oturumunu sıfırlamayı deneyin:

import keras.backend as K
K.clear_session()

Sorunu çözdü You must feed a value for placeholder tensor. Neden olduğu hakkında bir fikrin var mı?
Ruthvik Vaila
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.