You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							699 lines
						
					
					
						
							21 KiB
						
					
					
				
			
		
		
	
	
							699 lines
						
					
					
						
							21 KiB
						
					
					
				/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserved.
 | 
						|
 | 
						|
Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
you may not use this file except in compliance with the License.
 | 
						|
You may obtain a copy of the License at
 | 
						|
 | 
						|
    http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
 | 
						|
Unless required by applicable law or agreed to in writing, software
 | 
						|
distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
See the License for the specific language governing permissions and
 | 
						|
limitations under the License. */
 | 
						|
syntax = "proto2";
 | 
						|
 | 
						|
import "ParameterConfig.proto";
 | 
						|
 | 
						|
package paddle;
 | 
						|
 | 
						|
/**
 | 
						|
 * Various structs for the configuration of a neural network
 | 
						|
 */
 | 
						|
 | 
						|
message ExternalConfig {
 | 
						|
  repeated string layer_names = 1;
 | 
						|
  repeated string input_layer_names = 2;
 | 
						|
  repeated string output_layer_names = 3;
 | 
						|
}
 | 
						|
 | 
						|
message ActivationConfig {
 | 
						|
  // identity: f(x) = x
 | 
						|
  // sigmoid: f(x) = 1 / (1 + exp(-x))
 | 
						|
  // logistic: f(x) = (1 - exp(-x)) / (1+ exp(-x))
 | 
						|
  // softmax: y_i = f(x_i) = exp(x_i) / (\sum_i exp(x_i))
 | 
						|
  // relu: y = max(0, x)
 | 
						|
  required string type = 1;
 | 
						|
};
 | 
						|
 | 
						|
message ConvConfig {
 | 
						|
  // filter_size = 5, says that this layer will use
 | 
						|
  // filters of size 5x5 pixels.
 | 
						|
  required uint32 filter_size = 1;
 | 
						|
 | 
						|
  // The image data dimensionality.
 | 
						|
  // This value must be either 1, 2, 3, or a multiple of 4.
 | 
						|
  required uint32 channels = 2;
 | 
						|
 | 
						|
  // stride = 1, indicates that the distance between
 | 
						|
  // successive filter applications should be 1 pixel.
 | 
						|
  required uint32 stride = 3;
 | 
						|
 | 
						|
  // padding = 4, instructs the net to implicitly
 | 
						|
  // pad the images with a 4-pixel border of zeros.
 | 
						|
  required uint32 padding = 4;
 | 
						|
 | 
						|
  // If groups = 4 together with the filters = 32 parameter,
 | 
						|
  // they state that this convolutional layer is to have 4
 | 
						|
  // groups of 32 filters. Each filter will connect to 8
 | 
						|
  // input channels.
 | 
						|
  required uint32 groups = 5;
 | 
						|
  required uint32 filter_channels = 6;
 | 
						|
 | 
						|
  // The size of output feature map.
 | 
						|
  required uint32 output_x = 7;
 | 
						|
 | 
						|
  // The size of input feature map.
 | 
						|
  required uint32 img_size = 8;
 | 
						|
 | 
						|
  // caffe mode for output size coherence
 | 
						|
  required bool caffe_mode = 9 [ default = true ];
 | 
						|
 | 
						|
  // if filter_size_y is set , this convolutional layer will use
 | 
						|
  // filters of size filter_size * filter_size_y pixels.
 | 
						|
  // if filter_size_y is not set, this convolutional layer will use
 | 
						|
  // filters of size filter_size * filter_size
 | 
						|
  required uint32 filter_size_y = 10;
 | 
						|
  required uint32 padding_y = 11;
 | 
						|
  required uint32 stride_y = 12;
 | 
						|
 | 
						|
  // if not set, use output_x
 | 
						|
  optional uint32 output_y = 13;
 | 
						|
 | 
						|
  // if not set, use img_size
 | 
						|
  optional uint32 img_size_y = 14;
 | 
						|
 | 
						|
  optional uint32 dilation = 15 [ default = 1 ];
 | 
						|
  optional uint32 dilation_y = 16 [ default = 1 ];
 | 
						|
 | 
						|
  optional uint32 filter_size_z = 17 [ default = 1 ];
 | 
						|
  optional uint32 padding_z = 18 [ default = 1 ];
 | 
						|
  optional uint32 stride_z = 19 [ default = 1 ];
 | 
						|
  optional uint32 output_z = 20 [ default = 1 ];
 | 
						|
  optional uint32 img_size_z = 21 [ default = 1 ];
 | 
						|
}
 | 
						|
 | 
						|
