簡體   English   中英

使用 TensorBoard 和 Keras 創建日志文件時出錯

[英]Error while creating a log file using TensorBoard with Keras

使用 TensorBoard 和 Keras 創建日志文件時出現錯誤。

編碼

import pandas as pd
from keras.callbacks import TensorBoard
from keras.models import Sequential
from keras.layers import *

training_data_df = pd.read_csv("sales_data_training_scaled.csv")

X = training_data_df.drop('total_earnings', axis=1).values
Y = training_data_df[['total_earnings']].values

# Define the model
model = Sequential()
model.add(Dense(50, input_dim=9, activation='relu', name='layer_1'))
model.add(Dense(100, activation='relu', name='layer_2'))
model.add(Dense(50, activation='relu', name='layer_3'))
model.add(Dense(1, activation='linear', name='output_layer'))
model.compile(loss='mean_squared_error', optimizer='adam')

# Create a TensorBoard logger
logger = TensorBoard(
    log_dir='logs',
    histogram_freq=5,
    write_graph=True
)

# Train the model
model.fit(
    X,
    Y,
    epochs=50,
    shuffle=True,
    verbose=2,
    callbacks=[logger]
)

# Load the separate test data set

test_data_df = pd.read_csv("sales_data_test_scaled.csv")
X_test = test_data_df.drop('total_earnings', axis=1).values
Y_test = test_data_df[['total_earnings']].values
test_error_rate = model.evaluate(X_test, Y_test, verbose=0)
print(test_error_rate)

然后我得到了這個錯誤:

回溯(最近一次調用最后一次):

文件“E:/Building.Deep.Learning.Applications.with.Keras.2.0/Exercise Files/06/model_logging final.py”,第34行,回調=[logger]

文件“C:\\Python3.6.4\\lib\\site-packages\\keras\\engine\\training.py”,第1041行,適合steps_per_epoch=steps_per_epoch)

文件“C:\\Python3.6.4\\lib\\site-packages\\keras\\engine\\training_arrays.py”,第 219 行,在 fit_loop callbacks.on_epoch_end(epoch, epoch_logs)

文件“C:\\Python3.6.4\\lib\\site-packages\\keras\\callbacks.py”,第 77 行,在 on_epoch_end callback.on_epoch_end(epoch, logs)

文件“C:\\Python3.6.4\\lib\\site-packages\\keras\\callbacks.py”,第 865 行,在 on_epoch_end

raise ValueError("如果打印直方圖,validation_data 必須是" ValueError: 如果打印直方圖,則必須提供validation_data,不能是生成器。

將您的驗證移動到您的 .fit 函數中,如下所示:

# Train the model
model.fit(
X,
Y,
epochs=50,
shuffle=True,
verbose=2,
validation_data=(X_test, Y_test),
callbacks=[logger]
)

當您像您一樣在 .fit 函數之后執行此操作時,記錄器無法看到驗證數據。

如果這不起作用,您也可以設置 histogram_freq=0。 但是,您的直方圖將不起作用。

首先加載 X_test、Y_test 數據並將它們與 model.fit 中的 validation_data arg 一起使用。 下面的工作代碼。

import pandas as pd
from keras.callbacks import TensorBoard
from keras.models import Sequential
from keras.layers import *

training_data_df = pd.read_csv("sales_data_training_scaled.csv")

X = training_data_df.drop('total_earnings', axis=1).values
Y = training_data_df[['total_earnings']].values

# Define the model
model = Sequential()
model.add(Dense(50, input_dim=9, activation='relu', name='layer_1'))
model.add(Dense(100, activation='relu', name='layer_2'))
model.add(Dense(50, activation='relu', name='layer_3'))
model.add(Dense(1, activation='linear', name='output_layer'))
model.compile(loss='mean_squared_error', optimizer='adam')

# Create a TensorBoard logger
logger = TensorBoard(
    log_dir='logs',
    histogram_freq=5,
    write_graph=True
)

# Load the separate test data set.
# >>> Setup X_test, Y_test before using in model.fit below. <<<
test_data_df = pd.read_csv("sales_data_test_scaled.csv")
X_test = test_data_df.drop('total_earnings', axis=1).values
Y_test = test_data_df[['total_earnings']].values

# Train the model
model.fit(
    X,
    Y,
    epochs=50,
    shuffle=True,
    verbose=2,
    callbacks=[logger],
    validation_data=(X_test, Y_test)   # <<< Add this.
)

# Evaluate
test_error_rate = model.evaluate(X_test, Y_test, verbose=0)
print(test_error_rate)

一種解決方案是使用 histogram_freq=0 關閉直方圖:

logger = TensorBoard( log_dir='logs', histogram_freq=0, write_graph=True )

另一種解決方案是指定非生成器驗證數據

另一個解決方案是為張量板創建一個包裝器,如下所示: https : //github.com/keras-team/keras/issues/3358

在這里看到答案: Keras autoencoder with Tensorflow Dataset API and logging to Tensorboard

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM