keras中的加权mse自定义损失函数
Weighted mse custom loss function in keras
我正在处理时间序列数据,输出提前 60 天的预测。
我目前使用均方误差作为我的损失函数,结果很糟糕
我想实现加权均方误差,使早期输出比后期输出重要得多。
加权均方根公式:
所以我需要一些方法来迭代张量的元素,有一个索引(因为我需要同时迭代预测值和真实值,然后将结果写入只有一个元素的张量. 他们都是 (?,60) 但实际上是 (1,60) 列表。
而且我正在尝试的任何事情都没有奏效。这是损坏版本的代码
def weighted_mse(y_true,y_pred):
wmse = K.cast(0.0,'float')
size = K.shape(y_true)[0]
for i in range(0,K.eval(size)):
wmse += 1/(i+1)*K.square((y_true[i]-y_pred)[i])
wmse /= K.eval(size)
return wmse
我目前收到此错误结果:
InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'dense_2_target' with dtype float
[[Node: dense_2_target = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
看过类似帖子的回复后,我认为掩码无法完成任务,循环一个张量中的元素也行不通,因为我无法访问张量中的相应元素其他张量。
如有任何建议,我们将不胜感激
您可以使用这种方法:
def weighted_mse(yTrue,yPred):
ones = K.ones_like(yTrue[0,:]) #a simple vector with ones shaped as (60,)
idx = K.cumsum(ones) #similar to a 'range(1,61)'
return K.mean((1/idx)*K.square(yTrue-yPred))
ones_like
与 cumsum
的结合使用允许您将此损失函数用于任何类型的 (samples,classes)
输出。
提示:在处理张量时始终使用 backend functions。您可以使用切片,但要避免迭代。
我正在处理时间序列数据,输出提前 60 天的预测。
我目前使用均方误差作为我的损失函数,结果很糟糕
我想实现加权均方误差,使早期输出比后期输出重要得多。
加权均方根公式:
所以我需要一些方法来迭代张量的元素,有一个索引(因为我需要同时迭代预测值和真实值,然后将结果写入只有一个元素的张量. 他们都是 (?,60) 但实际上是 (1,60) 列表。
而且我正在尝试的任何事情都没有奏效。这是损坏版本的代码
def weighted_mse(y_true,y_pred):
wmse = K.cast(0.0,'float')
size = K.shape(y_true)[0]
for i in range(0,K.eval(size)):
wmse += 1/(i+1)*K.square((y_true[i]-y_pred)[i])
wmse /= K.eval(size)
return wmse
我目前收到此错误结果:
InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'dense_2_target' with dtype float
[[Node: dense_2_target = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
看过类似帖子的回复后,我认为掩码无法完成任务,循环一个张量中的元素也行不通,因为我无法访问张量中的相应元素其他张量。
如有任何建议,我们将不胜感激
您可以使用这种方法:
def weighted_mse(yTrue,yPred):
ones = K.ones_like(yTrue[0,:]) #a simple vector with ones shaped as (60,)
idx = K.cumsum(ones) #similar to a 'range(1,61)'
return K.mean((1/idx)*K.square(yTrue-yPred))
ones_like
与 cumsum
的结合使用允许您将此损失函数用于任何类型的 (samples,classes)
输出。
提示:在处理张量时始终使用 backend functions。您可以使用切片,但要避免迭代。