【问题标题】:fit_generator issue using Neural Structured learning使用神经结构化学习的 fit_generator 问题
【发布时间】:2019-12-07 16:07:30
【问题描述】:

我花了两天时间尝试使用神经结构化语言来适应我的 CNN 模型我使用 ImageDataGenerator 和 flow_from_directory 当我使用 model.fit_generator 我收到一条错误消息: 值错误:

当将输入数据作为数组传递时,不要指定 steps_per_epoch/steps 参数。请改用batch_size

我使用 Keras 2.3.1 和 TensorFlow 2.0 作为后端

这是我的代码片段:

num_classes = 4
img_rows, img_cols = 224, 224
batch_size = 16

train_datagen = ImageDataGenerator(
  rescale=1./255,
  rotation_range=30,
  width_shift_range=0.3,
  height_shift_range=0.3,
  horizontal_flip=True,
  fill_mode='nearest')

  validation_datagen = ImageDataGenerator(rescale=1./255)
  train_generator = train_datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_rows, img_cols),
    batch_size=batch_size, shuffle=True,
    class_mode='categorical')

    validation_generator = validation_datagen.flow_from_directory(
    validation_data_dir,
    target_size=(img_rows, img_cols),
    batch_size=batch_size, shuffle=True,
    class_mode='categorical')

    def vgg():
      model1 = Sequential([ ])
      return model1

base_model = vgg()

我将从 (x,y) 格式生成的数据改编为字典格式

def convert_training_data_generator():
   for x ,y in train_generator:
    return {'feature': x, 'label':y}

def convert_testing_data_generator():
   for x ,y in validation_generator:
    return {'feature': x, 'label': y}

adv_config = nsl.configs.make_adv_reg_config(multiplier=0.2, adv_step_size=0.05)
model = nsl.keras.AdversarialRegularization(base_model, adv_config=adv_config)
train= convert_training_data_generator()
test= convert_testing_data_generator()

history = model.fit_generator(train,
   steps_per_epoch= nb_train_samples // batch_size,
    epochs = epochs,
    callbacks = callbacks,
    validation_data = test,
    validation_steps = nb_validation_samples // batch_size)

【问题讨论】:

  • 您是否尝试将您作为参数 BATCH_SIZE 代替?

标签: python-3.x tensorflow keras conv-neural-network nsl


【解决方案1】:

我认为here 有同样的错误。也许您应该考虑改用model.fit() 函数。在这种情况下,您应该定义您的 train input 您的 train labelsbatch_size。为了弄清楚fitfit_generator之间的区别,您可以关注link

【讨论】:

  • 不幸的是,我不能使用 model.fit 因为我有一个大数据集
  • 你确定 fit_generator 也想要这种类型的输入吗?您是否尝试过输入两个数组的列表?
  • 认为你的回复神经结构化学习假设它的输入批处理是一个包含 x 和 y 的字典,而 ImageDataGenerator 在 (x, y) 元组中生成输入,这就是为什么我使用 convert_training_data_generator 来解决这个问题,现在我得到了这个错误 ValueError: Layer model_1 was called with an input that is not a symbolic tensor。接收类型:。完整输入:[{'feature': }]。该层的所有输入都应该是张量。
猜你喜欢
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-17
  • 1970-01-01
  • 2019-10-17
相关资源
最近更新 更多