Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何给出keras中损失函数的条件_Python_Tensorflow_Keras - Fatal编程技术网

Python 如何给出keras中损失函数的条件

Python 如何给出keras中损失函数的条件,python,tensorflow,keras,Python,Tensorflow,Keras,假设模型看起来像这样 inp = input() feature = some_feature_layer()(inp) out_1 = Dense(1,activation='sigmoid')(feature) out_2 = Dense(10, activation='softmax')(feature) 我想用out_1来表示out_2的重量损失,这意味着out_2的重量损失应该是 out_2_loss = out_1 * some_loss_function(y_true, out2

假设模型看起来像这样

inp = input()
feature = some_feature_layer()(inp)
out_1 = Dense(1,activation='sigmoid')(feature)
out_2 = Dense(10, activation='softmax')(feature)
我想用out_1来表示out_2的重量损失,这意味着out_2的重量损失应该是

out_2_loss = out_1 * some_loss_function(y_true, out2)
我想在模型内部写下损耗,使用损耗函数作为模型输出,然后简单地增加/减少损耗,如下所示:

model = Model(inputs=[inp], outputs=[out_1, out_2_loss])
然后问题就变成了如何将不同的损耗映射到不同的输出。在keras中可以使用这样的映射吗

loss = {out_1 : 'binary_crossentropy',
out_2_loss : linear_function}

这里不能像“in”那样将特殊关键字声明为python变量。 试着声明一些其他变量名,这样就行了

input_1 = input()
feature = some_feature_layer()(input_1)
out_1 = Dense(1,activation='sigmoid')(feature)
out_2 = Dense(10, activation='softmax')(feature)
out_2_loss = out_1 * some_loss_function(y_true, out2)
model = Model(inputs=[input_1], outputs=[out_1, out_2_loss])
loss = {out_1 : 'binary_crossentropy',out_2 : linear_function}

基本上有两种方法可以将不同的损失映射到不同的输出

方法1: 如果输出已命名,请使用dict将名称映射到相应的损失:

out1 = Dense(10, activation='softmax', name='binary_crossentropy')(x)
out2 = Dense(10, name='out2')(x)

model = Model(x, [out1, out2])
model.compile(loss={'binary_crossentropy': 'binary_crossentropy', 'out2': out_2_loss},
          optimizer='adam')
方法2: 使用损失清单

model = Model(x, [out1, out2])
model.compile(loss=['binary_crossentropy', out_2_loss], optimizer='adam')

我对keras一无所知,但不要在中使用
作为变量名,因为它是一个关键字。很抱歉,这个问题有误导性。我现在把它改成了inp。我只是把这个例子讲得太快了,我没有注意到。谢谢你的指点。我刚刚改变了问题。对不起,这是误导。那么,损失部分是这样正确的吗?我没有试着用字典来申报损失,这就是问题所在。