Потеря веса - PullRequest
       5

Потеря веса

0 голосов
/ 06 января 2019

Мне нужно написать код, чтобы постепенно уменьшить вес моей функции потерь, вычисляя лямбда с заданными шагами, но я понятия не имею. Любая помощь будет оценена.

Это моя функция потерь:

loss_A = criterion(recov_A, real_A)
loss_Final = lambda_A * loss_A + #lambda_A is a fixed number: 10

Я не хочу, чтобы лямбда-А была исправлена. Мне нужно постепенно разлагаться лямбда после прохождения указанного количества шагов

# write function that computes lambda given the steps
cur_lambda  = compute_lambda(step, decay_params, initial_lamdba) 
Loss_Final = cur_lambda * loss_A

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Чтобы убить фиксированное число, зависит от количества шагов или даже количества эпох, вы можете использовать следующий код или вы можете написать код в виде функции и вызывать его в любое время.

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) 
0 голосов
/ 06 января 2019

Очевидное решение:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...