Caffe MemoryData Layer和Solver inteface

时间:2015-09-02 12:12:09

标签: python caffe

我正在尝试训练网络,而是使用lmdb或leveldb,我正在将数据提供给我的网络。所以我遵循下面概述的程序

  1. 我的数据已加载到内存数据层中。
  2. 我使用python脚本创建一个迷你批处理。
  3. 将数据和标签设置为solver.net.set_input_arrays(batch,labels)
  4. 之后我致电solver.step(1)
  5. 此解算器的类型为SGDSolver。现在我的问题是solver.solve()solver.step()之间有什么区别?

    2,这种方法不允许我为测试网络提供内存数据层。对此有什么解决方法吗?

    我的solver.prototxt看起来像

    net: "/path/to/train_val.prototxt"
    base_lr: 0.01
    lr_policy: "step"
    gamma: 0.1
    stepsize: 100000
    display: 20
    max_iter: 450000
    momentum: 0.9
    weight_decay: 0.0005
    snapshot: 10000
    snapshot_prefix: "/path/to/temporal_net_train"
    solver_mode: GPU
    

    使用我的方法,每20次迭代网络显示一些输出损失等。不知何故,损失在某些数量的迭代中保持不变,这可能是原因。

1 个答案:

答案 0 :(得分:0)

  1. solver.solve和solver.step有什么区别?
  2. 解决执行整个训练,达到您设置的任何限制 - 通常是迭代限制。 步骤仅执行指定的迭代次数。

    1. 如何获取测试网络的内存数据层?
    2. 如果您没有阅读支持的数据通道/格式,我认为您必须编写客户输入例程(您的数据包)。

      1. 损失在多次迭代中保持不变,原因可能是什么?
      2. 根据周围的影响,有几种可能性。如果损失只显示一个值,那么你的反向传播可能是罪魁祸首。也许您没有正确连接到数据集,并且您没有获得预期的分类。

        如果损失具有暂时的稳定性,但随后趋于收敛,请不要担心;这可能是培训订购的结果。

        如果损失适当下降然后稳定在一个固定值,那么你也表现良好:训练在迭代用完之前收敛。