ฉันจะใช้การโทรกลับ Tensorboard ของ Keras ได้อย่างไร


143

ฉันได้สร้างโครงข่ายประสาทเทียมด้วย Keras ฉันจะเห็นภาพข้อมูลของมันโดย 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: frequency (เป็น epochs) ที่จะคำนวณฮิสโตแกรมการเปิดใช้งานสำหรับเลเยอร์ของแบบจำลองหากตั้งค่าเป็น 0 ฮิสโตแกรมจะไม่ถูกคำนวณ"
Matt Kleinsmith

10
ระวัง: "/ กราฟ" สร้างไดเรกทอรีในไดเรกทอรีรากในขณะที่ "./Graph" สร้างไดเรกทอรีในไดเรกทอรีทำงาน
Matt Kleinsmith

@MattKleinsmith หากตั้งค่าเป็น 0 เฉพาะฮิสโตแกรมการเปิดใช้งานและน้ำหนักสำหรับเลเยอร์ของแบบจำลองจะไม่ถูกคำนวณผ่านข้อมูลการตรวจสอบความถูกต้องเมทริกจะยังคงถูกบันทึกไว้
BugKiller

ฉันคิดว่ามันจะดีกว่าถ้าให้ชื่อที่ไม่ซ้ำกับ logdir ดูstackoverflow.com/a/54949146/1179925
mrgloom

คำตอบ:


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

บรรทัดนี้สร้างวัตถุโทรกลับ Tensorboard คุณควรจับภาพวัตถุนั้นและมอบให้กับ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 จะต้องเป็น 4-D ที่มีสลัวสุดท้าย 1, 3 หรือ 4 ไม่ใช่ [1,3,3,256,256,1] [[โหนด: conv_3.2_2 / kernel_0_1 = ImageSummary [T = DT_FLOAT, bad_color = Tensor <type: uint8 รูปร่าง: [4] ค่า: 255 0 0 ... >, max_images = 3, _device = "/ งาน: localhost / replica: 0 / งาน: 0 / cpu: 0"] (conv_3 2_2 / kernel_0_1 / แท็ก, ExpandDims_50)]]
abdul qayyum

และบางสิ่งบางอย่างที่บอกว่าตัวยึดตำแหน่งหายไป dtype = ลอยเมื่อ True แนวคิดใด ๆ
abdul qayyum

2
แท็บ Scalars ยังคงว่างเปล่าแม้ว่าฉันจะเห็นสถาปัตยกรรมแบบจำลองของฉันบนแท็บกราฟได้หรือไม่
iratzhash

1
สิ่งนี้สร้างสเกลาร์สำหรับการสูญเสียและความแม่นยำในการฝึก คุณจะทำเช่นเดียวกันสำหรับ validation_data ซึ่งส่งผ่านไปยังฟังก์ชั่นพอดีได้อย่างไร
Utku Ufuk

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
มีวิธีการจัดโครงสร้างการส่งออกของเมตริกซ์ได้ดีขึ้นหรือไม่? Keras ทำการปรับแต่งบางอย่างในเรื่องนั้นหรือไม่?
Nickpick

2
@nickpick ฉันไม่รู้ว่าคุณหมายถึงอะไร แต่ฉันคิดว่านี่อาจเป็นตัวเลือกสำหรับคำถามอื่น
Martin Thoma


สิ่งสำคัญที่ควรทราบคือการhistogram_freq=0ตั้งค่าถ้าแผงเมตริกซ์ไม่บันทึกฮิสโตแกรมใด ๆ โดยtf.summary.histogram- มิฉะนั้น histogram_freqจะไม่เท่ากับ 0!
Agile Bean

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'ผมได้
Fábio Perez

15

หากคุณทำงานกับห้องสมุด Keras และต้องการใช้เมตริกซ์เพื่อพิมพ์กราฟของความแม่นยำและตัวแปรอื่น ๆ ของคุณจากนั้นด้านล่างเป็นขั้นตอนที่ต้องปฏิบัติตาม

ขั้นตอนที่ 1: เริ่มต้นไลบรารีโทรกลับ keras เพื่อนำเข้าเทนเซอร์บอร์ดโดยใช้คำสั่งด้านล่าง

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: รวมการเรียกกลับ Tensorboard ใน "model.fit ()" ตัวอย่างจะได้รับด้านล่าง

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

ขั้นตอนที่ 4: เรียกใช้รหัสของคุณและตรวจสอบว่ามีโฟลเดอร์กราฟอยู่ในไดเรกทอรีทำงานหรือไม่ หากรหัสข้างต้นทำงานอย่างถูกต้องคุณจะมีโฟลเดอร์ "กราฟ" ในไดเรกทอรีการทำงานของคุณ

ขั้นตอนที่ 5: เปิด Terminal ในไดเรกทอรีการทำงานของคุณและพิมพ์คำสั่งด้านล่าง

tensorboard --logdir ./Graph

ขั้นตอนที่ 6: ตอนนี้เปิดเว็บเบราว์เซอร์ของคุณและป้อนที่อยู่ด้านล่าง

http://localhost:6006

หลังจากเข้าสู่หน้า Tensorbaord จะเปิดขึ้นที่ซึ่งคุณสามารถดูกราฟของตัวแปรต่าง ๆ ได้


