使用带有Keras的TensorBoard创建日志文件时出错



使用带有Keras的TensorBoard创建日志文件时出错。

代码

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)

然后我得到了这个错误:

Traceback(最后一次调用(:

文件";E:/建筑。深的学习应用程序.with.Keras.20/练习Files/06/model_logging final.py";,第34行,incallbacks=[logger]

文件";C: \Python3.6.4\lib\site-packages\keras\engine\training.py";,第1041行,适配步长sper_epoch=步长sper_poch(

文件"C: \Python3.6.4\lib\site-packages\keras\engine\training_arrays.py";,第219行,在fit_loop回调中。on_ech_end(epoch,epoch_logs(

文件";C: \Python3.6.4\lib\site-packages\keras\callbacks.py";,线77,在on_ech_end回调中。on_ech-end(epoch,logs(

文件";C: \Python3.6.4\lib\site-packages\keras\callbacks.py";,线865,在on_ech_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_frek=0:的直方图

logger=TensorBoard(log_dir="日志",histogram_ freq=0,write_graph=真)

另一种解决方案是指定非生成器验证数据

另一个解决方案是为张量板创建一个包装器,如下所示:https://github.com/keras-team/keras/issues/3358

请参阅此处的答案:Keras带有Tensorflow数据集API的自动编码器,并记录到Tensorboard

最新更新