title: Caffe MemoryData Layer and Solver inteface
body: <p>I am trying to train a network but rather using lmdb or leveldb, I am feeding data to my network on the fly. So I am following procedure as outlined below</p>
  
  <ol>
  <li>My data is loaded in Memory Data Layer. </li>
  <li>I create a mini batch using a python script. </li>
  <li>Set data and label as <code>solver.net.set_input_arrays(batch,labels)</code> </li>
  <li>After that I call <code>solver.step(1)</code></li>
  </ol>
  
  <p>Here solver is of type SGDSolver. Now my question is what is the difference between <code>solver.solve()</code> and <code>solver.step()</code>? </p>
  
  <p>2ndly this approach doesn't let me have a memory data layer for test network. Is there any work around for that?</p>
  
  <p>My solver.prototxt looks like</p>
  
  <pre><code>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
  </code></pre>
  
  <p>With my approach every 20th iteration network displays some output loss etc. And somehow loss stays constant over some numbert of iterations, what could be the reason for that.</p>