Caffeのレイヤー種類

Caffeでネットワーク定義する際に、どういったレイヤーが用意されているのかを知っておく必要がある。
（無ければ作る必要があるし）

ということで、一覧表を作ってみる。

#レイヤーパラメータ
まずはじめに、直接は関係ありませんが、各レイヤー共通のパラメータは以下の通り。

※ここの部分
![image1.png](https://qiita-image-store.s3.amazonaws.com/0/130771/aff2e22b-f2d1-7a1b-87f5-55259ddfbc1f.png)

| 変数名 | 意味 |
|:--|:--|
| name | レイヤー名 |
| type | レイヤー種類（下表の「type」を指定） |
| bottom | 下層のブロブの名前 |
| top | 上層のブロブの名前 |
| loss_weight | 目的の中の各トップブロブを割り当てるためのウェイトの量<br>各レイヤーは、各トップブロブにデフォルト値（通常0または1のいずれか）を割り当てます |
| param | トレーニングパラメータ（グローバル学習定数の乗数、およびウェイト共有に使用される名前やその他の設定） |
| blobs | レイヤの数値パラメータを含むブロブ |
| include | 現在のNetStateに基づいて、ネットワークにレイヤーが含まれているかどうかを制御するルール<br>0以外の数を指定できますが、include/exclude両方に設定することはできません<br>ルールが指定されていない場合、レイヤーは常に含まれます<br>現在のNetStateが指定されたルールのANY（すなわち、1つまたは複数）を満たす場合、そのレイヤーは包含されます |
| exclude | 現在のNetStateに基づいて、ネットワークにレイヤーが含まれているかどうかを制御するルール<br>0以外の数を指定できますが、include/exclude両方に設定することはできません<br>ルールが指定されていない場合、レイヤーは常に含まれます<br>現在のNetStateが指定されたルールのANY（すなわち、1つまたは複数）を満たす場合、そのレイヤーは除外されます |
| phase | 計算のためのトレーニング/テストフェーズ |
| propagate_down | サイズは、0または底部の数と同じでなければなりません |
※データはbottomからtopに流れていくので要注意

#レイヤー種類
レイヤーの種類とパラメータは以下の通り。

※ここの部分
![image2.png](https://qiita-image-store.s3.amazonaws.com/0/130771/bf2242e2-106a-f6b9-884a-c7ed24150eb7.png)

| レイヤー名 | type | パラメータ名 | 変数名 |
|:--|:--|:--|:--|
| AbsValLayer | AbsVal |  |  |
| AccuracyLayer | Accuracy | AccuracyParameter | top_k<br>axis<br>ignore_label |
| ArgMaxLayer | ArgMax | ArgMaxParameter | out_max_val<br>top_k<br>axis |
| BaseConvolutionLayer | × |  |  |
| BaseDataLayer | × |  |  |
| BasePrefetchingDataLayer | × |  |  |
| BatchNormLayer | BatchNorm | BatchNormParameter | use_global_stats<br>moving_average_fraction<br>eps |
| BatchReindexLayer | BatchReindex |  |  |
| BiasLayer | Bias | BiasParameter | axis<br>num_axes<br>filler |
| BNLLLayer | BNLL |  |  |
| ConcatLayer | Concat | ConcatParameter | concat_dim<br>axis |
| ContrastiveLossLayer | ContrastiveLoss | ContrastiveLossParameter | margin<br>legacy_version |
| ConvolutionLayer | Convolution | ConvolutionParameter | num_output<br>bias_term<br>pad<br>kernel_size<br>group<br>stride<br>weight_filler<br>bias_filler<br>pad_h<br>pad_w<br>kernel_h<br>kernel_w<br>stride_h<br>stride_w<br>engine<br>axis<br>force_nd_im2col |
| CropLayer | Crop | CropParameter | axis<br>offset |
| CuDNNConvolutionLayer | × |  |  |
| CuDNNLCNLayer | × |  |  |
| CuDNNLRNLayer | × |  |  |
| CuDNNPoolingLayer | × |  |  |
| CuDNNReLULayer | × |  |  |
| CuDNNSigmoidLayer | × |  |  |
| CuDNNSoftmaxLayer | × |  |  |
| CuDNNTanHLayer | × |  |  |
| DataLayer | Data | DataParameter | source<br>scale<br>mean_file<br>batch_size<br> crop_size<br>mirror<br>rand_skip<br>backend<br>force_encoded_color<br>prefetch |
| DeconvolutionLayer | Deconvolution |  |  |
| DropoutLayer | Dropout | DropoutParameter | dropout_ratio |
| DummyDataLayer | DummyData | DummyDataParameter | data_filler<br>num<br>channels<br>height<br>width<br>shape |
| EltwiseLayer | Eltwise | EltwiseParameter | operation<br>coeff<br>stable_prod_grad |
| ELULayer | ELU | ELUParameter | alpha |
| EmbedLayer | Embed | EmbedParameter | num_output<br>input_dim<br>bias_term<br>weight_filler<br>bias_filler |
| EuclideanLossLayer | EuclideanLoss |  |  |
| ExpLayer | Exp | ExpParameter | base<br>scale<br>shift |
| FilterLayer | Filter |  |  |
| FlattenLayer | Flatten | FlattenParameter | axis<br>end_axis |
| HDF5DataLayer | HDF5Data | HDF5DataParameter | source<br>batch_size<br>shuffle |
| HDF5OutputLayer | HDF5Output | HDF5OutputParameter | file_name |
| HingeLossLayer | HingeLoss | HingeLossParameter | norm |
| Im2colLayer | Im2col |  |  |
| ImageDataLayer | ImageData | ImageDataParameter | source<br>scale<br>mean_file<br>batch_size<br>crop_size<br>mirror<br>rand_skip<br>shuffle<br>new_height<br>new_width<br>is_color<br>root_folder |
| InfogainLossLayer | InfogainLoss | InfogainLossParameter | source |
| InnerProductLayer | InnerProduct | InnerProductParameter | num_output<br>bias_term<br>weight_filler<br>bias_filler<br>axis<br>transpose |
| InputLayer | Input | InputParameter | shape |
| LogLayer | Log | LogParameter | base<br>scale<br>shift |
| LossLayer | × |  |  |
| LRNLayer | LRN | LRNParameter | local_size<br>alpha<br>beta<br>norm_region<br>k<br>engine |
| LSTMLayer | LSTM |  |  |
| LSTMUnitLayer | LSTMUnit |  |  |
| MemoryDataLayer | MemoryData | MemoryDataParameter | batch_size<br>channels<br>height<br>width |
| MultinomialLogisticLossLayer | MultinomialLogisticLoss |  |  |
| MVNLayer | MVN | MVNParameter | normalize_variance<br>across_channels<br>eps |
| NeuronLayer | × |  |  |
| ParameterLayer | Parameter | ParameterParameter | shape |
| PoolingLayer | Pooling | PoolingParameter | pool<br>kernel_size<br>stride<br>pad<br>kernel_h<br>kernel_w<br>stride_h<br>stride_w<br>pad_h<br>pad_w<br>engine<br>global_pooling |
| PowerLayer | Power | PowerParameter | power<br>scale<br>shift |
| PReLULayer | PReLU |  |  |
| PythonLayer | Python | PythonParameter | module<br>layer<br>param_str<br>share_in_parallel |
| RecurrentLayer | Recurrent | RecurrentParameter | num_output<br>weight_filler<br>bias_filler<br>debug_info<br>expose_hidden |
| ReductionLayer | Reduction | ReductionParameter | operation<br>axis<br>coeff |
| ReLULayer | ReLU | ReLUParameter | negative_slope<br>engine |
| ReshapeLayer | Reshape | ReshapeParameter | shape<br>axis<br>num_axes |
| RNNLayer | RNN |  |  |
| ScaleLayer | Scale | ScaleParameter | axis<br>num_axes<br>filler<br>bias_term<br>bias_filler |
| SigmoidLayer | Sigmoid | SigmoidParameter | engine |
| SigmoidCrossEntropyLossLayer | SigmoidCrossEntropyLoss |  |  |
| SilenceLayer | Silence |  |  |
| SliceLayer | Slice | SliceParameter | slice_dim<br>slice_point<br>axis |
| SoftmaxLayer | Softmax | SoftmaxParameter | engine<br>axis |
| SoftmaxWithLossLayer | SoftmaxWithLoss |  |  |
| SplitLayer | Split |  |  |
| SPPLayer | SPP |  |  |
| TanHLayer | TanH | TanHParameter | engine |
| ThresholdLayer | Threshold | ThresholdParameter | threshold |
| TileLayer | Tile | TileParameter | axis<br>tiles |
| WindowDataLayer | WindowData | WindowDataParameter | source<br>scale<br>mean_file<br>batch_size<br>crop_size<br>mirror<br>fg_threshold<br>bg_threshold<br>fg_fraction<br>context_pad<br>crop_mode<br>cache_images<br>root_folder |
×：prototxtで指定できないレイヤー（親クラスだったり、派生だったり）