Numpy Theano logistic SGD具有每个维度的学习率

Numpy Theano logistic SGD具有每个维度的学习率,numpy,theano,Numpy,Theano,这是一个非常简单的初学者,毫无疑问 我试图修改随附的逻辑SGD代码,从单一学习率切换到特定维度的学习率。例如,如果我有3个输入维度,我想使用3个不同的学习率,每个维度一个 原相关代码为: learning_rate = 0.1 x = T.matrix('x') y = T.ivector('y') classifier = LogisticRegression(input=x, n_in=3, n_out=2) cost = classifier.negative_log_likelihood

这是一个非常简单的初学者,毫无疑问

我试图修改随附的逻辑SGD代码,从单一学习率切换到特定维度的学习率。例如,如果我有3个输入维度,我想使用3个不同的学习率,每个维度一个

原相关代码为:

learning_rate = 0.1
x = T.matrix('x')
y = T.ivector('y')
classifier = LogisticRegression(input=x, n_in=3, n_out=2)
cost = classifier.negative_log_likelihood(y)

g_W = T.grad(cost=cost, wrt=classifier.W)
g_b = T.grad(cost=cost, wrt=classifier.b)

updates = [(classifier.W, classifier.W - learning_rate * g_W),
           (classifier.b, classifier.b - learning_rate * g_b)]

train_model = theano.function(inputs=[],
        outputs=cost,
        updates=updates,
        givens={
            x: minibatch_x,
            y: minibatch_y})
在numpy中,只需将标量学习率替换为一组学习率,并使用梯度g_W和g_b执行元素相乘即可。在中,不这样做会产生错误:

'Expected an array-like object, but found a Variable: maybe you are trying to call a function on a (possibly shared) variable instead of a numeric array?'

很明显,西亚诺有些东西我不知道。有人能告诉我吗?

事实上,你需要用数组替换学习率标量。您可以尝试以下方法,例如:

learning_rate = theano.shared(np.array([0.1, 0.2, 0.05]))
它可能需要根据渐变的形状进行转置,但基本上您已经说明了正确的方式,并且应该使用共享变量来工作