разница между обновлением параметров с использованием модуля tenorflow и обновлением с помощью ручных переменных - PullRequest
0 голосов
/ 17 сентября 2018

у меня

#using module
dense = tf.layers.dense(tf_dataset_l, nn_hidden, activation=tf.tanh)
logits_l = tf.layers.dense(dense, num_labels, activation=tf.nn.softmax)        
loss_l = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=tf_labels_l, logits=logits_l))       
optimizer_l = tf.train.GradientDescentOptimizer(0.5).minimize(loss_l)

#manual
w1 = tf.Variable(tf.truncated_normal([image_size * image_size, nn_hidden]))
b1 = tf.Variable(tf.zeros([nn_hidden]))
w2 = tf.Variable(tf.truncated_normal([nn_hidden, num_labels]))
b2 = tf.Variable(tf.zeros([num_labels]))       
dense = tf.tanh(tf.matmul(tf_dataset, w1) + b1)
logits = tf.matmul(hidden, w2) + b2    
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=tf_labels, logits=logits))
optimizer = tf.train.GradientDescentOptimizer(0.5).minimize(loss)

с использованием образа mnist и в том же состоянии, конечная производительность при использовании модуля: 92,2% по сравнению с конечной производительностью руководства: 88,7%

Я не использую какой-либо трюк с регуляризацией или другой. Я не знаю, почему между ними есть разница. Пожалуйста, дайте мне знать

1 Ответ

0 голосов
/ 17 сентября 2018

Правильный ответ:

При первом использовании при использовании подготовленных модулей происходит двойная активация softmax.Двойной softmax: logits_l = tf.layers.dense(dense, num_labels, activation=tf.nn.softmax), затем вы снова выполните softmax_cross_entropy_with_logits.Это отличается, и так как он работает лучше, это также интересно:)

Это всегда хорошая идея, чтобы протестировать код и увидеть, что вы получите именно тот расчетный граф, который вам нужен.Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...