Làm cách nào để sử dụng hàm gọi lại Tenorboard của Keras?


143

Tôi đã xây dựng một mạng lưới thần kinh với Keras. Tôi sẽ hình dung dữ liệu của nó bằng Tensorboard, do đó tôi đã sử dụng:

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

như đã giải thích trong keras.io . Khi tôi chạy lại cuộc gọi tôi nhận được <keras.callbacks.TensorBoard at 0x7f9abb3898>, nhưng tôi không nhận được bất kỳ tệp nào trong thư mục "Đồ thị" của mình. Có điều gì đó sai trong cách tôi đã sử dụng cuộc gọi lại này?


3
Tôi sẽ đề nghị thiết lập histogram_freqđể 1. "histogram_freq: tần số (tính bằng epoch) để tính toán biểu đồ kích hoạt cho các lớp của mô hình. Nếu được đặt thành 0, biểu đồ sẽ không được tính toán."
Matt Kleinsmith

10
Hãy cẩn thận: "/ Đồ thị" tạo một thư mục trong thư mục gốc, trong khi "./Graph" tạo một thư mục trong thư mục làm việc.
Matt Kleinsmith

@MattKleinsmith Nếu được đặt thành 0, chỉ biểu đồ kích hoạt và trọng số cho các lớp của mô hình sẽ không được tính toán qua dữ liệu Xác thực, số liệu vẫn sẽ được ghi lại.
BugKiller

Tôi nghĩ tốt hơn là đặt tên duy nhất cho logdir, hãy xem stackoverflow.com/a/54949146/1179925
mrgloom

Câu trả lời:


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

Dòng này tạo ra một đối tượng Tenorboard Callback, bạn nên nắm bắt đối tượng đó và đưa nó vào fitchức năng của mô hình của bạn.

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

Bằng cách này, bạn đã cho đối tượng gọi lại của mình cho hàm. Nó sẽ được chạy trong quá trình đào tạo và sẽ xuất ra các tệp có thể được sử dụng với bảng điều khiển.

Nếu bạn muốn trực quan hóa các tệp được tạo trong quá trình đào tạo, hãy chạy trong thiết bị đầu cuối của bạn

tensorboard --logdir path_to_current_dir/Graph 

Hi vọng điêu nay co ich !


Tôi đã sử dụng lỗi này với lỗi sau khi write_images = Sai
abdul qayyum

UnlimitedArgumentError (xem ở trên để theo dõi): Tenor phải là 4-D với độ mờ 1, 3 hoặc 4 cuối cùng, không phải [1,3,3,256,256,1] [[Node: conv_3.2_2 / kernel_0_1 = ImageSummary [T = DT_FLOAT, bad_color = Tensor <type: uint8 shape: [4] value: 255 0 0 ...>, max_images = 3, _device = "/ job: localhost / Replica: 0 / task: 0 / cpu: 0"] (conv_3. 2_2 / kernel_0_1 / tag, ExpandDims_50)]]
abdul qayyum

Và một cái gì đó nói giữ chỗ bị thiếu dtype = float khi True Any Idea?
abdul qayyum

2
Tab Scalars vẫn trống, mặc dù tôi có thể thấy kiến ​​trúc mô hình của mình trên tab Đồ thị?
iratzhash

1
điều này chỉ tạo ra vô hướng cho sự mất mát và độ chính xác đào tạo. Làm thế nào để bạn làm tương tự cho verify_data được truyền cho hàm fit?
Utku Ufuk

46

Đây là cách bạn sử dụng hàm gọi lại 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
Có cách nào để cấu trúc đầu ra của tenorboard tốt hơn không? Liệu Keras có thực hiện một số tối ưu hóa trong vấn đề đó?
Nickpick

2
@nickpick Tôi không hiểu ý bạn. Nhưng tôi nghĩ rằng đây có thể là một ứng cử viên cho một câu hỏi khác.
Martin Thoma


Điều quan trọng cần lưu ý là histogram_freq=0được đặt nếu bảng liệt kê không ghi bất kỳ biểu đồ nào bằng cách tf.summary.histogram- nếu histogram_freqkhông KHÔNG bằng 0!
Đậu Agile

20

Thay đổi

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

đến

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

và thiết lập mô hình của bạn

tbCallback.set_model(model)

Chạy trong thiết bị đầu cuối của bạn

tensorboard  --logdir Graph/

Tôi nhận được AttributeError: 'TensorBoard' object has no attribute 'set_model'.
Fábio Perez

15

Nếu bạn đang làm việc với thư viện Keras và muốn sử dụng bảng liệt kê để in biểu đồ chính xác và các biến khác, thì dưới đây là các bước để làm theo.

Bước 1: Khởi tạo thư viện gọi lại máy ảnh để nhập bảng điều khiển bằng cách sử dụng lệnh bên dưới

from keras.callbacks import TensorBoard

Bước 2: Bao gồm lệnh dưới đây trong chương trình của bạn ngay trước lệnh "model.fit ()".

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

Lưu ý: Sử dụng "./graph". Nó sẽ tạo thư mục đồ thị trong thư mục làm việc hiện tại của bạn, tránh sử dụng "/ graph".

Bước 3: Bao gồm gọi lại Tenorboard trong "model.fit ()". Mẫu được đưa ra dưới đây.

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

Bước 4: Chạy mã của bạn và kiểm tra xem thư mục biểu đồ của bạn có trong thư mục làm việc của bạn không. nếu các mã trên hoạt động chính xác, bạn sẽ có thư mục "Đồ thị" trong thư mục làm việc của mình.

Bước 5: Mở Terminal trong thư mục làm việc của bạn và gõ lệnh bên dưới.

