Мне сложно вычислить кросс-энтропию в тензорном потоке. В частности, я использую функцию:
tf.nn.softmax_cross_entropy_with_logits()
Используя, казалось бы, простой код, я могу заставить его вернуть только ноль.
import tensorflow as tf
import numpy as np
sess = tf.InteractiveSession()
a = tf.placeholder(tf.float32, shape =[None, 1])
b = tf.placeholder(tf.float32, shape = [None, 1])
sess.run(tf.global_variables_initializer())
c = tf.nn.softmax_cross_entropy_with_logits(
logits=b, labels=a
).eval(feed_dict={b:np.array([[0.45]]), a:np.array([[0.2]])})
print c
возвращается
0
Я понимаю кросс-энтропию следующим образом:
H(p,q) = p(x)*log(q(x))
Где p (x) - истинная вероятность события x, а q (x) - предсказанная вероятность события x.
Там, если ввести любые два числа для p (x) и q (x), используются такие, что
0<p(x)<1 AND 0<q(x)<1
перекрестная энтропия должна быть ненулевой. Я ожидаю, что использую тензорный поток неправильно. Заранее благодарю за любую помощь.