我在张量流上训练有线电视新闻网,但我的失误并没有改善;我注意到tf.nn.softmax()
正在返回一个只有0和1的张量,而不是我所期望的分布。 Here's the repo,我认为这是我无法培训网络的原因,但我不知道如何解决这个问题。
答案 0 :(得分:1)
查看神经网络下的第二个框:
# output layer
with tf.variable_scope('output_lay') as scope:
weights = weight_variable([4096, CLASSES])
bias = bias_variable([CLASSES], 0.)
activation = tf.nn.relu(tf.matmul(out, weights)+bias, name=scope.name)
out = tf.nn.softmax(activation)
return tf.reshape(out, [-1, CLASSES])
注意:ReLu
激活仅用于隐藏图层而非输出图层。
然后你在train
函数
logits=AlexNet(x_tr)
# loss function
cross_entropy = -tf.reduce_sum(tf.squeeze(y_tr)*tf.log(tf.clip_by_value(tf.squeeze(logits),1e-10,1.0)))
loss = tf.reduce_mean(cross_entropy)
重新访问cross entropy:
C= −1/n * (∑[y*ln(a)+(1−y)*ln(1−a)])
其中a = sigmoid(W(x)+b)
,所以我建议:
with tf.variable_scope('output_lay') as scope:
weights = weight_variable([4096, CLASSES])
bias = bias_variable([CLASSES], 0.)
return tf.matmul(out, weights)+bias
为简单起见,只需使用内置的softmax功能:
logits=AlexNet(x_tr)
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=ground_truth_input, logits=logits)
loss = tf.reduce_mean(cross_entropy)
tf.nn.softmax_cross_entropy_with_logits
接收W(x)+b
并有效地计算交叉熵。