【问题标题】:Caffe variable batch sizeCaffe 可变批量大小
【发布时间】:2016-12-24 05:14:37
【问题描述】:

我知道如果我有如下输入层,我的网络将接收尺寸为(1,1,100,100) 的 blob。

layer {
  name: "data"
  type: "Input"
  top: "data"
  input_param {
    shape {
      dim: 1
      dim: 1
      dim: 100
      dim: 100
    }
  }
}

我应该怎么做才能使第一个维度(输入批量大小)可变?这样我就可以在网络中输入不同大小的批次?

【问题讨论】:

  • 我认为在函数Net<Dtype>::Forward( const vector<Blob<Dtype>*> & bottom, Dtype* loss)中,只需将net_input_blobs_[i]->CopyFrom(*bottom[i]);修改为net_input_blobs_[i]->CopyFrom(*bottom[i], false, true);即可,这将根据bottom blob形状重塑输入。
  • @DaleSong 非常感谢

标签: neural-network caffe


【解决方案1】:

除了 AHA 的回答,在 c++ 中就像

Blob<float>* input_layer = net_->input_blobs()[0];
input_layer->Reshape(batch_size, input_layer->shape(1), input_layer->shape(2), input_layer->shape(3));
net_->Reshape();

【讨论】:

    【解决方案2】:

    您可以在调用forward() 方法之前重塑网络。所以如果你想要一个变量batch_size,你应该每次都重塑。这可以在您使用的任何界面(C、python、MATLAB)中完成。

    在python中是这样的:

    net.blobs['data'].reshape(BATCH_SIZE, CHANNELS, HEIGHT, WIDTH)
    net.reshape()
    net.forward()
    

    提示:我相信net.reshape() 是可选的,网络会在执行转发操作之前调用它。

    【讨论】:

    • 我发现这是一个对 caffe 很有帮助的教程:christopher5106.github.io/deep/learning/2015/09/04/…
    • 我按照您的示例进行操作,但出现如下错误:` Check failed: top[0]->count() == bottom[0]->count() (6656 vs. 11188736) 输出计数必须匹配输入计数`,你知道发生了什么吗?
    猜你喜欢
    • 1970-01-01
    • 2017-09-27
    • 2016-02-14
    • 2016-04-14
    • 2017-12-22
    • 2016-08-28
    • 2018-07-25
    • 2018-02-07
    • 2016-10-08
    相关资源
    最近更新 更多