【问题标题】:keras - how to avoid dimension error when using lambda layerskeras - 使用 lambda 层时如何避免尺寸错误
【发布时间】:2019-05-13 20:44:57
【问题描述】:

我在 tensorflow 上使用带有 keras 的 python 并尝试使用 lambda 层,并且一直出现相同的错误,我检查了模型的摘要,一切似乎都很好。该错误仅在训练时发生。

from keras.datasets import mnist 
from keras.layers import Dense, Input, concatenate,subtract, Lambda
from keras.losses import binary_crossentropy
from keras.optimizers import SGD

(train_x, train_y), (test_x, test_y) = mnist.load_data()
train_x = (train_x / 255.0).reshape(-1, 28*28) 
test_x = (test_x / 255.0).reshape(-1, 28*28)

inp1 = Input(shape=(28*28,))
inp2 = Input(shape=(28*28,))

l1 = Dense(100, activation="relu")
a1 = l1(inp1)
a2 = l1(inp2)
l2 = Dense(100, activation="relu")
b1 = l2(a1)
b2 = l2(a2)
output = Lambda(lambda inputs: inputs[0]-inputs[1], output_shape=(100,))([b1, b2])
model = Model([inp1, inp2], [output])
model.compile(loss=binary_crossentropy, optimizer=SGD())

y = train_y[:1]
model.fit([train_x[:1], train_x[:1]], y)

我收到此错误

检查目标时出错:预期 lambda_13 的形状为 (100,) 但得到了形状为 (1,) 的数组

在同一数据上使用model.predict 时,它的预测没有任何错误。这里有什么问题?谢谢

【问题讨论】:

  • 问题是您期望模型以(100,) 的形状进行预测,并且您正在尝试拟合形状为 (1,) 的数据。在这里,如果你想使用当前的youtput_shape=(100,) 应该是1
  • 太好了,谢谢,愿意发布一个答案让我接受吗?

标签: python tensorflow machine-learning keras deep-learning


【解决方案1】:

问题是您希望模型以 (100,) 的形状进行预测,而您正在尝试拟合具有 (1,) 形状的数据。在这里,如果您想使用当前 y,则 output_shape=(100,) 应该为 1。

如果你想对形状为(1,) 的输出进行数字分类,还有一件事。您还需要将model.compile(loss=binary_crossentropy, optimizer=SGD()) 更改为model.compile(loss=sparse_categorical_crossentropy, optimizer=SGD())。有关sparse_categorical_crossentropy 的更多信息,您可以查看keras documentation。而且你可以找到herecategorical_crossentropysparse_categorical_crossentropy的区别。

【讨论】:

    猜你喜欢
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2018-03-06
    相关资源
    最近更新 更多