【问题标题】:Caffe LeNet: Difference between `solver.step(1)` and `solver.net.forward()`Caffe LeNet:`solver.step(1)` 和 `solver.net.forward()` 之间的区别
【发布时间】:2016-10-27 19:06:07
【问题描述】:

我在查看 Caffe LeNet 教程 here 时想到了一个问题:

这两个代码有什么区别:

self.solver.step(1)

self.solver.net.forward()  # train net

至少根据评论,他们似乎都在训练网络。

我个人认为第一个在训练数据上训练网络并更新 nettest_net 的权重,但第二个似乎只转发一批数据并应用从上一步中学习到的权重.

如果我认为是对的,那么教程中第二个代码的目的是什么?为什么代码做了net.forwardsolver.step(1)不能自己做吗?

感谢您的宝贵时间

【问题讨论】:

    标签: python neural-network deep-learning caffe conv-neural-network


    【解决方案1】:

    step 进行一次完整的迭代,涵盖所有三个阶段:forward 评估、backward 传播和更新 .对 forward 的调用只执行其中的第一个。签名(参数列表)也有区别。

    【讨论】:

    • 谢谢...如果 batch_size 为 100(共 2000 张图片),那么 step() 会在 100 批次或 2000 批次上执行 3 个阶段吗?
    • Step 只进行一次迭代:一批 100 张图像。做一整套 20 个批次(所有 2000 个输入)称为一个 epoch
    • 很高兴能提供帮助。感谢您的支持和绿色检查。
    • @Prune :solver.solve() 做什么?假设我有 200 个迭代器、2000 个图像和 100 个批次。我应该做 1 次直到 iter solver.step(1) 测试等还是我应该做 1 次直到 iter solver.step(20) 测试等?还是我应该只使用solver.solve()?
    • 查看部分答案#1 here。差异取决于您是否要在 20 次迭代后进行干预。
    【解决方案2】:

    我在solver.step(1)solver.net.forward() 中发现了一个奇怪的行为。当我为输入网络使用自定义层时,我的实例层在使用之前需要一个变量:

    solver.net.layers[0].mySet(variable)
    

    variable 设置在我图层的局部变量中。但是当我调用solver.step 时,该变量没有出现。但是,当我使用solver.net.forward() 时,它确实如此。我不确定,但也许solver.step 正在为图层实例化一个新变量。

    【讨论】:

    • 这是一个答案吗?还是我们提出一个新问题?
    • 其实这两者兼而有之。我正在使用一个层:``` self.solver.net.layers[0].set_data(data) , where in that layer got def set_data(self, data): self._data = data ``` 但是,当我打电话给@ 987654328@,他们返回 ``` AttributeError: 'DataLayer' 对象没有属性 '_data' ```
    猜你喜欢
    • 1970-01-01
    • 2022-10-01
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多