2016-07-18 20 views
14

için Keras kaybı çıkışını günlüğe nasıl konsolda böyle bir şey görebilirsiniz:Bir Keras sinir ağı modeli çalıştırdığınızda bir dosyaya

Epoch 1/3 
    6/1000 [..............................] - ETA: 7994s - loss: 5111.7661 

zaman umarım geliştirir kaybı ilerledikçe. Bu kayıpları zaman içinde bir dosyaya kaydetmek istiyorum, böylece onlardan öğrenebileceğim. Ben denedim:

logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG) 

ama bu işe yaramaz. Bu durumda hangi düzeyde kayıt yapmam gerektiğinden emin değilim.

Ben de olduğu gibi bir geri arama kullanarak denedim:

def generate_train_batch(): 
    while 1: 
     for i in xrange(0,dset_X.shape[0],3): 
      yield dset_X[i:i+3,:,:,:],dset_y[i:i+3,:,:] 

class LossHistory(keras.callbacks.Callback): 
    def on_train_begin(self, logs={}): 
     self.losses = [] 

    def on_batch_end(self, batch, logs={}): 
     self.losses.append(logs.get('loss')) 
logloss=LossHistory() 
colorize.fit_generator(generate_train_batch(),samples_per_epoch=1000,nb_epoch=3,callbacks=['logloss']) 

ama belli ki bu bir dosyaya yazmıyor. Metot ne olursa olsun, bir geri arama ya da kayıt modülü ya da başka bir şey aracılığıyla, bir dosyaya bir sinir ağının kaybolması için çözümlerinizi duymak isterim. Teşekkürler!

+0

daha karmaşık bir çözelti TensorBoard ile analiz edilebilir TensorFlow arka ucu ve çıkış günlükleri kullanmak olabilir. Ama bu farklı bir soru :-) – Ketil

cevap

8

Sorununuza basit bir çözüm var. Her zaman fit yöntemlerinden herhangi biri kullanılır - sonuç olarak Geçmiş Geri Arama adlı adlı özel geri dönüş döndürülür. Her dönemden sonra kayıtlı tüm metriklerin bir sözlüğü olan history numaralı bir alana sahiptir. Yani tefriş yapabilirsiniz her çağın sonra kayıp fonksiyonu değerlerinin listesini almak için:

history_callback = model.fit(params...) 
loss_history = history_callback.history["loss"] 

O (örn numpy diziye dönüştürerek ve savetxt yöntemini kullanarak) bir dosyaya böyle listesini kaydetmek kolaydır.

GÜNCELLEME:

Dene:

import numpy 
numpy_loss_history = numpy.array(loss_history) 
numpy.savetxt("loss_history.txt", numpy_loss_history, delimiter=",") 

GÜNCELLEME 2:

her parti bir içinde Keras Callbacks Documentation yazılır sonra kayıpta sorununa çözüm oluşturma Bir Geri Arama paragraf. gider burada

import sys 
oldStdout = sys.stdout 
file = open('logFile', 'w') 
sys.stdout = file 
model.fit(Xtrain, Ytrain) 
sys.stdout = oldStdout 
+0

Hmm. Bunu sorudaki kodla nasıl bütünleştirebileceğinizi gösterebilir misiniz? Bunu denedim ve dosya oluşturulmadı. Belki bu sadece eğitim tamamlandıktan sonra günlük dosyasını dolduracaktır? Tüm eğitimin tamamlanmasını beklemeden, ondan öğrenebilmem için eğitim süreci boyunca kaybolabilecek bir şey istiyorum. – BigBoy1337

+0

tamam np.savetxt ("loss_history.txt", numpy_loss_history, delimiter = ",") ile çalışır. Maalesef her dönemden sonra sadece kayıpları kaydeder. Her partiden sonra bunu yapabilir miyim diye merak ediyorum. herhangi bir fikir? – BigBoy1337

+0

Cevabımı güncelledim. –

0

Sen model.fit yönteminden önce bir dosyaya sys.stdout nesneyi yönlendirmek ve aşağıdaki gibi model.fit yönteminden sonra standart konsola bunu yeniden atayabilirsiniz. Keras tarih çıkışı, pandalar DataSet girişi ile mükemmel bir uyum sağlar. Eğer tek satırda csv tüm geçmişi istiyorsanız

: pandas.DataFrame(model.fit(...).history).to_csv("history.csv")

Alkış

4

Eski soruyu, ancak:

20

Sen CSVLogger geri arama kullanabilirsiniz.Örneğin,

: en

from keras.callbacks import CSVLogger 

csv_logger = CSVLogger('log.csv', append=True, separator=';') 
model.fit(X_train, Y_train, callbacks=[csv_logger]) 

Görünüş: Keras Callbacks

+1

Teşekkürler! Gerçekte bitirmek için eğitime güvenmeyen eğitim durumunu kontrol etmenin bir yolunu arıyordum (yol boyunca bir şey başarısız olursa ya da bir HPC'de hesaplama süresi bittiğinde, tarih nesnesini asla elde edemezsiniz ve Bundan kurtulun) ve bu tam olarak budur. – jjs

+1

Biraz daha fazla detay (Keras docs'a dahil değildir): Üretilen csv dosyasının satır başına şu sırayla çıktı alıyorum: "epoch, train_loss, learning_rate, train_metric1, train_metric2, val_loss, val_metric1, val_metric2, ...", kayıp, model.compile() 've metrik1, metrik2, metrik3 et. metrikler metriği bağımsız değişkenine iletilir: ör. model.compile (loss = 'mse', metrikler = [metrik1, metrik2, metrik3], ...) ' @jjs - eğitim sırasında modellerin ağırlığını kaydetmek için, sadece günlükleri değil, Keras'a bir göz atabilirsiniz ModelCheckPoint geri araması. CSVLogger ile benzer şekilde çalışır. –