问题标签 [softmax]
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.
python - tensorflow中sparse_softmax_cross_entropy_with_logits函数的原点编码在哪里
我想知道张量流函数sparse_softmax_cross_entropy_with_logits 在数学上到底在做什么。但我找不到编码的来源。你能帮助我吗?
neural-network - softmax函数的导数解释
我正在尝试计算 softmax 激活函数的导数。我发现了这个:https : //math.stackexchange.com/questions/945871/derivative-of-softmax-loss-function 似乎没有人给出正确的推导,我们将如何获得 i=j 和 i!= j 的答案. 有人可以解释一下吗!当在 softmax 激活函数的分母中涉及求和时,我对导数感到困惑。
layer - 如何在 cuDNN API 中输入“cudnnSoftmaxBack()”的参数“dy”?
我想用 cuDNN 实现 LeNet-5,并尝试在 MNIST 数据集上训练网络。
网络的最后一层是'Softmax',我在转发过程中使用了函数'cudnnSoftmaxForward()'。然后,我想在后向过程中使用函数'cudnnSoftmaxBackward()',但我不确定函数'cudnnSoftmaxBackward()'--'dy'中的参数之一。
NVIDIA提供的函数'cudnnSoftmaxtBackward'是:
在 API 中,我知道“dy”表示“input_diff”,但 softmax 层是最后一层,如何为函数“cudnnSoftmaxBackward()”提供“input_diff”?我可以用“网络目标输出”和“网络实际输出”之间的差异来提供它吗?
python - 我是怎么得到这个数字的?
我有这个代码:
产生这个:
我不确定我是如何得到那个情节的。我知道大分数应该给出大概率,但我无法理解情节。numpy.ones_like对我也没有多大帮助,对吗?:)
编辑:
由于我得到了一个不清楚我在问什么的投票,所以我在问这个,如何从一个向量[0.8360188027814407, 0.11314284146556014, 0.050838355752999165]
中将 softmax 的结果应用于scores
,我得到了那个图。我的意思是这背后的逻辑是什么?
分数(之后vstack()
)是这样的:
python - 150x150 图像上的基本 softmax 模型实现
我正在学习 tensorflow,我尝试将基本的 softmax MNIST 示例改编为在我自己的图像集上工作。这是建筑物的航拍照片,我想按屋顶类型对它们进行分类。可以进行 4 种这样的分类。
简单(也许是幼稚的)想法是调整图像的大小(因为它们并不完全相同)并将它们展平。然后更改代码中的张量形状并运行它。当然,它不起作用。首先让我向您展示代码。
可以看出,我正在打印来自 softmax 的 y 值。结果是完全看起来像这样的张量[0., 0., 0., 1.]
。我觉得这很奇怪。所以我打印了tf.matmul(x, W) + b
.
结果是这样的:
对于手动计算 softmax 的第一个第二个和第三个元素,您会得到 E-200 数量级的数字,基本上为零。然后是第四个元素的大于 1 的数字。由于所有人都遵循这种模式,显然有些事情是错误的。
现在我检查了输入,我的答案是像这样的一个热向量[0, 1, 0, 0]
,我的图像被展平,值标准化为 0 和 1(浮点数)。就像 MNIST 的例子一样。
我还注意到,在 MNIST 示例中,matmul 的值要小得多。E0 量级。这是因为每张图像上有 784 个元素,而不是 22500 个?这是问题的原因吗?
哎呀,也许由于某种原因这永远不会奏效。我需要一些帮助。
编辑:我决定检查图像大小是否有任何影响,果然 matmul 确实给出了较小的数字。但是它们仍然表现出一种模式,所以我再次通过 softmax 运行它并得到了这个输出:
那肯定是有别的问题了。
python - 如果我使用许多 relus 的网络,为什么我的交叉熵损失函数会变得很大?
我有这个损失函数:
train_logits
由如下构建的管道定义:
、和layer_sizes
的构造如下:weights
biases
如果arg('act-func')
是 relu,那么如果我构建一个长链 relu - 就像arg('layers')
是一样[750, 750, 750, 750, 750, 750]
- 那么我的损失函数是巨大的:
如果我有一个较短的 relus 链 -arg('layers')
只是说[750]
- 那么损失函数会更小:
我的问题是:为什么损失函数如此不同?据我了解,logits 的输出是 softmax 以产生概率分布。然后根据这个概率分布确定单热标签的交叉熵。为什么更改我拥有的 relus 数量会更改此功能?我认为每个网络在开始时都应该是同样错误的——大约是随机的——因此损失永远不会变得太大。
请注意,此损失函数不包含任何 l2 损失,因此增加的权重和偏差数量不会解释这一点。
使用arg('act-func')
astanh
相反,这种损失的增加不会发生 - 它保持大致相同,正如我所期望的那样。
tensorflow - 使用 NCE 或采样的 softmax 训练 TensorFlow 语言模型
我正在调整 TensorFlow RNN 教程来训练具有 NCE 损失或采样 softmax 的语言模型,但我仍然想报告困惑。然而,我得到的困惑非常奇怪:对于 NCE,我得到了几百万(可怕!),而对于采样的 softmax,我在一个 epoch 后得到了 700 的 PPL(好得令人难以置信?!)。我想知道我做错了什么。
这是我对 PTBModel 的改编:
对这个模型的调用是这样的:
我在这里没有做任何异国情调的事情,更改损失函数应该非常简单。那么为什么它不起作用呢?
谢谢,乔里斯
c++ - 了解 Caffe 中的输入维度、SoftmaxWithLoss 和标签
我正在尝试将我自己训练有素的网络与我自己的 C++ 数据一起使用。我在带有图层的“.jpg”数据上训练和测试了网络ImageData
,然后实现了基本的 caffe 示例“classification.cpp”,以将图像一张一张地传递到内存中。因此,我需要知道 2 个类的概率:
1 - 对象,
2 - 环境。
我用于常规目的的输入层如下所示:
输出层:
在测试阶段,网络已经达到了accuracy=0.93,但是现在在经常使用C++时,我无法弄清楚一些基本概念,并且在解析模型时出错。
好的,1x3x256x256 = 196608,但为什么我需要这个标签计数?我有一个文件“labels.txt”,如示例“classification.cpp”中所示:
为什么标签!=类?我应该如何处理 SoftmaxWithLoss 和输入维度?
deep-learning - Softmax 层,用于判别受限玻尔兹曼机
- 我正在使用 4 层 RBM 来创建 DBN。(每层有21个节点)
- 在最后一层,我正在添加标签数据,具体来说,2个类。(这个DBN是一个二进制分类器。添加类标签数据后,我在顶层有21+2=23个节点)。
- 我将最后一层的输出与类标签输入相结合,对 2 单元向量进行 softmax 处理。(位置 0 中的 1 表示类 0,位置 1 中的 1 表示类 1)。
问题 - 1. 这个 softmax 层是否需要使用 CD-k 进行训练?意思是,我需要在输出层和最后(增强)层之间进行 CD 吗?
如何初始化最后一层到输出层连接的权重?
或者,是否需要训练顶层,现在是 21+2 个单位,CD-k 与底层相对?
谢谢。我正在看这篇论文 - http://machinelearning.org/archive/icml2008/papers/601.pdf
python - 使用 tensorflow 进行语义分割 - 损失函数中的 ValueError (sparse-softmax)
因此,我正在基于Marvin Teichmann 的 tensorflow-fcn构建一个完全卷积网络 (FCN)
我的输入图像数据,暂时是 750x750x3 RGB 图像。通过网络运行后,我使用形状为 [batch_size, 750,750,2] 的 logits 进行损失计算。
这是一个二元分类 - 我在这里有 2 个类,[0, 1] 在我的标签中(形状为 [batch_sizex750x750]。这些进入损失函数,如下所示:
这些是重塑后的 logits 和标签的形状:
在这里,它向我抛出了一个 ValueError 说明:
完整回溯如下:
建议?是我的执行tf.add_to_collection('losses', cross_entropy)
错误吗?
更新:
我试图在没有像素求和的情况下运行它(或者我认为),cross_entropy
直接返回上面的代码作为损失。
它似乎奏效了。ValueError
(它现在从训练优化器函数中抛出一个,说明: No gradients provided for any variable
。假设这与我的权重初始化和正则化有关,而不是其他任何事情。
更新 2:
以上(关于 ValueError 由于没有梯度)是微不足道的。如此处所述,当定义的任何 tf.Variable 对象与最小化的损失张量之间没有路径时,通常会遇到此消息。
但是,使用的最初问题tf.add_n
仍然存在。我假设它与 TensorFlow 中 Graph 集合的工作机制有关。初始化我的变量后,错误现在显示为: