具有解卷积层的Concat FC层

时间:2016-04-28 17:52:46

标签: concatenation layer caffe deconvolution

我试图用一个完全连接的层来连接一个Deconvolution层用于处理污染层,但是当我在使用FC层的concat Deconv Layer重新整形后,我的批量大小改变了,这是我做的过程:

......

    layer {
      name: "fc4"
      type: "InnerProduct"
      bottom: "fc3"
      top: "fc4"
      param {
        lr_mult: 1
        decay_mult: 1
      }
      param {
        lr_mult: 2
        decay_mult: 0
      }
      inner_product_param {
        num_output: 21904
        weight_filler {
          type: "gaussian"
          std: 0.01
        }
        bias_filler {
          type: "constant"
          value: 0
        }
      }
    }
    layer {
      name: "deconv"
      type: "Deconvolution"
      bottom: "data"
      top: "deconv"
      param {
        lr_mult: 1
        decay_mult: 1
      }
      param {
        lr_mult: 2
        decay_mult: 0
      }
      convolution_param {
        num_output: 256
        pad: 1
        kernel_size: 8
        weight_filler {
          type: "gaussian"
          std: 0.01
        }
        bias_filler {
          type: "constant"
          value: 0
        }
      }
    }
    layer {
      type: "Flatten"
      bottom: "deconv"
      top: "dec_flatten"
      name: "dec_flatten"
    }
    layer {
      name: "concat"
      bottom: "fc4"
      bottom: "dec_flatten"
      top: "concat"
      type: "Concat"
      concat_param {
        axis: 1
      }
    }
    layer {
      name: "reshape"
      type: "Reshape"
      bottom: "concat"
      top: "output"
      reshape_param {
        shape {
         dim: -1
         dim: 1
         dim: 148
         dim: 148
        }
      }
    }
    layer {
      name: "conv1"
      type: "Convolution"
      bottom: "output"
      top: "conv1"
      param {
        lr_mult: 1
        decay_mult: 1
      }
      param {
        lr_mult: 2
        decay_mult: 0
      }
      convolution_param {
        num_output: 16
        kernel_size: 5
        stride: 1
        weight_filler {
          type: "gaussian"
          std: 0.01
        }
        bias_filler {
          type: "constant"
          value: 0
        }
      }
    }
    ....

在终端上我有这个输出:

0428 11:45:41.201318 52048 net.cpp:454] fc4 <- fc3
I0428 11:45:41.201325 52048 net.cpp:411] fc4 -> fc4
I0428 11:45:41.320688 52048 net.cpp:150] Setting up fc4
I0428 11:45:41.320735 52048 net.cpp:157] Top shape: 1 21904 (21904)
I0428 11:45:41.320740 52048 net.cpp:165] Memory required for data: 114240
I0428 11:45:41.320752 52048 layer_factory.hpp:76] Creating layer deconv
I0428 11:45:41.320770 52048 net.cpp:106] Creating Layer deconv
I0428 11:45:41.320776 52048 net.cpp:454] deconv <- data_data_0_split_1
I0428 11:45:41.320786 52048 net.cpp:411] deconv -> deconv
I0428 11:45:41.322069 52048 net.cpp:150] Setting up deconv
I0428 11:45:41.322095 52048 net.cpp:157] Top shape: 1 256 37 37 (350464)
I0428 11:45:41.322100 52048 net.cpp:165] Memory required for data: 1516096
I0428 11:45:41.322110 52048 layer_factory.hpp:76] Creating layer dec_flatten
I0428 11:45:41.322119 52048 net.cpp:106] Creating Layer dec_flatten
I0428 11:45:41.322124 52048 net.cpp:454] dec_flatten <- deconv
I0428 11:45:41.322130 52048 net.cpp:411] dec_flatten -> dec_flatten
I0428 11:45:41.322156 52048 net.cpp:150] Setting up dec_flatten
I0428 11:45:41.322163 52048 net.cpp:157] Top shape: 1 350464 (350464)
I0428 11:45:41.322167 52048 net.cpp:165] Memory required for data: 2917952
I0428 11:45:41.322171 52048 layer_factory.hpp:76] Creating layer concat
I0428 11:45:41.322180 52048 net.cpp:106] Creating Layer concat
I0428 11:45:41.322183 52048 net.cpp:454] concat <- fc4
I0428 11:45:41.322188 52048 net.cpp:454] concat <- dec_flatten
I0428 11:45:41.322194 52048 net.cpp:411] concat -> concat
I0428 11:45:41.322216 52048 net.cpp:150] Setting up concat
I0428 11:45:41.322223 52048 net.cpp:157] Top shape: 1 372368 (372368)
I0428 11:45:41.322227 52048 net.cpp:165] Memory required for data: 4407424
I0428 11:45:41.322232 52048 layer_factory.hpp:76] Creating layer reshape
I0428 11:45:41.322242 52048 net.cpp:106] Creating Layer reshape
I0428 11:45:41.322247 52048 net.cpp:454] reshape <- concat
I0428 11:45:41.322252 52048 net.cpp:411] reshape -> output
I0428 11:45:41.322283 52048 net.cpp:150] Setting up reshape
I0428 11:45:41.322295 52048 net.cpp:157] Top shape: 17 1 148 148 (372368)
I0428 11:45:41.322311 52048 net.cpp:165] Memory required for data: 5896896
I0428 11:45:41.322315 52048 layer_factory.hpp:76] Creating layer conv1
I0428 11:45:41.322325 52048 net.cpp:106] Creating Layer conv1
I0428 11:45:41.322330 52048 net.cpp:454] conv1 <- output
I0428 11:45:41.322337 52048 net.cpp:411] conv1 -> conv1
I0428 11:45:41.323410 52048 net.cpp:150] Setting up conv1
I0428 11:45:41.323438 52048 net.cpp:157] Top shape: 17 16 144 144 (5640192)

当我重新调整批量大小更改时,他们知道如何更改重组而不更改批量大小?

由于

1 个答案:

答案 0 :(得分:0)

concat blob的形状为1x372368

现在您尝试使用原型文件

重塑此Blob数据
  reshape_param {
    shape {
     dim: -1
     dim: 1
     dim: 148
     dim: 148
    }

由于h = 148,w = 148,c = 1的维度已经由您修正,n的值由372368/(148*148*1) = 17计算

如果您不想更改批次计数,则必须更改h,w或c的值,以便h*w*c*n = 372368

编辑1: 您的编辑答案: 现在,您的concat图层的每个图片的尺寸为207936,您尝试使用1024尺寸标签计算损失。这不会起作用,因为底部斑点的尺寸不同。您可以尝试使用num_output:1024将inner product图层连接到concat图层的输出。然后可以在损耗图层中使用此inner product图层的输出以及标签。< / p>