gpt4 book ai didi

python - keras - 使用 lambda 层时如何避免尺寸错误

转载 作者:行者123 更新时间:2023-11-30 09:31:25 25 4
gpt4 key购买 nike

我在tensorflow上使用python和keras,并尝试使用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)

我收到此错误

Error when checking target: expected lambda_13 to have shape (100,) but got array with shape (1,)

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

最佳答案

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

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

关于python - keras - 使用 lambda 层时如何避免尺寸错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56111871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com