Защитите функцию acos от Tensorflow от nans в потере Keras

Работает для меня:

$dom = new \DOMDocument;
$dom->loadHTML(utf8_decode($html));
...
return  utf8_encode( $dom->saveHTML());
0
задан 0vbb 13 July 2018 в 06:08
поделиться

1 ответ

Вы можете использовать K.clip(unprotected_acos_input, -1, 1).

>> a = np.linspace(-1.01, 1.01, 20)
array([-1.01      , -0.90368421, -0.79736842, -0.69105263, -0.58473684,
       -0.47842105, -0.37210526, -0.26578947, -0.15947368, -0.05315789,
        0.05315789,  0.15947368,  0.26578947,  0.37210526,  0.47842105,
        0.58473684,  0.69105263,  0.79736842,  0.90368421,  1.01      ])

>> K.eval(tf.acos(K.variable(a)))
array([       nan, 2.69909317, 2.49371832, 2.33374068, 2.19535195,
       2.06965208, 1.95207246, 1.83981909, 1.73095382, 1.62397929,
       1.51761336, 1.41063884, 1.30177357, 1.1895202 , 1.07194058,
       0.9462407 , 0.80785197, 0.64787434, 0.44249948,        nan])

>> K.eval(tf.acos(K.clip(K.variable(a), -1, 1)))
array([3.14159265, 2.69909317, 2.49371832, 2.33374068, 2.19535195,
       2.06965208, 1.95207246, 1.83981909, 1.73095382, 1.62397929,
       1.51761336, 1.41063884, 1.30177357, 1.1895202 , 1.07194058,
       0.9462407 , 0.80785197, 0.64787434, 0.44249948, 0.        ])
1
ответ дан Yu-Yang 17 August 2018 в 13:37
поделиться
  • 1
    Так же, как примечание для будущих читателей: не используйте это как функцию потерь с acos, так как acos (1) или acos (-1) приводит к градиенту inf. Вы должны добавить эпсилон к нему. – 0vbb 26 July 2018 в 07:53
Другие вопросы по тегам:

Похожие вопросы: