Keras / Tensorflow:“您必须为占位符张量‘input_1’提供一个值为 dtype float 和 shape [?, 600, 451, 3]”

Ach*_*lle 5 keras tensorflow

我有这个 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
                    )
Run Code Online (Sandbox Code Playgroud)

当我做:

next(test)[0].shape
Run Code Online (Sandbox Code Playgroud)

或者

next(test)[0].dtype
Run Code Online (Sandbox Code Playgroud)

它向我输出正确的形状 ([?, 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]
    )
Run Code Online (Sandbox Code Playgroud)

此错误消息:

InvalidArgumentError(回溯参见上文):您必须为占位符张量“input_1”提供一个值,其数据类型为浮点型和形状 [?,600,451,3]

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

我究竟做错了什么?感谢一千人对此的任何帮助或直觉。

pdp*_*ino 6

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

import keras.backend as K
K.clear_session()
Run Code Online (Sandbox Code Playgroud)

看到这个答案


Dan*_*ler 1

不确定这就是原因,但某些内容与验证数据不兼容。

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

现在,如果它是一个生成器,那么您需要将其传递为validation_data = someGenerator,然后传递validation_steps=number_of_batches_expected_from_generator