tensorboard --logdir ./Graph

Bước 6: Bây giờ hãy mở trình duyệt web của bạn và nhập địa chỉ bên dưới.

http://localhost:6006

Sau khi nhập, trang Tensorbaord sẽ mở ra nơi bạn có thể thấy biểu đồ của các biến khác nhau.


Điều quan trọng cần lưu ý là histogram_freq=0được đặt nếu bảng liệt kê không ghi bất kỳ biểu đồ nào bằng cách tf.summary.histogram- nếu histogram_freqkhông KHÔNG bằng 0!
Đậu Agile

9

Đây là một số mã:

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)

Về cơ bản, histogram_freq=2 là tham số quan trọng nhất để điều chỉnh khi gọi cuộc gọi lại này: nó đặt một khoảng thời gian để gọi lại, với mục tiêu tạo ra ít tệp hơn trên các đĩa.

Vì vậy, đây là một ví dụ trực quan về sự tiến hóa của các giá trị cho phép tích chập cuối cùng trong suốt quá trình đào tạo từng thấy trong TensorBoard, dưới tab "biểu đồ" (và tôi đã tìm thấy tab "phân phối" để chứa các biểu đồ rất giống nhau, nhưng lật sang một bên):

giám sát trọng lượng tenorboard

Trong trường hợp bạn muốn xem một ví dụ đầy đủ trong ngữ cảnh, bạn có thể tham khảo dự án nguồn mở này: https://github.com/Vooban/Hyperopt-Keras-CNN-CIFAR-100


Tôi đánh giá thấp điều này bởi vì một phần lớn trong số này thực sự là câu hỏi và không phải là câu trả lời cho câu hỏi. Đừng hỏi những câu hỏi mới trong câu trả lời, cho dù đó là một phần hay toàn bộ mục đích của câu trả lời.
Zoe

Tôi đã chỉnh sửa câu hỏi để loại bỏ những gì bạn đề cập. Trong thực tế, cuộc gọi lại này rất khó để sử dụng đúng từ tài liệu tại thời điểm tôi trả lời.
Guillaume Chevalier

Để trả lời "Làm cách nào để tôi sử dụng hàm gọi lại TensorBoard của Keras?", Tất cả các câu trả lời khác đều không đầy đủ và chỉ trả lời cho bối cảnh nhỏ của câu hỏi - chẳng hạn, không ai giải quyết được nhúng. Ít nhất, tôi đã ghi lại những lỗi tiềm ẩn hoặc những điều cần tránh trong câu trả lời của mình. Tôi nghĩ rằng tôi đã đưa ra những câu hỏi quan trọng mà thậm chí không ai nghĩ đến. Tôi vẫn đang chờ đợi một câu trả lời hoàn chỉnh. Cuộc gọi lại này là tài liệu không tốt, giống như ung thư.
Guillaume Chevalier

4

Nếu bạn đang sử dụng google-colab, trực quan hóa biểu đồ đơn giản sẽ là:

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

Bạn đã viết log_dir='/Graph'có nghĩa là ./Graphthay thế? Bạn đã gửi nó đến /home/user/Graphtại thời điểm này.


1
Tại sao sẽ /Graphtạo một thư mục trong thư mục chính của người dùng thay vì chỉ sử dụng /Graphtrực tiếp?
Michael Mior

2

Bạn nên kiểm tra Losswise ( https://losswise.com ), nó có một plugin cho Keras dễ sử dụng hơn Tensorboard và có một số tính năng bổ sung tuyệt vời. Với Losswise bạn chỉ cần sử dụng from losswise.libs import LosswiseKerasCallbackvà sau đó callback = LosswiseKerasCallback(tag='my fancy convnet 1')bạn sẽ ổn (xem https://docs.losswise.com/#keras-plugin ).


7
Tuyên bố miễn trừ trách nhiệm: OP là người sáng lập của Losswise, đây là một sản phẩm phải trả tiền (mặc dù với một cấp miễn phí khá hào phóng)
Michael Mior

@MichaelMior là chính xác, mặc dù nó chưa phải là sản phẩm phải trả tiền và có thể không bao giờ (ngoài giấy phép trước trong tương lai có thể)
nicodjimenez

2

Có vài điều.

Đầu tiên, không phải /Graphnhưng./Graph

Thứ hai, khi bạn sử dụng hàm gọi lại TensorBoard, luôn truyền dữ liệu xác thực, vì nếu không có nó, nó sẽ không bắt đầu.

Thứ ba, nếu bạn muốn sử dụng bất cứ thứ gì ngoại trừ tóm tắt vô hướng, thì bạn chỉ nên sử dụng fitphương thức này vì fit_generatorsẽ không hoạt động. Hoặc bạn có thể viết lại cuộc gọi lại để làm việc với fit_generator.

Để thêm cuộc gọi lại, chỉ cần thêm nó vào model.fit(..., callbacks=your_list_of_callbacks)


Liên kết liên quan đến điểm thứ 3: github.com/keras-team/keras/issues/3358#issuecomment-312531958
Leo Brueggeman

2

Tạo cuộc gọi lại Tenorboard:

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)

Vượt qua cuộc gọi lại Tenorboard cho cuộc gọi phù hợp:

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

Khi chạy mô hình, nếu bạn gặp lỗi Keras là

"Bạn phải cung cấp một giá trị cho tenor giữ chỗ"

hãy thử thiết lập lại phiên Keras trước khi tạo mô hình bằng cách thực hiện:

import keras.backend as K
K.clear_session()

Nó đã khắc phục vấn đề này You must feed a value for placeholder tensor. Bất cứ ý tưởng tại sao?
Ruthvik Vaila
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.