2017-04-24 55 views
1

我想在caffe中定义一个353长度的memorydata图层的标签,但是简单的添加它的名字不会,因为它的默认长度是1(batch_size * 1 )。如何在caffe中的memorydata图层中定义标签尺寸

layer { 
    name: "data" 
    type: "MemoryData" 
    top: "data" 
    top: "label" 
    include { 
    phase: TRAIN 
    } 
    memory_data_param { 
    batch_size: 60 
    channels: 3 
    height: 224 
    width: 224 
    } 
} 

我该如何解决这个问题?

回答

1

默认情况下,如果将数据和标签放在单个内存层中,caffe假定标签是单个整数值(例如,用于单个标签分类)。

如果您需要的标签是一个数组,那么你应该提供标签作为一个不同的数据层:

layer { 
    name: "data" 
    type: "MemoryData" 
    top: "data" 
    top: "useless1" 
    include { 
     phase: TRAIN 
    } 
    memory_data_param { 
     batch_size: 60 
     channels: 3 
     height: 224 
     width: 224 
    } 
} 

layer { 
    name: "label" 
    type: "MemoryData" 
    top: "label" 
    top: "useless2" 
    include { 
     phase: TRAIN 
    } 
    memory_data_param { 
     batch_size: 60 
     channels: 1 
     height: 1 
     width: 353 
    } 
} 

然后在python脚本填充每个训练步骤之前,两个载体:

numpy.copyto(net.blobs['data'].data, yourdata) #Put here your 60x3x224x224 data array 
numpy.copyto(net.blobs['label'].data, yourlabels) #Put here your 60x1x1x353 label array 
solver.step(1)