重命名Keras张量名称以实现损失函数

jin*_*wan 4 keras

keras张量有简单的重命名吗?我需要它在某些情况下为张量提供更合适的名称。

当我编译具有多个输出或输入的模型时,该模型需要输入或输出张量的名称。例如,下面的模型需要名称“ advc_out_tn”和“ atoz.output”。

advc_out_tn = self.advc_model(atoz.output)

self.advc_atoz_model = Model(input=atoz.input, output=[advc_out_tn, atoz.output])
self.advc_atoz_model.compile(optimizer='adam', loss="binary_crossentropy", loss_weights={"advc_out_tn":1.0, "atoz_out_tn":1.0})
Run Code Online (Sandbox Code Playgroud)

但这给了我错误,因为它们不是真实姓名。

ValueError: Unknown entry in loss_weights dictionary: "atoz_out_tn". Only expected the following keys: ['model_2', 'concat_decoded_img']
Run Code Online (Sandbox Code Playgroud)

但是张量的真实名称有些笨拙。特别是如果我使用给定的模型(在这种情况下为atoz)并通过“ .out”访问其输出张量,则会给出最后一层的名称(“ concat_decoded_img”),而不是模型的名称。

我该如何解决?

tlq*_*lqs 7

遇到类似的问题。对我来说,以下工作为张量类型的输出分配名称。我使用了一个虚拟Lambda层(身份函数)并将新名称分配给该Lambda层(尽管结果不再是张量类型,但对我而言这并不重要)。

from keras.layers import Lambda

naming_layer = Lambda(lambda x: x, name='your_name')
newly_named_output = naming_layer (tensor_output)
Run Code Online (Sandbox Code Playgroud)