message PoolConfig {
 | 
						|
  // max or avg pooling
 | 
						|
  required string pool_type = 1;
 | 
						|
  required uint32 channels = 2;
 | 
						|
 | 
						|
  // Defines the size of the pooling region in
 | 
						|
  // the x (equivalently, y) dimension.
 | 
						|
  required uint32 size_x = 3;
 | 
						|
 | 
						|
  // Tell the net where in the input image to start the pooling.
 | 
						|
  // start is deprecated now.
 | 
						|
  optional uint32 start = 4;
 | 
						|
 | 
						|
  // Defines the stride size between successive pooling squares.
 | 
						|
  required uint32 stride = 5 [ default = 1 ];
 | 
						|
 | 
						|
  // The size of output feature map.
 | 
						|
  required uint32 output_x = 6;
 | 
						|
 | 
						|
  // The size of input feature map.
 | 
						|
  required uint32 img_size = 7;
 | 
						|
 | 
						|
  // padding = 4, instructs the net to implicitly
 | 
						|
  // pad the images with a 4-pixel border of zeros.
 | 
						|
  optional uint32 padding = 8 [ default = 0 ];
 | 
						|
 | 
						|
  // if not set, use size_x
 | 
						|
  optional uint32 size_y = 9;
 | 
						|
 | 
						|
  // if not set, use stride
 | 
						|
  optional uint32 stride_y = 10;
 | 
						|
 | 
						|
  // if not set, use output_x
 | 
						|
  optional uint32 output_y = 11;
 | 
						|
 | 
						|
  // if not set, use img_size
 | 
						|
  optional uint32 img_size_y = 12;
 | 
						|
 | 
						|
  // if not set, use padding
 | 
						|
  optional uint32 padding_y = 13;
 | 
						|
 | 
						|
  optional uint32 size_z = 14 [ default = 1 ];
 | 
						|
  optional uint32 stride_z = 15 [ default = 1 ];
 | 
						|
  optional uint32 output_z = 16 [ default = 1 ];
 | 
						|
  optional uint32 img_size_z = 17 [ default = 1 ];
 | 
						|
  optional uint32 padding_z = 18 [ default = 1 ];
 | 
						|
 | 
						|
  optional bool exclude_mode = 19;
 | 
						|
}
 | 
						|
 | 
						|
message SppConfig {
 | 
						|
  required ImageConfig image_conf = 1;
 | 
						|
  required string pool_type = 2;
 | 
						|
  required uint32 pyramid_height = 3;
 | 
						|
}
 | 
						|
 | 
						|
message NormConfig {
 | 
						|
  // rnorm or cmrnorm
 | 
						|
  required string norm_type = 1;
 | 
						|
  required uint32 channels = 2;
 | 
						|
 | 
						|
  // rnorm: this defines the size of the local regions
 | 
						|
  // used for response normalization.
 | 
						|
  // cmrnorm: The size parameter indicates how many
 | 
						|
  // nearby maps to use for normalization.
 | 
						|
  required uint32 size = 3;
 | 
						|
 | 
						|
  // the parameters for normalization
 | 
						|
  // u = u / (1+scale*sum(u^2 in window))^pow
 | 
						|
  required double scale = 4;
 | 
						|
  required double pow = 5;
 | 
						|
 | 
						|
  // The size of output feature map.
 | 
						|
  required uint32 output_x = 6;
 | 
						|
 | 
						|
  // The size of input feature map.
 | 
						|
  required uint32 img_size = 7;
 | 
						|
 | 
						|
  // normalize with fixed window or sliding window
 | 
						|
  // u = u / (1+scale*sum(u^2 in window))^pow
 | 
						|
  // fixed window: shared a fixed window for each value
 | 
						|
  // sliding window: have a different window for each value
 | 
						|
  optional bool blocked = 8;
 | 
						|
 | 
						|
  // if not set, use output_x
 | 
						|
  optional uint32 output_y = 9;
 | 
						|
 | 
						|
  // if not set, use img_size
 | 
						|
  optional uint32 img_size_y = 10;
 | 
						|
}
 | 
						|
 | 
						|
