Keras:ValueError:没有为" input_1"提供数据。需要每个密钥的数据

时间:2017-02-21 22:24:16

标签: machine-learning neural-network keras

我正在使用keras功能API和维度(224,224,3)的输入图像。我使用功能API有以下模型,尽管顺序模型似乎也出现了类似的问题:

input = Input(shape=(224, 224, 3,))
shared_layers = Dense(16)(input)
model = KerasModel(input=input, output=shared_layers)
model.compile(loss='binary_crossentropy', optimizer='sgd', metrics='accuracy'])

我正在调用model.fit_generator我的生成器

yield ({'input_1': image}, {'output': classification}) 

image是输入(224,224,3)图像,classification位于{-1,1}。

在拟合模型时,我收到错误

ValueError: No data provided for "dense_1". Need data for each key in: ['dense_1']

有一件奇怪的事情是,如果我将dict的input_1目标切换为dense_1,则错误会切换为缺少input_1的输入,但会回到缺失的{{1}如果两个键都在数据生成器中。

无论是拨打dense_1还是从发电机获取批次并致电fit_generator,都会发生这种情况。

有谁知道发生了什么?据我所知,这应该与the documentation中给出的相同,尽管输入大小不同。

train_on_batch

4 个答案:

答案 0 :(得分:7)

我在3个案例中遇到此错误(在R中):

  1. 输入数据与第一层中声明的维度不同
  2. 输入数据包含缺失值
  3. 输入数据不是矩阵(例如,数据框)
  4. 请检查以上所有内容。

    也许R中的这段代码可以提供帮助:

    library(keras)
    
    #The network should identify the rule that a row sum greater than 1.5 should yield an output of 1
    
    my_x=matrix(data=runif(30000), nrow=10000, ncol=3)
    my_y=ifelse(rowSums(my_x)>1.5,1,0)
    my_y=to_categorical(my_y, 2)
    
    model = keras_model_sequential()
    layer_dense(model,units = 2000, activation = "relu", input_shape = c(3))
    layer_dropout(model,rate = 0.4)
    layer_dense(model,units = 50, activation = "relu")
    layer_dropout(model,rate = 0.3)
    layer_dense(model,units = 2, activation = "softmax")
    
    compile(model,loss = "categorical_crossentropy",optimizer = optimizer_rmsprop(),metrics = c("accuracy"))
    
    history <- fit(model,  my_x, my_y, epochs = 5, batch_size = 128, validation_split = 0.2)
    
    evaluate(model,my_x, my_y,verbose = 0)
    
    predict_classes(model,my_x)
    

答案 1 :(得分:4)

我也遇到了这个问题,上述答案均无效。根据keras documentation,您可以将参数作为这样的字典传递:

model.fit({'main_input': headline_data, 'aux_input': additional_data},
      {'main_output': labels, 'aux_output': labels},
      epochs=50, batch_size=32)

或这样的列表:

model.fit([headline_data, additional_data], [labels, labels],
      epochs=50, batch_size=32)

词典版本对我来说不适用于keras版本2.0.9。我现在使用列表版本作为解决方法。

答案 2 :(得分:1)

这是因为我误解了keras输出是如何工作的。由output Model参数指定的层需要数据的输出。我误解了数据字典中的output键会自动转到output参数指定的层。

答案 3 :(得分:1)

yield ({'input_1': image}, {'output': classification}) 

output替换为dense_1。 它将起作用。