我正在查看Caffe LeNet教程这里,我想到了一个问题:
这两个代码之间有什么区别:
self.solver.step(1)和
self.solver.net.forward() # train net据评论称,他们两人似乎都在训练网络,至少是这样。
我个人认为,第一种方法是根据培训数据对网络进行训练,并更新net和test_net的权重,而第二种方法似乎只转发了一批数据并应用上一步学习到的权重。
如果我认为正确,那么教程中第二段代码的目的是什么?为什么代码要做net.forward呢?solver.step(1)不能自己做这个吗?
耽误您时间,实在对不起
发布于 2016-06-27 20:53:04
step完成一个完整的迭代,包括三个阶段:正向评估、反向传播和更新。对转发的调用只执行其中的第一个。签名(参数列表)也有差异。
发布于 2018-07-26 17:15:52
我在solver.step(1)和solver.net.forward()中发现了一种奇怪的行为。当我为输入网络使用自定义层时,实例层在使用以下变量之前需要一个变量:
solver.net.layers[0].mySet(variable)variable是在我的层的局部变量中设置的。但是,当我调用solver.step时,该变量不会出现。但是,当我使用solver.net.forward()时,它就会出现。我不确定,但也许solver.step正在为该层实例化一个新变量。
https://stackoverflow.com/questions/38025639
复制相似问题