message BlockExpandConfig {
 | 
						|
  required uint32 channels = 1;
 | 
						|
 | 
						|
  required uint32 stride_x = 2;
 | 
						|
  required uint32 stride_y = 3;
 | 
						|
 | 
						|
  required uint32 padding_x = 4;
 | 
						|
  required uint32 padding_y = 5;
 | 
						|
 | 
						|
  required uint32 block_x = 6;
 | 
						|
  required uint32 block_y = 7;
 | 
						|
 | 
						|
  // The size of output feature map.
 | 
						|
  required uint32 output_x = 8;
 | 
						|
  required uint32 output_y = 9;
 | 
						|
 | 
						|
  // The size of input feature map.
 | 
						|
  required uint32 img_size_x = 10;
 | 
						|
  required uint32 img_size_y = 11;
 | 
						|
}
 | 
						|
 | 
						|
message MaxOutConfig {
 | 
						|
  required ImageConfig image_conf = 1;
 | 
						|
  required uint32 groups = 2;
 | 
						|
}
 | 
						|
 | 
						|
message RowConvConfig { required uint32 context_length = 1; }
 | 
						|
 | 
						|
message SliceConfig {
 | 
						|
  required uint32 start = 1;
 | 
						|
  required uint32 end = 2;
 | 
						|
}
 | 
						|
 | 
						|
message ProjectionConfig {
 | 
						|
  required string type = 1;
 | 
						|
  required string name = 2;
 | 
						|
  required uint64 input_size = 3;
 | 
						|
  required uint64 output_size = 4;
 | 
						|
 | 
						|
  // For ShiftProjection
 | 
						|
  optional int32 context_start = 5;
 | 
						|
  optional int32 context_length = 6;
 | 
						|
  optional bool trainable_padding = 7 [ default = false ];
 | 
						|
 | 
						|
  // For convolution
 | 
						|
  optional ConvConfig conv_conf = 8;
 | 
						|
  optional int32 num_filters = 9;
 | 
						|
 | 
						|
  // For IdentityOffsetProjection
 | 
						|
  optional uint64 offset = 11 [ default = 0 ];
 | 
						|
 | 
						|
  // For pool
 | 
						|
  optional PoolConfig pool_conf = 12;
 | 
						|
 | 
						|
  // For slice
 | 
						|
  // Each slice output is the input[start, end)
 | 
						|
  repeated SliceConfig slices = 13;
 | 
						|
}
 | 
						|
 | 
						|
message OperatorConfig {
 | 
						|
  required string type = 1;
 | 
						|
  repeated int32 input_indices = 2;
 | 
						|
  repeated uint64 input_sizes = 3;
 | 
						|
  required uint64 output_size = 4;
 | 
						|
 | 
						|
  // For DotMulOperator
 | 
						|
  optional double dotmul_scale = 5 [ default = 1.0 ];
 | 
						|
 | 
						|
  // For ConvOperator
 | 
						|
  optional ConvConfig conv_conf = 6;
 | 
						|
  optional int32 num_filters = 7;
 | 
						|
}
 | 
						|
 | 
						|
message BilinearInterpConfig {
 | 
						|
  // The size of input feature map.
 | 
						|
  required ImageConfig image_conf = 1;
 | 
						|
  // The size of output feature map.
 | 
						|
  required uint32 out_size_x = 2;
 | 
						|
  required uint32 out_size_y = 3;
 | 
						|
}
 | 
						|
 | 
						|
message ImageConfig {
 | 
						|
  // The image data dimensionality.
 | 
						|
  // This value must be either 1, 2, 3, or a multiple of 4.
 | 
						|
  required uint32 channels = 2;
 | 
						|
 | 
						|
  // The size of input feature map.
 | 
						|
  required uint32 img_size = 8;
 | 
						|
  optional uint32 img_size_y = 9;
 | 
						|
  optional uint32 img_size_z = 10 [ default = 1 ];
 | 
						|
}
 | 
						|
 | 
						|
