【问题标题】:Caffe loss layer, mean and accuracyCaffe 损失层、均值和准确率
【发布时间】:2016-11-07 10:08:44
【问题描述】:

我有一个用于深度估计的完全卷积网络,如下所示:(为简单起见,仅上层和下层):

# input: image and depth_image
layer {
  name: "train-data"
  type: "Data"
  top: "data"
  top: "silence_1"
  include {
    phase: TRAIN
  }
  transform_param {
    #mean_file: "mean_train.binaryproto"
    scale: 0.00390625
  }
  data_param {
        source: "/train_lmdb"
    batch_size: 4
    backend: LMDB
  }
}
layer {
  name: "train-depth"
  type: "Data"
  top: "depth"
  top: "silence_2"
  include {
    phase: TRAIN
  }
  transform_param {
    scale: 0.00390625
  }
  data_param {
    source: "train_depth_lmdb"
    batch_size: 4
    backend: LMDB
  }
}
layer {
  name: "val-data"
  type: "Data"
  top: "data"
  top: "silence_1"
  include {
    phase: TEST
  }
  transform_param {
    #mean_file: "mean_val.binaryproto"
    scale: 0.00390625
  }
  data_param {
    source: "val_lmdb"
    batch_size: 4
    backend: LMDB
  }
}
layer {
  name: "val-depth"
  type: "Data"
  top: "depth"
  top: "silence_2"
  include {
    phase: TEST
  }
  transform_param {
    scale: 0.00390625
  }
  data_param {
    source: "val_depth_lmdb"
    batch_size: 4
    backend: LMDB
  }
}
################## Silence unused labels ##################
layer {
    name: "silence_layer_1"
    type: "Silence"
    bottom: "silence_1"
}

layer {
    name: "silence_layer_2"
    type: "Silence"
    bottom: "silence_2"
}
....
layer {
    name: "conv"
    type: "Convolution"
    bottom: "concat"
    top: "conv"
    convolution_param {
        num_output: 1
        kernel_size: 5
        pad: 2
        stride: 1
        engine: CUDNN
        weight_filler {
            type: "gaussian"
            std: 0.01
        }
        bias_filler {
            type: "constant"
            value: 0
        }
    }
}

layer {
    name: "relu"
    type: "ReLU"
    bottom: "conv"
    top: "result"
    relu_param{
    negative_slope: 0.01
        engine: CUDNN
    }
}

# Error
layer {
  name: "accuracy"
  type: "Accuracy"
  bottom: "result"
  bottom: "depth"
  top: "accuracy"
  include {
    phase: TEST
  }
}
layer {
  name: "loss"
  type: "EuclideanLoss"
  bottom: "result"
  bottom: "depth"
  top: "loss"
}

现在我有 3 个问题:

当我训练网络时,准确率层总是 1。我不明白为什么?

EuclideanLayer 是用于此目的的正确层吗?

在这种情况下需要平均值还是可以忽略平均值?

#Define image transformers
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_mean('data', mean_array)
transformer.set_transpose('data', (2,0,1))

image = "test.png"

img = caffe.io.load_image(image, False)

img = caffe.io.resize_image( img, (IMAGE_WIDTH, IMAGE_HEIGHT))

net.blobs['data'].data[...] = transformer.preprocess('data', img)

pred = net.forward()

output_blob = pred['result']

【问题讨论】:

  • 您的意思是将其标记为“深度学习”吗?
  • 是的,抱歉我编辑了它

标签: machine-learning neural-network deep-learning caffe conv-neural-network


【解决方案1】:
  1. 准确度始终为 1 - 请参阅 this answer
  2. "EuclideanLoss" 层非常适合回归。
  3. 减去均值应该有助于网络更好地收敛。继续使用它。您可以阅读更多关于数据规范化的重要性以及在这方面可以做什么here

【讨论】:

  • 我的问题是,如果我使用平均值,我会得到黑色图像作为输出。
  • 全零图像? @thigi
  • 是的,真的很奇怪。我将为您添加我的 prediction.py。如果我使用平均值,我的预测的所有输出值都会变为负数。
  • @thigi 显然,如果您在训练期间没有减去平均值,那么您在测试时就不需要这样做。
  • 我在训练期间确实通过设置 mean_file 参数进行了减法。这只是作为评论,因为我测试了某事
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-27
  • 1970-01-01
  • 2018-08-15
  • 1970-01-01
  • 2018-06-10
  • 2017-12-17
相关资源
最近更新 更多