问题标签 [sigmoid]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
tensorflow - 带有 tf.losses.sigmoid_cross_entropy 的 Tensorflow 偶尔出现负值
我正在使用 Inception-V4 模型使用 tensorflow 进行多标签分类。该模型的输出维度为 51,对于这 51 个类,我的标签要么是 1,要么是 0。我没有进一步修改 Inception-V4。
为了学习多标签分类,我通过应用 tf.losses.sigmoid_cross_entropy 来使用 sigmoid 交叉熵损失。我的 logits 没有缩放(没有激活函数),我的标签看起来也很好。整体损失通过 tf.losses.get_total_loss() 计算。
现在整个系统可以正常工作并学习多个 epoch。然而,在大约 15 到 20 个 epoch 的学习之后,它有时会产生负损失值。此时损失在 0.01 左右,但有时会下降到 -0.15 甚至更低(我曾经看到过 -1)。此外,在这些步骤之后,我的模型的准确性也会下降,所以我认为它实际上是在伤害它。
有谁知道我做错了什么?有谁之前经历过这个吗?我能做什么?
我还没有包含我的代码,因为我认为它只是一个简单的 Estimator 管道,我直接获取 inception_v4 的 logits 和 auxLogits 并将这样的 sigmoid 交叉熵损失附加到它们两者上。但如果代码有帮助,我可以尝试将其缩小以将其添加到此处。
这就是 logits 的损失:
python - Keras 中的 Sigmoid 层
我有一个值列表,范围从15000
到25000
。我必须将它们分为两类,这样(大约)20000 将最终归入类别 1,其余的归入类别 2。我发现 sigmoid 激活应该适用于此。为此,我在 keras 中使用了以下层:
模型=顺序()
但是,当我为我的示例案例运行模型时,所有值都归入类别 2。我该如何改进呢?
python - Keras 在激活函数之前检索节点的值
想象一个全连接的神经网络,其最后两层结构如下:
网络的输出值为 1,但我想知道 sigmoidal 函数的输入 x 是什么(必须是一些高数字,因为 sigm(x) 在这里是 1)。
按照 indraforyou的回答,我设法检索了 Keras 层的输出和权重:
x怎么可能是负数?在这种情况下,最后一层输出应该是一个比 1.0 更接近 0.0 的数字。是dense_0_out
或dense_1_weights
错误的输出或权重?
matlab - 逻辑回归中的 Sigmoid 函数
无论我给 zi 什么值,我都会得到一个 1x100 矩阵,其中 1 是第一个条目,其余的是 0,这应该如何工作,这是否正常工作?
machine-learning - 基于神经网络前馈反向传播的学习不适用于 AND 表
我的神经网络能够了解样本是 OR 表还是 XOR 表。但是,如果我想让它学习 AND 表,它会拒绝。
神经网络配置:
1 个输入层,2 个输入神经元
1 个隐藏层,3 个神经元
1 个输出层和 1 个结果神经元。
总共 9 个权重,6 个分配在输入和隐藏之间,3 个分配在隐藏和输出之间。
使用 sigmoid 作为激活函数。
使用 OR 或 XOR,值往往会接近正确的值,如下所示:
或者
0 0 - 0.0232535024 // ~0
0 1 - 0.9882075648 // ~1
1 0 - 0.9881840412 // ~1
1 1 - 0.9932447649 // ~1
异或
0 0 - 0.0419020172 // ~0
0 1 - 0.9742653893 // ~1
1 0 - 0.9742622526 // ~1
1 1 - 0.0096044003 // ~0
但是当我尝试对它进行 AND 训练时,前 3 行趋向于接近 0,但最后一行 (1,1) 趋向于接近 0.5,而不是超过 0.5。
和
0 0 - 0.0007202012 // ~0
0 1 - 0.0151875796 // ~0
1 0 - 0.0128653577 // ~0
1 1 - 0.4987960208 // 事件未关闭,趋于接近 0.5,1 的一半
如果需要代码,请告诉我我会发布它。我想知道我的方法是否正确。
我可以对所有情况应用相同的激活函数吗?为什么它接近 1 的一半 0.5?我从概念上理解这一点有什么问题吗?
我关注了 https://stevenmiller888.github.io/mind-how-to-build-a-neural-network/ 和其他一些人来了解 NN 以及如何实现它。使用 Java
下面是我的课:
这是一个更新,如果我随机更改 9 个权重,它似乎工作正常
python - 为什么将误差乘以神经网络中 sigmoid 的导数?
这是代码:
这是网站:http: //iamtrask.github.io/2015/07/12/basic-python-network/
代码的第 36 行,l1 error
乘以带有权重的输入的导数。我不知道为什么会这样做,并且一直在花费数小时试图弄清楚。我刚刚得出的结论是这是错误的,但是考虑到有多少人推荐并使用本教程作为学习神经网络的起点,有些事情告诉我这可能是不正确的。
在文章中,他们说
再看一下sigmoid图片!如果斜率真的很浅(接近 0),那么网络要么具有非常高的值,要么具有非常低的值。这意味着该网络以一种或另一种方式非常自信。但是,如果网络猜到了接近 (x=0, y=0.5) 的东西,那么它就不是很自信。
我似乎无法理解为什么 sigmoid 函数的输入的高低与置信度有任何关系。当然,它有多高并不重要,因为如果预测的输出很低,那么它将真的很不自信,不像他们所说的那样应该有信心,因为它很高。
l1_error
如果您想强调错误,肯定会更好吗?
考虑到到那时我终于找到了一种很有前途的方法来真正直观地开始学习神经网络,这真是令人失望,但我又错了。如果您有一个开始学习的好地方,我可以很容易地理解,那将不胜感激。
machine-learning - TensorFlow中的sigmoid后跟交叉熵和sigmoid_cross_entropy_with_logits有什么区别?
当尝试使用 sigmoid 激活函数获得交叉熵时,两者之间存在差异
loss1 = -tf.reduce_sum(p*tf.log(q), 1)
loss2 = tf.reduce_sum(tf.nn.sigmoid_cross_entropy_with_logits(labels=p, logits=logit_q),1)
但是在使用 softmax 激活函数时它们是相同的。
以下是示例代码:
python - 代码创建异常,称为“exp中遇到溢出”
我创建了一个神经网络来预测将采用 3 个输入值并给出一个具有 2 个中间层的输出的值。但是当它运行时,它会在函数中给出异常。我预计最终输出的值在 1-15 之间。
这是我的函数代码
我创建的权重
这是我使用非线性函数的其余代码
请注意,我没有包含完整的代码。
这是我得到的例外
machine-learning - 为什么在逻辑回归中使用 sigmod 函数?
我通过谷歌进行了一些搜索并得到了一些答案,但他们都有自己的问题。例如
- sigmod 的结果将在 0 和 1 之间。
这很好,但 sigmod 函数不是结果在 0 和 1 之间的唯一函数
- 它是单调函数,但同样有很多单调函数。
那么为什么是 sigmod?虽然我不知道它是什么,但我认为它与中心极限定理有一些联系。
那么你能解释一下为什么在逻辑回归中使用 sigmod 吗?为什么解决分类问题很好?