gpt4 book ai didi

python - 模型的输出张量必须是 Keras 张量

转载 作者:行者123 更新时间:2023-11-28 22:28:17 25 4
gpt4 key购买 nike

我试图制作一个从两个模型输出之间的差异中学习的模型。所以我做了如下代码。但它发生错误读取:

TypeError: Output tensors to a Model must be Keras tensors. Found: Tensor("sub:0", shape=(?, 10), dtype=float32)

我找到了包括lambda在内的相关答案,但我无法解决这个问题。有谁知道这个问题?可能会看到将张量转换为keras的张量。

提前致谢。

from keras.layers import Dense
from keras.models import Model
from keras.models import Sequential

left_branch = Sequential()
left_branch.add(Dense(10, input_dim=784))

right_branch = Sequential()
right_branch.add(Dense(10, input_dim=784))

diff = left_branch.output - right_branch.output

model = Model(inputs=[left_branch.input, right_branch.input], outputs=[diff])
model.compile(optimizer='rmsprop', loss='binary_crossentropy', loss_weights=[1.])

model.summary(line_length=150)

最佳答案

最好让所有操作都由一个层来完成,不要那样减去输出(我不会冒隐藏错误的风险来做与文档预期不同的事情):

from keras.layers import *

def negativeActivation(x):
return -x

left_branch = Sequential()
left_branch.add(Dense(10, input_dim=784))

right_branch = Sequential()
right_branch.add(Dense(10, input_dim=784))

negativeRight = Activation(negativeActivation)(right_branch.output)
diff = Add()([left_branch.output,negativeRight])

model = Model(inputs=[left_branch.input, right_branch.input], outputs=diff)
model.compile(optimizer='rmsprop', loss='binary_crossentropy', loss_weights=[1.])

当连接这样的模型时,我更喜欢使用 Model 方法,使用层,而不是使用 Sequential:

def negativeActivation(x):
return -x

leftInput = Input((784,))
rightInput = Input((784,))

left_branch = Dense(10)(leftInput) #Dense(10) creates a layer
right_branch = Dense(10)(rightInput) #passing the input creates the output

negativeRight = Activation(negativeActivation)(right_branch)
diff = Add()([left_branch,negativeRight])

model = Model(inputs=[leftInput, rightInput], outputs=diff)
model.compile(optimizer='rmsprop', loss='binary_crossentropy', loss_weights=[1.])

有了这个,您可以创建具有相同层的其他模型,它们将共享相同的权重:

leftModel = Model(leftInput,left_branch)
rightModel = Model(rightInput,right_branch)
fullModel = Model([leftInput,rightInput],diff)

如果他们共享同一层,训练其中一个会影响其他人。例如,您可以在编译(或再次编译以进行训练)之前通过设置 left_branch.trainable = False 来训练完整模型中的正确部分。

关于python - 模型的输出张量必须是 Keras 张量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43633883/

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