2016-02-29 3 views
1

Я новичок с TensorFlow, и я изучаю его в течение последних нескольких дней. Я хочу понять, если следующие две функции эквивалентны или нет:Являются ли эти функции эквивалентными в TensorFlow?

1.

softmax = tf.add(tf.matmul(x, weights), biases, name=scope.name) 

2.

softmax = tf.nn.softmax(tf.matmul(x, weights) + biases, name=scope.name) 

Если на самом деле они разные, что главное различие?

ответ

2
softmax1 = tf.add(tf.matmul(x, weights), biases, name=scope.name) 

не равен

softmax2 = tf.nn.softmax(tf.matmul(x, weights) + biases, name=scope.name) 

softmax1, поскольку не имеет SoftMax расчета в то время как все softmax2 делают. См. Tensorflow API для tf.nn.softmax. general idea of a softmax является то, что он нормализует ввод, масштабирования всей последовательности данных, обеспечивая их запись в интервале (0, 1), а сумма равна 1.

Единственное, что равно между двумя утверждениями является базовый расчет. + делает то же самое tf.add делает так tf.add(tf.matmul(x, weights), biases)соответствует до tf.matmul(x, weights) + biases.


EDIT: Для того, чтобы добавить некоторые уточнения (я думаю, вы не знаете, на самом деле знает, что делает SoftMax?):

tf.matmul(x, W) + bias 

Рассчитывает матричное умножение между x (ваш входной вектор) и W Весы для текущего слоя. Затем добавляется bias.

Этот расчет моделирует активацию одного уровня. Кроме того, у вас есть функция активации, например функция sigmoid, которая преобразует вашу активацию. Таким образом, для одного слоя, который вы обычно делаете что-то вроде этого:

h1 = tf.sigmoid(tf.matmul(x, W) + bias) 

Здесь h1 будет активация этого слоя.

Операция softmax просто перепродает ваши данные. Например, если вы получили эту активацию на выходной слое:

output = [[1.0, 2.0, 3.0, 5.0, 0.5, 0.2]] 

The SoftMax перемасштабирует этот вход для установки значения в интервале (0, 1) и является суммой, равной 1:

tf.nn.softmax(output) 
> [[ 0.01497873, 0.0407164 , 0.11067866, 0.81781083, 0.00908506, 
    0.00673038]] 

tf.reduce_sum(tf.nn.softmax(output)) 
> 1.0 
+0

Итак, правильно ли сказать, что 2) является применением кросс-энтропии для получения меток '0.0' или' 1.0' для вероятности, а 1) нужен еще один проход для получения 1-горячей метки? – Kyrol

+0

Нет, это неверно. 'softmax' не создает вектор с 1 горячим кодированием. Операция softmax перескакивает ваш входной вектор. Для получения кросс-энтропии в качестве ошибки вам потребуется рассчитать кросс-энтропию отдельно. – daniel451

+0

Хорошо, я это понимаю. – Kyrol