【问题标题】:Keras: ValueError: No data provided for "input_1". Need data for each keyKeras:ValueError:没有为“input_1”提供数据。需要每个键的数据
【发布时间】:2017-07-11 18:33:32
【问题描述】:

我正在使用带有尺寸 (224、224、3) 的输入图像的 keras 功能 API。我有以下使用功能 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 的输入,但如果两个键都在数据生成器。

无论我调用 fit_generator 还是从生成器获取批次并调用 train_on_batch,都会发生这种情况。

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

Full traceback:
Traceback (most recent call last):
  File "pymask.py", line 303, in <module>
    main(sys.argv)
  File "pymask.py", line 285, in main
    keras.callbacks.ProgbarLogger()
  File "/home/danielunderwood/virtualenvs/keras/lib/python3.6/site-packages/keras/engine/training.py", line 1557, in fit_generator
    class_weight=class_weight)
  File "/home/danielunderwood/virtualenvs/keras/lib/python3.6/site-packages/keras/engine/training.py", line 1314, in train_on_batch
    check_batch_axis=True)
  File "/home/danielunderwood/virtualenvs/keras/lib/python3.6/site-packages/keras/engine/training.py", line 1029, in _standardize_user_data
    exception_prefix='model input')
  File "/home/danielunderwood/virtualenvs/keras/lib/python3.6/site-packages/keras/engine/training.py", line 52, in standardize_input_data
    str(names))
ValueError: No data provided for "input_1". Need data for each key in: ['input_1']

【问题讨论】:

    标签: machine-learning neural-network keras


    【解决方案1】:

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

    1. 输入数据的维度与第一层中声明的维度不同
    2. 输入数据包含缺失值
    3. 输入数据不是矩阵(例如数据框)

    请检查以上所有内容。

    也许 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)
    

    【讨论】:

    • 这对我来说是 #3 facepalm
    • 这是一个很好的答案,不仅适用于列表,也适用于示例。 #3 在我的情况下。谢谢!
    【解决方案2】:

    我也遇到过这个问题,上面提到的答案都没有奏效。根据 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。我现在使用列表版本作为解决方法。

    【讨论】:

      【解决方案3】:

      这是由于我误解了 keras 输出的工作原理。 Modeloutput 参数指定的层需要数据的输出。我误解了,数据字典中的output键会自动转到output参数指定的层。

      【讨论】:

      • 我遇到了同样的问题,但无法理解您的回答。你能指出我所做的修改吗?
      • @AntonioSesto 我不想这么说,但我也不完全确定我的回答是什么意思。我回顾了 git 和 slack 日志,并没有找到太多东西。我认为问题是我使用'output' 作为我认为会存在的键,但键必须是输出层,它具有键'shared_layers'反而。值得一提的是,由于在这种情况下我的特定模型存在问题,我最终还是使用 tensorlayer 而不是 keras 切换到了 tensorflow。
      【解决方案4】:
      yield ({'input_1': image}, {'output': classification}) 
      

      output 替换为dense_1。 它会起作用的。

      【讨论】:

      • 什么产量?哪里产?产量如何?您的答案需要改进
      猜你喜欢
      • 2018-10-09
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多