message PriorBoxConfig {
 | 
						|
  repeated uint32 min_size = 1;
 | 
						|
  repeated uint32 max_size = 2;
 | 
						|
  repeated float aspect_ratio = 3;
 | 
						|
  repeated float variance = 4;
 | 
						|
}
 | 
						|
 | 
						|
message PadConfig {
 | 
						|
  required ImageConfig image_conf = 1;
 | 
						|
  repeated uint32 pad_c = 2;
 | 
						|
  repeated uint32 pad_h = 3;
 | 
						|
  repeated uint32 pad_w = 4;
 | 
						|
}
 | 
						|
 | 
						|
message ReshapeConfig {
 | 
						|
  repeated uint32 height_axis = 1;
 | 
						|
  repeated uint32 width_axis = 2;
 | 
						|
}
 | 
						|
 | 
						|
message MultiBoxLossConfig {
 | 
						|
  required uint32 num_classes = 1;
 | 
						|
  required float overlap_threshold = 2;
 | 
						|
  required float neg_pos_ratio = 3;
 | 
						|
  required float neg_overlap = 4;
 | 
						|
  required uint32 background_id = 5;
 | 
						|
  required uint32 input_num = 6;
 | 
						|
  optional uint32 height = 7 [ default = 1 ];
 | 
						|
  optional uint32 width = 8 [ default = 1 ];
 | 
						|
}
 | 
						|
 | 
						|
message DetectionOutputConfig {
 | 
						|
  required uint32 num_classes = 1;
 | 
						|
  required float nms_threshold = 2;
 | 
						|
  required uint32 nms_top_k = 3;
 | 
						|
  required uint32 background_id = 4;
 | 
						|
  required uint32 input_num = 5;
 | 
						|
  required uint32 keep_top_k = 6;
 | 
						|
  required float confidence_threshold = 7;
 | 
						|
  optional uint32 height = 8 [ default = 1 ];
 | 
						|
  optional uint32 width = 9 [ default = 1 ];
 | 
						|
}
 | 
						|
 | 
						|
message ClipConfig {
 | 
						|
  required double min = 1;
 | 
						|
  required double max = 2;
 | 
						|
}
 | 
						|
 | 
						|
message UpsampleConfig {
 | 
						|
  required ImageConfig image_conf = 1;
 | 
						|
  optional uint32 scale = 2 [ default = 2 ];
 | 
						|
  optional uint32 scale_y = 3 [ default = 2 ];
 | 
						|
  optional bool pad_out_x = 4 [ default = false ];
 | 
						|
  optional bool pad_out_y = 5 [ default = false ];
 | 
						|
  optional uint32 upsample_size = 6;
 | 
						|
  optional uint32 upsample_size_y = 7;
 | 
						|
}
 | 
						|
 | 
						|
message ROIPoolConfig {
 | 
						|
  required uint32 pooled_width = 1;
 | 
						|
  required uint32 pooled_height = 2;
 | 
						|
  required float spatial_scale = 3;
 | 
						|
  optional uint32 height = 4 [ default = 1 ];
 | 
						|
  optional uint32 width = 5 [ default = 1 ];
 | 
						|
}
 | 
						|
 | 
						|
message ScaleSubRegionConfig {
 | 
						|
  required ImageConfig image_conf = 1;
 | 
						|
  required float value = 2;
 | 
						|
}
 | 
						|
 | 
						|
message LayerInputConfig {
 | 
						|
  required string input_layer_name = 1;
 | 
						|
  optional string input_parameter_name = 2;
 | 
						|
  optional ConvConfig conv_conf = 3;
 | 
						|
  optional PoolConfig pool_conf = 4;
 | 
						|
  optional NormConfig norm_conf = 5;
 | 
						|
  optional ProjectionConfig proj_conf = 6;
 | 
						|
  optional BlockExpandConfig block_expand_conf = 7;
 | 
						|
  optional ImageConfig image_conf = 8;
 | 
						|
  // If the input layer has multi-output.
 | 
						|
  // Set the argument name.
 | 
						|
  optional string input_layer_argument = 9;
 | 
						|
  optional BilinearInterpConfig bilinear_interp_conf = 10;
 | 
						|
  optional MaxOutConfig maxout_conf = 11;
 | 
						|
  optional SppConfig spp_conf = 12;
 | 
						|
  optional PriorBoxConfig priorbox_conf = 13;
 | 
						|
  optional PadConfig pad_conf = 14;
 | 
						|
  optional RowConvConfig row_conv_conf = 15;
 | 
						|
  optional MultiBoxLossConfig multibox_loss_conf = 16;
 | 
						|
  optional DetectionOutputConfig detection_output_conf = 17;
 | 
						|
  optional ClipConfig clip_conf = 18;
 | 
						|
  optional ScaleSubRegionConfig scale_sub_region_conf = 19;
 | 
						|
  optional ROIPoolConfig roi_pool_conf = 20;
 | 
						|
  optional UpsampleConfig upsample_conf = 21;
 | 
						|
}
 | 
						|
 | 
						|
