2016-07-18 6 views
14

को Keras नुकसान उत्पादन प्रवेश कैसे करें जब आप एक Keras तंत्रिका नेटवर्क मॉडल चलाने आप कंसोल में कुछ इस तरह देख सकते हैं:एक फ़ाइल

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

समय नुकसान उम्मीद है कि बेहतर बनाता है पर चला जाता है के रूप में। मैं इन हानियों को समय-समय पर फाइल में लॉग करना चाहता हूं ताकि मैं उनसे सीख सकूं। मैंने कोशिश की है:

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

लेकिन यह काम नहीं करता। मुझे यकीन नहीं है कि इस स्थिति में मुझे किस स्तर की लॉगिंग की आवश्यकता है।

मैं भी में की तरह एक कॉलबैक का उपयोग कर की कोशिश की है:

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']) 

लेकिन स्पष्ट रूप से यह एक फ़ाइल के लिए लिख नहीं है। किसी भी विधि, कॉलबैक या लॉगिंग मॉड्यूल या किसी अन्य चीज़ के माध्यम से, मुझे एक फाइल में एक केरे तंत्रिका नेटवर्क के नुकसान को लॉगिंग के लिए अपने समाधान सुनना अच्छा लगेगा। धन्यवाद!

+0

एक अधिक जटिल समाधान TensorFlow बैकएंड और आउटपुट लॉग TensorBoard साथ विश्लेषण किया जा सकता का उपयोग हो सकता है। लेकिन यह एक अलग सवाल है :-) – Ketil

उत्तर

8

आपकी समस्या का एक आसान समाधान है। हर बार fit विधियों में से कोई भी उपयोग किया जाता है - नतीजतन नामक विशेष कॉलबैक इतिहास कॉलबैक लौटा दिया जाता है। इसमें एक क्षेत्र history है जो हर युग के बाद पंजीकृत सभी मीट्रिक का एक शब्दकोश है। इसलिए हर युग आप easly कर सकते हैं के बाद नुकसान समारोह मूल्यों की सूची प्राप्त करने:

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

यह (उदाहरण के लिए numpy सरणी को बदलने और savetxt विधि का उपयोग कर) एक फाइल करने के लिए इस तरह के सूची को बचाने के लिए आसान है।

अद्यतन:

प्रयास करें:

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

अद्यतन 2:

एक नुकसान रिकॉर्डिंग के बाद हर बैच एक में Keras Callbacks Documentation में लिखा है की समस्या का हल बनाएं एक कॉलबैक पैराग्राफ।

+0

हम्म। क्या आप इसे प्रश्न में कोड में एकीकृत करने के तरीके को दिखा सकते हैं? मैंने कोशिश की और कोई फ़ाइल उत्पन्न नहीं हुई। प्रशिक्षण पूरा होने के बाद शायद यह लॉग फ़ाइल भर जाएगा? मुझे ऐसा कुछ चाहिए जो प्रशिक्षण प्रक्रिया के माध्यम से नुकसान को लॉग कर सके ताकि मैं पूरा प्रशिक्षण पूरा करने के इंतजार किए बिना उससे सीख सकूं। – BigBoy1337

+0

ठीक np.savetxt ("loss_history.txt", numpy_loss_history, delimiter = ",") के साथ ठीक है, यह काम करता है। दुर्भाग्य से यह केवल प्रत्येक युग के बाद नुकसान को लॉग करता है। मुझे आश्चर्य है कि क्या मैं इसे प्रत्येक बैच के बाद ऐसा करने के लिए प्राप्त कर सकता हूं। कोई विचार? – BigBoy1337

+0

मैंने अपना जवाब अपडेट किया। –

0

आप model.fit विधि से पहले एक फाइल करने के लिए sys.stdout वस्तु अनुप्रेषित कर सकते हैं और model.fit विधि के बाद मानक कंसोल को पुन: असाइन इस प्रकार है:

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

पुराना सवाल है, लेकिन यहाँ जाता है। केरास इतिहास आउटपुट पूरी तरह से पांडा डेटासेट इनपुट से मेल खाता है।

आप एक पंक्ति में सीएसवी को पूरे इतिहास में चाहते हैं: pandas.DataFrame(model.fit(...).history).to_csv("history.csv")

चीयर्स

20

आप CSVLogger कॉलबैक का उपयोग कर सकते हैं।

उदाहरण के रूप में

: पर

from keras.callbacks import CSVLogger 

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

देखो: Keras Callbacks

+1

धन्यवाद! मैं प्रशिक्षण की स्थिति की जांच करने का एक तरीका ढूंढ रहा था जो वास्तव में खत्म होने के लिए प्रशिक्षण पर भरोसा नहीं करता था (अगर कुछ रास्ते में विफल रहता है या आप एचपीसी पर गणना समय से बाहर निकलते हैं तो आपको इतिहास वस्तु कभी नहीं मिलती है और आप नहीं कर सकते उस से ठीक हो), और यह ठीक है। – jjs

+1

थोड़ा और विस्तार (Keras डॉक्स में शामिल नहीं): मैं पाने के प्रति उत्पादित csv फ़ाइल की लाइन निम्न क्रम में उत्पादन: "युग, train_loss, learning_rate, train_metric1, train_metric2, val_loss, val_metric1, val_metric2, ...", जहां 'model.compile()' और मेट्रिक 1, मेट्रिक 2, मीट्रिक 3 एट में हानि निर्दिष्ट की गई थी। मेट्रिक्स तर्क को पारित मीट्रिक हैं: उदा। 'model.compile (loss = 'mse', मेट्रिक्स = [मीट्रिक 1, मीट्रिक 2, मीट्रिक 3], ...)' @jjs - प्रशिक्षण के दौरान मॉडल के वजन को बचाने के लिए, सिर्फ लॉग इन नहीं, आप केरास पर एक नज़र डाल सकते हैं ModelCheckPoint कॉलबैक। यह CSVLogger के समान काम करता है। –

संबंधित मुद्दे