[英]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.