Próbuję różnych funkcji strat w tensorflow.Funkcje utraty w tensorflow (z if - else)
Funkcja utrata Chcę to swego rodzaju epsilon niewrażliwego funkcji (jest to componentwise):
if(|yData-yModel|<epsilon):
loss=0
else
loss=|yData-yModel|
próbowałem tego rozwiązania:
yData=tf.placeholder("float",[None,numberOutputs])
yModel=model(...
epsilon=0.2
epsilonTensor=epsilon*tf.ones_like(yData)
loss=tf.maximum(tf.abs(yData-yModel)-epsilonTensor,tf.zeros_like(yData))
optimizer = tf.train.GradientDescentOptimizer(0.25)
train = optimizer.minimize(loss)
użyłem również
optimizer = tf.train.MomentumOptimizer(0.001,0.9)
Nie znajduję żadnych błędów w implementacji. Jednak nie zbiegają się, a strata = tf.square (yData-yModel) zbiega się i strata = tf.maximum (tf.square (yData-yModel) -epsilonTensor, tf.zeros_like (yData)) również się konwerguje.
Próbowałem więc czegoś prostszego loss = tf.abs (yData-yModel), a także się nie zbiegało. Czy popełniam jakiś błąd, czy mam problemy z nieróżnicowalnością abs na zero lub czymś innym? Co się dzieje z funkcją abs?
jest utrata wektor? – colinfang
Myślę, że jest (jak tf.square (yData-yModel)). Jednak tensorflow musi sobie z tym poradzić, ponieważ algorytm wstecznej propagacji minimalizuje sumę wyjściowych erros !? – DanielTheRocketMan
co masz na myśli, ale "nie zbiegają się"? strata nie stabilizuje się? lub po prostu nie dostaniesz modelu, który chciałbyś dostać? – lejlot