message LayerConfig {
 | 
						|
  required string name = 1;
 | 
						|
  required string type = 2;
 | 
						|
  optional uint64 size = 3;
 | 
						|
  // optional ActivationConfig activation = 4;
 | 
						|
  optional string active_type = 4;
 | 
						|
  repeated LayerInputConfig inputs = 5;
 | 
						|
  optional string bias_parameter_name = 6;
 | 
						|
 | 
						|
  // This number must be a multiple of 16.
 | 
						|
  optional uint32 num_filters = 7;
 | 
						|
 | 
						|
  // indicates that the biases of every filter in this layer
 | 
						|
  // should be shared amongst all applications of that filter
 | 
						|
  // (which is how convnets are usually trained). Setting this to
 | 
						|
  // false will untie the biases, yielding a separate bias for
 | 
						|
  // every location at which the filter is applied.
 | 
						|
  optional bool shared_biases = 8 [ default = false ];
 | 
						|
 | 
						|
  // Valid values are ones that divide the area of the output
 | 
						|
  // grid in this convolutional layer. For example if this layer
 | 
						|
  // produces 32-channel 20x20 output grid, valid values of
 | 
						|
  // partialSum are ones which divide 20*20 = 400.
 | 
						|
  // I'll update this comments when confirmed
 | 
						|
  optional uint32 partial_sum = 9;
 | 
						|
 | 
						|
  // for dropout
 | 
						|
  optional double drop_rate = 10;
 | 
						|
 | 
						|
  // for HierarchicalSoftmaxLayer and NCELayer
 | 
						|
  // the number of classes
 | 
						|
  optional uint32 num_classes = 11;
 | 
						|
 | 
						|
  // the gpu device which the Layer's data in.
 | 
						|
  // Only used by ParallelNeuralNetork. Ignored otherwise.
 | 
						|
  optional int32 device = 12 [ default = -1 ];
 | 
						|
 | 
						|
  // for recurrent layer. If true, the recurrence runs from the end to the
 | 
						|
  // beginning.
 | 
						|
  optional bool reversed = 13 [ default = false ];
 | 
						|
 | 
						|
  // for lstmemory layer. Different types of nodes have different activation
 | 
						|
  // type.
 | 
						|
  optional string active_gate_type = 14;
 | 
						|
  optional string active_state_type = 15;
 | 
						|
 | 
						|
  // For NCELayer
 | 
						|
  // The number of random negative labels for each sample
 | 
						|
  optional int32 num_neg_samples = 16 [ default = 10 ];
 | 
						|
 | 
						|
  // For NCELayer
 | 
						|
  // The distribution for generating the random negative labels.
 | 
						|
  // A uniform distribution will be used if not provided
 | 
						|
  repeated double neg_sampling_dist = 17 [ packed = true ];
 | 
						|
 | 
						|
  // For MaxLayer
 | 
						|
  // default: output VALUE of MaxLayer. set this flag to true for output INDEX
 | 
						|
  // INDEX will be put in Argument::value as double values.
 | 
						|
  optional bool output_max_index = 19 [ default = false ];
 | 
						|
 | 
						|
  /// The filed number 20 have been deprecated.
 | 
						|
 | 
						|
  // For self-normalized estimation
 | 
						|
  optional double softmax_selfnorm_alpha = 21 [ default = 0.1 ];
 | 
						|
 | 
						|
  /// The filed numbers 22 and 23 have been deprecated.
 | 
						|
 | 
						|
  // for MDLstmLayer
 | 
						|
  repeated bool directions = 24;
 | 
						|
 | 
						|
  // for CTCLayer
 | 
						|
  optional bool norm_by_times = 25;
 | 
						|
 | 
						|
  // for CostLayers
 | 
						|
  optional double coeff = 26 [ default = 1.0 ];
 | 
						|
 | 
						|
  // for AverageLayer
 | 
						|
  // can be set to: 'average', 'sum' or 'squarerootn'
 | 
						|
  optional string average_strategy = 27;
 | 
						|
 | 
						|
  // for error clipping
 | 
						|
  optional double error_clipping_threshold = 28 [ default = 0.0 ];
 | 
						|
 | 
						|
  // for operators used by mixed layer
 | 
						|
  repeated OperatorConfig operator_confs = 29;
 | 
						|
 | 
						|
  // for lambdaCost
 | 
						|
  optional int32 NDCG_num = 30;
 | 
						|
  optional int32 max_sort_size = 31;
 | 
						|
 | 
						|
  // for SlopeInterceptLayer
 | 
						|
  optional double slope = 32;
 | 
						|
  optional double intercept = 33;
 | 
						|
 | 
						|
  // for CosSimVecMatLayer and CosSimLayer
 | 
						|
  optional double cos_scale = 34;
 | 
						|
 | 
						|
  // for DataNormLayer
 | 
						|
  // can be set to: 'z-score', 'min-max' or 'decimal-scaling'
 | 
						|
  optional string data_norm_strategy = 36;
 | 
						|
 | 
						|
  // for bos/eos id
 | 
						|
  optional uint32 bos_id = 37;
 | 
						|
  optional uint32 eos_id = 38;
 | 
						|
 | 
						|
  // for max id layer
 | 
						|
  optional uint32 beam_size = 39;
 | 
						|
 | 
						|
  // for seqlastins layer, whether select first instead last
 | 
						|
  optional bool select_first = 40 [ default = false ];
 | 
						|
 | 
						|
  // for seqlastins layer, AverageLayer, MaxLayer and ExpandLayer
 | 
						|
  // can be set to: 'non-seq','seq'
 | 
						|
  optional string trans_type = 41 [ default = 'non-seq' ];
 | 
						|
 | 
						|
  // to indicate whether selective_fc layer
 | 
						|
  // is used in sequence generation or not
 | 
						|
  optional bool selective_fc_pass_generation = 42 [ default = false ];
 | 
						|
 | 
						|
  // to indicate whether selective_fc layer take its last input to
 | 
						|
  // selected several columns and only compute the multiplications
 | 
						|
  // between the input matrices and the selected columns of
 | 
						|
  // the parameter matrices of this layer.
 | 
						|
  // if set false, selective_fc degrades into fc.
 | 
						|
  optional bool has_selected_colums = 43 [ default = true ];
 | 
						|
 | 
						|
  // this parameter is for speed consideration.
 | 
						|
  // if number of the selected columns is less than
 | 
						|
  // sample number * selective_fc output size * selective_fc_mull_mull_ratio
 | 
						|
  // sparse multiplication is used, otherwise, using full multiplication.
 | 
						|
  optional double selective_fc_full_mul_ratio = 44 [ default = 0.02 ];
 | 
						|
 | 
						|
  // to indicate how many threads selective_fc use to to accelate
 | 
						|
  // the plain_mul period
 | 
						|
  // leave empty or set to 0 to disable multi-thread accleleration
 | 
						|
  optional uint32 selective_fc_parallel_plain_mul_thread_num = 45
 | 
						|
      [ default = 0 ];
 | 
						|
 | 
						|
  // for batch normalization layer
 | 
						|
  // if set use_global_stats true, will use the loaded mean and variance.
 | 
						|
  optional bool use_global_stats = 46;
 | 
						|
 | 
						|
  // use to compute moving mean and variance.
 | 
						|
  optional double moving_average_fraction = 47 [ default = 0.9 ];
 | 
						|
 | 
						|
  // bias size
 | 
						|
  optional uint32 bias_size = 48 [ default = 0 ];
 | 
						|
 | 
						|
  // this parameter can be used as a user-defined parameter when necessary,
 | 
						|
  // without changing the proto file.
 | 
						|
  // e.g., when a new layer with a user-defined parameter is implemented,
 | 
						|
  // it can be used to pass that parameter, without modifying the proto file.
 | 
						|
  // string type is used for flexibility: different types can be converted
 | 
						|
  // to string and reinterpreted in the user's own layer implementation.
 | 
						|
  optional string user_arg = 49;
 | 
						|
 | 
						|
  // to indicate rectangle image data
 | 
						|
  optional uint64 height = 50;
 | 
						|
  optional uint64 width = 51;
 | 
						|
 | 
						|
  // blank label used in ctc loss
 | 
						|
  optional uint32 blank = 52 [ default = 0 ];
 | 
						|
 | 
						|
  // stride parameter for seqlastins layer, AverageLayer, MaxLayer, which
 | 
						|
  // controls the scope of pooling operation. can be set > 0.
 | 
						|
  // leave empty or set to -1 to disable this stride pooling.
 | 
						|
  optional int32 seq_pool_stride = 53 [ default = -1 ];
 | 
						|
 | 
						|
  // for crop layer
 | 
						|
  optional int32 axis = 54 [ default = 2 ];
 | 
						|
  repeated uint32 offset = 55;
 | 
						|
  repeated uint32 shape = 56;
 | 
						|
 | 
						|
  // for HuberRegressionLoss
 | 
						|
  optional double delta = 57 [ default = 1.0 ];
 | 
						|
 | 
						|
  // for 3D data
 | 
						|
  optional uint64 depth = 58 [ default = 1 ];
 | 
						|
 | 
						|
  // for switch order layer
 | 
						|
  optional ReshapeConfig reshape_conf = 59;
 | 
						|
 | 
						|
  // for batch normalization layer
 | 
						|
  // The small constant added to the variance to improve numeric stability.
 | 
						|
  optional double epsilon = 60 [ default = 0.00001 ];
 | 
						|
 | 
						|
  // for factorization machine layer
 | 
						|
  optional uint32 factor_size = 61;
 | 
						|
}
 | 
						|
 | 
						|
