【问题标题】:Keras / Tensorflow : "You must feed a value for placeholder tensor 'input_1' with dtype float and shape [?, 600, 451, 3]"Keras / Tensorflow:“您必须使用 dtype float 和 shape [?, 600, 451, 3] 为占位符张量 'input_1' 提供一个值”
【发布时间】:2019-10-10 04:33:36
【问题描述】:

我正在处理这个 CNN。 输入形状是动态的,但我将其固定为 [?, 600, 451, 3] (batch_size, height, width, channels),以便调试。

我创建了一个随机批处理生成器

test = random_batch_generator(z_train
                    , num_processes=12 
                    , num_batch=steps_train 
                    , preloaded_batch=100
                    , batch_size=batch_size
                    , chunk_size=batch_size
                    , dataaugmfunc=heavy_dataaugm
                    , seq=seq
                    , initial_dim=initial_dim
                    , min_overlap=MINOVERLAP
                    )

当我这样做时:

next(test)[0].shape

next(test)[0].dtype

它输出正确的形状 ([?, 600, 451, 3]) 和 dtype (float32),这在理论上是我的输入所必需的。我还检查了批次的内容,看起来不错。

不过,当我使用以下内容训练模型时,我得到了:

model.fit_generator(
        random_batch_generator(z_train (...)),
        validation_data= (x_val_mem,y_val_mem),
        steps_per_epoch=steps_train,
        validation_steps=steps_val,
        epochs=epochs
        ,callbacks=model_callbacks(modelname)
        ,class_weight = [0.005,0.995]
    )

这个错误信息:

InvalidArgumentError(有关回溯,请参见上文):您必须为占位符张量“input_1”提供一个值,其 dtype 为 float 和 shape [?,600,451,3]

[[节点:input_1 = Placeholderdtype=DT_FLOAT, shape=[?,600,451,3], _device="/job:localhost/replica:0/task:0/device:GPU:0"]]

我做错了什么?感谢您对此的任何帮助或直觉。

【问题讨论】:

  • 尝试先初始化你的生成器类,然后将它传递给你的模型
  • 也尝试将next(test)[0] 提供给您的模型

标签: tensorflow keras


【解决方案1】:

你在使用 TensorBoard 回调吗?如果是这样,您可以尝试在创建模型之前添加它

import keras.backend as K
K.clear_session()

this answer

【讨论】:

    【解决方案2】:
    • 大多数情况下,由于未使用的输入(在您的 fit 生成器上)被添加到您的网络,所以会出现此问题。尽量避免或评论网络中未使用的输入,然后重试。如果模型的输入数量与批处理生成器或 fit() 函数的输入数量不平衡,则会发生此问题。

    在您必须重置会话之前 *

    import keras.backend as K
    K.clear_session()
    

    【讨论】:

      【解决方案3】:

      不确定这是不是这个原因,但有些东西与验证数据不兼容。

      如果您将验证数据作为数组传递,则将其传递为validation_data=(array_x, array_y),而没有validation_steps

      现在,如果是生成器,则需要将其传递为validation_data = someGenerator,然后传递validation_steps=number_of_batches_expected_from_generator

      【讨论】:

      • 感谢您的回答。不过可能不是问题,我之前用同样的方式训练过模型,它工作得完美无缺。这个问题似乎更多地与训练数据/模型形状有关,而不是验证“架构”。
      • 不,错误是:您没有提供数据。在训练和验证中都有喂养。由于您的训练看起来不错,我相信验证可能是问题所在。
      • 不过,可能还有更详细的原因,比如使用遮罩、TimeDistributed 层、自定义函数等。没有什么真正清楚或可理解的。
      • 我的验证集有 shape (num_batch, 600, 451, 3) 和 dtype float32,我也检查了...我使用的是自定义层(模型编译正确),只有模型中有 1 个输入。
      【解决方案4】:

      当我设置 'histogram_freq = 1' 而不是 0 时,这发生在我身上 (TF 1.14)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-04
        • 2019-09-13
        • 1970-01-01
        • 1970-01-01
        • 2017-11-02
        • 2017-06-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多