caffe源码理解之inner_product_layer

原文地址:https://www.cnblogs.com/dupuleng/articles/4312149.html
在caffe中所谓的Inner_Product(IP) 层即fully_connected (fc)layer,为什么叫ip呢,可能是为了看起来比较优雅吧。。
从CAFFE_ROOT/examples/mnist/lenet.prototxt中截取一段假设conv2的输入是256*27*27,那么conv2的输出即50*22*22,conv2的输入即pool2的输入,pool2的输出为50*11*11,即ip1的输入,ip1的输出为500*1*1,那么pool2->ip1的参数个数是多少呢?这里就要理解好什么是fully_connected了,即wTx,x为列向量,w的长度与x相同。在本文的例子中x的维度为50*11*11,那么pool2->ip1的参数个数为500*50*11*11 。50*11*11即是一个有50个通道大小为11*11的图片,那么在做完全卷积的时候,需要把对所有通道一起作卷积,即把图片转化成一个50*11*11的向量。
这里写图片描述
即把50个通道的11*11转换为500个通道的1*1向量。上图中左边一列是50个11*11的图片,右边的一列为500个1*1的向量。

layers {
  name: "conv2"
  type: CONVOLUTION
  bottom: "pool1"
  top: "conv2"
  blobs_lr: 1
  blobs_lr: 2
  convolution_param {
    num_output: 50
    kernel_size: 5
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}
layers {
  name: "pool2"
  type: POOLING
  bottom: "conv2"
  top: "pool2"
  pooling_param {
    pool: MAX
    kernel_size: 2
    stride: 2
  }
}
layers {
  name: "ip1"
  type: INNER_PRODUCT
  bottom: "pool2"
  top: "ip1"
  blobs_lr: 1
  blobs_lr: 2
  inner_product_param {
    num_output: 500
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}

猜你喜欢

转载自blog.csdn.net/Missayaaa/article/details/81360751