message EvaluatorConfig {
 | 
						|
  required string name = 1;
 | 
						|
  required string type = 2;
 | 
						|
  repeated string input_layers = 3;
 | 
						|
 | 
						|
  // Used by ChunkEvaluator
 | 
						|
  // one of "IOB", "IOE", "IOBES"
 | 
						|
  optional string chunk_scheme = 4;
 | 
						|
  // number of chunk types other than "other"
 | 
						|
  optional int32 num_chunk_types = 5;
 | 
						|
 | 
						|
  // Used by PrecisionRecallEvaluator and ClassificationErrorEvaluator
 | 
						|
  // For multi binary labels: true if output > classification_threshold
 | 
						|
  optional double classification_threshold = 6 [ default = 0.5 ];
 | 
						|
  // The positive label. -1 means average precision and recall
 | 
						|
  optional int32 positive_label = 7 [ default = -1 ];
 | 
						|
 | 
						|
  // load dict from this file
 | 
						|
  optional string dict_file = 8;
 | 
						|
 | 
						|
  // dump result in this file
 | 
						|
  optional string result_file = 9;
 | 
						|
 | 
						|
  // top # results for max id printer
 | 
						|
  optional int32 num_results = 10 [ default = 1 ];
 | 
						|
 | 
						|
  // whether to delimit the sequence in the seq_text_printer
 | 
						|
  optional bool delimited = 11 [ default = true ];
 | 
						|
 | 
						|
  // Used by ChunkEvaluator
 | 
						|
  // chunk of these types are not counted
 | 
						|
  repeated int32 excluded_chunk_types = 12;
 | 
						|
 | 
						|
  // Used by ClassificationErrorEvaluator
 | 
						|
  // top # classification error
 | 
						|
  optional int32 top_k = 13 [ default = 1 ];
 | 
						|
 | 
						|
  // Used by DetectionMAPEvaluator
 | 
						|
  optional double overlap_threshold = 14 [ default = 0.5 ];
 | 
						|
 | 
						|
  optional int32 background_id = 15 [ default = 0 ];
 | 
						|
 | 
						|
  optional bool evaluate_difficult = 16 [ default = false ];
 | 
						|
 | 
						|
  optional string ap_type = 17 [ default = "11point" ];
 | 
						|
}
 | 
						|
 | 
						|
