2017-09-18 35 views
0

我使用torch-caffe-binding将caffe模型转换为手电筒。我想在最后删除损失层并添加其他的割炬图层,我可以删除.prototxt文件中的图层并“训练”模型以获取.caffemodel文件并导入火炬中?
而模型使用lmdb类型的数据,当我使用net:forward(input)来训练模型时,模型只是使用数据层中定义的数据而不是使用input数据。那么如何训练使用lmdb数据的模型呢?
的朱古力模型有一些自定义层,所以我不能用loadcaffe加载模型火炬关于将caffe模型转换为手电筒的一些问题

回答

1

您这里有3个问题 -

  1. 你可能需要的损耗层的培训(这是你想要最小化的东西)。因此,训练完成后,训练完成后 将其从原型文件中删除,然后再转换为火炬。
  2. 为了使用lmdb而不是使用数据层,你的输入端连接 到第一CONV层(假设你的第一个非输入 层为转换次数,例如说你有

    layer { 
        name: "input-data" 
        type: "DummyData" 
        top: "data" 
        top: "im_info" 
        dummy_data_param { 
        shape { dim: 1 dim: 3 dim: 224 dim: 224 } 
        } 
    } 
    

    和也

    input: "data" 
    input_shape: { 
    dim: 1 
    dim: 3 
    dim: 224 
    dim: 224 
    } 
    

    然后

    layer { 
        name: "conv1" 
        type: "Convolution" 
        bottom: "data" --> **here put data instead of input-data** 
        top: "conv1" 
        convolution_param { 
        num_output: 96 
        kernel_size: 3 
        pad: 1 
        stride: 1 
        } 
    } 
    
  3. 至于吨他定制层,你必须找到炬等同 实现或自己
+0

谢谢了很多!我来试试 –

+0

当我在prototxt除去损耗层,在控制台上执行它如下所示:'I0923 20:56:19.437440 23288 net.cpp:200] conv1不需要后向计算。所有图层都有保存消息。我不能使用火炬来训练它。当我添加损失层,一切正常,我怎么能删除损失层,而所有的层需要落后?在此先感谢。 –

+0

我发现如何解决它,只需在最后一层添加'loss_weight:1'。感谢您的帮助 –