- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经与现有教程进行了广泛比较,但我无法弄清楚为什么我的权重没有更新。这是返回更新列表的函数:
def get_updates(cost, params, learning_rate):
updates = []
for param in params:
updates.append((param, param - learning_rate * T.grad(cost, param)))
return updates
它在顶层定义,在任何类之外。这是每个参数的标准梯度下降。这里的“params”参数以 mlp.params 的形式输入,它只是每一层的参数列表的串联列表。我删除了除逻辑回归层之外的每一层,以找出我的成本没有降低的原因。下面是 MLP 的构造函数中 mlp.params 的定义。它遵循每一层的定义及其各自的参数列表。
self.params = []
for layer in self.layers:
self.params += layer.params
以下是训练函数,我在每个时期为每个小批量调用它:
train = theano.function([minibatch_index], cost,
updates=get_updates(cost, mlp.params, learning_rate),
givens= {
x: train_set_x[minibatch_index * batch_size : (minibatch_index + 1) * batch_size],
y: train_set_y[minibatch_index * batch_size : (minibatch_index + 1) * batch_size]
})
如果您需要更多详细信息,可在此处获取整个文件:http://pastebin.com/EeNmXfGD
我不知道有多少人使用 Theano(好像不多);如果你已经读到这里,谢谢。
已修复:我已确定不能使用平均平方误差作为成本函数。将其替换为负对数似然后,它照常工作。
最佳答案
这种行为是由几件事引起的,但归结为未正确计算成本。在您的实现中,LogisticRegression 层的输出是每个输入数字的预测类别(通过 argmax 操作获得),您将其与预期预测之间的差平方。
这将为您提供模型中任何参数的 0 梯度,因为 argmax(预测类)输出的梯度与 argmax(类概率)的输入将为 0。
相反,LogisticRegression 应该输出类的概率:
def output(self, input):
input = input.flatten(2)
self.p_y_given_x = T.nnet.softmax(T.dot(input, self.W) + self.b)
return self.p_y_given_x
然后在 MLP 类中,计算成本。您可以在每个类的所需概率与模型计算的概率之间使用均方误差,但人们倾向于使用预期类的负对数似然,您可以在 MLP 类中这样实现它:
def neg_log_likelihood(self, x, y):
p_y_given_x = self.output(x)
return -T.mean(T.log(p_y_given_x)[T.arange(y.shape[0]), y])
然后你可以使用这个函数来计算你的成本和模型训练:
cost = mlp.neg_log_likelihood(x_, y)
一些额外的事情:
关于Python + Theano : Logistic regression weights do not update,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31198353/
在 Azure 机器学习工作室的测试项目中,根据我的理解,我有一些问题。在我的项目(在 R 中)中,我使用了二元 Logistic 回归,但在 AML 中我发现了两个 Logistic 回归:二类和多
我想估计医疗数据逻辑回归中使用的 sigmoidal/logistic 的最佳参数(在最后提到:斜率和截距)。这是我用 python 所做的: import numpy as np from skle
我在 R 中运行逻辑回归模型。我使用了 Zelig 和 Car 包。但是,我想知道是否有一种简单的方法可以获得模型的模型拟合统计数据。 (伪 R 方、卡方、对数似然等) 最佳答案 假设 glm1 is
在逻辑回归中,SAS 可以选择使用“降序”选项对 1 而不是 0 进行建模。 R 中有什么方法可以让我们做同样的事情吗? 我正在使用的代码如下: glm(y~x1+x2+x3, family=bino
作为后续 this question ,我拟合了具有定量和定性解释变量之间相互作用的多元 Logistic 回归。 MWE如下: Type |z|) (Intercept) -0.65518
我已经开始使用 Vowpal Wabbit 对于逻辑回归,但是我无法重现它给出的结果。也许它确实有一些未记录的“魔法”,但是有没有人能够复制/验证/检查逻辑回归的计算? 例如,使用下面的简单数据,我们
有没有办法像 statsmodels 一样为 scikit 逻辑回归模型提供类似的、不错的输出?有了所有的 p 值,标准。一张表中的错误等? 最佳答案 正如您和其他人所指出的,这是 scikit le
我正在使用 vowpal wabbit 进行逻辑回归。我了解到,vowpal wabbit 从给定的训练数据中选择一个保留集进行验证。这组是随机选择的吗?我有一个非常不平衡的数据集,包含 100 多个
我使用逻辑回归编写了一个多类分类器,该分类器使用一对多方法进行训练。我想绘制经过训练的分类器的学习曲线。 学习曲线应该按类别绘制,还是应该作为整个分类器的单个图?这有什么不同吗? 需要澄清的是,学习曲
在scipy.special.expit中,逻辑函数实现如下: if x < 0 a = exp(x) a / (1 + a) else 1 / (1 + exp(-x)) 但
逻辑斯蒂映射在混沌数学中是一个很经典的例子,它可以说明混沌可以从很简单的非线性方程中产生。 逻辑斯蒂映射公式如下: x_n表示当前人口与最大人口数量的比值,mu为参数,相当于人口增长速率。
我是数据科学或机器学习的新手。我尝试从 here 实现代码,但预测只返回 1 个类。 这是我的代码: classification_data = data.drop([10], axis=1).val
请帮助解释 Weka 库中由 weka.classifiers.functions.Logistic 生成的逻辑回归结果。 我使用来自 Weka 示例的数字数据: @relation weather
RSNNS 上的 CRAN 文档仅提及 Act_Logistic 作为隐藏层激活函数的示例。 RSNNS 中是否有所有可用激活函数的列表? 我专门寻找双曲正切函数的语法。 最佳答案 是的,大多数(全部
我正在使用 scikit-learn 的 linear_model.LogisticRegression 来执行多项逻辑回归。我想初始化求解器的种子值,即我想给求解器它的初始猜测作为系数的值。 有谁知
glmnet 中有没有办法进行一阶交互? 例如,如果我的 X 矩阵是: V1 V2 V3 0 1 0 1 0 1 1 0 0 ... 有没有办法指定它在不手动创建列的情况下按照 `y
我目前有一个程序,它采用特征向量和分类,并将其应用于已知的权重 vector ,以使用逻辑回归生成损失梯度。这是代码: double[] grad = new double[featureSize];
我正在关注 Siraj Raval 关于使用梯度下降的逻辑回归的视频: 1) 较长视频的链接: https://www.youtube.com/watch?v=XdM6ER7zTLk&t=2686s
我目前正在学习机器学习,但没有统计学背景。无论我在哪里看到物流功能,它总是: wx + b 但是this example in Theano documentation使用: wx - b 请问是哪一
我正在编写一些基本的神经网络方法 - 特别是激活函数 - 并且已经达到了我垃圾数学知识的极限。我理解各自的范围(-1/1)(0/1)等,但不同的描述和实现让我感到困惑。 具体来说,sigmoid、lo
我是一名优秀的程序员,十分优秀!