message LinkConfig {
 | 
						|
  required string layer_name = 1;
 | 
						|
  required string link_name = 2;
 | 
						|
  // If true, this link has sub-sequence
 | 
						|
  optional bool has_subseq = 3 [ default = false ];
 | 
						|
}
 | 
						|
 | 
						|
message MemoryConfig {
 | 
						|
  required string layer_name = 1;
 | 
						|
  required string link_name = 2;
 | 
						|
 | 
						|
  optional string boot_layer_name = 3;
 | 
						|
  optional string boot_bias_parameter_name = 4;
 | 
						|
  optional string boot_bias_active_type = 5;
 | 
						|
  optional uint32 boot_with_const_id = 7;
 | 
						|
 | 
						|
  // memory is a sequence, initailized by a sequence boot layer
 | 
						|
  optional bool is_sequence = 6 [ default = false ];
 | 
						|
}
 | 
						|
 | 
						|
message GeneratorConfig {
 | 
						|
  required uint32 max_num_frames = 1;
 | 
						|
  required string eos_layer_name = 2;
 | 
						|
  optional int32 num_results_per_sample = 3 [ default = 1 ];
 | 
						|
 | 
						|
  // for beam search
 | 
						|
  optional int32 beam_size = 4 [ default = 1 ];
 | 
						|
 | 
						|
  optional bool log_prob = 5 [ default = true ];
 | 
						|
}
 | 
						|
 | 
						|
