您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Keras中的自定义加权损失功能可对每个元素进行称重

Keras中的自定义加权损失功能可对每个元素进行称重

model.fit批量大小是认32,这就是这个数字的来源。这是正在发生的事情:

custom_loss_1张量中K.abs(y_true-y_pred)有形状(batch_size=32, 5),而在numpy数组中weights有形状(100, 5)。这是无效的乘法,因为维数不一致并且无法应用广播。

custom_loss_2这个问题中不存在,因为您要乘以2个具有相同形状的张量(batch_size=32, 5)

custom_loss_3问题是相同custom_loss_1的,因为转换weights成Keras变量不改变它们的形状。

似乎您想对每个训练样本中的每个元素赋予不同的权重,因此weights数组(100, 5)确实应具有形状。在这种情况下,我将权重的数组输入模型中,然后在损失函数中使用该张量:

import numpy as np
from keras.layers import Dense, Input
from keras import Model
import keras.backend as K
from functools import partial


def custom_loss_4(y_true, y_pred, weights):
    return K.mean(K.abs(y_true - y_pred) * weights)


train_X = np.random.randn(100, 5)
train_Y = np.random.randn(100, 5) * 0.01 + train_X
weights = np.random.randn(*train_X.shape)

input_layer = Input(shape=(5,))
weights_tensor = Input(shape=(5,))
out = Dense(5)(input_layer)
cl4 = partial(custom_loss_4, weights=weights_tensor)
model = Model([input_layer, weights_tensor], out)
model.compile('adam', cl4)
model.fit(x=[train_X, weights], y=train_Y, epochs=10)
其他 2022/1/1 18:33:26 有517人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