小编Sch*_*h21的帖子

net.zero_grad() 与 optim.zero_grad() pytorch

在这里,他们提到需要optim.zero_grad()在训练时将参数梯度归零。我的问题是:我也可以这样做吗net.zero_grad(),会产生同样的效果吗?还是有必要做 optim.zero_grad()。此外,如果我两者都做会发生什么?如果我什么都不做,那么梯度就会累积,但这究竟是什么意思?他们会被添加吗?换句话说,doingoptim.zero_grad()net.zero_grad(). 我问是因为在这里,他们使用第 115 行net.zero_grad(),这是我第一次看到,这是强化学习算法的实现,其中必须特别小心梯度,因为有多个网络和梯度,所以我假设他们有理由这样做net.zero_grad()而不是optim.zero_grad()

reinforcement-learning pytorch

9
推荐指数
1
解决办法
2101
查看次数

如何计算数字数组的对数阶乘

要计算的数量是log(k!),其中k可以是 4000 甚至更高,但当然日志会补偿。我尝试过计算,sum(log(k))结果是一样的。

因此,我得到了一个包含整数的大数组,我想有效地计算sum(log(k))。这是我的尝试:

integers = np.asarray([435, 535, 242,])

score = np.sum(np.log(np.arange(1,integers+1)))
Run Code Online (Sandbox Code Playgroud)

这是可行的,除了np.arange会为每个整数生成一个不同大小的数组,所以当我运行它时,它会给我一个错误(正如它应该的那样)。

这个问题可以通过for循环轻松解决,如下所示:

scores = []
for i in range(integers.shape[0]):
    score = np.sum(np.log(np.arange(1,integer[i]+1)))
    scores.append(score)
Run Code Online (Sandbox Code Playgroud)

但这太慢了。我的实际integers值有数百万需要计算。

是否有一个基本上不需要 for 循环的有效实现?我正在考虑一个lambda函数或类似的东西,但我不太确定如何应用它。任何帮助表示赞赏!

python arrays performance numpy

4
推荐指数
1
解决办法
1230
查看次数