Caffe LeNet:`solver.step(1)` 和 `solver.net.forward()` 之间的区别
Caffe LeNet: Difference between `solver.step(1)` and `solver.net.forward()`
我正在查看 Caffe LeNet 教程 here,我想到了一个问题:
这两个代码有什么区别:
self.solver.step(1)
和
self.solver.net.forward() # train net
他们似乎都至少根据评论训练了网络。
我个人认为第一个在训练数据上训练网络并更新 net
和 test_net
的权重,但第二个似乎只转发一批数据并应用从上一步学习权重。
如果我认为是对的,那么教程中第二个代码的目的是什么?为什么代码做了 net.forward
?不能 solver.step(1)
自己做吗?
感谢您的宝贵时间
step 进行一次完整的迭代,涵盖所有三个阶段:forward evaluation,backward传播,以及 更新。对 forward 的调用只执行其中的第一个。签名(参数列表)也有差异
我在 solver.step(1)
和 solver.net.forward()
中发现了一个奇怪的行为。当我为输入网络使用自定义层时,我的实例层在使用之前需要一个变量:
solver.net.layers[0].mySet(variable)
variable
是在我的图层的局部变量中设置的。但是当我调用 solver.step 时,那个变量没有出现。但是,当我使用 solver.net.forward()
时,它确实如此。我不确定,但也许 solver.step
正在为层实例化一个新变量。
我正在查看 Caffe LeNet 教程 here,我想到了一个问题:
这两个代码有什么区别:
self.solver.step(1)
和
self.solver.net.forward() # train net
他们似乎都至少根据评论训练了网络。
我个人认为第一个在训练数据上训练网络并更新 net
和 test_net
的权重,但第二个似乎只转发一批数据并应用从上一步学习权重。
如果我认为是对的,那么教程中第二个代码的目的是什么?为什么代码做了 net.forward
?不能 solver.step(1)
自己做吗?
感谢您的宝贵时间
step 进行一次完整的迭代,涵盖所有三个阶段:forward evaluation,backward传播,以及 更新。对 forward 的调用只执行其中的第一个。签名(参数列表)也有差异
我在 solver.step(1)
和 solver.net.forward()
中发现了一个奇怪的行为。当我为输入网络使用自定义层时,我的实例层在使用之前需要一个变量:
solver.net.layers[0].mySet(variable)
variable
是在我的图层的局部变量中设置的。但是当我调用 solver.step 时,那个变量没有出现。但是,当我使用 solver.net.forward()
时,它确实如此。我不确定,但也许 solver.step
正在为层实例化一个新变量。