मैं केरस के टेंसरबोर्ड कॉलबैक का उपयोग कैसे करूं?


143

मैंने केरस के साथ एक तंत्रिका नेटवर्क बनाया है। मैं Tensorboard द्वारा इसके डेटा की कल्पना करेगा, इसलिए मैंने इसका उपयोग किया है:

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

जैसा कि keras.io में बताया गया है । जब मुझे कॉलबैक मिलता है <keras.callbacks.TensorBoard at 0x7f9abb3898>, तो मुझे मिलता है , लेकिन मुझे अपने फ़ोल्डर "ग्राफ़" में कोई फ़ाइल नहीं मिलती है। क्या इस कॉलबैक में मैंने कुछ गलत किया है?


3
मैं सेटिंग histogram_freqकरने का सुझाव दूंगा 1। "histogram_freq: आवृत्ति (युगों में) जिस पर मॉडल की परतों के लिए सक्रियण हिस्टोग्राम की गणना की जाती है। यदि 0 पर सेट किया जाता है, तो हिस्टोग्राम को गणना नहीं की जाएगी।"
मैट क्लेनिस्मिथ

10
सावधान रहें: "/ ग्राफ" रूट डायरेक्टरी में एक निर्देशिका बनाता है, जबकि "./Graph" वर्किंग डायरेक्टरी में एक बनाता है।
मैट क्लेनिस्मिथ

@MattKleinsmith यदि 0 पर सेट किया गया है, तो मॉडल की परतों के लिए केवल सक्रियण और वजन हिस्टोग्राम की गणना वैलिडेशन डेटा के माध्यम से नहीं की जाएगी, मैट्रिक्स अभी भी लॉग इन किया जाएगा।
बगकेलर

मुझे लगता है कि यह कम से logdir देखो के लिए अद्वितीय नाम देने के लिए बेहतर है stackoverflow.com/a/54949146/1179925
mrgloom

जवाबों:


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

यह लाइन एक कॉलबैक टेन्सरबोर्ड ऑब्जेक्ट बनाता है, आपको उस ऑब्जेक्ट को कैप्चर करना चाहिए और इसे 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, या 4 के साथ 4-D होना चाहिए, न कि [1,3,3,256,256,1] [[Node: conv3.3.2_2 / kernel_0_1 = ImageSummary [T = DT_FLOAT,] bad_color = Tensor <प्रकार: uint8 आकार: [4] मान: 255 0 0 ...>, max_images = 3, _device = "/ job: localhost / प्रतिकृति: 0 / कार्य: 0 / cpu: 0"] (conv_3)। 2_2 / कर्नेल_0_1 / टैग, एक्सपेंडिम्स_50)]]
पेटी कय्यूम

और कुछ कह रहा है कि प्लेसहोल्डर गायब है dtype = फ्लोट जब ट्रू कोई आइडिया?
अब्दुल कय्यूम

2
स्केलर्स टैब अभी भी खाली है, हालांकि मैं ग्राफ़ टैब पर अपने मॉडल आर्किटेक्चर को देख सकता हूं?
iratzhash

1
यह केवल प्रशिक्षण हानि और सटीकता के लिए स्केलर का उत्पादन करता है। आप सत्यापन कार्य के लिए कैसे करते हैं जो फिट कार्य के लिए दिया गया है?
उत्कर्ष उफुक

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
क्या टेंसरबोर्ड के आउटपुट को बेहतर बनाने का एक तरीका है? क्या केरस उस संबंध में कुछ अनुकूलन करता है?
निकपिक

2
@nickpick मुझे नहीं पता कि आपका क्या मतलब है। लेकिन मुझे लगता है कि यह किसी अन्य प्रश्न के लिए एक उम्मीदवार हो सकता है।
मार्टिन थोमा

यहाँ हम चलते हैं: stackoverflow.com/questions/45309153/…
निकपिक

नोट करने के लिए महत्वपूर्ण है कि histogram_freq=0सेट किया गया है अगर टेंसबोर्ड किसी भी हिस्टोग्राम द्वारा लॉग नहीं करता है tf.summary.histogram- अन्यथा histogram_freq0 के बराबर नहीं है!
एजिल बीन

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

यदि आप केरेस लाइब्रेरी के साथ काम कर रहे हैं और सटीकता और अन्य चर के अपने ग्राफ को मुद्रित करने के लिए टेंसरबोर्ड का उपयोग करना चाहते हैं, तो नीचे दिए गए चरणों का पालन करना होगा।

चरण 1: नीचे दिए गए आदेश का उपयोग करके टेंसरबोर्ड को आयात करने के लिए केरस कॉलबैक लाइब्रेरी को प्रारंभ करें

from keras.callbacks import TensorBoard

चरण 2: "model.fit ()" कमांड से ठीक पहले अपने प्रोग्राम में नीचे दिए गए कमांड को शामिल करें।

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

नोट: "./graph" का उपयोग करें। यह आपके वर्तमान कार्य निर्देशिका में ग्राफ़ फ़ोल्डर उत्पन्न करेगा, "/ ग्राफ़" के उपयोग से बचें।

चरण 3: "मॉडल.फिट ()" में टेंसरबोर्ड कॉलबैक शामिल करें। नमूना नीचे दिया गया है।

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

चरण 4: अपना कोड चलाएं और जांचें कि आपका ग्राफ फ़ोल्डर आपकी कार्यशील निर्देशिका में है या नहीं। यदि उपरोक्त कोड सही तरीके से काम करते हैं, तो आपके पास अपनी कार्यशील निर्देशिका में "ग्राफ़" फ़ोल्डर होगा।

चरण 5: अपनी वर्किंग डायरेक्टरी में टर्मिनल खोलें और नीचे कमांड टाइप करें।

tensorboard --logdir ./Graph

चरण 6: अब अपना वेब ब्राउज़र खोलें और नीचे दिए गए पते को दर्ज करें।

http://localhost:6006

एंटर करने के बाद, Tensorbaord पेज खुलेगा जहाँ आप विभिन्न चर के अपने रेखांकन देख सकते हैं।


नोट करने के लिए महत्वपूर्ण है कि histogram_freq=0सेट किया गया है अगर टेंसबोर्ड किसी भी हिस्टोग्राम द्वारा लॉग नहीं करता है tf.summary.histogram- अन्यथा histogram_freq0 के बराबर नहीं है!
एजिल बीन

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 इस कॉलबैक को कॉल करते समय ट्यून करने के लिए सबसे महत्वपूर्ण पैरामीटर है: यह कॉलबैक को कॉल करने के लिए युगों का अंतराल सेट करता है, डिस्क पर कम फ़ाइलों को उत्पन्न करने के लक्ष्य के साथ।

इसलिए यहाँ "हिस्टोग्राम्स" टैब के तहत टेन्सरबोर्ड में एक बार देखे गए प्रशिक्षण के दौरान अंतिम दृढ़ संकल्प के लिए मूल्यों के विकास का एक उदाहरण है, (और मैंने पाया कि "वितरण" टैब में बहुत समान चार्ट शामिल हैं, लेकिन पक्ष में फ़्लिप किया गया):

टेंसरबोर्ड वेटिंग मॉनिटरिंग

यदि आप संदर्भ में एक पूर्ण उदाहरण देखना चाहते हैं, तो आप इस ओपन-सोर्स प्रोजेक्ट का उल्लेख कर सकते हैं: https://github.com/Vooban/Hyperopt-Keras-CNN-CIFAR-100


मैंने इसे अस्वीकार कर दिया क्योंकि इसका एक बड़ा हिस्सा वास्तव में सवाल है और सवाल का जवाब नहीं है। जवाब में नए सवाल न पूछें, चाहे वह उत्तर का हिस्सा हो या पूरा उद्देश्य।
ज़ो