message SubModelConfig {
 | 
						|
  required string name = 1;
 | 
						|
  repeated string layer_names = 2; // selected layers in sub model
 | 
						|
  repeated string input_layer_names = 3;
 | 
						|
  repeated string output_layer_names = 4;
 | 
						|
  repeated string evaluator_names = 5;
 | 
						|
 | 
						|
  optional bool is_recurrent_layer_group = 6 [ default = false ];
 | 
						|
 | 
						|
  // If true, the recurrence runs from the end to the beginning.
 | 
						|
  optional bool reversed = 7 [ default = false ];
 | 
						|
 | 
						|
  // name and link name of memory
 | 
						|
  repeated MemoryConfig memories = 8;
 | 
						|
 | 
						|
  // if use recurrent layer group, all layers in submodel will postfix by
 | 
						|
  // "_in_"+submodel.name, so we add a name pair to link between
 | 
						|
  // root model and layer group,
 | 
						|
  // note that these in/out layers are not input/output of the network.
 | 
						|
  repeated LinkConfig in_links = 9;
 | 
						|
  repeated LinkConfig out_links = 10;
 | 
						|
 | 
						|
  optional GeneratorConfig generator = 11;
 | 
						|
 | 
						|
  // the id of inlink which share info with outlinks, used in recurrent layer
 | 
						|
  // group
 | 
						|
  optional int32 target_inlinkid = 12;
 | 
						|
}
 | 
						|
 | 
						|
message ModelConfig {
 | 
						|
  // type of the model.
 | 
						|
  // Currently, "nn", "recurrent_nn" and "recursive_nn" are supported
 | 
						|
  required string type = 1 [ default = "nn" ];
 | 
						|
 | 
						|
  // layers should be ordered in such a way that the forward propagation
 | 
						|
  // can be correctly executed by going from the first layer to the last layer
 | 
						|
  repeated LayerConfig layers = 2;
 | 
						|
 | 
						|
  repeated ParameterConfig parameters = 3;
 | 
						|
 | 
						|
  // Input layers should have the same order as the data streams provided
 | 
						|
  // by the data provider. The type of input layers should be "data"
 | 
						|
  repeated string input_layer_names = 4;
 | 
						|
 | 
						|
  // For training, the type of a output layer is usually cost layer.
 | 
						|
  // For prediction, they should be the actual output layers.
 | 
						|
  repeated string output_layer_names = 5;
 | 
						|
 | 
						|
  repeated EvaluatorConfig evaluators = 6;
 | 
						|
 | 
						|
  repeated SubModelConfig sub_models = 8;
 | 
						|
 | 
						|
  // For External Machine, defining how to split a neural network
 | 
						|
  // into multiple parts.
 | 
						|
  optional ExternalConfig external_config = 9;
 | 
						|
};
 |