我需要编写代码来通过按给定步骤计算lambda来逐渐降低损失函数的权重,但是我没有任何想法。任何帮助将不胜感激。
这是我的损失功能:
loss_A = criterion(recov_A, real_A)
loss_Final = lambda_A * loss_A + #lambda_A is a fixed number: 10
我不希望lambda_A被修复。经过指定的步骤数后,我需要逐渐衰减lambda
# write function that computes lambda given the steps
cur_lambda = compute_lambda(step, decay_params, initial_lamdba)
Loss_Final = cur_lambda * loss_A
答案 0 :(得分:1)
要衰减固定数量,取决于步数或时期数,您可以使用以下代码,也可以将代码编写为函数并随时调用。
final_value = 1e-3 # Small number because dont end up with 0
initial_value = 20
starting_step = 25
total_step = 100
for i in range(total_step):
if i <= starting_step:
print(i, initial_value)
else:
print (i, initial_value + i * (final_value-initial_value)/total_step)
答案 1 :(得分:0)
显而易见的解决方案:
l = lambda r: 1 if r < 10 else 1.0-(r-9)/10.0 # 1 for r in 0..9, then less then 1 down to 0
value = 20
for r in range(20):
print (r,":", value * l(r)) # multiply your loss with round-based lambda factor
输出:
0 : 20
1 : 20
2 : 20
3 : 20
4 : 20
5 : 20
6 : 20
7 : 20
8 : 20
9 : 20
10 : 18.0
11 : 16.0
12 : 14.0
13 : 12.0
14 : 10.0
15 : 8.0
16 : 6.000000000000001
17 : 3.999999999999999
18 : 1.9999999999999996
19 : 0.0