问题标签 [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.
deep-learning - 基于逻辑回归的 SoftMax 上的序数目标的损失函数
我正在使用 Pylearn2 或 Caffe 构建一个深度网络。我的目标是名义上的。我试图找到一个合适的损失函数,但在 Pylearn2 或 Caffe 中找不到。
我读了一篇论文“偏好水平的损失函数:离散有序标签的回归”。我明白了一般的想法 - 但我不确定我是否理解阈值是什么,如果我的最后一层是基于逻辑回归的 SoftMax(输出概率)。
有人可以通过指出这种损失函数的任何实现来帮助我吗?
感谢和问候
python - 在theano中使用softmax和交叉熵出错
我正在用 Theano 实现 DNN。在 DNN 的最后一层,我使用 softmax 作为非线性函数theano.tensor.nnet.softmax
作为一个丢失的函数,我正在使用交叉熵,T.nnet.binary_crossentropy
但我收到一个奇怪的错误:“编译节点时发生以下错误,GpuDnnSoftmaxGrad{tensor_format='bc01' ...”
我是 theano 的新手,无法弄清楚这个模型有什么问题。感谢您的帮助 PS:我的猜测是它与 softmax 采用 2D 张量并返回 2D 张量这一事实有某种关系。
PS2:我正在使用最先进的 Theano(刚刚克隆)我的 CUDA 版本是旧的,它是 4.2 但我几乎可以肯定这不是问题,因为我正在使用基于 Theano 编写的其他 DNN 工具没有错误。我正在使用 pylearn2 来加速,这也不是问题,因为我已经在另一个 DNN 中成功地将它与当前的 Theano 和 CUDA 一起使用。
错误发生在这一行:train= theano.function([idx], train_loss, givens=givens, updates=updates)
完整的错误信息是:
cmodule.py", line 293, in dlimport
rval = __import__(module_name, {}, {}, [module_name])
RuntimeError: ('The following error happened while compiling the node', GpuDnnSoftmaxGrad{tensor_format='bc01', mode='channel', algo='accurate'}(GpuContiguous.0, GpuContiguous.0), '\n', 'could not create cuDNN handle: The handle was not initialized(Is your driver recent enought?).', "[GpuDnnSoftmaxGrad{tensor_format='bc01', mode='channel', algo='accurate'}(<CudaNdarrayType(float32, (False, False, True, True))>, <CudaNdarrayType(float32, (False, False, True, True))>)]")
我使用的交叉熵函数定义为:
error = T.mean(T.nnet.binary_crossentropy(input, target_y)
其中输入是 softmax 层的输出,target_y 是标签。
machine-learning - 如何解释 SoftMax 回归中的“soft”和“max”?
我知道softmax回归的形式,但我很好奇它为什么有这样的名字?还是只是出于某些历史原因?
python - PyMC3 中分类的 Softmax 选择概率
我正在尝试在以下场景中对 softmax 选择函数的单个参数执行参数估计:
在每个试验中,给出三个选项值(例如,[1,2,3]),并且受试者在选项(0、1 或 2)之间做出选择。softmax 函数将选项值转换为选择概率(3 个概率的向量,总和为 1),具体取决于温度参数(此处限制在 0 和 10 之间)。
每个试验中的选择应该被建模为一个分类分布,其中试验选择概率是从 softmax 计算的。请注意,分类的选择概率取决于选项值,因此在每次试验中都不同。
这是我想出的:
对于大于 50 的 nTrials,此代码将失败,并带有极长的警告/错误消息:
警告:
错误:
我对 PyMC(和 Theano)相当陌生,我觉得我的实现非常笨拙且不理想。非常感谢任何帮助和建议!
菲利克斯
编辑:我已将代码作为笔记本上传,完整显示警告和错误消息:http: //nbviewer.ipython.org/github/moltaire/softmaxPyMC/blob/master/softmax_stackoverflow.ipynb
machine-learning - 理解 softmax 分类器
我试图从这个链接 - CS231n - Convolutional Neural Networks for Visual Recognition了解 Softmax 分类器的简单实现。在这里,他们实现了一个简单的 softmax 分类器。在链接上的 Softmax 分类器示例中,2D 空间上有随机的 300 个点以及与它们相关联的标签。softmax 分类器将学习哪个点属于哪个类。
这是softmax分类器的完整代码。或者您可以查看我提供的链接。
我不明白他们是如何计算这里的梯度的。我假设他们在这里计算了梯度 -
但是如何?我的意思是为什么梯度dW
是np.dot(X.T, dscores)
?为什么的梯度db
是np.sum(dscores, axis=0, keepdims=True)
??那么他们是如何计算权重和偏差的梯度的呢?还有他们为什么计算regularization gradient
?
我刚刚开始学习卷积神经网络和深度学习。我听说这CS231n - Convolutional Neural Networks for Visual Recognition
是一个很好的起点。我不知道在哪里放置与深度学习相关的帖子。所以,我把它们放在stackoverflow上。如果有任何地方可以发布与深度学习相关的问题,请告诉我。
matlab - 在使用 softmax 损失时,如何调试和矢量化径向基函数网络的偏导数?
当使用标准交叉熵(softmax loss)时,我正在尝试运行(随机或批量)梯度下降:
当使用径向基函数 (RBF)网络作为模型时(如果需要,您可以在此处观看来自 caltech 的讲座)当扩展到多类分类时(通过简单地将 RBF 网络的输出馈送到 softmax 层来轻松扩展。请注意,P(y=l|x)
简单地通过将 RBF 网络的输出传递给每个标签的 softmax 层来计算l
,如下所示:
where\theta_l
索引负责对 label 进行预测的参数l
。
在这方面,我想通过计算参数的导数来优化我的模型。回想一下,径向基函数网络中要优化的参数是c
最后一层的权重和t
第一层的中心。我已经实现并调试了如何计算关于权重的导数c
。代码按预期工作,因为偏导数与数值导数匹配。你可以在这里找到单元测试代码。
我也尝试编写实现关于中心的导数的代码,但我似乎无法使我的导数实现与数值导数相匹配。关于我正在尝试实现J
的中心的损失导数方程如下:t_k
其中h_{\theta_l}
对应于负责预测标签的 RBF 的输出l
。其实h_{\theta_l}
表达起来很简单:
我的主要问题是计算J
相对于t_k
(上面的等式)的导数。为此,我实现了以下函数,它天真地计算它而不对其进行矢量化:
并且它与数值导数代码不匹配。
我尝试了不同的方法来检查它是否有效,我将在这里解释它们。如果有人有其他想法,请随时分享,我觉得我已经没有好的新想法来尝试调试了。
- 首先一个很好的自然问题是,我试图实现的导数的数学推导是否正确?尽管我没有与某人明确检查数学推导,但我非常有信心它是正确的,因为关于模型
c
和t
模型中的偏导数的推导是相同的,您只需将符号更改为\theta
您有问题的任何参数。由于我已经实现了关于的导数c
并且它通过了我所有的导数测试,我会假设关于t
或任何参数的导数的推导\theta
应该是正确的。可以在此处的 math.stack exchange中查看我对这个等式的推导。 - 一种选择可能是
compute_dJ_dt
实际上并没有实现我所期望的等式。确实可能是这种情况,并检查我是否独立实现了该代码的稍微矢量化的版本,以查看我是否真的在实现我在纸上写下的方程式。由于方程的两个版本输出相同的导数值,我对他们正在计算非常有信心,实际上是我怀疑的方程(如果有人有办法进一步矢量化这个方程,那就太棒了!我添加的矢量化是如此微不足道,以至于它看起来并不那么有趣或性能提升太多,但是,它确实删除了一个 for 循环)。
由于我在纸上的方程(很有可能)是正确的,并且方程的实现似乎是正确的,因为它的两个版本输出相同的值,所以它让我得出结论,数值导数代码可能有一个错误.
- 数字导数代码非常简单,以至于很难检查它到底有什么问题。我唯一想到的可能是错误的可能是我对softmax 成本 J的实现是错误的,但我非常怀疑它,因为......我已经为它编写了一个单元测试!另外,我用它来检查关于 ALWAYS pass 的数值导数
c
,c
所以我无法想象J
这是错误的。 - 要检查的最后一件重要的事情
compute_dh_dt
是计算是否正确。我已经为 dh_dt 编写了单元测试,并且由于它们在每次运行时都匹配相应的数值导数,所以我怀疑代码是正确的。
在这一点上,我不是 100% 确定还有什么可以尝试的,我希望也许有人有一个好主意,或者指出我正在做的愚蠢的事情?我不确定现在该怎么想。感谢社区的帮助和时间!
neural-network - 如何独立于任何损失函数来实现 Softmax 导数?
对于神经网络库,我实现了一些激活函数和损失函数及其衍生物。它们可以任意组合,输出层的导数只是损失导数和激活导数的乘积。
但是,我未能独立于任何损失函数来实现 Softmax 激活函数的导数。由于归一化,即等式中的分母,更改单个输入激活会更改所有输出激活,而不仅仅是一个。
这是我的 Softmax 实现,其中导数未能通过梯度检查约 1%。如何实现 Softmax 导数以便它可以与任何损失函数结合使用?
neural-network - Caffe:带温度的 Softmax
我正在努力实施 Hinton 的知识蒸馏论文。第一步是存储温度较高的“笨重模型”的软目标(即我不需要训练网络,只需要对每个图像进行前向传递并存储具有温度的软目标T
)。
有没有办法获得 Alexnet 或 googlenet 软目标的输出但温度不同?
我需要修改 soft-max pi= exp(zi/T)/sum(exp(zi/T)
。
需要用一个温度来划分最终全连接层的输出T
。我只需要这个来进行前传(而不是训练)。
python - Using Sparse Tensors to feed a placeholder for a softmax layer in TensorFlow
Has anyone tried using Sparse Tensors for Text Analysis with TensorFlow with success? Everything is ready and I manage to feed feed_dict
in tf.Session
for a Softmax layer with numpy arrays, but I am unable to feed the dictionary with SparseTensorValues.
I have not found either documentation about using sparse matrices to train a model ( softmax for example ) with Tensor Flow, which is strange, as classes SparseTensor
and SparseTensorValues
or TensorFlow.sparse_to_dense
methods are ready for it, but there is no documentation about how to feed the feed_dict
dictionary of values in the session.run(fetches,feed_dict=None)
method.
Thanks a lot,
neural-network - 为什么我们在 softmax 中使用 (exp) 而不是 (log)?
我不太了解 log 和 exp 的关系。但是,我很困惑,softmax 回归中没有使用 log 吗?