मैंने आपके द्वारा बताए गए को हटाने के लिए प्रश्न संपादित किया। वास्तव में, यह कॉलबैक उस समय के प्रलेखन से ठीक से उपयोग करने के लिए बहुत कठिन है, जब मैंने उत्तर दिया था।
गिलियूम शेवेलियर

"मैं केरस के टेन्सरबोर्ड कॉलबैक का उपयोग कैसे करूं" का जवाब देने के लिए, अन्य सभी उत्तर अपूर्ण हैं और केवल प्रश्न के छोटे संदर्भ में जवाब देते हैं - उदाहरण के लिए एम्बेडिंग से कोई भी निपटता नहीं है। कम से कम, मैंने अपने उत्तर में बचने के लिए संभावित त्रुटियों या चीजों का दस्तावेजीकरण किया था। मुझे लगता है कि मैंने ऐसे महत्वपूर्ण प्रश्न उठाए हैं, जिनके बारे में सोचने के लिए कोई भी व्यक्ति तैयार नहीं होता है। मैं अभी भी पूर्ण उत्तर की प्रतीक्षा कर रहा हूं। यह कॉलबैक बीमार प्रलेखित है, कैंसर की तरह भी।
गिलियूम शेवेलियर

4

यदि आप Google- कोलाब सरल चित्रांकन का उपयोग कर रहे हैं तो यह होगा:

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सीधे उपयोग करने के बजाय उपयोगकर्ता के होम निर्देशिका में फ़ोल्डर क्यों बनाया जाएगा ?
माइकल माइर

2

आपको Losswise ( https://losswise.com ) की जांच करनी चाहिए , इसमें कैर के लिए एक प्लगइन है जो टेन्सरबोर्ड की तुलना में उपयोग करना आसान है और इसमें कुछ अच्छी अतिरिक्त विशेषताएं हैं। लॉस्वाइज़ के साथ आप अभी from losswise.libs import LosswiseKerasCallbackऔर तब उपयोग करेंगे callback = LosswiseKerasCallback(tag='my fancy convnet 1')और आप जाने के लिए अच्छे होंगे (देखें https://docs.losswise.com/#keras-plugin )।


7
डिस्क्लेमर: ओपी लॉज़वाइज़ का संस्थापक है, जो कि एक सशुल्क उत्पाद है (हालाँकि एक बहुत ही उदार फ्री टियर के साथ)
माइकल मायर

@MichaelMior सही है, हालांकि यह अभी तक एक भुगतान किया गया उत्पाद नहीं है और कभी नहीं हो सकता है (भविष्य में हो सकता है कि समय पर लाइसेंस के अलावा अन्य)
निकोद्जिमेंज़

2

कुछ चीजें हैं।

पहले, /Graphलेकिन नहीं./Graph

दूसरा, जब आप TensorBoard कॉलबैक का उपयोग करते हैं, तो हमेशा सत्यापन डेटा पास करें, क्योंकि इसके बिना यह शुरू नहीं होगा।

तीसरा, यदि आप स्केलर सारांश के अलावा कुछ भी उपयोग करना चाहते हैं, तो आपको केवल fitविधि का उपयोग करना चाहिए क्योंकि fit_generatorकाम नहीं करेगा। या आप के साथ काम करने के लिए कॉलबैक फिर से लिख सकते हैं fit_generator

कॉलबैक जोड़ने के लिए, बस इसे जोड़ें model.fit(..., callbacks=your_list_of_callbacks)


तीसरा बिंदु पर संबंधित लिंक: github.com/keras-team/keras/issues/3358#issuecomment-312531958
सिंह

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 कॉलबैक को फिट कॉल पास करें:

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

मॉडल चलाते समय, यदि आपको Keras त्रुटि मिलती है

"आपको प्लेसहोल्डर टेंसर के लिए एक मूल्य खिलाना होगा"

मॉडल के निर्माण से पहले करेस सत्र को रीसेट करने का प्रयास करें:

import keras.backend as K
K.clear_session()

यह समस्या का समाधान हो You must feed a value for placeholder tensor। कोई विचार क्यों?
रूतविक वेला
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.