Dee*_*rma 2 python keras tensorflow
嗨,我一直在尝试在 keras 中实现一个损失函数。但是我无法想出一种方法来传递超过 2 个参数而不是 loss(y_true, y_predict) 所以我想使用 lambda 层作为最后一层并在 lambda 层本身中进行计算并简单地返回 y_predict 的值在这样的损失函数中
def loss_function(x):
loss = some calculations
return loss
def dummy_loss(y_true, y_pred):
return y_pred
def primary_network():
global prim_binary_tensor
x = VGG16(weights='imagenet', include_top=True, input_shape=image_shape)
last_layer = Dense(k_bit, activation='tanh', name='Dense11')(x.layers[-1].output)
last_layer, x = basic_model()
lambda_layer = Lambda(loss_function)([last_layer, prim_binary_tensor])
model = Model(inputs=[x.input, prim_binary_tensor], outputs=[lambda_layer])
model.compile(optimizer="adam", loss=dummy_loss,metrics=['accuracy'])
return model
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
1)我计算损失的方法正确吗?是否保证为每个图像(input_data)调用 lambda 层函数?
2)有人可以建议我如何将多个参数传递给损失函数吗?
3)损失函数的最终结果可以是标量还是必须是向量或矩阵?
回答您的问题:
我不知道你的方法是否有效,但有一个更简单的解决方案。
您可以通过定义偏函数来传递多个参数。
损失函数的输出是一个标量。
这是一个演示如何将多个参数传递给损失函数的示例:
from keras.layers import Input, Dense
from keras.models import Model
import keras.backend as K
def custom_loss(arg1, arg2):
def loss(y_true, y_pred):
# Use arg1 and arg2 here as you wish and return loss
# For example:
return K.mean(y_true - y_pred) + arg1 + arg2
return loss
x = Input(shape=(1,))
arg1 = Input(shape=(1,))
arg2 = Input(shape=(1,))
out = Dense(1)(x)
model = Model([x, arg1, arg2], out)
model.compile('sgd', custom_loss(arg1, arg2))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
723 次 |
| 最近记录: |