交叉熵为 空值

2024-04-19 02:13:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在部署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的维数为[1500500,1],ys_的形状为[250000,1],relu4为[1500500,1],预测为[250000,1]。标签矩阵y的值为{0,1},是一个两类稠密预测。

如果我打印train_step out,它将显示None。有人能帮我吗?


Tags: 网络tf部署steptrain交叉算器entropy
1条回答
网友
1楼 · 发布于 2024-04-19 02:13:02

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

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

这有两个问题。

第一:可以大于一。

第二:

它可以精确地为零(只要ReLU4的输入为负,它的输出就为零)。

log(0) -> NaN

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

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

因为只有一个类,所以应该使用tf.sigmoid_cross_entropy_with_logits


对于训练op返回None:这里有一个微妙的区别,ops和tensor。尝试print(train_step)print(cross_entropy)

计算一个op可以做一些事情,而计算一个张量可以得到一个值。所以如果你在寻找前向过程中计算的交叉熵的值,就做一些类似_, loss_value = sess.run([train_step, cross_entropy])的事情

相关问题 更多 >