python - Theano 随机梯度下降 NaN 输出

标签 python nan theano gradient-descent

我正在使用 Theano 随机梯度下降来解决最小化问题。运行我的代码时,第一次迭代似乎有效,但过了一段时间后,突然间,优化参数 (eta) 变成了 NaN(以及导数 g_eta)。这似乎是 Theano 的技术问题,而不是我的代码中的错误,因为我已经用几种不同的方式检查了它。

有人知道可能是什么原因吗?我的代码如下:

n_exp = 4
features = theano.shared(value=X_comb_I, name='features', borrow=True)

x = T.dmatrix()
y = T.ivector()

srng = RandomStreams()
rv_u = srng.uniform((64,n_exp))


eta = theano.shared(value=rv_u.eval(), name='eta', borrow=True)

ndotx = T.exp(T.dot(features, eta))
g = ndotx/T.reshape(T.repeat( T.sum(ndotx, axis=1), (n_exp), axis=0),[n_i,n_exp])
my_score_given_eta = T.sum((g*x),axis=1)

cost = T.mean(T.abs_(my_score_given_eta - y))

g_eta = T.grad(cost=cost, wrt=eta)

learning_rate = 0.5

updates = [(eta, eta - learning_rate * g_eta)]

train_set_x = theano.shared(value=score, name='train_set_x', borrow=True)
train_set_y = theano.shared(value=labels.astype(np.int32), name='train_set_y', borrow=True)

train = theano.function(inputs=[],
                 outputs=cost,
                 updates=updates, givens={x: train_set_x, y: train_set_y})

validate = theano.function(inputs=[],
                outputs=cost, givens={x: train_set_x, y: train_set_y})

train_monitor = []
val_monitor = []

n_epochs = 1000

for epoch in range(n_epochs):
    loss = train()
    train_monitor.append(validate())

    if epoch%2 == 0:
        print "Iteration: ", epoch
        print "Training error, validation error: ", train_monitor[-1] #,  val_monitor[-1]

谢谢!

最佳答案

事实上,您遇到了同样的问题,但学习速度较慢,速度较慢,这表明您的函数可能不稳定,会在您开始 SGD 的位置附近爆炸。

  1. 尝试不同的起始值
  2. 调整成本函数以惩罚正在爆炸的令人讨厌的区域
  3. 尝试不同的梯度下降方法

关于python - Theano 随机梯度下降 NaN 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30785836/

相关文章:

python - 如何在 Pandas 数据框中将单元格设置为 NaN

java - 检查 NaN 并在 If 中使用它

python - 使用 theano 的矩阵三重积

python - Theano:设备 gpu 初始化失败!原因=CNMEM_STATUS_OUT_OF_MEMORY

python - 如何在 PyQT 小部件中嵌入 Python 解释器

python - numpy: "array_like"对象的正式定义?

python - 闭包、部分和装饰器

c - exp() 函数不应该返回 nan

python - 类型错误 : Inconsistency in the inner graph of scan 'scan_fn' . ... 'TensorType(float64, col)' 和 'TensorType(float64, matrix)'

python - 访问 GTK+ 中的小部件