【发布时间】:2021-03-05 13:25:10
【问题描述】:
我正在创建一个自定义损失函数,它是一个 MAE(y_true, y_pred),由两个数组加权 a 和 b,其中所有四个数组的大小相同(10000 个样本/时间步长)。
def custom_loss(y_true, y_pred, a, b):
mae = K.abs(y_true - y_pred)
loss = mae * a * b
return loss
问题:如何将 a 和 b 输入到函数中? 两者都应该像 y_true 和 y_pred 一样被拆分和洗牌。
到目前为止,我使用的 LSTM 是在 X 形状的数据(样本 x 时间步长 x 变量)上训练的。在这里,我尝试了 tf 的 add_loss 函数来完成这项工作,当进一步传递 a 和 b 时,由于数据形状不同而导致错误输入层。
#LSTM
input_layer = Input(shape=input_shape)
in = LSTM(20, activation='relu', return_sequences=True)(input_layer)
out = LSTM(1, activation='linear', return_sequences=False)(in)
layer_a = Input(shape=(10000))
layer_b = Input(shape=(10000))
model = Model(inputs = [input_layer, layer_a, layer_b], outputs = out)
model.add_loss(custom_loss(input_layer, out, layer_a, layer_b))
model.compile(loss=None, optimizer=Adam(0.01))
# X=data of shape 20 variables x 10000 timesteps, y, a, b = data of shape 10000 timesteps
model.fit(x=[X, a, b], y=y, batch_size=1, shuffle=True)
我该如何正确地做到这一点?
【问题讨论】:
-
X 是 2D 还是 3D? (我错过了)
-
3d(样本 x 时间步长 x 变量)
标签: python tensorflow keras loss