交叉熵是南

时间:2016-10-22 13:28:43

标签: python tensorflow conv-neural-network cross-entropy

我正在部署我的conv-deconv网。我的问题是交叉熵在训练时总是很好,所以解算器没有更新权重。我整天检查了我的代码,但我不知道哪里出错了。以下是我的架构: enter image description here 这是我的交叉熵函数

ys_reshape = tf.reshape(ys,[-1,1])
prediction = tf.reshape(relu4,[-1,1])
cross_entropy = tf.reduce_mean(-(ys_reshape*tf.log(prediction)))
train_step = tf.train.AdamOptimizer(0.01).minimize(cross_entropy)

其中ys的维数为[1,500,500,1],ys_reshape为[250000,1],relu4为[1,500,500,1],预测为[250000,1]。标签矩阵的值ys是{0,1},这是两类密集预测。

如果我打印train_step,它将显示None。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

你把问题缩小到正确的几行代码做得很好。

所以你的预测概率直接是ReLU4的输出?

这有两个问题。

首先:它可能大于一个。

第二

它可以正好为零(ReLU4的输入为负的任何地方,它的输出将为零)。

log(0) -> NaN

通常的做法是将线性激活(No ReLU)视为每个类别的对数概率。

天真的实现总是被打破(数字问题)。

由于您只有一个班级,因此您应该使用tf.sigmoid_cross_entropy_with_logits

对于训练操作返回None:这里有一个微妙的区别,在操作和张量之间。试试print(train_step)print(cross_entropy)

评估op会做一些事情,而评估张量会获得一个值。因此,如果您正在寻找在前向传球上计算的交叉熵的值,请执行_, loss_value = sess.run([train_step, cross_entropy])

之类的操作