【问题标题】:The list of Numpy arrays that you are passing to your model is not the size the model expected您传递给模型的 Numpy 数组列表不是模型预期的大小
【发布时间】:2019-10-05 03:24:15
【问题描述】:

我试图通过像这样传递它们来在 Keras 中获得三种不同的损失函数

input_img = Input(shape=(728,))
encoded = Dense(450, activation='relu')(input_img)
encoded = Dense(250, activation='relu')(encoded)
encoded= Dense(20, activation='relu')(encoded)

decoded = Dense(250, activation='relu')(encoded)
decoded = Dense(450, activation='relu')(decoded)
decoded = Dense(728, activation='sigmoid')(decoded)
loss1 = Dense(728, activation='sigmoid', name='p1')(decoded)
loss2 = Dense(728, activation='sigmoid', name='p2')(decoded)
loss3 = Dense(728, activation='sigmoid', name='p3')(decoded)

我定义了三个不同的损失函数,编译成功

autoencoder = Model(inputs = [input_img], outputs=[loss1,loss2,loss3])
autoencoder.compile(optimizer='Adam', loss = [w_loss,b_loss, loss], metrics = [w_loss,b_loss], loss_weights=[1., 1., 1.])

然后我拟合模型

history_modified = autoencoder.fit(X_train, X_train, epochs=200, batch_size= 100, shuffle=True, validation_data=(X_test, X_test))

X_train 维度为 (100000, 728),X_test 维度为 (50000,728)

我得到的错误是

Error when checking model target: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 3 array(s), but instead got the following list of 1 arrays: [array([[0., 0., 0., ..., 0., 0., 0.],

我不知道究竟是什么导致了这个问题,但我认为这可能与层以及我如何拥有多个损失函数有关。

【问题讨论】:

  • 这个模型有三个输出,意味着应该有三个目标数组,而不是一个。

标签: numpy keras


【解决方案1】:

正如错误所说,目标的形状有问题。理想情况下,由于模型有三个输出(loss1,loss2,loss3),输出中应该有三个数组来比较三个输出数组。您必须在目标中仅传递一个数组,因此会出现此错误。

【讨论】:

  • 有没有一种方法可以在给定一个输入的情况下获得三种不同的损失函数?
  • stackoverflow.com/questions/49404309/… 这可能对您有用。否则,您只需将地面实况标签更改为具有 3 个数组。
猜你喜欢
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
  • 2019-07-16
  • 1970-01-01
相关资源
最近更新 更多