Caffe未知的底部Blob [英] Caffe Unknown bottom blob

查看:74
本文介绍了Caffe未知的底部Blob的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用caffe框架,我想训练下一个网络:

I'm working with caffe framework and I would like to train the next network:

当我执行下一条命令时:

When I execute the next command:

咖啡训练--solver resolver.prototxt

它引发的错误:

`F0802 14:31:54.506695 28038 insert_splits.cpp:29] Unknown bottom blob 'image' (layer 'conv1', bottom index 0)
*** Check failure stack trace: ***
@     0x7ff2941c3f9d  google::LogMessage::Fail()
@     0x7ff2941c5e03  google::LogMessage::SendToLog()
@     0x7ff2941c3b2b  google::LogMessage::Flush()
@     0x7ff2941c67ee  google::LogMessageFatal::~LogMessageFatal()
@     0x7ff2947cedbe  caffe::InsertSplits()
@     0x7ff2948306de  caffe::Net<>::Init()
@     0x7ff294833a81  caffe::Net<>::Net()
@     0x7ff29480ce6a  caffe::Solver<>::InitTestNets()
@     0x7ff29480ee85  caffe::Solver<>::Init()
@     0x7ff29480f19a  caffe::Solver<>::Solver()
@     0x7ff2947f4343  caffe::Creator_SGDSolver<>()
@           0x40b1a0  (unknown)
@           0x407373  (unknown)
@     0x7ff292e40741  __libc_start_main
@           0x407b79  (unknown)
Abortado (`core' generado)

代码为(train2.prototxt):

The code is (train2.prototxt):

name: "xxxxxx"
layer {
  name: "image"
  type: "HDF5Data"
  top: "image"
  top: "label"
  hdf5_data_param {
    source: "h5a.train.h5.txt"
    batch_size: 64
  }
  include {
    phase: TRAIN
  }
}
layer {
  name: "conv1"
  type: "Convolution"
  bottom: "image"
  top: "conv1"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 96
    kernel_size: 11
    stride: 4
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layer {
  name: "norm1"
  type: "LRN"
  bottom: "conv1"
  top: "norm1"
  lrn_param {
    local_size: 5
    alpha: 0.0001
    beta: 0.75
  }
}
layer {
  name: "pool1"
  type: "Pooling"
  bottom: "norm1"
  top: "pool1"
  pooling_param {
    pool: MAX
    kernel_size: 3
    stride: 2
  }
}
layer {
  name: "norm2"
  type: "LRN"
  bottom: "pool1"
  top: "norm2"
  lrn_param {
    local_size: 5
    alpha: 0.0001
    beta: 0.75
  }
}
layer {
  name: "conv3"
  type: "Convolution"
  bottom: "norm2"
  top: "conv3"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 384
    pad: 1
    kernel_size: 3
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layer {
  name: "pool2"
  type: "Pooling"
  bottom: "conv3"
  top: "pool2"
  pooling_param {
    pool: MAX
    kernel_size: 3
    stride: 2
  }
}
layer {
  name: "improd3"
  type: "InnerProduct"
  bottom: "pool2"
  top: "improd3"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  inner_product_param {
    num_output: 1000
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layer {
  name: "accuracy"
  type: "Accuracy"
  bottom: "improd3"
  bottom: "label"
  top: "accuracy"
  include {
    phase: TEST
  }
}
layer {
  name: "loss"
  type: "SoftmaxWithLoss"
  bottom: "improd3"
  bottom: "label"
  top: "loss"
}

solver.prototxt:

The solver.prototxt:

net: "train2.prototxt"
test_iter: 100
test_interval: 1000
# lr for fine-tuning should be lower than when starting from scratch
base_lr: 0.001
lr_policy: "step"
gamma: 0.1
# stepsize should also be lower, as we're closer to being done
stepsize: 20000
display: 20
max_iter: 100000
momentum: 0.9
weight_decay: 0.0005
snapshot: 10000
snapshot_prefix: "caffe"
solver_mode: CPU

因为这个问题,我被困住了,无法开始网络训练.

I'm stuck and i cant start the training of the network because this problem.

推荐答案

这是因为,即使您尝试执行Train阶段,Test阶段也将用于验证.由于没有用于测试阶段的输入数据层,因此conv1层无法找到输入blob image.之所以调用Test阶段,是因为您已经在求解器中定义了test_*参数,并在train2.prototxt的某些层中定义了phase: TEST.从求解器和代表TEST阶段的图层中删除上述参数将帮助您顺利进行训练.

It is because, even if you are trying to execute the Train phase, the Test phase will also be used for validation. As there is no input data layer for the Test phase, the conv1 layer cannot find the input blob image. The Test phase is being called because you have defined test_* parameters in the solver and phase: TEST in some of the layers in train2.prototxt. Removing the above mentioned parameters from solver and the layers representing the TEST phase will help you run the training without any issues.

这篇关于Caffe未知的底部Blob的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