สิ่งสำคัญที่ควรทราบคือการhistogram_freq=0ตั้งค่าถ้าแผงเมตริกซ์ไม่บันทึกฮิสโตแกรมใด ๆ โดยtf.summary.histogram- มิฉะนั้น histogram_freqจะไม่เท่ากับ 0!
Agile Bean

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เป็นพารามิเตอร์ที่สำคัญที่สุดในการปรับเมื่อโทรกลับนี้: มันกำหนดช่วงเวลาของยุคเพื่อโทรกลับโดยมีเป้าหมายในการสร้างไฟล์บนดิสก์ให้น้อยลง

ดังนั้นนี่คือตัวอย่างการมองเห็นวิวัฒนาการของค่านิยมสำหรับการโน้มน้าวใจครั้งล่าสุดตลอดการฝึกอบรมที่เคยเห็นใน TensorBoard ภายใต้แท็บ "ฮิสโทแกรม" (และฉันพบแท็บ "การแจกแจง" เพื่อให้มีแผนภูมิคล้ายกันมาก แต่พลิกด้านข้าง)

การตรวจสอบน้ำหนักเมตริกซ์

ในกรณีที่คุณต้องการดูตัวอย่างเต็มรูปแบบในบริบทคุณสามารถอ้างถึงโครงการโอเพนซอร์ซนี้: https://github.com/Vooban/Hyperopt-Keras-CNN-CIFAR-100


ฉันลงคะแนนนี่เพราะส่วนใหญ่เป็นคำถามจริงและไม่ใช่คำตอบสำหรับคำถาม อย่าถามคำถามใหม่ด้วยคำตอบไม่ว่าจะเป็นส่วนหนึ่งหรือจุดประสงค์ทั้งหมดของคำตอบ
โซอี้

ฉันแก้ไขคำถามเพื่อลบสิ่งที่คุณพูดถึง ในความเป็นจริงการโทรกลับนี้ยากที่จะใช้อย่างถูกต้องจากเอกสารในเวลาที่ฉันตอบ
Guillaume Chevalier

ในการตอบ "ฉันจะใช้การโทรกลับ TensorBoard ของ Keras ได้อย่างไร" คำตอบอื่น ๆ ทั้งหมดนั้นไม่สมบูรณ์และตอบสนองต่อบริบทเล็ก ๆ ของคำถามเท่านั้น - ไม่มีใครจัดการงานแต่งงานแบบโหม่งได้ อย่างน้อยฉันได้บันทึกข้อผิดพลาดที่อาจเกิดขึ้นหรือสิ่งต่าง ๆ ที่ควรหลีกเลี่ยงในคำตอบของฉัน ฉันคิดว่าฉันตั้งคำถามสำคัญที่ไม่มีใครคิดว่าจะคิด ฉันยังคงรอคำตอบที่สมบูรณ์ การโทรกลับนี้เป็นเอกสารที่ไม่ดีเช่นกันกับโรคมะเร็ง
Guillaume Chevalier

4

หากคุณใช้การสร้างภาพกราฟอย่างง่ายของgoogle-colabจะเป็นดังนี้:

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โดยตรง?
Michael Mior

2

คุณควรตรวจสอบ Losswise ( https://losswise.com ) มันมีปลั๊กอินสำหรับ Keras ที่ใช้งานง่ายกว่า Tensorboard และมีคุณสมบัติพิเศษบางอย่างที่ดี ด้วย Losswise คุณเพียงแค่ใช้from losswise.libs import LosswiseKerasCallbackและจากนั้นcallback = LosswiseKerasCallback(tag='my fancy convnet 1')คุณก็พร้อมที่จะไป (ดูhttps://docs.losswise.com/#keras-plugin )


7
คำเตือน: OP เป็นผู้ก่อตั้ง Losswise ซึ่งเป็นผลิตภัณฑ์ที่ชำระเงิน (แม้ว่าจะมีระดับฟรีที่ค่อนข้างใจกว้าง)
Michael Mior

@MichaelMior ถูกต้องแม้ว่าจะยังไม่ได้ชำระเงิน แต่อาจจะไม่ใช่ (นอกเหนือจากสิทธิ์การใช้งานก่อนหน้านี้ในอนาคต)
nicodjimenez

2

มีบางสิ่ง

ก่อนอื่นไม่ใช่/Graphแต่./Graph

ประการที่สองเมื่อคุณใช้การติดต่อกลับของ TensorBoard ให้ส่งข้อมูลการตรวจสอบความถูกต้องเสมอไปหากไม่มีก็จะไม่เริ่มต้น

ประการที่สามถ้าคุณต้องการใช้อะไรก็ได้ยกเว้นการสรุปสเกลาร์คุณควรใช้fitวิธีการนี้เพราะfit_generatorจะไม่ทำงาน fit_generatorหรือคุณสามารถเขียนการเรียกกลับในการทำงานกับ

หากต้องการเพิ่มการโทรกลับเพียงแค่เพิ่มเข้าไป model.fit(..., callbacks=your_list_of_callbacks)


ลิงค์ที่เกี่ยวข้องในประเด็นที่ 3: github.com/keras-team/keras/issues/3358#issuecomment-312531958
Leo Brueggeman

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 callback ไปยัง fit call:

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

เมื่อเรียกใช้โมเดลถ้าคุณได้รับข้อผิดพลาดของ Keras

"คุณต้องป้อนค่าสำหรับตัวยึดตัวแทน"

ลองรีเซ็ตเซสชัน Keras ก่อนการสร้างแบบจำลองโดยทำดังนี้

import keras.backend as K
K.clear_session()

มันแก้ไขปัญหา, You must feed a value for placeholder tensor. มีความคิดอะไรไหม
Ruthvik Vaila
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.