【问题标题】:Error while creating a log file using TensorBoard with Keras使用带有 Keras 的 TensorBoard 创建日志文件时出错
【发布时间】:2018-12-25 03:39:56
【问题描述】:

我在使用带有 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:/Building.Deep.Learning.Applications.with.Keras.2.0/Exercise Files/06/model_logging final.py”,第 34 行,在 回调=[记录器]

文件 "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 必须是 提供,并且不能是生成器。

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

    将您的验证移动到您的 .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。但是,您的直方图将不起作用。

    【讨论】:

      【解决方案2】:

      首先加载 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)
      

      【讨论】:

        【解决方案3】:

        一种解决方案是使用 histogram_freq=0 关闭直方图:

        记录器 = TensorBoard( log_dir='日志', histogram_freq=0, write_graph=真 )

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

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

        在此处查看答案: Keras autoencoder with Tensorflow Dataset API and logging to Tensorboard

        【讨论】:

          猜你喜欢
          • 2013-09-14
          • 1970-01-01
          • 2021-01-18
          • 2016-09-04
          • 2011-05-09
          • 1970-01-01
          • 1970-01-01
          • 2019-11-05
          • 1970-01-01
          相关资源
          最近更新 更多