Keras / Tensorflow:“您必须使用dtype float和形状[?,600,451,3]输入占位符张量'input_1'的值”

时间:2018-07-23 16:30:23

标签: tensorflow keras

我正在处理这个C​​NN。 输入形状是动态的,但我将其固定为[?,600,451,3](batch_size,高度,宽度,通道),以便可以对其进行调试。

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

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(请参阅上面的回溯):您必须使用dtype float和形状[?,600,451,3]的占位符张量'input_1'输入值。

     

[[Node:input_1 = Placeholderdtype = DT_FLOAT,shape = [?, 600,451,3],_device =“ / job:localhost /副本:0 / task:0 / device:GPU:0”]] p >

我在做什么错?感谢一千个对此的帮助或直觉。

4 个答案:

答案 0 :(得分:1)

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

import keras.backend as K
K.clear_session()

请参见here

答案 1 :(得分:1)

  • 大多数情况下会发生此问题,因为未使用的输入(在fit生成器上)被添加到网络中。尝试避免或对网络中未使用的输入发表评论,然后重试。如果模型的输入数量与批处理生成器或fit()函数的输入数量不平衡,则会发生此问题。

在您必须重置会话之前 *

import keras.backend as K
K.clear_session()

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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