对于每次运行net.backward,PyCaffe都有不同的渐变?

今天,我有一个非常奇怪的事情 .

我加载了一个caffe模型,feed输入,net.forward,检查输出数据,完美 . 然后,我将标签提供给底层blobs.diff,net.backward,然后使用相同模型caffe c程序的结果检查渐变(params.diff) . 他们是不同的 .

此外,当我继续在python上运行net.backward几次时,每次我得到不同的渐变 . 这不是C程序的情况,只要你没有改变底部差异,无论你运行net.backward多少次,它们都保持不变 .

我检查了底层的blob和diff,它们在python和C程序中保持不变,并且权重也没有变化 . 这真的很奇怪 .

任何人都可以提供一些提示?如果有必要,我可以提供代码 .

以下是代码的一部分:

def train_one_step(X,y,lr):

net.blobs['data'].data[...] = X

#Forward, to get the softmax output

output = net.forward()

prob = output['prob']

#Calculate the loss of cross entropy loss function

net.blobs['prob'].diff[:] = y[:] - prob[:]

#Calculate the gradients of net parameter

net.backward()

#Renew weights based on gradients and learning rate

for key in net.params:

    net.params[key][0].data[:] += lr * net.params[key][0].diff[:]

    net.params[key][1].data[:] += lr * net.params[key][1].diff[:]

return loss, prob

我只是想挖掘出我自己的阶梯函数(解算器的步骤),所以我可以在它倒退之前做一些关于损失的技巧,以及其他的东西 . 我知道这是相当低效的,GPU之间的数据,CPU交换了很多 .

为了测试它,我保持输入相同的样本(相同的X,y),你得到不同的差异数据 . 这意味着此功能无法正常工作 .

回答(0)