// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: caffe.proto

#ifndef PROTOBUF_caffe_2eproto__INCLUDED
#define PROTOBUF_caffe_2eproto__INCLUDED

#include <string>

#include <google/protobuf/stubs/common.h>

#if GOOGLE_PROTOBUF_VERSION < 3001000
#error This file was generated by a newer version of protoc which is
#error incompatible with your Protocol Buffer headers.  Please update
#error your headers.
#endif
#if 3001000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
#error This file was generated by an older version of protoc which is
#error incompatible with your Protocol Buffer headers.  Please
#error regenerate this file with a newer version of protoc.
#endif

#include <google/protobuf/arena.h>
#include <google/protobuf/arenastring.h>
#include <google/protobuf/generated_message_util.h>
#include <google/protobuf/metadata.h>
#include <google/protobuf/message.h>
#include <google/protobuf/repeated_field.h>
#include <google/protobuf/extension_set.h>
#include <google/protobuf/generated_enum_reflection.h>
#include <google/protobuf/unknown_field_set.h>
// @@protoc_insertion_point(includes)

namespace caffe {

// Internal implementation detail -- do not call these.
void protobuf_AddDesc_caffe_2eproto();
void protobuf_InitDefaults_caffe_2eproto();
void protobuf_AssignDesc_caffe_2eproto();
void protobuf_ShutdownFile_caffe_2eproto();

class AccuracyParameter;
class ArgMaxParameter;
class BlobProto;
class BlobProtoVector;
class BlobShape;
class ConcatParameter;
class ContrastiveLossParameter;
class ConvolutionParameter;
class CropParameter;
class DataParameter;
class Datum;
class DetectionOutputParameter;
class DropoutParameter;
class DummyDataParameter;
class EltwiseParameter;
class ExpParameter;
class FillerParameter;
class FlattenParameter;
class HDF5DataParameter;
class HDF5OutputParameter;
class HingeLossParameter;
class ImageDataParameter;
class InfogainLossParameter;
class InnerProductParameter;
class LRNParameter;
class LayerParameter;
class LogParameter;
class LossParameter;
class MVNParameter;
class MemoryDataParameter;
class NetParameter;
class NetState;
class NetStateRule;
class NormalizeBBoxParameter;
class NormalizedBBox;
class PReLUParameter;
class ParamSpec;
class PermuteParameter;
class PoolingParameter;
class PowerParameter;
class PriorBoxParameter;
class PythonParameter;
class ReLUParameter;
class ReductionParameter;
class ReshapeParameter;
class SPPParameter;
class SigmoidParameter;
class SliceParameter;
class SoftmaxParameter;
class SolverParameter;
class SolverState;
class TanHParameter;
class ThresholdParameter;
class TransformationParameter;
class V0LayerParameter;
class V1LayerParameter;
class WindowDataParameter;

enum PriorBoxParameter_CodeType {
  PriorBoxParameter_CodeType_CORNER = 1,
  PriorBoxParameter_CodeType_CENTER_SIZE = 2
};
bool PriorBoxParameter_CodeType_IsValid(int value);
const PriorBoxParameter_CodeType PriorBoxParameter_CodeType_CodeType_MIN = PriorBoxParameter_CodeType_CORNER;
const PriorBoxParameter_CodeType PriorBoxParameter_CodeType_CodeType_MAX = PriorBoxParameter_CodeType_CENTER_SIZE;
const int PriorBoxParameter_CodeType_CodeType_ARRAYSIZE = PriorBoxParameter_CodeType_CodeType_MAX + 1;

const ::google::protobuf::EnumDescriptor* PriorBoxParameter_CodeType_descriptor();
inline const ::std::string& PriorBoxParameter_CodeType_Name(PriorBoxParameter_CodeType value) {
  return ::google::protobuf::internal::NameOfEnum(
    PriorBoxParameter_CodeType_descriptor(), value);
}
inline bool PriorBoxParameter_CodeType_Parse(
    const ::std::string& name, PriorBoxParameter_CodeType* value) {
  return ::google::protobuf::internal::ParseNamedEnum<PriorBoxParameter_CodeType>(
    PriorBoxParameter_CodeType_descriptor(), name, value);
}
enum FillerParameter_VarianceNorm {
  FillerParameter_VarianceNorm_FAN_IN = 0,
  FillerParameter_VarianceNorm_FAN_OUT = 1,
  FillerParameter_VarianceNorm_AVERAGE = 2
};
bool FillerParameter_VarianceNorm_IsValid(int value);
const FillerParameter_VarianceNorm FillerParameter_VarianceNorm_VarianceNorm_MIN = FillerParameter_VarianceNorm_FAN_IN;
const FillerParameter_VarianceNorm FillerParameter_VarianceNorm_VarianceNorm_MAX = FillerParameter_VarianceNorm_AVERAGE;
const int FillerParameter_VarianceNorm_VarianceNorm_ARRAYSIZE = FillerParameter_VarianceNorm_VarianceNorm_MAX + 1;

const ::google::protobuf::EnumDescriptor* FillerParameter_VarianceNorm_descriptor();
inline const ::std::string& FillerParameter_VarianceNorm_Name(FillerParameter_VarianceNorm value) {
  return ::google::protobuf::internal::NameOfEnum(
    FillerParameter_VarianceNorm_descriptor(), value);
}
inline bool FillerParameter_VarianceNorm_Parse(
    const ::std::string& name, FillerParameter_VarianceNorm* value) {
  return ::google::protobuf::internal::ParseNamedEnum<FillerParameter_VarianceNorm>(
    FillerParameter_VarianceNorm_descriptor(), name, value);
}
enum SolverParameter_SolverMode {
  SolverParameter_SolverMode_CPU = 0,
  SolverParameter_SolverMode_GPU = 1
};
bool SolverParameter_SolverMode_IsValid(int value);
const SolverParameter_SolverMode SolverParameter_SolverMode_SolverMode_MIN = SolverParameter_SolverMode_CPU;
const SolverParameter_SolverMode SolverParameter_SolverMode_SolverMode_MAX = SolverParameter_SolverMode_GPU;
const int SolverParameter_SolverMode_SolverMode_ARRAYSIZE = SolverParameter_SolverMode_SolverMode_MAX + 1;

const ::google::protobuf::EnumDescriptor* SolverParameter_SolverMode_descriptor();
inline const ::std::string& SolverParameter_SolverMode_Name(SolverParameter_SolverMode value) {
  return ::google::protobuf::internal::NameOfEnum(
    SolverParameter_SolverMode_descriptor(), value);
}
inline bool SolverParameter_SolverMode_Parse(
    const ::std::string& name, SolverParameter_SolverMode* value) {
  return ::google::protobuf::internal::ParseNamedEnum<SolverParameter_SolverMode>(
    SolverParameter_SolverMode_descriptor(), name, value);
}
enum SolverParameter_SolverType {
  SolverParameter_SolverType_SGD = 0,
  SolverParameter_SolverType_NESTEROV = 1,
  SolverParameter_SolverType_ADAGRAD = 2
};
bool SolverParameter_SolverType_IsValid(int value);
const SolverParameter_SolverType SolverParameter_SolverType_SolverType_MIN = SolverParameter_SolverType_SGD;
const SolverParameter_SolverType SolverParameter_SolverType_SolverType_MAX = SolverParameter_SolverType_ADAGRAD;
const int SolverParameter_SolverType_SolverType_ARRAYSIZE = SolverParameter_SolverType_SolverType_MAX + 1;

const ::google::protobuf::EnumDescriptor* SolverParameter_SolverType_descriptor();
inline const ::std::string& SolverParameter_SolverType_Name(SolverParameter_SolverType value) {
  return ::google::protobuf::internal::NameOfEnum(
    SolverParameter_SolverType_descriptor(), value);
}
inline bool SolverParameter_SolverType_Parse(
    const ::std::string& name, SolverParameter_SolverType* value) {
  return ::google::protobuf::internal::ParseNamedEnum<SolverParameter_SolverType>(
    SolverParameter_SolverType_descriptor(), name, value);
}
enum ParamSpec_DimCheckMode {
  ParamSpec_DimCheckMode_STRICT = 0,
  ParamSpec_DimCheckMode_PERMISSIVE = 1
};
bool ParamSpec_DimCheckMode_IsValid(int value);
const ParamSpec_DimCheckMode ParamSpec_DimCheckMode_DimCheckMode_MIN = ParamSpec_DimCheckMode_STRICT;
const ParamSpec_DimCheckMode ParamSpec_DimCheckMode_DimCheckMode_MAX = ParamSpec_DimCheckMode_PERMISSIVE;
const int ParamSpec_DimCheckMode_DimCheckMode_ARRAYSIZE = ParamSpec_DimCheckMode_DimCheckMode_MAX + 1;

const ::google::protobuf::EnumDescriptor* ParamSpec_DimCheckMode_descriptor();
inline const ::std::string& ParamSpec_DimCheckMode_Name(ParamSpec_DimCheckMode value) {
  return ::google::protobuf::internal::NameOfEnum(
    ParamSpec_DimCheckMode_descriptor(), value);
}
inline bool ParamSpec_DimCheckMode_Parse(
    const ::std::string& name, ParamSpec_DimCheckMode* value) {
  return ::google::protobuf::internal::ParseNamedEnum<ParamSpec_DimCheckMode>(
    ParamSpec_DimCheckMode_descriptor(), name, value);
}
enum ConvolutionParameter_Engine {
  ConvolutionParameter_Engine_DEFAULT = 0,
  ConvolutionParameter_Engine_CAFFE = 1,
  ConvolutionParameter_Engine_CUDNN = 2
};
bool ConvolutionParameter_Engine_IsValid(int value);
const ConvolutionParameter_Engine ConvolutionParameter_Engine_Engine_MIN = ConvolutionParameter_Engine_DEFAULT;
const ConvolutionParameter_Engine ConvolutionParameter_Engine_Engine_MAX = ConvolutionParameter_Engine_CUDNN;
const int ConvolutionParameter_Engine_Engine_ARRAYSIZE = ConvolutionParameter_Engine_Engine_MAX + 1;

const ::google::protobuf::EnumDescriptor* ConvolutionParameter_Engine_descriptor();
inline const ::std::string& ConvolutionParameter_Engine_Name(ConvolutionParameter_Engine value) {
  return ::google::protobuf::internal::NameOfEnum(
    ConvolutionParameter_Engine_descriptor(), value);
}
inline bool ConvolutionParameter_Engine_Parse(
    const ::std::string& name, ConvolutionParameter_Engine* value) {
  return ::google::protobuf::internal::ParseNamedEnum<ConvolutionParameter_Engine>(
    ConvolutionParameter_Engine_descriptor(), name, value);
}
enum DataParameter_DB {
  DataParameter_DB_LEVELDB = 0,
  DataParameter_DB_LMDB = 1
};
bool DataParameter_DB_IsValid(int value);
const DataParameter_DB DataParameter_DB_DB_MIN = DataParameter_DB_LEVELDB;
const DataParameter_DB DataParameter_DB_DB_MAX = DataParameter_DB_LMDB;
const int DataParameter_DB_DB_ARRAYSIZE = DataParameter_DB_DB_MAX + 1;

const ::google::protobuf::EnumDescriptor* DataParameter_DB_descriptor();
inline const ::std::string& DataParameter_DB_Name(DataParameter_DB value) {
  return ::google::protobuf::internal::NameOfEnum(
    DataParameter_DB_descriptor(), value);
}
inline bool DataParameter_DB_Parse(
    const ::std::string& name, DataParameter_DB* value) {
  return ::google::protobuf::internal::ParseNamedEnum<DataParameter_DB>(
    DataParameter_DB_descriptor(), name, value);
}
enum EltwiseParameter_EltwiseOp {
  EltwiseParameter_EltwiseOp_PROD = 0,
  EltwiseParameter_EltwiseOp_SUM = 1,
  EltwiseParameter_EltwiseOp_MAX = 2
};
bool EltwiseParameter_EltwiseOp_IsValid(int value);
const EltwiseParameter_EltwiseOp EltwiseParameter_EltwiseOp_EltwiseOp_MIN = EltwiseParameter_EltwiseOp_PROD;
const EltwiseParameter_EltwiseOp EltwiseParameter_EltwiseOp_EltwiseOp_MAX = EltwiseParameter_EltwiseOp_MAX;
const int EltwiseParameter_EltwiseOp_EltwiseOp_ARRAYSIZE = EltwiseParameter_EltwiseOp_EltwiseOp_MAX + 1;

const ::google::protobuf::EnumDescriptor* EltwiseParameter_EltwiseOp_descriptor();
inline const ::std::string& EltwiseParameter_EltwiseOp_Name(EltwiseParameter_EltwiseOp value) {
  return ::google::protobuf::internal::NameOfEnum(
    EltwiseParameter_EltwiseOp_descriptor(), value);
}
inline bool EltwiseParameter_EltwiseOp_Parse(
    const ::std::string& name, EltwiseParameter_EltwiseOp* value) {
  return ::google::protobuf::internal::ParseNamedEnum<EltwiseParameter_EltwiseOp>(
    EltwiseParameter_EltwiseOp_descriptor(), name, value);
}
enum HingeLossParameter_Norm {
  HingeLossParameter_Norm_L1 = 1,
  HingeLossParameter_Norm_L2 = 2
};
bool HingeLossParameter_Norm_IsValid(int value);
const HingeLossParameter_Norm HingeLossParameter_Norm_Norm_MIN = HingeLossParameter_Norm_L1;
const HingeLossParameter_Norm HingeLossParameter_Norm_Norm_MAX = HingeLossParameter_Norm_L2;
const int HingeLossParameter_Norm_Norm_ARRAYSIZE = HingeLossParameter_Norm_Norm_MAX + 1;

const ::google::protobuf::EnumDescriptor* HingeLossParameter_Norm_descriptor();
inline const ::std::string& HingeLossParameter_Norm_Name(HingeLossParameter_Norm value) {
  return ::google::protobuf::internal::NameOfEnum(
    HingeLossParameter_Norm_descriptor(), value);
}
inline bool HingeLossParameter_Norm_Parse(
    const ::std::string& name, HingeLossParameter_Norm* value) {
  return ::google::protobuf::internal::ParseNamedEnum<HingeLossParameter_Norm>(
    HingeLossParameter_Norm_descriptor(), name, value);
}
enum LRNParameter_NormRegion {
  LRNParameter_NormRegion_ACROSS_CHANNELS = 0,
  LRNParameter_NormRegion_WITHIN_CHANNEL = 1
};
bool LRNParameter_NormRegion_IsValid(int value);
const LRNParameter_NormRegion LRNParameter_NormRegion_NormRegion_MIN = LRNParameter_NormRegion_ACROSS_CHANNELS;
const LRNParameter_NormRegion LRNParameter_NormRegion_NormRegion_MAX = LRNParameter_NormRegion_WITHIN_CHANNEL;
const int LRNParameter_NormRegion_NormRegion_ARRAYSIZE = LRNParameter_NormRegion_NormRegion_MAX + 1;

const ::google::protobuf::EnumDescriptor* LRNParameter_NormRegion_descriptor();
inline const ::std::string& LRNParameter_NormRegion_Name(LRNParameter_NormRegion value) {
  return ::google::protobuf::internal::NameOfEnum(
    LRNParameter_NormRegion_descriptor(), value);
}
inline bool LRNParameter_NormRegion_Parse(
    const ::std::string& name, LRNParameter_NormRegion* value) {
  return ::google::protobuf::internal::ParseNamedEnum<LRNParameter_NormRegion>(
    LRNParameter_NormRegion_descriptor(), name, value);
}
enum PoolingParameter_PoolMethod {
  PoolingParameter_PoolMethod_MAX = 0,
  PoolingParameter_PoolMethod_AVE = 1,
  PoolingParameter_PoolMethod_STOCHASTIC = 2
};
bool PoolingParameter_PoolMethod_IsValid(int value);
const PoolingParameter_PoolMethod PoolingParameter_PoolMethod_PoolMethod_MIN = PoolingParameter_PoolMethod_MAX;
const PoolingParameter_PoolMethod PoolingParameter_PoolMethod_PoolMethod_MAX = PoolingParameter_PoolMethod_STOCHASTIC;
const int PoolingParameter_PoolMethod_PoolMethod_ARRAYSIZE = PoolingParameter_PoolMethod_PoolMethod_MAX + 1;

const ::google::protobuf::EnumDescriptor* PoolingParameter_PoolMethod_descriptor();
inline const ::std::string& PoolingParameter_PoolMethod_Name(PoolingParameter_PoolMethod value) {
  return ::google::protobuf::internal::NameOfEnum(
    PoolingParameter_PoolMethod_descriptor(), value);
}
inline bool PoolingParameter_PoolMethod_Parse(
    const ::std::string& name, PoolingParameter_PoolMethod* value) {
  return ::google::protobuf::internal::ParseNamedEnum<PoolingParameter_PoolMethod>(
    PoolingParameter_PoolMethod_descriptor(), name, value);
}
enum PoolingParameter_Engine {
  PoolingParameter_Engine_DEFAULT = 0,
  PoolingParameter_Engine_CAFFE = 1,
  PoolingParameter_Engine_CUDNN = 2
};
bool PoolingParameter_Engine_IsValid(int value);
const PoolingParameter_Engine PoolingParameter_Engine_Engine_MIN = PoolingParameter_Engine_DEFAULT;
const PoolingParameter_Engine PoolingParameter_Engine_Engine_MAX = PoolingParameter_Engine_CUDNN;
const int PoolingParameter_Engine_Engine_ARRAYSIZE = PoolingParameter_Engine_Engine_MAX + 1;

const ::google::protobuf::EnumDescriptor* PoolingParameter_Engine_descriptor();
inline const ::std::string& PoolingParameter_Engine_Name(PoolingParameter_Engine value) {
  return ::google::protobuf::internal::NameOfEnum(
    PoolingParameter_Engine_descriptor(), value);
}
inline bool PoolingParameter_Engine_Parse(
    const ::std::string& name, PoolingParameter_Engine* value) {
  return ::google::protobuf::internal::ParseNamedEnum<PoolingParameter_Engine>(
    PoolingParameter_Engine_descriptor(), name, value);
}
enum ReductionParameter_ReductionOp {
  ReductionParameter_ReductionOp_SUM = 1,
  ReductionParameter_ReductionOp_ASUM = 2,
  ReductionParameter_ReductionOp_SUMSQ = 3,
  ReductionParameter_ReductionOp_MEAN = 4
};
bool ReductionParameter_ReductionOp_IsValid(int value);
const ReductionParameter_ReductionOp ReductionParameter_ReductionOp_ReductionOp_MIN = ReductionParameter_ReductionOp_SUM;
const ReductionParameter_ReductionOp ReductionParameter_ReductionOp_ReductionOp_MAX = ReductionParameter_ReductionOp_MEAN;
const int ReductionParameter_ReductionOp_ReductionOp_ARRAYSIZE = ReductionParameter_ReductionOp_ReductionOp_MAX + 1;

const ::google::protobuf::EnumDescriptor* ReductionParameter_ReductionOp_descriptor();
inline const ::std::string& ReductionParameter_ReductionOp_Name(ReductionParameter_ReductionOp value) {
  return ::google::protobuf::internal::NameOfEnum(
    ReductionParameter_ReductionOp_descriptor(), value);
}
inline bool ReductionParameter_ReductionOp_Parse(
    const ::std::string& name, ReductionParameter_ReductionOp* value) {
  return ::google::protobuf::internal::ParseNamedEnum<ReductionParameter_ReductionOp>(
    ReductionParameter_ReductionOp_descriptor(), name, value);
}
enum ReLUParameter_Engine {
  ReLUParameter_Engine_DEFAULT = 0,
  ReLUParameter_Engine_CAFFE = 1,
  ReLUParameter_Engine_CUDNN = 2
};
bool ReLUParameter_Engine_IsValid(int value);
const ReLUParameter_Engine ReLUParameter_Engine_Engine_MIN = ReLUParameter_Engine_DEFAULT;
const ReLUParameter_Engine ReLUParameter_Engine_Engine_MAX = ReLUParameter_Engine_CUDNN;
const int ReLUParameter_Engine_Engine_ARRAYSIZE = ReLUParameter_Engine_Engine_MAX + 1;

const ::google::protobuf::EnumDescriptor* ReLUParameter_Engine_descriptor();
inline const ::std::string& ReLUParameter_Engine_Name(ReLUParameter_Engine value) {
  return ::google::protobuf::internal::NameOfEnum(
    ReLUParameter_Engine_descriptor(), value);
}
inline bool ReLUParameter_Engine_Parse(
    const ::std::string& name, ReLUParameter_Engine* value) {
  return ::google::protobuf::internal::ParseNamedEnum<ReLUParameter_Engine>(
    ReLUParameter_Engine_descriptor(), name, value);
}
enum SigmoidParameter_Engine {
  SigmoidParameter_Engine_DEFAULT = 0,
  SigmoidParameter_Engine_CAFFE = 1,
  SigmoidParameter_Engine_CUDNN = 2
};
bool SigmoidParameter_Engine_IsValid(int value);
const SigmoidParameter_Engine SigmoidParameter_Engine_Engine_MIN = SigmoidParameter_Engine_DEFAULT;
const SigmoidParameter_Engine SigmoidParameter_Engine_Engine_MAX = SigmoidParameter_Engine_CUDNN;
const int SigmoidParameter_Engine_Engine_ARRAYSIZE = SigmoidParameter_Engine_Engine_MAX + 1;

const ::google::protobuf::EnumDescriptor* SigmoidParameter_Engine_descriptor();
inline const ::std::string& SigmoidParameter_Engine_Name(SigmoidParameter_Engine value) {
  return ::google::protobuf::internal::NameOfEnum(
    SigmoidParameter_Engine_descriptor(), value);
}
inline bool SigmoidParameter_Engine_Parse(
    const ::std::string& name, SigmoidParameter_Engine* value) {
  return ::google::protobuf::internal::ParseNamedEnum<SigmoidParameter_Engine>(
    SigmoidParameter_Engine_descriptor(), name, value);
}
enum SoftmaxParameter_Engine {
  SoftmaxParameter_Engine_DEFAULT = 0,
  SoftmaxParameter_Engine_CAFFE = 1,
  SoftmaxParameter_Engine_CUDNN = 2
};
bool SoftmaxParameter_Engine_IsValid(int value);
const SoftmaxParameter_Engine SoftmaxParameter_Engine_Engine_MIN = SoftmaxParameter_Engine_DEFAULT;
const SoftmaxParameter_Engine SoftmaxParameter_Engine_Engine_MAX = SoftmaxParameter_Engine_CUDNN;
const int SoftmaxParameter_Engine_Engine_ARRAYSIZE = SoftmaxParameter_Engine_Engine_MAX + 1;

const ::google::protobuf::EnumDescriptor* SoftmaxParameter_Engine_descriptor();
inline const ::std::string& SoftmaxParameter_Engine_Name(SoftmaxParameter_Engine value) {
  return ::google::protobuf::internal::NameOfEnum(
    SoftmaxParameter_Engine_descriptor(), value);
}
inline bool SoftmaxParameter_Engine_Parse(
    const ::std::string& name, SoftmaxParameter_Engine* value) {
  return ::google::protobuf::internal::ParseNamedEnum<SoftmaxParameter_Engine>(
    SoftmaxParameter_Engine_descriptor(), name, value);
}
enum TanHParameter_Engine {
  TanHParameter_Engine_DEFAULT = 0,
  TanHParameter_Engine_CAFFE = 1,
  TanHParameter_Engine_CUDNN = 2
};
bool TanHParameter_Engine_IsValid(int value);
const TanHParameter_Engine TanHParameter_Engine_Engine_MIN = TanHParameter_Engine_DEFAULT;
const TanHParameter_Engine TanHParameter_Engine_Engine_MAX = TanHParameter_Engine_CUDNN;
const int TanHParameter_Engine_Engine_ARRAYSIZE = TanHParameter_Engine_Engine_MAX + 1;

const ::google::protobuf::EnumDescriptor* TanHParameter_Engine_descriptor();
inline const ::std::string& TanHParameter_Engine_Name(TanHParameter_Engine value) {
  return ::google::protobuf::internal::NameOfEnum(
    TanHParameter_Engine_descriptor(), value);
}
inline bool TanHParameter_Engine_Parse(
    const ::std::string& name, TanHParameter_Engine* value) {
  return ::google::protobuf::internal::ParseNamedEnum<TanHParameter_Engine>(
    TanHParameter_Engine_descriptor(), name, value);
}
enum SPPParameter_PoolMethod {
  SPPParameter_PoolMethod_MAX = 0,
  SPPParameter_PoolMethod_AVE = 1,
  SPPParameter_PoolMethod_STOCHASTIC = 2
};
bool SPPParameter_PoolMethod_IsValid(int value);
const SPPParameter_PoolMethod SPPParameter_PoolMethod_PoolMethod_MIN = SPPParameter_PoolMethod_MAX;
const SPPParameter_PoolMethod SPPParameter_PoolMethod_PoolMethod_MAX = SPPParameter_PoolMethod_STOCHASTIC;
const int SPPParameter_PoolMethod_PoolMethod_ARRAYSIZE = SPPParameter_PoolMethod_PoolMethod_MAX + 1;

const ::google::protobuf::EnumDescriptor* SPPParameter_PoolMethod_descriptor();
inline const ::std::string& SPPParameter_PoolMethod_Name(SPPParameter_PoolMethod value) {
  return ::google::protobuf::internal::NameOfEnum(
    SPPParameter_PoolMethod_descriptor(), value);
}
inline bool SPPParameter_PoolMethod_Parse(
    const ::std::string& name, SPPParameter_PoolMethod* value) {
  return ::google::protobuf::internal::ParseNamedEnum<SPPParameter_PoolMethod>(
    SPPParameter_PoolMethod_descriptor(), name, value);
}
enum SPPParameter_Engine {
  SPPParameter_Engine_DEFAULT = 0,
  SPPParameter_Engine_CAFFE = 1,
  SPPParameter_Engine_CUDNN = 2
};
bool SPPParameter_Engine_IsValid(int value);
const SPPParameter_Engine SPPParameter_Engine_Engine_MIN = SPPParameter_Engine_DEFAULT;
const SPPParameter_Engine SPPParameter_Engine_Engine_MAX = SPPParameter_Engine_CUDNN;
const int SPPParameter_Engine_Engine_ARRAYSIZE = SPPParameter_Engine_Engine_MAX + 1;

const ::google::protobuf::EnumDescriptor* SPPParameter_Engine_descriptor();
inline const ::std::string& SPPParameter_Engine_Name(SPPParameter_Engine value) {
  return ::google::protobuf::internal::NameOfEnum(
    SPPParameter_Engine_descriptor(), value);
}
inline bool SPPParameter_Engine_Parse(
    const ::std::string& name, SPPParameter_Engine* value) {
  return ::google::protobuf::internal::ParseNamedEnum<SPPParameter_Engine>(
    SPPParameter_Engine_descriptor(), name, value);
}
enum V1LayerParameter_LayerType {
  V1LayerParameter_LayerType_NONE = 0,
  V1LayerParameter_LayerType_ABSVAL = 35,
  V1LayerParameter_LayerType_ACCURACY = 1,
  V1LayerParameter_LayerType_ARGMAX = 30,
  V1LayerParameter_LayerType_BNLL = 2,
  V1LayerParameter_LayerType_CONCAT = 3,
  V1LayerParameter_LayerType_CONTRASTIVE_LOSS = 37,
  V1LayerParameter_LayerType_CONVOLUTION = 4,
  V1LayerParameter_LayerType_DATA = 5,
  V1LayerParameter_LayerType_DECONVOLUTION = 39,
  V1LayerParameter_LayerType_DROPOUT = 6,
  V1LayerParameter_LayerType_DUMMY_DATA = 32,
  V1LayerParameter_LayerType_EUCLIDEAN_LOSS = 7,
  V1LayerParameter_LayerType_ELTWISE = 25,
  V1LayerParameter_LayerType_EXP = 38,
  V1LayerParameter_LayerType_FLATTEN = 8,
  V1LayerParameter_LayerType_HDF5_DATA = 9,
  V1LayerParameter_LayerType_HDF5_OUTPUT = 10,
  V1LayerParameter_LayerType_HINGE_LOSS = 28,
  V1LayerParameter_LayerType_IM2COL = 11,
  V1LayerParameter_LayerType_IMAGE_DATA = 12,
  V1LayerParameter_LayerType_INFOGAIN_LOSS = 13,
  V1LayerParameter_LayerType_INNER_PRODUCT = 14,
  V1LayerParameter_LayerType_LRN = 15,
  V1LayerParameter_LayerType_MEMORY_DATA = 29,
  V1LayerParameter_LayerType_MULTINOMIAL_LOGISTIC_LOSS = 16,
  V1LayerParameter_LayerType_MVN = 34,
  V1LayerParameter_LayerType_POOLING = 17,
  V1LayerParameter_LayerType_POWER = 26,
  V1LayerParameter_LayerType_RELU = 18,
  V1LayerParameter_LayerType_SIGMOID = 19,
  V1LayerParameter_LayerType_SIGMOID_CROSS_ENTROPY_LOSS = 27,
  V1LayerParameter_LayerType_SILENCE = 36,
  V1LayerParameter_LayerType_SOFTMAX = 20,
  V1LayerParameter_LayerType_SOFTMAX_LOSS = 21,
  V1LayerParameter_LayerType_SPLIT = 22,
  V1LayerParameter_LayerType_SLICE = 33,
  V1LayerParameter_LayerType_TANH = 23,
  V1LayerParameter_LayerType_WINDOW_DATA = 24,
  V1LayerParameter_LayerType_THRESHOLD = 31
};
bool V1LayerParameter_LayerType_IsValid(int value);
const V1LayerParameter_LayerType V1LayerParameter_LayerType_LayerType_MIN = V1LayerParameter_LayerType_NONE;
const V1LayerParameter_LayerType V1LayerParameter_LayerType_LayerType_MAX = V1LayerParameter_LayerType_DECONVOLUTION;
const int V1LayerParameter_LayerType_LayerType_ARRAYSIZE = V1LayerParameter_LayerType_LayerType_MAX + 1;

const ::google::protobuf::EnumDescriptor* V1LayerParameter_LayerType_descriptor();
inline const ::std::string& V1LayerParameter_LayerType_Name(V1LayerParameter_LayerType value) {
  return ::google::protobuf::internal::NameOfEnum(
    V1LayerParameter_LayerType_descriptor(), value);
}
inline bool V1LayerParameter_LayerType_Parse(
    const ::std::string& name, V1LayerParameter_LayerType* value) {
  return ::google::protobuf::internal::ParseNamedEnum<V1LayerParameter_LayerType>(
    V1LayerParameter_LayerType_descriptor(), name, value);
}
enum V1LayerParameter_DimCheckMode {
  V1LayerParameter_DimCheckMode_STRICT = 0,
  V1LayerParameter_DimCheckMode_PERMISSIVE = 1
};
bool V1LayerParameter_DimCheckMode_IsValid(int value);
const V1LayerParameter_DimCheckMode V1LayerParameter_DimCheckMode_DimCheckMode_MIN = V1LayerParameter_DimCheckMode_STRICT;
const V1LayerParameter_DimCheckMode V1LayerParameter_DimCheckMode_DimCheckMode_MAX = V1LayerParameter_DimCheckMode_PERMISSIVE;
const int V1LayerParameter_DimCheckMode_DimCheckMode_ARRAYSIZE = V1LayerParameter_DimCheckMode_DimCheckMode_MAX + 1;

const ::google::protobuf::EnumDescriptor* V1LayerParameter_DimCheckMode_descriptor();
inline const ::std::string& V1LayerParameter_DimCheckMode_Name(V1LayerParameter_DimCheckMode value) {
  return ::google::protobuf::internal::NameOfEnum(
    V1LayerParameter_DimCheckMode_descriptor(), value);
}
inline bool V1LayerParameter_DimCheckMode_Parse(
    const ::std::string& name, V1LayerParameter_DimCheckMode* value) {
  return ::google::protobuf::internal::ParseNamedEnum<V1LayerParameter_DimCheckMode>(
    V1LayerParameter_DimCheckMode_descriptor(), name, value);
}
enum V0LayerParameter_PoolMethod {
  V0LayerParameter_PoolMethod_MAX = 0,
  V0LayerParameter_PoolMethod_AVE = 1,
  V0LayerParameter_PoolMethod_STOCHASTIC = 2
};
bool V0LayerParameter_PoolMethod_IsValid(int value);
const V0LayerParameter_PoolMethod V0LayerParameter_PoolMethod_PoolMethod_MIN = V0LayerParameter_PoolMethod_MAX;
const V0LayerParameter_PoolMethod V0LayerParameter_PoolMethod_PoolMethod_MAX = V0LayerParameter_PoolMethod_STOCHASTIC;
const int V0LayerParameter_PoolMethod_PoolMethod_ARRAYSIZE = V0LayerParameter_PoolMethod_PoolMethod_MAX + 1;

const ::google::protobuf::EnumDescriptor* V0LayerParameter_PoolMethod_descriptor();
inline const ::std::string& V0LayerParameter_PoolMethod_Name(V0LayerParameter_PoolMethod value) {
  return ::google::protobuf::internal::NameOfEnum(
    V0LayerParameter_PoolMethod_descriptor(), value);
}
inline bool V0LayerParameter_PoolMethod_Parse(
    const ::std::string& name, V0LayerParameter_PoolMethod* value) {
  return ::google::protobuf::internal::ParseNamedEnum<V0LayerParameter_PoolMethod>(
    V0LayerParameter_PoolMethod_descriptor(), name, value);
}
enum Phase {
  TRAIN = 0,
  TEST = 1
};
bool Phase_IsValid(int value);
const Phase Phase_MIN = TRAIN;
const Phase Phase_MAX = TEST;
const int Phase_ARRAYSIZE = Phase_MAX + 1;

const ::google::protobuf::EnumDescriptor* Phase_descriptor();
inline const ::std::string& Phase_Name(Phase value) {
  return ::google::protobuf::internal::NameOfEnum(
    Phase_descriptor(), value);
}
inline bool Phase_Parse(
    const ::std::string& name, Phase* value) {
  return ::google::protobuf::internal::ParseNamedEnum<Phase>(
    Phase_descriptor(), name, value);
}
// ===================================================================

class BlobShape : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.BlobShape) */ {
 public:
  BlobShape();
  virtual ~BlobShape();

  BlobShape(const BlobShape& from);

  inline BlobShape& operator=(const BlobShape& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const BlobShape& default_instance();

  static const BlobShape* internal_default_instance();

  void Swap(BlobShape* other);

  // implements Message ----------------------------------------------

  inline BlobShape* New() const { return New(NULL); }

  BlobShape* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const BlobShape& from);
  void MergeFrom(const BlobShape& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(BlobShape* other);
  void UnsafeMergeFrom(const BlobShape& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // repeated int64 dim = 1 [packed = true];
  int dim_size() const;
  void clear_dim();
  static const int kDimFieldNumber = 1;
  ::google::protobuf::int64 dim(int index) const;
  void set_dim(int index, ::google::protobuf::int64 value);
  void add_dim(::google::protobuf::int64 value);
  const ::google::protobuf::RepeatedField< ::google::protobuf::int64 >&
      dim() const;
  ::google::protobuf::RepeatedField< ::google::protobuf::int64 >*
      mutable_dim();

  // @@protoc_insertion_point(class_scope:caffe.BlobShape)
 private:

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::RepeatedField< ::google::protobuf::int64 > dim_;
  mutable int _dim_cached_byte_size_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<BlobShape> BlobShape_default_instance_;

// -------------------------------------------------------------------

class BlobProto : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.BlobProto) */ {
 public:
  BlobProto();
  virtual ~BlobProto();

  BlobProto(const BlobProto& from);

  inline BlobProto& operator=(const BlobProto& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const BlobProto& default_instance();

  static const BlobProto* internal_default_instance();

  void Swap(BlobProto* other);

  // implements Message ----------------------------------------------

  inline BlobProto* New() const { return New(NULL); }

  BlobProto* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const BlobProto& from);
  void MergeFrom(const BlobProto& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(BlobProto* other);
  void UnsafeMergeFrom(const BlobProto& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional .caffe.BlobShape shape = 7;
  bool has_shape() const;
  void clear_shape();
  static const int kShapeFieldNumber = 7;
  const ::caffe::BlobShape& shape() const;
  ::caffe::BlobShape* mutable_shape();
  ::caffe::BlobShape* release_shape();
  void set_allocated_shape(::caffe::BlobShape* shape);

  // repeated float data = 5 [packed = true];
  int data_size() const;
  void clear_data();
  static const int kDataFieldNumber = 5;
  float data(int index) const;
  void set_data(int index, float value);
  void add_data(float value);
  const ::google::protobuf::RepeatedField< float >&
      data() const;
  ::google::protobuf::RepeatedField< float >*
      mutable_data();

  // repeated float diff = 6 [packed = true];
  int diff_size() const;
  void clear_diff();
  static const int kDiffFieldNumber = 6;
  float diff(int index) const;
  void set_diff(int index, float value);
  void add_diff(float value);
  const ::google::protobuf::RepeatedField< float >&
      diff() const;
  ::google::protobuf::RepeatedField< float >*
      mutable_diff();

  // optional int32 num = 1 [default = 0];
  bool has_num() const;
  void clear_num();
  static const int kNumFieldNumber = 1;
  ::google::protobuf::int32 num() const;
  void set_num(::google::protobuf::int32 value);

  // optional int32 channels = 2 [default = 0];
  bool has_channels() const;
  void clear_channels();
  static const int kChannelsFieldNumber = 2;
  ::google::protobuf::int32 channels() const;
  void set_channels(::google::protobuf::int32 value);

  // optional int32 height = 3 [default = 0];
  bool has_height() const;
  void clear_height();
  static const int kHeightFieldNumber = 3;
  ::google::protobuf::int32 height() const;
  void set_height(::google::protobuf::int32 value);

  // optional int32 width = 4 [default = 0];
  bool has_width() const;
  void clear_width();
  static const int kWidthFieldNumber = 4;
  ::google::protobuf::int32 width() const;
  void set_width(::google::protobuf::int32 value);

  // @@protoc_insertion_point(class_scope:caffe.BlobProto)
 private:
  inline void set_has_shape();
  inline void clear_has_shape();
  inline void set_has_num();
  inline void clear_has_num();
  inline void set_has_channels();
  inline void clear_has_channels();
  inline void set_has_height();
  inline void clear_has_height();
  inline void set_has_width();
  inline void clear_has_width();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::RepeatedField< float > data_;
  mutable int _data_cached_byte_size_;
  ::google::protobuf::RepeatedField< float > diff_;
  mutable int _diff_cached_byte_size_;
  ::caffe::BlobShape* shape_;
  ::google::protobuf::int32 num_;
  ::google::protobuf::int32 channels_;
  ::google::protobuf::int32 height_;
  ::google::protobuf::int32 width_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<BlobProto> BlobProto_default_instance_;

// -------------------------------------------------------------------

class BlobProtoVector : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.BlobProtoVector) */ {
 public:
  BlobProtoVector();
  virtual ~BlobProtoVector();

  BlobProtoVector(const BlobProtoVector& from);

  inline BlobProtoVector& operator=(const BlobProtoVector& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const BlobProtoVector& default_instance();

  static const BlobProtoVector* internal_default_instance();

  void Swap(BlobProtoVector* other);

  // implements Message ----------------------------------------------

  inline BlobProtoVector* New() const { return New(NULL); }

  BlobProtoVector* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const BlobProtoVector& from);
  void MergeFrom(const BlobProtoVector& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(BlobProtoVector* other);
  void UnsafeMergeFrom(const BlobProtoVector& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // repeated .caffe.BlobProto blobs = 1;
  int blobs_size() const;
  void clear_blobs();
  static const int kBlobsFieldNumber = 1;
  const ::caffe::BlobProto& blobs(int index) const;
  ::caffe::BlobProto* mutable_blobs(int index);
  ::caffe::BlobProto* add_blobs();
  ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto >*
      mutable_blobs();
  const ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto >&
      blobs() const;

  // @@protoc_insertion_point(class_scope:caffe.BlobProtoVector)
 private:

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto > blobs_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<BlobProtoVector> BlobProtoVector_default_instance_;

// -------------------------------------------------------------------

class CropParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.CropParameter) */ {
 public:
  CropParameter();
  virtual ~CropParameter();

  CropParameter(const CropParameter& from);

  inline CropParameter& operator=(const CropParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const CropParameter& default_instance();

  static const CropParameter* internal_default_instance();

  void Swap(CropParameter* other);

  // implements Message ----------------------------------------------

  inline CropParameter* New() const { return New(NULL); }

  CropParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const CropParameter& from);
  void MergeFrom(const CropParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(CropParameter* other);
  void UnsafeMergeFrom(const CropParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional int32 axis = 1 [default = 2];
  bool has_axis() const;
  void clear_axis();
  static const int kAxisFieldNumber = 1;
  ::google::protobuf::int32 axis() const;
  void set_axis(::google::protobuf::int32 value);

  // repeated uint32 offset = 2;
  int offset_size() const;
  void clear_offset();
  static const int kOffsetFieldNumber = 2;
  ::google::protobuf::uint32 offset(int index) const;
  void set_offset(int index, ::google::protobuf::uint32 value);
  void add_offset(::google::protobuf::uint32 value);
  const ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >&
      offset() const;
  ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >*
      mutable_offset();

  // @@protoc_insertion_point(class_scope:caffe.CropParameter)
 private:
  inline void set_has_axis();
  inline void clear_has_axis();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::RepeatedField< ::google::protobuf::uint32 > offset_;
  ::google::protobuf::int32 axis_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<CropParameter> CropParameter_default_instance_;

// -------------------------------------------------------------------

class PermuteParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.PermuteParameter) */ {
 public:
  PermuteParameter();
  virtual ~PermuteParameter();

  PermuteParameter(const PermuteParameter& from);

  inline PermuteParameter& operator=(const PermuteParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const PermuteParameter& default_instance();

  static const PermuteParameter* internal_default_instance();

  void Swap(PermuteParameter* other);

  // implements Message ----------------------------------------------

  inline PermuteParameter* New() const { return New(NULL); }

  PermuteParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const PermuteParameter& from);
  void MergeFrom(const PermuteParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(PermuteParameter* other);
  void UnsafeMergeFrom(const PermuteParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // repeated uint32 order = 1;
  int order_size() const;
  void clear_order();
  static const int kOrderFieldNumber = 1;
  ::google::protobuf::uint32 order(int index) const;
  void set_order(int index, ::google::protobuf::uint32 value);
  void add_order(::google::protobuf::uint32 value);
  const ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >&
      order() const;
  ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >*
      mutable_order();

  // @@protoc_insertion_point(class_scope:caffe.PermuteParameter)
 private:

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::RepeatedField< ::google::protobuf::uint32 > order_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<PermuteParameter> PermuteParameter_default_instance_;

// -------------------------------------------------------------------

class NormalizeBBoxParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.NormalizeBBoxParameter) */ {
 public:
  NormalizeBBoxParameter();
  virtual ~NormalizeBBoxParameter();

  NormalizeBBoxParameter(const NormalizeBBoxParameter& from);

  inline NormalizeBBoxParameter& operator=(const NormalizeBBoxParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const NormalizeBBoxParameter& default_instance();

  static const NormalizeBBoxParameter* internal_default_instance();

  void Swap(NormalizeBBoxParameter* other);

  // implements Message ----------------------------------------------

  inline NormalizeBBoxParameter* New() const { return New(NULL); }

  NormalizeBBoxParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const NormalizeBBoxParameter& from);
  void MergeFrom(const NormalizeBBoxParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(NormalizeBBoxParameter* other);
  void UnsafeMergeFrom(const NormalizeBBoxParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional bool across_spatial = 1 [default = true];
  bool has_across_spatial() const;
  void clear_across_spatial();
  static const int kAcrossSpatialFieldNumber = 1;
  bool across_spatial() const;
  void set_across_spatial(bool value);

  // optional .caffe.FillerParameter scale_filler = 2;
  bool has_scale_filler() const;
  void clear_scale_filler();
  static const int kScaleFillerFieldNumber = 2;
  const ::caffe::FillerParameter& scale_filler() const;
  ::caffe::FillerParameter* mutable_scale_filler();
  ::caffe::FillerParameter* release_scale_filler();
  void set_allocated_scale_filler(::caffe::FillerParameter* scale_filler);

  // optional bool channel_shared = 3 [default = true];
  bool has_channel_shared() const;
  void clear_channel_shared();
  static const int kChannelSharedFieldNumber = 3;
  bool channel_shared() const;
  void set_channel_shared(bool value);

  // optional float eps = 4 [default = 1e-10];
  bool has_eps() const;
  void clear_eps();
  static const int kEpsFieldNumber = 4;
  float eps() const;
  void set_eps(float value);

  // @@protoc_insertion_point(class_scope:caffe.NormalizeBBoxParameter)
 private:
  inline void set_has_across_spatial();
  inline void clear_has_across_spatial();
  inline void set_has_scale_filler();
  inline void clear_has_scale_filler();
  inline void set_has_channel_shared();
  inline void clear_has_channel_shared();
  inline void set_has_eps();
  inline void clear_has_eps();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::caffe::FillerParameter* scale_filler_;
  bool across_spatial_;
  bool channel_shared_;
  float eps_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<NormalizeBBoxParameter> NormalizeBBoxParameter_default_instance_;

// -------------------------------------------------------------------

class PriorBoxParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.PriorBoxParameter) */ {
 public:
  PriorBoxParameter();
  virtual ~PriorBoxParameter();

  PriorBoxParameter(const PriorBoxParameter& from);

  inline PriorBoxParameter& operator=(const PriorBoxParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const PriorBoxParameter& default_instance();

  static const PriorBoxParameter* internal_default_instance();

  void Swap(PriorBoxParameter* other);

  // implements Message ----------------------------------------------

  inline PriorBoxParameter* New() const { return New(NULL); }

  PriorBoxParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const PriorBoxParameter& from);
  void MergeFrom(const PriorBoxParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(PriorBoxParameter* other);
  void UnsafeMergeFrom(const PriorBoxParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  typedef PriorBoxParameter_CodeType CodeType;
  static const CodeType CORNER =
    PriorBoxParameter_CodeType_CORNER;
  static const CodeType CENTER_SIZE =
    PriorBoxParameter_CodeType_CENTER_SIZE;
  static inline bool CodeType_IsValid(int value) {
    return PriorBoxParameter_CodeType_IsValid(value);
  }
  static const CodeType CodeType_MIN =
    PriorBoxParameter_CodeType_CodeType_MIN;
  static const CodeType CodeType_MAX =
    PriorBoxParameter_CodeType_CodeType_MAX;
  static const int CodeType_ARRAYSIZE =
    PriorBoxParameter_CodeType_CodeType_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  CodeType_descriptor() {
    return PriorBoxParameter_CodeType_descriptor();
  }
  static inline const ::std::string& CodeType_Name(CodeType value) {
    return PriorBoxParameter_CodeType_Name(value);
  }
  static inline bool CodeType_Parse(const ::std::string& name,
      CodeType* value) {
    return PriorBoxParameter_CodeType_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // optional float min_size = 1;
  bool has_min_size() const;
  void clear_min_size();
  static const int kMinSizeFieldNumber = 1;
  float min_size() const;
  void set_min_size(float value);

  // optional float max_size = 2;
  bool has_max_size() const;
  void clear_max_size();
  static const int kMaxSizeFieldNumber = 2;
  float max_size() const;
  void set_max_size(float value);

  // repeated float aspect_ratio = 3;
  int aspect_ratio_size() const;
  void clear_aspect_ratio();
  static const int kAspectRatioFieldNumber = 3;
  float aspect_ratio(int index) const;
  void set_aspect_ratio(int index, float value);
  void add_aspect_ratio(float value);
  const ::google::protobuf::RepeatedField< float >&
      aspect_ratio() const;
  ::google::protobuf::RepeatedField< float >*
      mutable_aspect_ratio();

  // optional bool flip = 4 [default = true];
  bool has_flip() const;
  void clear_flip();
  static const int kFlipFieldNumber = 4;
  bool flip() const;
  void set_flip(bool value);

  // optional bool clip = 5 [default = true];
  bool has_clip() const;
  void clear_clip();
  static const int kClipFieldNumber = 5;
  bool clip() const;
  void set_clip(bool value);

  // repeated float variance = 6;
  int variance_size() const;
  void clear_variance();
  static const int kVarianceFieldNumber = 6;
  float variance(int index) const;
  void set_variance(int index, float value);
  void add_variance(float value);
  const ::google::protobuf::RepeatedField< float >&
      variance() const;
  ::google::protobuf::RepeatedField< float >*
      mutable_variance();

  // @@protoc_insertion_point(class_scope:caffe.PriorBoxParameter)
 private:
  inline void set_has_min_size();
  inline void clear_has_min_size();
  inline void set_has_max_size();
  inline void clear_has_max_size();
  inline void set_has_flip();
  inline void clear_has_flip();
  inline void set_has_clip();
  inline void clear_has_clip();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::RepeatedField< float > aspect_ratio_;
  ::google::protobuf::RepeatedField< float > variance_;
  float min_size_;
  float max_size_;
  bool flip_;
  bool clip_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<PriorBoxParameter> PriorBoxParameter_default_instance_;

// -------------------------------------------------------------------

class DetectionOutputParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.DetectionOutputParameter) */ {
 public:
  DetectionOutputParameter();
  virtual ~DetectionOutputParameter();

  DetectionOutputParameter(const DetectionOutputParameter& from);

  inline DetectionOutputParameter& operator=(const DetectionOutputParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const DetectionOutputParameter& default_instance();

  static const DetectionOutputParameter* internal_default_instance();

  void Swap(DetectionOutputParameter* other);

  // implements Message ----------------------------------------------

  inline DetectionOutputParameter* New() const { return New(NULL); }

  DetectionOutputParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const DetectionOutputParameter& from);
  void MergeFrom(const DetectionOutputParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(DetectionOutputParameter* other);
  void UnsafeMergeFrom(const DetectionOutputParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional uint32 num_classes = 1;
  bool has_num_classes() const;
  void clear_num_classes();
  static const int kNumClassesFieldNumber = 1;
  ::google::protobuf::uint32 num_classes() const;
  void set_num_classes(::google::protobuf::uint32 value);

  // optional bool share_location = 2 [default = true];
  bool has_share_location() const;
  void clear_share_location();
  static const int kShareLocationFieldNumber = 2;
  bool share_location() const;
  void set_share_location(bool value);

  // optional int32 background_label_id = 3 [default = 0];
  bool has_background_label_id() const;
  void clear_background_label_id();
  static const int kBackgroundLabelIdFieldNumber = 3;
  ::google::protobuf::int32 background_label_id() const;
  void set_background_label_id(::google::protobuf::int32 value);

  // optional .caffe.PriorBoxParameter.CodeType code_type = 6 [default = CORNER];
  bool has_code_type() const;
  void clear_code_type();
  static const int kCodeTypeFieldNumber = 6;
  ::caffe::PriorBoxParameter_CodeType code_type() const;
  void set_code_type(::caffe::PriorBoxParameter_CodeType value);

  // optional bool variance_encoded_in_target = 8 [default = false];
  bool has_variance_encoded_in_target() const;
  void clear_variance_encoded_in_target();
  static const int kVarianceEncodedInTargetFieldNumber = 8;
  bool variance_encoded_in_target() const;
  void set_variance_encoded_in_target(bool value);

  // optional int32 keep_top_k = 7 [default = -1];
  bool has_keep_top_k() const;
  void clear_keep_top_k();
  static const int kKeepTopKFieldNumber = 7;
  ::google::protobuf::int32 keep_top_k() const;
  void set_keep_top_k(::google::protobuf::int32 value);

  // optional float confidence_threshold = 9;
  bool has_confidence_threshold() const;
  void clear_confidence_threshold();
  static const int kConfidenceThresholdFieldNumber = 9;
  float confidence_threshold() const;
  void set_confidence_threshold(float value);

  // optional float nms_threshold = 10 [default = 0.3];
  bool has_nms_threshold() const;
  void clear_nms_threshold();
  static const int kNmsThresholdFieldNumber = 10;
  float nms_threshold() const;
  void set_nms_threshold(float value);

  // optional int32 top_k = 11;
  bool has_top_k() const;
  void clear_top_k();
  static const int kTopKFieldNumber = 11;
  ::google::protobuf::int32 top_k() const;
  void set_top_k(::google::protobuf::int32 value);

  // @@protoc_insertion_point(class_scope:caffe.DetectionOutputParameter)
 private:
  inline void set_has_num_classes();
  inline void clear_has_num_classes();
  inline void set_has_share_location();
  inline void clear_has_share_location();
  inline void set_has_background_label_id();
  inline void clear_has_background_label_id();
  inline void set_has_code_type();
  inline void clear_has_code_type();
  inline void set_has_variance_encoded_in_target();
  inline void clear_has_variance_encoded_in_target();
  inline void set_has_keep_top_k();
  inline void clear_has_keep_top_k();
  inline void set_has_confidence_threshold();
  inline void clear_has_confidence_threshold();
  inline void set_has_nms_threshold();
  inline void clear_has_nms_threshold();
  inline void set_has_top_k();
  inline void clear_has_top_k();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::uint32 num_classes_;
  ::google::protobuf::int32 background_label_id_;
  bool variance_encoded_in_target_;
  float confidence_threshold_;
  ::google::protobuf::int32 top_k_;
  bool share_location_;
  int code_type_;
  ::google::protobuf::int32 keep_top_k_;
  float nms_threshold_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<DetectionOutputParameter> DetectionOutputParameter_default_instance_;

// -------------------------------------------------------------------

class Datum : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.Datum) */ {
 public:
  Datum();
  virtual ~Datum();

  Datum(const Datum& from);

  inline Datum& operator=(const Datum& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const Datum& default_instance();

  static const Datum* internal_default_instance();

  void Swap(Datum* other);

  // implements Message ----------------------------------------------

  inline Datum* New() const { return New(NULL); }

  Datum* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const Datum& from);
  void MergeFrom(const Datum& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(Datum* other);
  void UnsafeMergeFrom(const Datum& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional int32 channels = 1;
  bool has_channels() const;
  void clear_channels();
  static const int kChannelsFieldNumber = 1;
  ::google::protobuf::int32 channels() const;
  void set_channels(::google::protobuf::int32 value);

  // optional int32 height = 2;
  bool has_height() const;
  void clear_height();
  static const int kHeightFieldNumber = 2;
  ::google::protobuf::int32 height() const;
  void set_height(::google::protobuf::int32 value);

  // optional int32 width = 3;
  bool has_width() const;
  void clear_width();
  static const int kWidthFieldNumber = 3;
  ::google::protobuf::int32 width() const;
  void set_width(::google::protobuf::int32 value);

  // optional bytes data = 4;
  bool has_data() const;
  void clear_data();
  static const int kDataFieldNumber = 4;
  const ::std::string& data() const;
  void set_data(const ::std::string& value);
  void set_data(const char* value);
  void set_data(const void* value, size_t size);
  ::std::string* mutable_data();
  ::std::string* release_data();
  void set_allocated_data(::std::string* data);

  // optional int32 label = 5;
  bool has_label() const;
  void clear_label();
  static const int kLabelFieldNumber = 5;
  ::google::protobuf::int32 label() const;
  void set_label(::google::protobuf::int32 value);

  // repeated float float_data = 6;
  int float_data_size() const;
  void clear_float_data();
  static const int kFloatDataFieldNumber = 6;
  float float_data(int index) const;
  void set_float_data(int index, float value);
  void add_float_data(float value);
  const ::google::protobuf::RepeatedField< float >&
      float_data() const;
  ::google::protobuf::RepeatedField< float >*
      mutable_float_data();

  // optional bool encoded = 7 [default = false];
  bool has_encoded() const;
  void clear_encoded();
  static const int kEncodedFieldNumber = 7;
  bool encoded() const;
  void set_encoded(bool value);

  // @@protoc_insertion_point(class_scope:caffe.Datum)
 private:
  inline void set_has_channels();
  inline void clear_has_channels();
  inline void set_has_height();
  inline void clear_has_height();
  inline void set_has_width();
  inline void clear_has_width();
  inline void set_has_data();
  inline void clear_has_data();
  inline void set_has_label();
  inline void clear_has_label();
  inline void set_has_encoded();
  inline void clear_has_encoded();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::RepeatedField< float > float_data_;
  ::google::protobuf::internal::ArenaStringPtr data_;
  ::google::protobuf::int32 channels_;
  ::google::protobuf::int32 height_;
  ::google::protobuf::int32 width_;
  ::google::protobuf::int32 label_;
  bool encoded_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<Datum> Datum_default_instance_;

// -------------------------------------------------------------------

class FillerParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.FillerParameter) */ {
 public:
  FillerParameter();
  virtual ~FillerParameter();

  FillerParameter(const FillerParameter& from);

  inline FillerParameter& operator=(const FillerParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const FillerParameter& default_instance();

  static const FillerParameter* internal_default_instance();

  void Swap(FillerParameter* other);

  // implements Message ----------------------------------------------

  inline FillerParameter* New() const { return New(NULL); }

  FillerParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const FillerParameter& from);
  void MergeFrom(const FillerParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(FillerParameter* other);
  void UnsafeMergeFrom(const FillerParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  typedef FillerParameter_VarianceNorm VarianceNorm;
  static const VarianceNorm FAN_IN =
    FillerParameter_VarianceNorm_FAN_IN;
  static const VarianceNorm FAN_OUT =
    FillerParameter_VarianceNorm_FAN_OUT;
  static const VarianceNorm AVERAGE =
    FillerParameter_VarianceNorm_AVERAGE;
  static inline bool VarianceNorm_IsValid(int value) {
    return FillerParameter_VarianceNorm_IsValid(value);
  }
  static const VarianceNorm VarianceNorm_MIN =
    FillerParameter_VarianceNorm_VarianceNorm_MIN;
  static const VarianceNorm VarianceNorm_MAX =
    FillerParameter_VarianceNorm_VarianceNorm_MAX;
  static const int VarianceNorm_ARRAYSIZE =
    FillerParameter_VarianceNorm_VarianceNorm_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  VarianceNorm_descriptor() {
    return FillerParameter_VarianceNorm_descriptor();
  }
  static inline const ::std::string& VarianceNorm_Name(VarianceNorm value) {
    return FillerParameter_VarianceNorm_Name(value);
  }
  static inline bool VarianceNorm_Parse(const ::std::string& name,
      VarianceNorm* value) {
    return FillerParameter_VarianceNorm_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // optional string type = 1 [default = "constant"];
  bool has_type() const;
  void clear_type();
  static const int kTypeFieldNumber = 1;
  const ::std::string& type() const;
  void set_type(const ::std::string& value);
  void set_type(const char* value);
  void set_type(const char* value, size_t size);
  ::std::string* mutable_type();
  ::std::string* release_type();
  void set_allocated_type(::std::string* type);

  // optional float value = 2 [default = 0];
  bool has_value() const;
  void clear_value();
  static const int kValueFieldNumber = 2;
  float value() const;
  void set_value(float value);

  // optional float min = 3 [default = 0];
  bool has_min() const;
  void clear_min();
  static const int kMinFieldNumber = 3;
  float min() const;
  void set_min(float value);

  // optional float max = 4 [default = 1];
  bool has_max() const;
  void clear_max();
  static const int kMaxFieldNumber = 4;
  float max() const;
  void set_max(float value);

  // optional float mean = 5 [default = 0];
  bool has_mean() const;
  void clear_mean();
  static const int kMeanFieldNumber = 5;
  float mean() const;
  void set_mean(float value);

  // optional float std = 6 [default = 1];
  bool has_std() const;
  void clear_std();
  static const int kStdFieldNumber = 6;
  float std() const;
  void set_std(float value);

  // optional int32 sparse = 7 [default = -1];
  bool has_sparse() const;
  void clear_sparse();
  static const int kSparseFieldNumber = 7;
  ::google::protobuf::int32 sparse() const;
  void set_sparse(::google::protobuf::int32 value);

  // optional .caffe.FillerParameter.VarianceNorm variance_norm = 8 [default = FAN_IN];
  bool has_variance_norm() const;
  void clear_variance_norm();
  static const int kVarianceNormFieldNumber = 8;
  ::caffe::FillerParameter_VarianceNorm variance_norm() const;
  void set_variance_norm(::caffe::FillerParameter_VarianceNorm value);

  // @@protoc_insertion_point(class_scope:caffe.FillerParameter)
 private:
  inline void set_has_type();
  inline void clear_has_type();
  inline void set_has_value();
  inline void clear_has_value();
  inline void set_has_min();
  inline void clear_has_min();
  inline void set_has_max();
  inline void clear_has_max();
  inline void set_has_mean();
  inline void clear_has_mean();
  inline void set_has_std();
  inline void clear_has_std();
  inline void set_has_sparse();
  inline void clear_has_sparse();
  inline void set_has_variance_norm();
  inline void clear_has_variance_norm();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  static ::std::string* _default_type_;
  ::google::protobuf::internal::ArenaStringPtr type_;
  float value_;
  float min_;
  float mean_;
  int variance_norm_;
  ::google::protobuf::int32 sparse_;
  float max_;
  float std_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<FillerParameter> FillerParameter_default_instance_;

// -------------------------------------------------------------------

class NetParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.NetParameter) */ {
 public:
  NetParameter();
  virtual ~NetParameter();

  NetParameter(const NetParameter& from);

  inline NetParameter& operator=(const NetParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const NetParameter& default_instance();

  static const NetParameter* internal_default_instance();

  void Swap(NetParameter* other);

  // implements Message ----------------------------------------------

  inline NetParameter* New() const { return New(NULL); }

  NetParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const NetParameter& from);
  void MergeFrom(const NetParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(NetParameter* other);
  void UnsafeMergeFrom(const NetParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional string name = 1;
  bool has_name() const;
  void clear_name();
  static const int kNameFieldNumber = 1;
  const ::std::string& name() const;
  void set_name(const ::std::string& value);
  void set_name(const char* value);
  void set_name(const char* value, size_t size);
  ::std::string* mutable_name();
  ::std::string* release_name();
  void set_allocated_name(::std::string* name);

  // repeated string input = 3;
  int input_size() const;
  void clear_input();
  static const int kInputFieldNumber = 3;
  const ::std::string& input(int index) const;
  ::std::string* mutable_input(int index);
  void set_input(int index, const ::std::string& value);
  void set_input(int index, const char* value);
  void set_input(int index, const char* value, size_t size);
  ::std::string* add_input();
  void add_input(const ::std::string& value);
  void add_input(const char* value);
  void add_input(const char* value, size_t size);
  const ::google::protobuf::RepeatedPtrField< ::std::string>& input() const;
  ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_input();

  // repeated .caffe.BlobShape input_shape = 8;
  int input_shape_size() const;
  void clear_input_shape();
  static const int kInputShapeFieldNumber = 8;
  const ::caffe::BlobShape& input_shape(int index) const;
  ::caffe::BlobShape* mutable_input_shape(int index);
  ::caffe::BlobShape* add_input_shape();
  ::google::protobuf::RepeatedPtrField< ::caffe::BlobShape >*
      mutable_input_shape();
  const ::google::protobuf::RepeatedPtrField< ::caffe::BlobShape >&
      input_shape() const;

  // repeated int32 input_dim = 4;
  int input_dim_size() const;
  void clear_input_dim();
  static const int kInputDimFieldNumber = 4;
  ::google::protobuf::int32 input_dim(int index) const;
  void set_input_dim(int index, ::google::protobuf::int32 value);
  void add_input_dim(::google::protobuf::int32 value);
  const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
      input_dim() const;
  ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
      mutable_input_dim();

  // optional bool force_backward = 5 [default = false];
  bool has_force_backward() const;
  void clear_force_backward();
  static const int kForceBackwardFieldNumber = 5;
  bool force_backward() const;
  void set_force_backward(bool value);

  // optional .caffe.NetState state = 6;
  bool has_state() const;
  void clear_state();
  static const int kStateFieldNumber = 6;
  const ::caffe::NetState& state() const;
  ::caffe::NetState* mutable_state();
  ::caffe::NetState* release_state();
  void set_allocated_state(::caffe::NetState* state);

  // optional bool debug_info = 7 [default = false];
  bool has_debug_info() const;
  void clear_debug_info();
  static const int kDebugInfoFieldNumber = 7;
  bool debug_info() const;
  void set_debug_info(bool value);

  // repeated .caffe.LayerParameter layer = 100;
  int layer_size() const;
  void clear_layer();
  static const int kLayerFieldNumber = 100;
  const ::caffe::LayerParameter& layer(int index) const;
  ::caffe::LayerParameter* mutable_layer(int index);
  ::caffe::LayerParameter* add_layer();
  ::google::protobuf::RepeatedPtrField< ::caffe::LayerParameter >*
      mutable_layer();
  const ::google::protobuf::RepeatedPtrField< ::caffe::LayerParameter >&
      layer() const;

  // repeated .caffe.V1LayerParameter layers = 2;
  int layers_size() const;
  void clear_layers();
  static const int kLayersFieldNumber = 2;
  const ::caffe::V1LayerParameter& layers(int index) const;
  ::caffe::V1LayerParameter* mutable_layers(int index);
  ::caffe::V1LayerParameter* add_layers();
  ::google::protobuf::RepeatedPtrField< ::caffe::V1LayerParameter >*
      mutable_layers();
  const ::google::protobuf::RepeatedPtrField< ::caffe::V1LayerParameter >&
      layers() const;

  // @@protoc_insertion_point(class_scope:caffe.NetParameter)
 private:
  inline void set_has_name();
  inline void clear_has_name();
  inline void set_has_force_backward();
  inline void clear_has_force_backward();
  inline void set_has_state();
  inline void clear_has_state();
  inline void set_has_debug_info();
  inline void clear_has_debug_info();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::RepeatedPtrField< ::std::string> input_;
  ::google::protobuf::RepeatedPtrField< ::caffe::BlobShape > input_shape_;
  ::google::protobuf::RepeatedField< ::google::protobuf::int32 > input_dim_;
  ::google::protobuf::RepeatedPtrField< ::caffe::LayerParameter > layer_;
  ::google::protobuf::RepeatedPtrField< ::caffe::V1LayerParameter > layers_;
  ::google::protobuf::internal::ArenaStringPtr name_;
  ::caffe::NetState* state_;
  bool force_backward_;
  bool debug_info_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<NetParameter> NetParameter_default_instance_;

// -------------------------------------------------------------------

class SolverParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.SolverParameter) */ {
 public:
  SolverParameter();
  virtual ~SolverParameter();

  SolverParameter(const SolverParameter& from);

  inline SolverParameter& operator=(const SolverParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const SolverParameter& default_instance();

  static const SolverParameter* internal_default_instance();

  void Swap(SolverParameter* other);

  // implements Message ----------------------------------------------

  inline SolverParameter* New() const { return New(NULL); }

  SolverParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const SolverParameter& from);
  void MergeFrom(const SolverParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(SolverParameter* other);
  void UnsafeMergeFrom(const SolverParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  typedef SolverParameter_SolverMode SolverMode;
  static const SolverMode CPU =
    SolverParameter_SolverMode_CPU;
  static const SolverMode GPU =
    SolverParameter_SolverMode_GPU;
  static inline bool SolverMode_IsValid(int value) {
    return SolverParameter_SolverMode_IsValid(value);
  }
  static const SolverMode SolverMode_MIN =
    SolverParameter_SolverMode_SolverMode_MIN;
  static const SolverMode SolverMode_MAX =
    SolverParameter_SolverMode_SolverMode_MAX;
  static const int SolverMode_ARRAYSIZE =
    SolverParameter_SolverMode_SolverMode_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  SolverMode_descriptor() {
    return SolverParameter_SolverMode_descriptor();
  }
  static inline const ::std::string& SolverMode_Name(SolverMode value) {
    return SolverParameter_SolverMode_Name(value);
  }
  static inline bool SolverMode_Parse(const ::std::string& name,
      SolverMode* value) {
    return SolverParameter_SolverMode_Parse(name, value);
  }

  typedef SolverParameter_SolverType SolverType;
  static const SolverType SGD =
    SolverParameter_SolverType_SGD;
  static const SolverType NESTEROV =
    SolverParameter_SolverType_NESTEROV;
  static const SolverType ADAGRAD =
    SolverParameter_SolverType_ADAGRAD;
  static inline bool SolverType_IsValid(int value) {
    return SolverParameter_SolverType_IsValid(value);
  }
  static const SolverType SolverType_MIN =
    SolverParameter_SolverType_SolverType_MIN;
  static const SolverType SolverType_MAX =
    SolverParameter_SolverType_SolverType_MAX;
  static const int SolverType_ARRAYSIZE =
    SolverParameter_SolverType_SolverType_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  SolverType_descriptor() {
    return SolverParameter_SolverType_descriptor();
  }
  static inline const ::std::string& SolverType_Name(SolverType value) {
    return SolverParameter_SolverType_Name(value);
  }
  static inline bool SolverType_Parse(const ::std::string& name,
      SolverType* value) {
    return SolverParameter_SolverType_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // optional string net = 24;
  bool has_net() const;
  void clear_net();
  static const int kNetFieldNumber = 24;
  const ::std::string& net() const;
  void set_net(const ::std::string& value);
  void set_net(const char* value);
  void set_net(const char* value, size_t size);
  ::std::string* mutable_net();
  ::std::string* release_net();
  void set_allocated_net(::std::string* net);

  // optional .caffe.NetParameter net_param = 25;
  bool has_net_param() const;
  void clear_net_param();
  static const int kNetParamFieldNumber = 25;
  const ::caffe::NetParameter& net_param() const;
  ::caffe::NetParameter* mutable_net_param();
  ::caffe::NetParameter* release_net_param();
  void set_allocated_net_param(::caffe::NetParameter* net_param);

  // optional string train_net = 1;
  bool has_train_net() const;
  void clear_train_net();
  static const int kTrainNetFieldNumber = 1;
  const ::std::string& train_net() const;
  void set_train_net(const ::std::string& value);
  void set_train_net(const char* value);
  void set_train_net(const char* value, size_t size);
  ::std::string* mutable_train_net();
  ::std::string* release_train_net();
  void set_allocated_train_net(::std::string* train_net);

  // repeated string test_net = 2;
  int test_net_size() const;
  void clear_test_net();
  static const int kTestNetFieldNumber = 2;
  const ::std::string& test_net(int index) const;
  ::std::string* mutable_test_net(int index);
  void set_test_net(int index, const ::std::string& value);
  void set_test_net(int index, const char* value);
  void set_test_net(int index, const char* value, size_t size);
  ::std::string* add_test_net();
  void add_test_net(const ::std::string& value);
  void add_test_net(const char* value);
  void add_test_net(const char* value, size_t size);
  const ::google::protobuf::RepeatedPtrField< ::std::string>& test_net() const;
  ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_test_net();

  // optional .caffe.NetParameter train_net_param = 21;
  bool has_train_net_param() const;
  void clear_train_net_param();
  static const int kTrainNetParamFieldNumber = 21;
  const ::caffe::NetParameter& train_net_param() const;
  ::caffe::NetParameter* mutable_train_net_param();
  ::caffe::NetParameter* release_train_net_param();
  void set_allocated_train_net_param(::caffe::NetParameter* train_net_param);

  // repeated .caffe.NetParameter test_net_param = 22;
  int test_net_param_size() const;
  void clear_test_net_param();
  static const int kTestNetParamFieldNumber = 22;
  const ::caffe::NetParameter& test_net_param(int index) const;
  ::caffe::NetParameter* mutable_test_net_param(int index);
  ::caffe::NetParameter* add_test_net_param();
  ::google::protobuf::RepeatedPtrField< ::caffe::NetParameter >*
      mutable_test_net_param();
  const ::google::protobuf::RepeatedPtrField< ::caffe::NetParameter >&
      test_net_param() const;

  // optional .caffe.NetState train_state = 26;
  bool has_train_state() const;
  void clear_train_state();
  static const int kTrainStateFieldNumber = 26;
  const ::caffe::NetState& train_state() const;
  ::caffe::NetState* mutable_train_state();
  ::caffe::NetState* release_train_state();
  void set_allocated_train_state(::caffe::NetState* train_state);

  // repeated .caffe.NetState test_state = 27;
  int test_state_size() const;
  void clear_test_state();
  static const int kTestStateFieldNumber = 27;
  const ::caffe::NetState& test_state(int index) const;
  ::caffe::NetState* mutable_test_state(int index);
  ::caffe::NetState* add_test_state();
  ::google::protobuf::RepeatedPtrField< ::caffe::NetState >*
      mutable_test_state();
  const ::google::protobuf::RepeatedPtrField< ::caffe::NetState >&
      test_state() const;

  // repeated int32 test_iter = 3;
  int test_iter_size() const;
  void clear_test_iter();
  static const int kTestIterFieldNumber = 3;
  ::google::protobuf::int32 test_iter(int index) const;
  void set_test_iter(int index, ::google::protobuf::int32 value);
  void add_test_iter(::google::protobuf::int32 value);
  const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
      test_iter() const;
  ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
      mutable_test_iter();

  // optional int32 test_interval = 4 [default = 0];
  bool has_test_interval() const;
  void clear_test_interval();
  static const int kTestIntervalFieldNumber = 4;
  ::google::protobuf::int32 test_interval() const;
  void set_test_interval(::google::protobuf::int32 value);

  // optional bool test_compute_loss = 19 [default = false];
  bool has_test_compute_loss() const;
  void clear_test_compute_loss();
  static const int kTestComputeLossFieldNumber = 19;
  bool test_compute_loss() const;
  void set_test_compute_loss(bool value);

  // optional bool test_initialization = 32 [default = true];
  bool has_test_initialization() const;
  void clear_test_initialization();
  static const int kTestInitializationFieldNumber = 32;
  bool test_initialization() const;
  void set_test_initialization(bool value);

  // optional float base_lr = 5;
  bool has_base_lr() const;
  void clear_base_lr();
  static const int kBaseLrFieldNumber = 5;
  float base_lr() const;
  void set_base_lr(float value);

  // optional int32 display = 6;
  bool has_display() const;
  void clear_display();
  static const int kDisplayFieldNumber = 6;
  ::google::protobuf::int32 display() const;
  void set_display(::google::protobuf::int32 value);

  // optional int32 average_loss = 33 [default = 1];
  bool has_average_loss() const;
  void clear_average_loss();
  static const int kAverageLossFieldNumber = 33;
  ::google::protobuf::int32 average_loss() const;
  void set_average_loss(::google::protobuf::int32 value);

  // optional int32 max_iter = 7;
  bool has_max_iter() const;
  void clear_max_iter();
  static const int kMaxIterFieldNumber = 7;
  ::google::protobuf::int32 max_iter() const;
  void set_max_iter(::google::protobuf::int32 value);

  // optional int32 iter_size = 36 [default = 1];
  bool has_iter_size() const;
  void clear_iter_size();
  static const int kIterSizeFieldNumber = 36;
  ::google::protobuf::int32 iter_size() const;
  void set_iter_size(::google::protobuf::int32 value);

  // optional string lr_policy = 8;
  bool has_lr_policy() const;
  void clear_lr_policy();
  static const int kLrPolicyFieldNumber = 8;
  const ::std::string& lr_policy() const;
  void set_lr_policy(const ::std::string& value);
  void set_lr_policy(const char* value);
  void set_lr_policy(const char* value, size_t size);
  ::std::string* mutable_lr_policy();
  ::std::string* release_lr_policy();
  void set_allocated_lr_policy(::std::string* lr_policy);

  // optional float gamma = 9;
  bool has_gamma() const;
  void clear_gamma();
  static const int kGammaFieldNumber = 9;
  float gamma() const;
  void set_gamma(float value);

  // optional float power = 10;
  bool has_power() const;
  void clear_power();
  static const int kPowerFieldNumber = 10;
  float power() const;
  void set_power(float value);

  // optional float momentum = 11;
  bool has_momentum() const;
  void clear_momentum();
  static const int kMomentumFieldNumber = 11;
  float momentum() const;
  void set_momentum(float value);

  // optional float weight_decay = 12;
  bool has_weight_decay() const;
  void clear_weight_decay();
  static const int kWeightDecayFieldNumber = 12;
  float weight_decay() const;
  void set_weight_decay(float value);

  // optional string regularization_type = 29 [default = "L2"];
  bool has_regularization_type() const;
  void clear_regularization_type();
  static const int kRegularizationTypeFieldNumber = 29;
  const ::std::string& regularization_type() const;
  void set_regularization_type(const ::std::string& value);
  void set_regularization_type(const char* value);
  void set_regularization_type(const char* value, size_t size);
  ::std::string* mutable_regularization_type();
  ::std::string* release_regularization_type();
  void set_allocated_regularization_type(::std::string* regularization_type);

  // optional int32 stepsize = 13;
  bool has_stepsize() const;
  void clear_stepsize();
  static const int kStepsizeFieldNumber = 13;
  ::google::protobuf::int32 stepsize() const;
  void set_stepsize(::google::protobuf::int32 value);

  // repeated int32 stepvalue = 34;
  int stepvalue_size() const;
  void clear_stepvalue();
  static const int kStepvalueFieldNumber = 34;
  ::google::protobuf::int32 stepvalue(int index) const;
  void set_stepvalue(int index, ::google::protobuf::int32 value);
  void add_stepvalue(::google::protobuf::int32 value);
  const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
      stepvalue() const;
  ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
      mutable_stepvalue();

  // optional float clip_gradients = 35 [default = -1];
  bool has_clip_gradients() const;
  void clear_clip_gradients();
  static const int kClipGradientsFieldNumber = 35;
  float clip_gradients() const;
  void set_clip_gradients(float value);

  // optional int32 snapshot = 14 [default = 0];
  bool has_snapshot() const;
  void clear_snapshot();
  static const int kSnapshotFieldNumber = 14;
  ::google::protobuf::int32 snapshot() const;
  void set_snapshot(::google::protobuf::int32 value);

  // optional string snapshot_prefix = 15;
  bool has_snapshot_prefix() const;
  void clear_snapshot_prefix();
  static const int kSnapshotPrefixFieldNumber = 15;
  const ::std::string& snapshot_prefix() const;
  void set_snapshot_prefix(const ::std::string& value);
  void set_snapshot_prefix(const char* value);
  void set_snapshot_prefix(const char* value, size_t size);
  ::std::string* mutable_snapshot_prefix();
  ::std::string* release_snapshot_prefix();
  void set_allocated_snapshot_prefix(::std::string* snapshot_prefix);

  // optional bool snapshot_diff = 16 [default = false];
  bool has_snapshot_diff() const;
  void clear_snapshot_diff();
  static const int kSnapshotDiffFieldNumber = 16;
  bool snapshot_diff() const;
  void set_snapshot_diff(bool value);

  // optional .caffe.SolverParameter.SolverMode solver_mode = 17 [default = GPU];
  bool has_solver_mode() const;
  void clear_solver_mode();
  static const int kSolverModeFieldNumber = 17;
  ::caffe::SolverParameter_SolverMode solver_mode() const;
  void set_solver_mode(::caffe::SolverParameter_SolverMode value);

  // optional int32 device_id = 18 [default = 0];
  bool has_device_id() const;
  void clear_device_id();
  static const int kDeviceIdFieldNumber = 18;
  ::google::protobuf::int32 device_id() const;
  void set_device_id(::google::protobuf::int32 value);

  // optional int64 random_seed = 20 [default = -1];
  bool has_random_seed() const;
  void clear_random_seed();
  static const int kRandomSeedFieldNumber = 20;
  ::google::protobuf::int64 random_seed() const;
  void set_random_seed(::google::protobuf::int64 value);

  // optional .caffe.SolverParameter.SolverType solver_type = 30 [default = SGD];
  bool has_solver_type() const;
  void clear_solver_type();
  static const int kSolverTypeFieldNumber = 30;
  ::caffe::SolverParameter_SolverType solver_type() const;
  void set_solver_type(::caffe::SolverParameter_SolverType value);

  // optional float delta = 31 [default = 1e-08];
  bool has_delta() const;
  void clear_delta();
  static const int kDeltaFieldNumber = 31;
  float delta() const;
  void set_delta(float value);

  // optional bool debug_info = 23 [default = false];
  bool has_debug_info() const;
  void clear_debug_info();
  static const int kDebugInfoFieldNumber = 23;
  bool debug_info() const;
  void set_debug_info(bool value);

  // optional bool snapshot_after_train = 28 [default = true];
  bool has_snapshot_after_train() const;
  void clear_snapshot_after_train();
  static const int kSnapshotAfterTrainFieldNumber = 28;
  bool snapshot_after_train() const;
  void set_snapshot_after_train(bool value);

  // @@protoc_insertion_point(class_scope:caffe.SolverParameter)
 private:
  inline void set_has_net();
  inline void clear_has_net();
  inline void set_has_net_param();
  inline void clear_has_net_param();
  inline void set_has_train_net();
  inline void clear_has_train_net();
  inline void set_has_train_net_param();
  inline void clear_has_train_net_param();
  inline void set_has_train_state();
  inline void clear_has_train_state();
  inline void set_has_test_interval();
  inline void clear_has_test_interval();
  inline void set_has_test_compute_loss();
  inline void clear_has_test_compute_loss();
  inline void set_has_test_initialization();
  inline void clear_has_test_initialization();
  inline void set_has_base_lr();
  inline void clear_has_base_lr();
  inline void set_has_display();
  inline void clear_has_display();
  inline void set_has_average_loss();
  inline void clear_has_average_loss();
  inline void set_has_max_iter();
  inline void clear_has_max_iter();
  inline void set_has_iter_size();
  inline void clear_has_iter_size();
  inline void set_has_lr_policy();
  inline void clear_has_lr_policy();
  inline void set_has_gamma();
  inline void clear_has_gamma();
  inline void set_has_power();
  inline void clear_has_power();
  inline void set_has_momentum();
  inline void clear_has_momentum();
  inline void set_has_weight_decay();
  inline void clear_has_weight_decay();
  inline void set_has_regularization_type();
  inline void clear_has_regularization_type();
  inline void set_has_stepsize();
  inline void clear_has_stepsize();
  inline void set_has_clip_gradients();
  inline void clear_has_clip_gradients();
  inline void set_has_snapshot();
  inline void clear_has_snapshot();
  inline void set_has_snapshot_prefix();
  inline void clear_has_snapshot_prefix();
  inline void set_has_snapshot_diff();
  inline void clear_has_snapshot_diff();
  inline void set_has_solver_mode();
  inline void clear_has_solver_mode();
  inline void set_has_device_id();
  inline void clear_has_device_id();
  inline void set_has_random_seed();
  inline void clear_has_random_seed();
  inline void set_has_solver_type();
  inline void clear_has_solver_type();
  inline void set_has_delta();
  inline void clear_has_delta();
  inline void set_has_debug_info();
  inline void clear_has_debug_info();
  inline void set_has_snapshot_after_train();
  inline void clear_has_snapshot_after_train();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<2> _has_bits_;
  ::google::protobuf::RepeatedPtrField< ::std::string> test_net_;
  ::google::protobuf::RepeatedPtrField< ::caffe::NetParameter > test_net_param_;
  ::google::protobuf::RepeatedPtrField< ::caffe::NetState > test_state_;
  ::google::protobuf::RepeatedField< ::google::protobuf::int32 > test_iter_;
  ::google::protobuf::RepeatedField< ::google::protobuf::int32 > stepvalue_;
  ::google::protobuf::internal::ArenaStringPtr net_;
  ::google::protobuf::internal::ArenaStringPtr train_net_;
  ::google::protobuf::internal::ArenaStringPtr lr_policy_;
  static ::std::string* _default_regularization_type_;
  ::google::protobuf::internal::ArenaStringPtr regularization_type_;
  ::google::protobuf::internal::ArenaStringPtr snapshot_prefix_;
  ::caffe::NetParameter* net_param_;
  ::caffe::NetParameter* train_net_param_;
  ::caffe::NetState* train_state_;
  ::google::protobuf::int32 test_interval_;
  float base_lr_;
  ::google::protobuf::int32 display_;
  ::google::protobuf::int32 max_iter_;
  float gamma_;
  float power_;
  float momentum_;
  float weight_decay_;
  ::google::protobuf::int32 stepsize_;
  bool test_compute_loss_;
  bool snapshot_diff_;
  bool debug_info_;
  ::google::protobuf::int32 snapshot_;
  ::google::protobuf::int32 device_id_;
  int solver_type_;
  ::google::protobuf::int32 average_loss_;
  ::google::protobuf::int32 iter_size_;
  bool test_initialization_;
  bool snapshot_after_train_;
  float clip_gradients_;
  ::google::protobuf::int64 random_seed_;
  int solver_mode_;
  float delta_;
  mutable int _cached_size_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<SolverParameter> SolverParameter_default_instance_;

// -------------------------------------------------------------------

class SolverState : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.SolverState) */ {
 public:
  SolverState();
  virtual ~SolverState();

  SolverState(const SolverState& from);

  inline SolverState& operator=(const SolverState& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const SolverState& default_instance();

  static const SolverState* internal_default_instance();

  void Swap(SolverState* other);

  // implements Message ----------------------------------------------

  inline SolverState* New() const { return New(NULL); }

  SolverState* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const SolverState& from);
  void MergeFrom(const SolverState& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(SolverState* other);
  void UnsafeMergeFrom(const SolverState& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional int32 iter = 1;
  bool has_iter() const;
  void clear_iter();
  static const int kIterFieldNumber = 1;
  ::google::protobuf::int32 iter() const;
  void set_iter(::google::protobuf::int32 value);

  // optional string learned_net = 2;
  bool has_learned_net() const;
  void clear_learned_net();
  static const int kLearnedNetFieldNumber = 2;
  const ::std::string& learned_net() const;
  void set_learned_net(const ::std::string& value);
  void set_learned_net(const char* value);
  void set_learned_net(const char* value, size_t size);
  ::std::string* mutable_learned_net();
  ::std::string* release_learned_net();
  void set_allocated_learned_net(::std::string* learned_net);

  // repeated .caffe.BlobProto history = 3;
  int history_size() const;
  void clear_history();
  static const int kHistoryFieldNumber = 3;
  const ::caffe::BlobProto& history(int index) const;
  ::caffe::BlobProto* mutable_history(int index);
  ::caffe::BlobProto* add_history();
  ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto >*
      mutable_history();
  const ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto >&
      history() const;

  // optional int32 current_step = 4 [default = 0];
  bool has_current_step() const;
  void clear_current_step();
  static const int kCurrentStepFieldNumber = 4;
  ::google::protobuf::int32 current_step() const;
  void set_current_step(::google::protobuf::int32 value);

  // @@protoc_insertion_point(class_scope:caffe.SolverState)
 private:
  inline void set_has_iter();
  inline void clear_has_iter();
  inline void set_has_learned_net();
  inline void clear_has_learned_net();
  inline void set_has_current_step();
  inline void clear_has_current_step();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto > history_;
  ::google::protobuf::internal::ArenaStringPtr learned_net_;
  ::google::protobuf::int32 iter_;
  ::google::protobuf::int32 current_step_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<SolverState> SolverState_default_instance_;

// -------------------------------------------------------------------

class NetState : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.NetState) */ {
 public:
  NetState();
  virtual ~NetState();

  NetState(const NetState& from);

  inline NetState& operator=(const NetState& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const NetState& default_instance();

  static const NetState* internal_default_instance();

  void Swap(NetState* other);

  // implements Message ----------------------------------------------

  inline NetState* New() const { return New(NULL); }

  NetState* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const NetState& from);
  void MergeFrom(const NetState& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(NetState* other);
  void UnsafeMergeFrom(const NetState& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional .caffe.Phase phase = 1 [default = TEST];
  bool has_phase() const;
  void clear_phase();
  static const int kPhaseFieldNumber = 1;
  ::caffe::Phase phase() const;
  void set_phase(::caffe::Phase value);

  // optional int32 level = 2 [default = 0];
  bool has_level() const;
  void clear_level();
  static const int kLevelFieldNumber = 2;
  ::google::protobuf::int32 level() const;
  void set_level(::google::protobuf::int32 value);

  // repeated string stage = 3;
  int stage_size() const;
  void clear_stage();
  static const int kStageFieldNumber = 3;
  const ::std::string& stage(int index) const;
  ::std::string* mutable_stage(int index);
  void set_stage(int index, const ::std::string& value);
  void set_stage(int index, const char* value);
  void set_stage(int index, const char* value, size_t size);
  ::std::string* add_stage();
  void add_stage(const ::std::string& value);
  void add_stage(const char* value);
  void add_stage(const char* value, size_t size);
  const ::google::protobuf::RepeatedPtrField< ::std::string>& stage() const;
  ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_stage();

  // @@protoc_insertion_point(class_scope:caffe.NetState)
 private:
  inline void set_has_phase();
  inline void clear_has_phase();
  inline void set_has_level();
  inline void clear_has_level();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::RepeatedPtrField< ::std::string> stage_;
  ::google::protobuf::int32 level_;
  int phase_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<NetState> NetState_default_instance_;

// -------------------------------------------------------------------

class NetStateRule : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.NetStateRule) */ {
 public:
  NetStateRule();
  virtual ~NetStateRule();

  NetStateRule(const NetStateRule& from);

  inline NetStateRule& operator=(const NetStateRule& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const NetStateRule& default_instance();

  static const NetStateRule* internal_default_instance();

  void Swap(NetStateRule* other);

  // implements Message ----------------------------------------------

  inline NetStateRule* New() const { return New(NULL); }

  NetStateRule* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const NetStateRule& from);
  void MergeFrom(const NetStateRule& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(NetStateRule* other);
  void UnsafeMergeFrom(const NetStateRule& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional .caffe.Phase phase = 1;
  bool has_phase() const;
  void clear_phase();
  static const int kPhaseFieldNumber = 1;
  ::caffe::Phase phase() const;
  void set_phase(::caffe::Phase value);

  // optional int32 min_level = 2;
  bool has_min_level() const;
  void clear_min_level();
  static const int kMinLevelFieldNumber = 2;
  ::google::protobuf::int32 min_level() const;
  void set_min_level(::google::protobuf::int32 value);

  // optional int32 max_level = 3;
  bool has_max_level() const;
  void clear_max_level();
  static const int kMaxLevelFieldNumber = 3;
  ::google::protobuf::int32 max_level() const;
  void set_max_level(::google::protobuf::int32 value);

  // repeated string stage = 4;
  int stage_size() const;
  void clear_stage();
  static const int kStageFieldNumber = 4;
  const ::std::string& stage(int index) const;
  ::std::string* mutable_stage(int index);
  void set_stage(int index, const ::std::string& value);
  void set_stage(int index, const char* value);
  void set_stage(int index, const char* value, size_t size);
  ::std::string* add_stage();
  void add_stage(const ::std::string& value);
  void add_stage(const char* value);
  void add_stage(const char* value, size_t size);
  const ::google::protobuf::RepeatedPtrField< ::std::string>& stage() const;
  ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_stage();

  // repeated string not_stage = 5;
  int not_stage_size() const;
  void clear_not_stage();
  static const int kNotStageFieldNumber = 5;
  const ::std::string& not_stage(int index) const;
  ::std::string* mutable_not_stage(int index);
  void set_not_stage(int index, const ::std::string& value);
  void set_not_stage(int index, const char* value);
  void set_not_stage(int index, const char* value, size_t size);
  ::std::string* add_not_stage();
  void add_not_stage(const ::std::string& value);
  void add_not_stage(const char* value);
  void add_not_stage(const char* value, size_t size);
  const ::google::protobuf::RepeatedPtrField< ::std::string>& not_stage() const;
  ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_not_stage();

  // @@protoc_insertion_point(class_scope:caffe.NetStateRule)
 private:
  inline void set_has_phase();
  inline void clear_has_phase();
  inline void set_has_min_level();
  inline void clear_has_min_level();
  inline void set_has_max_level();
  inline void clear_has_max_level();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::RepeatedPtrField< ::std::string> stage_;
  ::google::protobuf::RepeatedPtrField< ::std::string> not_stage_;
  int phase_;
  ::google::protobuf::int32 min_level_;
  ::google::protobuf::int32 max_level_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<NetStateRule> NetStateRule_default_instance_;

// -------------------------------------------------------------------

class ParamSpec : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.ParamSpec) */ {
 public:
  ParamSpec();
  virtual ~ParamSpec();

  ParamSpec(const ParamSpec& from);

  inline ParamSpec& operator=(const ParamSpec& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const ParamSpec& default_instance();

  static const ParamSpec* internal_default_instance();

  void Swap(ParamSpec* other);

  // implements Message ----------------------------------------------

  inline ParamSpec* New() const { return New(NULL); }

  ParamSpec* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const ParamSpec& from);
  void MergeFrom(const ParamSpec& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(ParamSpec* other);
  void UnsafeMergeFrom(const ParamSpec& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  typedef ParamSpec_DimCheckMode DimCheckMode;
  static const DimCheckMode STRICT =
    ParamSpec_DimCheckMode_STRICT;
  static const DimCheckMode PERMISSIVE =
    ParamSpec_DimCheckMode_PERMISSIVE;
  static inline bool DimCheckMode_IsValid(int value) {
    return ParamSpec_DimCheckMode_IsValid(value);
  }
  static const DimCheckMode DimCheckMode_MIN =
    ParamSpec_DimCheckMode_DimCheckMode_MIN;
  static const DimCheckMode DimCheckMode_MAX =
    ParamSpec_DimCheckMode_DimCheckMode_MAX;
  static const int DimCheckMode_ARRAYSIZE =
    ParamSpec_DimCheckMode_DimCheckMode_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  DimCheckMode_descriptor() {
    return ParamSpec_DimCheckMode_descriptor();
  }
  static inline const ::std::string& DimCheckMode_Name(DimCheckMode value) {
    return ParamSpec_DimCheckMode_Name(value);
  }
  static inline bool DimCheckMode_Parse(const ::std::string& name,
      DimCheckMode* value) {
    return ParamSpec_DimCheckMode_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // optional string name = 1;
  bool has_name() const;
  void clear_name();
  static const int kNameFieldNumber = 1;
  const ::std::string& name() const;
  void set_name(const ::std::string& value);
  void set_name(const char* value);
  void set_name(const char* value, size_t size);
  ::std::string* mutable_name();
  ::std::string* release_name();
  void set_allocated_name(::std::string* name);

  // optional .caffe.ParamSpec.DimCheckMode share_mode = 2;
  bool has_share_mode() const;
  void clear_share_mode();
  static const int kShareModeFieldNumber = 2;
  ::caffe::ParamSpec_DimCheckMode share_mode() const;
  void set_share_mode(::caffe::ParamSpec_DimCheckMode value);

  // optional float lr_mult = 3 [default = 1];
  bool has_lr_mult() const;
  void clear_lr_mult();
  static const int kLrMultFieldNumber = 3;
  float lr_mult() const;
  void set_lr_mult(float value);

  // optional float decay_mult = 4 [default = 1];
  bool has_decay_mult() const;
  void clear_decay_mult();
  static const int kDecayMultFieldNumber = 4;
  float decay_mult() const;
  void set_decay_mult(float value);

  // @@protoc_insertion_point(class_scope:caffe.ParamSpec)
 private:
  inline void set_has_name();
  inline void clear_has_name();
  inline void set_has_share_mode();
  inline void clear_has_share_mode();
  inline void set_has_lr_mult();
  inline void clear_has_lr_mult();
  inline void set_has_decay_mult();
  inline void clear_has_decay_mult();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::internal::ArenaStringPtr name_;
  int share_mode_;
  float lr_mult_;
  float decay_mult_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<ParamSpec> ParamSpec_default_instance_;

// -------------------------------------------------------------------

class LayerParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.LayerParameter) */ {
 public:
  LayerParameter();
  virtual ~LayerParameter();

  LayerParameter(const LayerParameter& from);

  inline LayerParameter& operator=(const LayerParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const LayerParameter& default_instance();

  static const LayerParameter* internal_default_instance();

  void Swap(LayerParameter* other);

  // implements Message ----------------------------------------------

  inline LayerParameter* New() const { return New(NULL); }

  LayerParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const LayerParameter& from);
  void MergeFrom(const LayerParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(LayerParameter* other);
  void UnsafeMergeFrom(const LayerParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional string name = 1;
  bool has_name() const;
  void clear_name();
  static const int kNameFieldNumber = 1;
  const ::std::string& name() const;
  void set_name(const ::std::string& value);
  void set_name(const char* value);
  void set_name(const char* value, size_t size);
  ::std::string* mutable_name();
  ::std::string* release_name();
  void set_allocated_name(::std::string* name);

  // optional string type = 2;
  bool has_type() const;
  void clear_type();
  static const int kTypeFieldNumber = 2;
  const ::std::string& type() const;
  void set_type(const ::std::string& value);
  void set_type(const char* value);
  void set_type(const char* value, size_t size);
  ::std::string* mutable_type();
  ::std::string* release_type();
  void set_allocated_type(::std::string* type);

  // repeated string bottom = 3;
  int bottom_size() const;
  void clear_bottom();
  static const int kBottomFieldNumber = 3;
  const ::std::string& bottom(int index) const;
  ::std::string* mutable_bottom(int index);
  void set_bottom(int index, const ::std::string& value);
  void set_bottom(int index, const char* value);
  void set_bottom(int index, const char* value, size_t size);
  ::std::string* add_bottom();
  void add_bottom(const ::std::string& value);
  void add_bottom(const char* value);
  void add_bottom(const char* value, size_t size);
  const ::google::protobuf::RepeatedPtrField< ::std::string>& bottom() const;
  ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_bottom();

  // repeated string top = 4;
  int top_size() const;
  void clear_top();
  static const int kTopFieldNumber = 4;
  const ::std::string& top(int index) const;
  ::std::string* mutable_top(int index);
  void set_top(int index, const ::std::string& value);
  void set_top(int index, const char* value);
  void set_top(int index, const char* value, size_t size);
  ::std::string* add_top();
  void add_top(const ::std::string& value);
  void add_top(const char* value);
  void add_top(const char* value, size_t size);
  const ::google::protobuf::RepeatedPtrField< ::std::string>& top() const;
  ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_top();

  // optional .caffe.Phase phase = 10;
  bool has_phase() const;
  void clear_phase();
  static const int kPhaseFieldNumber = 10;
  ::caffe::Phase phase() const;
  void set_phase(::caffe::Phase value);

  // repeated float loss_weight = 5;
  int loss_weight_size() const;
  void clear_loss_weight();
  static const int kLossWeightFieldNumber = 5;
  float loss_weight(int index) const;
  void set_loss_weight(int index, float value);
  void add_loss_weight(float value);
  const ::google::protobuf::RepeatedField< float >&
      loss_weight() const;
  ::google::protobuf::RepeatedField< float >*
      mutable_loss_weight();

  // repeated .caffe.ParamSpec param = 6;
  int param_size() const;
  void clear_param();
  static const int kParamFieldNumber = 6;
  const ::caffe::ParamSpec& param(int index) const;
  ::caffe::ParamSpec* mutable_param(int index);
  ::caffe::ParamSpec* add_param();
  ::google::protobuf::RepeatedPtrField< ::caffe::ParamSpec >*
      mutable_param();
  const ::google::protobuf::RepeatedPtrField< ::caffe::ParamSpec >&
      param() const;

  // repeated .caffe.BlobProto blobs = 7;
  int blobs_size() const;
  void clear_blobs();
  static const int kBlobsFieldNumber = 7;
  const ::caffe::BlobProto& blobs(int index) const;
  ::caffe::BlobProto* mutable_blobs(int index);
  ::caffe::BlobProto* add_blobs();
  ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto >*
      mutable_blobs();
  const ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto >&
      blobs() const;

  // repeated bool propagate_down = 11;
  int propagate_down_size() const;
  void clear_propagate_down();
  static const int kPropagateDownFieldNumber = 11;
  bool propagate_down(int index) const;
  void set_propagate_down(int index, bool value);
  void add_propagate_down(bool value);
  const ::google::protobuf::RepeatedField< bool >&
      propagate_down() const;
  ::google::protobuf::RepeatedField< bool >*
      mutable_propagate_down();

  // repeated .caffe.NetStateRule include = 8;
  int include_size() const;
  void clear_include();
  static const int kIncludeFieldNumber = 8;
  const ::caffe::NetStateRule& include(int index) const;
  ::caffe::NetStateRule* mutable_include(int index);
  ::caffe::NetStateRule* add_include();
  ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule >*
      mutable_include();
  const ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule >&
      include() const;

  // repeated .caffe.NetStateRule exclude = 9;
  int exclude_size() const;
  void clear_exclude();
  static const int kExcludeFieldNumber = 9;
  const ::caffe::NetStateRule& exclude(int index) const;
  ::caffe::NetStateRule* mutable_exclude(int index);
  ::caffe::NetStateRule* add_exclude();
  ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule >*
      mutable_exclude();
  const ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule >&
      exclude() const;

  // optional .caffe.TransformationParameter transform_param = 100;
  bool has_transform_param() const;
  void clear_transform_param();
  static const int kTransformParamFieldNumber = 100;
  const ::caffe::TransformationParameter& transform_param() const;
  ::caffe::TransformationParameter* mutable_transform_param();
  ::caffe::TransformationParameter* release_transform_param();
  void set_allocated_transform_param(::caffe::TransformationParameter* transform_param);

  // optional .caffe.LossParameter loss_param = 101;
  bool has_loss_param() const;
  void clear_loss_param();
  static const int kLossParamFieldNumber = 101;
  const ::caffe::LossParameter& loss_param() const;
  ::caffe::LossParameter* mutable_loss_param();
  ::caffe::LossParameter* release_loss_param();
  void set_allocated_loss_param(::caffe::LossParameter* loss_param);

  // optional .caffe.AccuracyParameter accuracy_param = 102;
  bool has_accuracy_param() const;
  void clear_accuracy_param();
  static const int kAccuracyParamFieldNumber = 102;
  const ::caffe::AccuracyParameter& accuracy_param() const;
  ::caffe::AccuracyParameter* mutable_accuracy_param();
  ::caffe::AccuracyParameter* release_accuracy_param();
  void set_allocated_accuracy_param(::caffe::AccuracyParameter* accuracy_param);

  // optional .caffe.ArgMaxParameter argmax_param = 103;
  bool has_argmax_param() const;
  void clear_argmax_param();
  static const int kArgmaxParamFieldNumber = 103;
  const ::caffe::ArgMaxParameter& argmax_param() const;
  ::caffe::ArgMaxParameter* mutable_argmax_param();
  ::caffe::ArgMaxParameter* release_argmax_param();
  void set_allocated_argmax_param(::caffe::ArgMaxParameter* argmax_param);

  // optional .caffe.ConcatParameter concat_param = 104;
  bool has_concat_param() const;
  void clear_concat_param();
  static const int kConcatParamFieldNumber = 104;
  const ::caffe::ConcatParameter& concat_param() const;
  ::caffe::ConcatParameter* mutable_concat_param();
  ::caffe::ConcatParameter* release_concat_param();
  void set_allocated_concat_param(::caffe::ConcatParameter* concat_param);

  // optional .caffe.ContrastiveLossParameter contrastive_loss_param = 105;
  bool has_contrastive_loss_param() const;
  void clear_contrastive_loss_param();
  static const int kContrastiveLossParamFieldNumber = 105;
  const ::caffe::ContrastiveLossParameter& contrastive_loss_param() const;
  ::caffe::ContrastiveLossParameter* mutable_contrastive_loss_param();
  ::caffe::ContrastiveLossParameter* release_contrastive_loss_param();
  void set_allocated_contrastive_loss_param(::caffe::ContrastiveLossParameter* contrastive_loss_param);

  // optional .caffe.ConvolutionParameter convolution_param = 106;
  bool has_convolution_param() const;
  void clear_convolution_param();
  static const int kConvolutionParamFieldNumber = 106;
  const ::caffe::ConvolutionParameter& convolution_param() const;
  ::caffe::ConvolutionParameter* mutable_convolution_param();
  ::caffe::ConvolutionParameter* release_convolution_param();
  void set_allocated_convolution_param(::caffe::ConvolutionParameter* convolution_param);

  // optional .caffe.CropParameter crop_param = 137;
  bool has_crop_param() const;
  void clear_crop_param();
  static const int kCropParamFieldNumber = 137;
  const ::caffe::CropParameter& crop_param() const;
  ::caffe::CropParameter* mutable_crop_param();
  ::caffe::CropParameter* release_crop_param();
  void set_allocated_crop_param(::caffe::CropParameter* crop_param);

  // optional .caffe.DataParameter data_param = 107;
  bool has_data_param() const;
  void clear_data_param();
  static const int kDataParamFieldNumber = 107;
  const ::caffe::DataParameter& data_param() const;
  ::caffe::DataParameter* mutable_data_param();
  ::caffe::DataParameter* release_data_param();
  void set_allocated_data_param(::caffe::DataParameter* data_param);

  // optional .caffe.DetectionOutputParameter detection_output_param = 141;
  bool has_detection_output_param() const;
  void clear_detection_output_param();
  static const int kDetectionOutputParamFieldNumber = 141;
  const ::caffe::DetectionOutputParameter& detection_output_param() const;
  ::caffe::DetectionOutputParameter* mutable_detection_output_param();
  ::caffe::DetectionOutputParameter* release_detection_output_param();
  void set_allocated_detection_output_param(::caffe::DetectionOutputParameter* detection_output_param);

  // optional .caffe.DropoutParameter dropout_param = 108;
  bool has_dropout_param() const;
  void clear_dropout_param();
  static const int kDropoutParamFieldNumber = 108;
  const ::caffe::DropoutParameter& dropout_param() const;
  ::caffe::DropoutParameter* mutable_dropout_param();
  ::caffe::DropoutParameter* release_dropout_param();
  void set_allocated_dropout_param(::caffe::DropoutParameter* dropout_param);

  // optional .caffe.DummyDataParameter dummy_data_param = 109;
  bool has_dummy_data_param() const;
  void clear_dummy_data_param();
  static const int kDummyDataParamFieldNumber = 109;
  const ::caffe::DummyDataParameter& dummy_data_param() const;
  ::caffe::DummyDataParameter* mutable_dummy_data_param();
  ::caffe::DummyDataParameter* release_dummy_data_param();
  void set_allocated_dummy_data_param(::caffe::DummyDataParameter* dummy_data_param);

  // optional .caffe.EltwiseParameter eltwise_param = 110;
  bool has_eltwise_param() const;
  void clear_eltwise_param();
  static const int kEltwiseParamFieldNumber = 110;
  const ::caffe::EltwiseParameter& eltwise_param() const;
  ::caffe::EltwiseParameter* mutable_eltwise_param();
  ::caffe::EltwiseParameter* release_eltwise_param();
  void set_allocated_eltwise_param(::caffe::EltwiseParameter* eltwise_param);

  // optional .caffe.ExpParameter exp_param = 111;
  bool has_exp_param() const;
  void clear_exp_param();
  static const int kExpParamFieldNumber = 111;
  const ::caffe::ExpParameter& exp_param() const;
  ::caffe::ExpParameter* mutable_exp_param();
  ::caffe::ExpParameter* release_exp_param();
  void set_allocated_exp_param(::caffe::ExpParameter* exp_param);

  // optional .caffe.FlattenParameter flatten_param = 135;
  bool has_flatten_param() const;
  void clear_flatten_param();
  static const int kFlattenParamFieldNumber = 135;
  const ::caffe::FlattenParameter& flatten_param() const;
  ::caffe::FlattenParameter* mutable_flatten_param();
  ::caffe::FlattenParameter* release_flatten_param();
  void set_allocated_flatten_param(::caffe::FlattenParameter* flatten_param);

  // optional .caffe.HDF5DataParameter hdf5_data_param = 112;
  bool has_hdf5_data_param() const;
  void clear_hdf5_data_param();
  static const int kHdf5DataParamFieldNumber = 112;
  const ::caffe::HDF5DataParameter& hdf5_data_param() const;
  ::caffe::HDF5DataParameter* mutable_hdf5_data_param();
  ::caffe::HDF5DataParameter* release_hdf5_data_param();
  void set_allocated_hdf5_data_param(::caffe::HDF5DataParameter* hdf5_data_param);

  // optional .caffe.HDF5OutputParameter hdf5_output_param = 113;
  bool has_hdf5_output_param() const;
  void clear_hdf5_output_param();
  static const int kHdf5OutputParamFieldNumber = 113;
  const ::caffe::HDF5OutputParameter& hdf5_output_param() const;
  ::caffe::HDF5OutputParameter* mutable_hdf5_output_param();
  ::caffe::HDF5OutputParameter* release_hdf5_output_param();
  void set_allocated_hdf5_output_param(::caffe::HDF5OutputParameter* hdf5_output_param);

  // optional .caffe.HingeLossParameter hinge_loss_param = 114;
  bool has_hinge_loss_param() const;
  void clear_hinge_loss_param();
  static const int kHingeLossParamFieldNumber = 114;
  const ::caffe::HingeLossParameter& hinge_loss_param() const;
  ::caffe::HingeLossParameter* mutable_hinge_loss_param();
  ::caffe::HingeLossParameter* release_hinge_loss_param();
  void set_allocated_hinge_loss_param(::caffe::HingeLossParameter* hinge_loss_param);

  // optional .caffe.ImageDataParameter image_data_param = 115;
  bool has_image_data_param() const;
  void clear_image_data_param();
  static const int kImageDataParamFieldNumber = 115;
  const ::caffe::ImageDataParameter& image_data_param() const;
  ::caffe::ImageDataParameter* mutable_image_data_param();
  ::caffe::ImageDataParameter* release_image_data_param();
  void set_allocated_image_data_param(::caffe::ImageDataParameter* image_data_param);

  // optional .caffe.InfogainLossParameter infogain_loss_param = 116;
  bool has_infogain_loss_param() const;
  void clear_infogain_loss_param();
  static const int kInfogainLossParamFieldNumber = 116;
  const ::caffe::InfogainLossParameter& infogain_loss_param() const;
  ::caffe::InfogainLossParameter* mutable_infogain_loss_param();
  ::caffe::InfogainLossParameter* release_infogain_loss_param();
  void set_allocated_infogain_loss_param(::caffe::InfogainLossParameter* infogain_loss_param);

  // optional .caffe.InnerProductParameter inner_product_param = 117;
  bool has_inner_product_param() const;
  void clear_inner_product_param();
  static const int kInnerProductParamFieldNumber = 117;
  const ::caffe::InnerProductParameter& inner_product_param() const;
  ::caffe::InnerProductParameter* mutable_inner_product_param();
  ::caffe::InnerProductParameter* release_inner_product_param();
  void set_allocated_inner_product_param(::caffe::InnerProductParameter* inner_product_param);

  // optional .caffe.LogParameter log_param = 134;
  bool has_log_param() const;
  void clear_log_param();
  static const int kLogParamFieldNumber = 134;
  const ::caffe::LogParameter& log_param() const;
  ::caffe::LogParameter* mutable_log_param();
  ::caffe::LogParameter* release_log_param();
  void set_allocated_log_param(::caffe::LogParameter* log_param);

  // optional .caffe.LRNParameter lrn_param = 118;
  bool has_lrn_param() const;
  void clear_lrn_param();
  static const int kLrnParamFieldNumber = 118;
  const ::caffe::LRNParameter& lrn_param() const;
  ::caffe::LRNParameter* mutable_lrn_param();
  ::caffe::LRNParameter* release_lrn_param();
  void set_allocated_lrn_param(::caffe::LRNParameter* lrn_param);

  // optional .caffe.MemoryDataParameter memory_data_param = 119;
  bool has_memory_data_param() const;
  void clear_memory_data_param();
  static const int kMemoryDataParamFieldNumber = 119;
  const ::caffe::MemoryDataParameter& memory_data_param() const;
  ::caffe::MemoryDataParameter* mutable_memory_data_param();
  ::caffe::MemoryDataParameter* release_memory_data_param();
  void set_allocated_memory_data_param(::caffe::MemoryDataParameter* memory_data_param);

  // optional .caffe.MVNParameter mvn_param = 120;
  bool has_mvn_param() const;
  void clear_mvn_param();
  static const int kMvnParamFieldNumber = 120;
  const ::caffe::MVNParameter& mvn_param() const;
  ::caffe::MVNParameter* mutable_mvn_param();
  ::caffe::MVNParameter* release_mvn_param();
  void set_allocated_mvn_param(::caffe::MVNParameter* mvn_param);

  // optional .caffe.NormalizeBBoxParameter normalize_bbox_param = 139;
  bool has_normalize_bbox_param() const;
  void clear_normalize_bbox_param();
  static const int kNormalizeBboxParamFieldNumber = 139;
  const ::caffe::NormalizeBBoxParameter& normalize_bbox_param() const;
  ::caffe::NormalizeBBoxParameter* mutable_normalize_bbox_param();
  ::caffe::NormalizeBBoxParameter* release_normalize_bbox_param();
  void set_allocated_normalize_bbox_param(::caffe::NormalizeBBoxParameter* normalize_bbox_param);

  // optional .caffe.PermuteParameter permute_param = 138;
  bool has_permute_param() const;
  void clear_permute_param();
  static const int kPermuteParamFieldNumber = 138;
  const ::caffe::PermuteParameter& permute_param() const;
  ::caffe::PermuteParameter* mutable_permute_param();
  ::caffe::PermuteParameter* release_permute_param();
  void set_allocated_permute_param(::caffe::PermuteParameter* permute_param);

  // optional .caffe.PoolingParameter pooling_param = 121;
  bool has_pooling_param() const;
  void clear_pooling_param();
  static const int kPoolingParamFieldNumber = 121;
  const ::caffe::PoolingParameter& pooling_param() const;
  ::caffe::PoolingParameter* mutable_pooling_param();
  ::caffe::PoolingParameter* release_pooling_param();
  void set_allocated_pooling_param(::caffe::PoolingParameter* pooling_param);

  // optional .caffe.PowerParameter power_param = 122;
  bool has_power_param() const;
  void clear_power_param();
  static const int kPowerParamFieldNumber = 122;
  const ::caffe::PowerParameter& power_param() const;
  ::caffe::PowerParameter* mutable_power_param();
  ::caffe::PowerParameter* release_power_param();
  void set_allocated_power_param(::caffe::PowerParameter* power_param);

  // optional .caffe.PReLUParameter prelu_param = 131;
  bool has_prelu_param() const;
  void clear_prelu_param();
  static const int kPreluParamFieldNumber = 131;
  const ::caffe::PReLUParameter& prelu_param() const;
  ::caffe::PReLUParameter* mutable_prelu_param();
  ::caffe::PReLUParameter* release_prelu_param();
  void set_allocated_prelu_param(::caffe::PReLUParameter* prelu_param);

  // optional .caffe.PriorBoxParameter prior_box_param = 140;
  bool has_prior_box_param() const;
  void clear_prior_box_param();
  static const int kPriorBoxParamFieldNumber = 140;
  const ::caffe::PriorBoxParameter& prior_box_param() const;
  ::caffe::PriorBoxParameter* mutable_prior_box_param();
  ::caffe::PriorBoxParameter* release_prior_box_param();
  void set_allocated_prior_box_param(::caffe::PriorBoxParameter* prior_box_param);

  // optional .caffe.PythonParameter python_param = 130;
  bool has_python_param() const;
  void clear_python_param();
  static const int kPythonParamFieldNumber = 130;
  const ::caffe::PythonParameter& python_param() const;
  ::caffe::PythonParameter* mutable_python_param();
  ::caffe::PythonParameter* release_python_param();
  void set_allocated_python_param(::caffe::PythonParameter* python_param);

  // optional .caffe.ReductionParameter reduction_param = 136;
  bool has_reduction_param() const;
  void clear_reduction_param();
  static const int kReductionParamFieldNumber = 136;
  const ::caffe::ReductionParameter& reduction_param() const;
  ::caffe::ReductionParameter* mutable_reduction_param();
  ::caffe::ReductionParameter* release_reduction_param();
  void set_allocated_reduction_param(::caffe::ReductionParameter* reduction_param);

  // optional .caffe.ReLUParameter relu_param = 123;
  bool has_relu_param() const;
  void clear_relu_param();
  static const int kReluParamFieldNumber = 123;
  const ::caffe::ReLUParameter& relu_param() const;
  ::caffe::ReLUParameter* mutable_relu_param();
  ::caffe::ReLUParameter* release_relu_param();
  void set_allocated_relu_param(::caffe::ReLUParameter* relu_param);

  // optional .caffe.ReshapeParameter reshape_param = 133;
  bool has_reshape_param() const;
  void clear_reshape_param();
  static const int kReshapeParamFieldNumber = 133;
  const ::caffe::ReshapeParameter& reshape_param() const;
  ::caffe::ReshapeParameter* mutable_reshape_param();
  ::caffe::ReshapeParameter* release_reshape_param();
  void set_allocated_reshape_param(::caffe::ReshapeParameter* reshape_param);

  // optional .caffe.SigmoidParameter sigmoid_param = 124;
  bool has_sigmoid_param() const;
  void clear_sigmoid_param();
  static const int kSigmoidParamFieldNumber = 124;
  const ::caffe::SigmoidParameter& sigmoid_param() const;
  ::caffe::SigmoidParameter* mutable_sigmoid_param();
  ::caffe::SigmoidParameter* release_sigmoid_param();
  void set_allocated_sigmoid_param(::caffe::SigmoidParameter* sigmoid_param);

  // optional .caffe.SliceParameter slice_param = 126;
  bool has_slice_param() const;
  void clear_slice_param();
  static const int kSliceParamFieldNumber = 126;
  const ::caffe::SliceParameter& slice_param() const;
  ::caffe::SliceParameter* mutable_slice_param();
  ::caffe::SliceParameter* release_slice_param();
  void set_allocated_slice_param(::caffe::SliceParameter* slice_param);

  // optional .caffe.SoftmaxParameter softmax_param = 125;
  bool has_softmax_param() const;
  void clear_softmax_param();
  static const int kSoftmaxParamFieldNumber = 125;
  const ::caffe::SoftmaxParameter& softmax_param() const;
  ::caffe::SoftmaxParameter* mutable_softmax_param();
  ::caffe::SoftmaxParameter* release_softmax_param();
  void set_allocated_softmax_param(::caffe::SoftmaxParameter* softmax_param);

  // optional .caffe.SPPParameter spp_param = 132;
  bool has_spp_param() const;
  void clear_spp_param();
  static const int kSppParamFieldNumber = 132;
  const ::caffe::SPPParameter& spp_param() const;
  ::caffe::SPPParameter* mutable_spp_param();
  ::caffe::SPPParameter* release_spp_param();
  void set_allocated_spp_param(::caffe::SPPParameter* spp_param);

  // optional .caffe.TanHParameter tanh_param = 127;
  bool has_tanh_param() const;
  void clear_tanh_param();
  static const int kTanhParamFieldNumber = 127;
  const ::caffe::TanHParameter& tanh_param() const;
  ::caffe::TanHParameter* mutable_tanh_param();
  ::caffe::TanHParameter* release_tanh_param();
  void set_allocated_tanh_param(::caffe::TanHParameter* tanh_param);

  // optional .caffe.ThresholdParameter threshold_param = 128;
  bool has_threshold_param() const;
  void clear_threshold_param();
  static const int kThresholdParamFieldNumber = 128;
  const ::caffe::ThresholdParameter& threshold_param() const;
  ::caffe::ThresholdParameter* mutable_threshold_param();
  ::caffe::ThresholdParameter* release_threshold_param();
  void set_allocated_threshold_param(::caffe::ThresholdParameter* threshold_param);

  // optional .caffe.WindowDataParameter window_data_param = 129;
  bool has_window_data_param() const;
  void clear_window_data_param();
  static const int kWindowDataParamFieldNumber = 129;
  const ::caffe::WindowDataParameter& window_data_param() const;
  ::caffe::WindowDataParameter* mutable_window_data_param();
  ::caffe::WindowDataParameter* release_window_data_param();
  void set_allocated_window_data_param(::caffe::WindowDataParameter* window_data_param);

  // @@protoc_insertion_point(class_scope:caffe.LayerParameter)
 private:
  inline void set_has_name();
  inline void clear_has_name();
  inline void set_has_type();
  inline void clear_has_type();
  inline void set_has_phase();
  inline void clear_has_phase();
  inline void set_has_transform_param();
  inline void clear_has_transform_param();
  inline void set_has_loss_param();
  inline void clear_has_loss_param();
  inline void set_has_accuracy_param();
  inline void clear_has_accuracy_param();
  inline void set_has_argmax_param();
  inline void clear_has_argmax_param();
  inline void set_has_concat_param();
  inline void clear_has_concat_param();
  inline void set_has_contrastive_loss_param();
  inline void clear_has_contrastive_loss_param();
  inline void set_has_convolution_param();
  inline void clear_has_convolution_param();
  inline void set_has_crop_param();
  inline void clear_has_crop_param();
  inline void set_has_data_param();
  inline void clear_has_data_param();
  inline void set_has_detection_output_param();
  inline void clear_has_detection_output_param();
  inline void set_has_dropout_param();
  inline void clear_has_dropout_param();
  inline void set_has_dummy_data_param();
  inline void clear_has_dummy_data_param();
  inline void set_has_eltwise_param();
  inline void clear_has_eltwise_param();
  inline void set_has_exp_param();
  inline void clear_has_exp_param();
  inline void set_has_flatten_param();
  inline void clear_has_flatten_param();
  inline void set_has_hdf5_data_param();
  inline void clear_has_hdf5_data_param();
  inline void set_has_hdf5_output_param();
  inline void clear_has_hdf5_output_param();
  inline void set_has_hinge_loss_param();
  inline void clear_has_hinge_loss_param();
  inline void set_has_image_data_param();
  inline void clear_has_image_data_param();
  inline void set_has_infogain_loss_param();
  inline void clear_has_infogain_loss_param();
  inline void set_has_inner_product_param();
  inline void clear_has_inner_product_param();
  inline void set_has_log_param();
  inline void clear_has_log_param();
  inline void set_has_lrn_param();
  inline void clear_has_lrn_param();
  inline void set_has_memory_data_param();
  inline void clear_has_memory_data_param();
  inline void set_has_mvn_param();
  inline void clear_has_mvn_param();
  inline void set_has_normalize_bbox_param();
  inline void clear_has_normalize_bbox_param();
  inline void set_has_permute_param();
  inline void clear_has_permute_param();
  inline void set_has_pooling_param();
  inline void clear_has_pooling_param();
  inline void set_has_power_param();
  inline void clear_has_power_param();
  inline void set_has_prelu_param();
  inline void clear_has_prelu_param();
  inline void set_has_prior_box_param();
  inline void clear_has_prior_box_param();
  inline void set_has_python_param();
  inline void clear_has_python_param();
  inline void set_has_reduction_param();
  inline void clear_has_reduction_param();
  inline void set_has_relu_param();
  inline void clear_has_relu_param();
  inline void set_has_reshape_param();
  inline void clear_has_reshape_param();
  inline void set_has_sigmoid_param();
  inline void clear_has_sigmoid_param();
  inline void set_has_slice_param();
  inline void clear_has_slice_param();
  inline void set_has_softmax_param();
  inline void clear_has_softmax_param();
  inline void set_has_spp_param();
  inline void clear_has_spp_param();
  inline void set_has_tanh_param();
  inline void clear_has_tanh_param();
  inline void set_has_threshold_param();
  inline void clear_has_threshold_param();
  inline void set_has_window_data_param();
  inline void clear_has_window_data_param();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<2> _has_bits_;
  ::google::protobuf::RepeatedPtrField< ::std::string> bottom_;
  ::google::protobuf::RepeatedPtrField< ::std::string> top_;
  ::google::protobuf::RepeatedField< float > loss_weight_;
  ::google::protobuf::RepeatedPtrField< ::caffe::ParamSpec > param_;
  ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto > blobs_;
  ::google::protobuf::RepeatedField< bool > propagate_down_;
  ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule > include_;
  ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule > exclude_;
  ::google::protobuf::internal::ArenaStringPtr name_;
  ::google::protobuf::internal::ArenaStringPtr type_;
  ::caffe::TransformationParameter* transform_param_;
  ::caffe::LossParameter* loss_param_;
  ::caffe::AccuracyParameter* accuracy_param_;
  ::caffe::ArgMaxParameter* argmax_param_;
  ::caffe::ConcatParameter* concat_param_;
  ::caffe::ContrastiveLossParameter* contrastive_loss_param_;
  ::caffe::ConvolutionParameter* convolution_param_;
  ::caffe::CropParameter* crop_param_;
  ::caffe::DataParameter* data_param_;
  ::caffe::DetectionOutputParameter* detection_output_param_;
  ::caffe::DropoutParameter* dropout_param_;
  ::caffe::DummyDataParameter* dummy_data_param_;
  ::caffe::EltwiseParameter* eltwise_param_;
  ::caffe::ExpParameter* exp_param_;
  ::caffe::FlattenParameter* flatten_param_;
  ::caffe::HDF5DataParameter* hdf5_data_param_;
  ::caffe::HDF5OutputParameter* hdf5_output_param_;
  ::caffe::HingeLossParameter* hinge_loss_param_;
  ::caffe::ImageDataParameter* image_data_param_;
  ::caffe::InfogainLossParameter* infogain_loss_param_;
  ::caffe::InnerProductParameter* inner_product_param_;
  ::caffe::LogParameter* log_param_;
  ::caffe::LRNParameter* lrn_param_;
  ::caffe::MemoryDataParameter* memory_data_param_;
  ::caffe::MVNParameter* mvn_param_;
  ::caffe::NormalizeBBoxParameter* normalize_bbox_param_;
  ::caffe::PermuteParameter* permute_param_;
  ::caffe::PoolingParameter* pooling_param_;
  ::caffe::PowerParameter* power_param_;
  ::caffe::PReLUParameter* prelu_param_;
  ::caffe::PriorBoxParameter* prior_box_param_;
  ::caffe::PythonParameter* python_param_;
  ::caffe::ReductionParameter* reduction_param_;
  ::caffe::ReLUParameter* relu_param_;
  ::caffe::ReshapeParameter* reshape_param_;
  ::caffe::SigmoidParameter* sigmoid_param_;
  ::caffe::SliceParameter* slice_param_;
  ::caffe::SoftmaxParameter* softmax_param_;
  ::caffe::SPPParameter* spp_param_;
  ::caffe::TanHParameter* tanh_param_;
  ::caffe::ThresholdParameter* threshold_param_;
  ::caffe::WindowDataParameter* window_data_param_;
  int phase_;
  mutable int _cached_size_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<LayerParameter> LayerParameter_default_instance_;

// -------------------------------------------------------------------

class TransformationParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.TransformationParameter) */ {
 public:
  TransformationParameter();
  virtual ~TransformationParameter();

  TransformationParameter(const TransformationParameter& from);

  inline TransformationParameter& operator=(const TransformationParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const TransformationParameter& default_instance();

  static const TransformationParameter* internal_default_instance();

  void Swap(TransformationParameter* other);

  // implements Message ----------------------------------------------

  inline TransformationParameter* New() const { return New(NULL); }

  TransformationParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const TransformationParameter& from);
  void MergeFrom(const TransformationParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(TransformationParameter* other);
  void UnsafeMergeFrom(const TransformationParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional float scale = 1 [default = 1];
  bool has_scale() const;
  void clear_scale();
  static const int kScaleFieldNumber = 1;
  float scale() const;
  void set_scale(float value);

  // optional bool mirror = 2 [default = false];
  bool has_mirror() const;
  void clear_mirror();
  static const int kMirrorFieldNumber = 2;
  bool mirror() const;
  void set_mirror(bool value);

  // optional uint32 crop_size = 3 [default = 0];
  bool has_crop_size() const;
  void clear_crop_size();
  static const int kCropSizeFieldNumber = 3;
  ::google::protobuf::uint32 crop_size() const;
  void set_crop_size(::google::protobuf::uint32 value);

  // optional string mean_file = 4;
  bool has_mean_file() const;
  void clear_mean_file();
  static const int kMeanFileFieldNumber = 4;
  const ::std::string& mean_file() const;
  void set_mean_file(const ::std::string& value);
  void set_mean_file(const char* value);
  void set_mean_file(const char* value, size_t size);
  ::std::string* mutable_mean_file();
  ::std::string* release_mean_file();
  void set_allocated_mean_file(::std::string* mean_file);

  // repeated float mean_value = 5;
  int mean_value_size() const;
  void clear_mean_value();
  static const int kMeanValueFieldNumber = 5;
  float mean_value(int index) const;
  void set_mean_value(int index, float value);
  void add_mean_value(float value);
  const ::google::protobuf::RepeatedField< float >&
      mean_value() const;
  ::google::protobuf::RepeatedField< float >*
      mutable_mean_value();

  // optional bool force_color = 6 [default = false];
  bool has_force_color() const;
  void clear_force_color();
  static const int kForceColorFieldNumber = 6;
  bool force_color() const;
  void set_force_color(bool value);

  // optional bool force_gray = 7 [default = false];
  bool has_force_gray() const;
  void clear_force_gray();
  static const int kForceGrayFieldNumber = 7;
  bool force_gray() const;
  void set_force_gray(bool value);

  // @@protoc_insertion_point(class_scope:caffe.TransformationParameter)
 private:
  inline void set_has_scale();
  inline void clear_has_scale();
  inline void set_has_mirror();
  inline void clear_has_mirror();
  inline void set_has_crop_size();
  inline void clear_has_crop_size();
  inline void set_has_mean_file();
  inline void clear_has_mean_file();
  inline void set_has_force_color();
  inline void clear_has_force_color();
  inline void set_has_force_gray();
  inline void clear_has_force_gray();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::RepeatedField< float > mean_value_;
  ::google::protobuf::internal::ArenaStringPtr mean_file_;
  ::google::protobuf::uint32 crop_size_;
  bool mirror_;
  bool force_color_;
  bool force_gray_;
  float scale_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<TransformationParameter> TransformationParameter_default_instance_;

// -------------------------------------------------------------------

class LossParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.LossParameter) */ {
 public:
  LossParameter();
  virtual ~LossParameter();

  LossParameter(const LossParameter& from);

  inline LossParameter& operator=(const LossParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const LossParameter& default_instance();

  static const LossParameter* internal_default_instance();

  void Swap(LossParameter* other);

  // implements Message ----------------------------------------------

  inline LossParameter* New() const { return New(NULL); }

  LossParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const LossParameter& from);
  void MergeFrom(const LossParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(LossParameter* other);
  void UnsafeMergeFrom(const LossParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional int32 ignore_label = 1;
  bool has_ignore_label() const;
  void clear_ignore_label();
  static const int kIgnoreLabelFieldNumber = 1;
  ::google::protobuf::int32 ignore_label() const;
  void set_ignore_label(::google::protobuf::int32 value);

  // optional bool normalize = 2 [default = true];
  bool has_normalize() const;
  void clear_normalize();
  static const int kNormalizeFieldNumber = 2;
  bool normalize() const;
  void set_normalize(bool value);

  // @@protoc_insertion_point(class_scope:caffe.LossParameter)
 private:
  inline void set_has_ignore_label();
  inline void clear_has_ignore_label();
  inline void set_has_normalize();
  inline void clear_has_normalize();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::int32 ignore_label_;
  bool normalize_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<LossParameter> LossParameter_default_instance_;

// -------------------------------------------------------------------

class AccuracyParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.AccuracyParameter) */ {
 public:
  AccuracyParameter();
  virtual ~AccuracyParameter();

  AccuracyParameter(const AccuracyParameter& from);

  inline AccuracyParameter& operator=(const AccuracyParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const AccuracyParameter& default_instance();

  static const AccuracyParameter* internal_default_instance();

  void Swap(AccuracyParameter* other);

  // implements Message ----------------------------------------------

  inline AccuracyParameter* New() const { return New(NULL); }

  AccuracyParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const AccuracyParameter& from);
  void MergeFrom(const AccuracyParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(AccuracyParameter* other);
  void UnsafeMergeFrom(const AccuracyParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional uint32 top_k = 1 [default = 1];
  bool has_top_k() const;
  void clear_top_k();
  static const int kTopKFieldNumber = 1;
  ::google::protobuf::uint32 top_k() const;
  void set_top_k(::google::protobuf::uint32 value);

  // optional int32 axis = 2 [default = 1];
  bool has_axis() const;
  void clear_axis();
  static const int kAxisFieldNumber = 2;
  ::google::protobuf::int32 axis() const;
  void set_axis(::google::protobuf::int32 value);

  // optional int32 ignore_label = 3;
  bool has_ignore_label() const;
  void clear_ignore_label();
  static const int kIgnoreLabelFieldNumber = 3;
  ::google::protobuf::int32 ignore_label() const;
  void set_ignore_label(::google::protobuf::int32 value);

  // @@protoc_insertion_point(class_scope:caffe.AccuracyParameter)
 private:
  inline void set_has_top_k();
  inline void clear_has_top_k();
  inline void set_has_axis();
  inline void clear_has_axis();
  inline void set_has_ignore_label();
  inline void clear_has_ignore_label();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::int32 ignore_label_;
  ::google::protobuf::uint32 top_k_;
  ::google::protobuf::int32 axis_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<AccuracyParameter> AccuracyParameter_default_instance_;

// -------------------------------------------------------------------

class ArgMaxParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.ArgMaxParameter) */ {
 public:
  ArgMaxParameter();
  virtual ~ArgMaxParameter();

  ArgMaxParameter(const ArgMaxParameter& from);

  inline ArgMaxParameter& operator=(const ArgMaxParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const ArgMaxParameter& default_instance();

  static const ArgMaxParameter* internal_default_instance();

  void Swap(ArgMaxParameter* other);

  // implements Message ----------------------------------------------

  inline ArgMaxParameter* New() const { return New(NULL); }

  ArgMaxParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const ArgMaxParameter& from);
  void MergeFrom(const ArgMaxParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(ArgMaxParameter* other);
  void UnsafeMergeFrom(const ArgMaxParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional bool out_max_val = 1 [default = false];
  bool has_out_max_val() const;
  void clear_out_max_val();
  static const int kOutMaxValFieldNumber = 1;
  bool out_max_val() const;
  void set_out_max_val(bool value);

  // optional uint32 top_k = 2 [default = 1];
  bool has_top_k() const;
  void clear_top_k();
  static const int kTopKFieldNumber = 2;
  ::google::protobuf::uint32 top_k() const;
  void set_top_k(::google::protobuf::uint32 value);

  // @@protoc_insertion_point(class_scope:caffe.ArgMaxParameter)
 private:
  inline void set_has_out_max_val();
  inline void clear_has_out_max_val();
  inline void set_has_top_k();
  inline void clear_has_top_k();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  bool out_max_val_;
  ::google::protobuf::uint32 top_k_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<ArgMaxParameter> ArgMaxParameter_default_instance_;

// -------------------------------------------------------------------

class ConcatParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.ConcatParameter) */ {
 public:
  ConcatParameter();
  virtual ~ConcatParameter();

  ConcatParameter(const ConcatParameter& from);

  inline ConcatParameter& operator=(const ConcatParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const ConcatParameter& default_instance();

  static const ConcatParameter* internal_default_instance();

  void Swap(ConcatParameter* other);

  // implements Message ----------------------------------------------

  inline ConcatParameter* New() const { return New(NULL); }

  ConcatParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const ConcatParameter& from);
  void MergeFrom(const ConcatParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(ConcatParameter* other);
  void UnsafeMergeFrom(const ConcatParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional int32 axis = 2 [default = 1];
  bool has_axis() const;
  void clear_axis();
  static const int kAxisFieldNumber = 2;
  ::google::protobuf::int32 axis() const;
  void set_axis(::google::protobuf::int32 value);

  // optional uint32 concat_dim = 1 [default = 1];
  bool has_concat_dim() const;
  void clear_concat_dim();
  static const int kConcatDimFieldNumber = 1;
  ::google::protobuf::uint32 concat_dim() const;
  void set_concat_dim(::google::protobuf::uint32 value);

  // @@protoc_insertion_point(class_scope:caffe.ConcatParameter)
 private:
  inline void set_has_axis();
  inline void clear_has_axis();
  inline void set_has_concat_dim();
  inline void clear_has_concat_dim();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::int32 axis_;
  ::google::protobuf::uint32 concat_dim_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<ConcatParameter> ConcatParameter_default_instance_;

// -------------------------------------------------------------------

class ContrastiveLossParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.ContrastiveLossParameter) */ {
 public:
  ContrastiveLossParameter();
  virtual ~ContrastiveLossParameter();

  ContrastiveLossParameter(const ContrastiveLossParameter& from);

  inline ContrastiveLossParameter& operator=(const ContrastiveLossParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const ContrastiveLossParameter& default_instance();

  static const ContrastiveLossParameter* internal_default_instance();

  void Swap(ContrastiveLossParameter* other);

  // implements Message ----------------------------------------------

  inline ContrastiveLossParameter* New() const { return New(NULL); }

  ContrastiveLossParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const ContrastiveLossParameter& from);
  void MergeFrom(const ContrastiveLossParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(ContrastiveLossParameter* other);
  void UnsafeMergeFrom(const ContrastiveLossParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional float margin = 1 [default = 1];
  bool has_margin() const;
  void clear_margin();
  static const int kMarginFieldNumber = 1;
  float margin() const;
  void set_margin(float value);

  // optional bool legacy_version = 2 [default = false];
  bool has_legacy_version() const;
  void clear_legacy_version();
  static const int kLegacyVersionFieldNumber = 2;
  bool legacy_version() const;
  void set_legacy_version(bool value);

  // @@protoc_insertion_point(class_scope:caffe.ContrastiveLossParameter)
 private:
  inline void set_has_margin();
  inline void clear_has_margin();
  inline void set_has_legacy_version();
  inline void clear_has_legacy_version();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  bool legacy_version_;
  float margin_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<ContrastiveLossParameter> ContrastiveLossParameter_default_instance_;

// -------------------------------------------------------------------

class ConvolutionParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.ConvolutionParameter) */ {
 public:
  ConvolutionParameter();
  virtual ~ConvolutionParameter();

  ConvolutionParameter(const ConvolutionParameter& from);

  inline ConvolutionParameter& operator=(const ConvolutionParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const ConvolutionParameter& default_instance();

  static const ConvolutionParameter* internal_default_instance();

  void Swap(ConvolutionParameter* other);

  // implements Message ----------------------------------------------

  inline ConvolutionParameter* New() const { return New(NULL); }

  ConvolutionParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const ConvolutionParameter& from);
  void MergeFrom(const ConvolutionParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(ConvolutionParameter* other);
  void UnsafeMergeFrom(const ConvolutionParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  typedef ConvolutionParameter_Engine Engine;
  static const Engine DEFAULT =
    ConvolutionParameter_Engine_DEFAULT;
  static const Engine CAFFE =
    ConvolutionParameter_Engine_CAFFE;
  static const Engine CUDNN =
    ConvolutionParameter_Engine_CUDNN;
  static inline bool Engine_IsValid(int value) {
    return ConvolutionParameter_Engine_IsValid(value);
  }
  static const Engine Engine_MIN =
    ConvolutionParameter_Engine_Engine_MIN;
  static const Engine Engine_MAX =
    ConvolutionParameter_Engine_Engine_MAX;
  static const int Engine_ARRAYSIZE =
    ConvolutionParameter_Engine_Engine_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  Engine_descriptor() {
    return ConvolutionParameter_Engine_descriptor();
  }
  static inline const ::std::string& Engine_Name(Engine value) {
    return ConvolutionParameter_Engine_Name(value);
  }
  static inline bool Engine_Parse(const ::std::string& name,
      Engine* value) {
    return ConvolutionParameter_Engine_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // optional uint32 num_output = 1;
  bool has_num_output() const;
  void clear_num_output();
  static const int kNumOutputFieldNumber = 1;
  ::google::protobuf::uint32 num_output() const;
  void set_num_output(::google::protobuf::uint32 value);

  // optional bool bias_term = 2 [default = true];
  bool has_bias_term() const;
  void clear_bias_term();
  static const int kBiasTermFieldNumber = 2;
  bool bias_term() const;
  void set_bias_term(bool value);

  // optional uint32 pad = 3 [default = 0];
  bool has_pad() const;
  void clear_pad();
  static const int kPadFieldNumber = 3;
  ::google::protobuf::uint32 pad() const;
  void set_pad(::google::protobuf::uint32 value);

  // optional uint32 pad_h = 9 [default = 0];
  bool has_pad_h() const;
  void clear_pad_h();
  static const int kPadHFieldNumber = 9;
  ::google::protobuf::uint32 pad_h() const;
  void set_pad_h(::google::protobuf::uint32 value);

  // optional uint32 pad_w = 10 [default = 0];
  bool has_pad_w() const;
  void clear_pad_w();
  static const int kPadWFieldNumber = 10;
  ::google::protobuf::uint32 pad_w() const;
  void set_pad_w(::google::protobuf::uint32 value);

  // optional uint32 kernel_size = 4;
  bool has_kernel_size() const;
  void clear_kernel_size();
  static const int kKernelSizeFieldNumber = 4;
  ::google::protobuf::uint32 kernel_size() const;
  void set_kernel_size(::google::protobuf::uint32 value);

  // optional uint32 kernel_h = 11;
  bool has_kernel_h() const;
  void clear_kernel_h();
  static const int kKernelHFieldNumber = 11;
  ::google::protobuf::uint32 kernel_h() const;
  void set_kernel_h(::google::protobuf::uint32 value);

  // optional uint32 kernel_w = 12;
  bool has_kernel_w() const;
  void clear_kernel_w();
  static const int kKernelWFieldNumber = 12;
  ::google::protobuf::uint32 kernel_w() const;
  void set_kernel_w(::google::protobuf::uint32 value);

  // optional uint32 group = 5 [default = 1];
  bool has_group() const;
  void clear_group();
  static const int kGroupFieldNumber = 5;
  ::google::protobuf::uint32 group() const;
  void set_group(::google::protobuf::uint32 value);

  // optional uint32 stride = 6 [default = 1];
  bool has_stride() const;
  void clear_stride();
  static const int kStrideFieldNumber = 6;
  ::google::protobuf::uint32 stride() const;
  void set_stride(::google::protobuf::uint32 value);

  // optional uint32 stride_h = 13;
  bool has_stride_h() const;
  void clear_stride_h();
  static const int kStrideHFieldNumber = 13;
  ::google::protobuf::uint32 stride_h() const;
  void set_stride_h(::google::protobuf::uint32 value);

  // optional uint32 stride_w = 14;
  bool has_stride_w() const;
  void clear_stride_w();
  static const int kStrideWFieldNumber = 14;
  ::google::protobuf::uint32 stride_w() const;
  void set_stride_w(::google::protobuf::uint32 value);

  // optional .caffe.FillerParameter weight_filler = 7;
  bool has_weight_filler() const;
  void clear_weight_filler();
  static const int kWeightFillerFieldNumber = 7;
  const ::caffe::FillerParameter& weight_filler() const;
  ::caffe::FillerParameter* mutable_weight_filler();
  ::caffe::FillerParameter* release_weight_filler();
  void set_allocated_weight_filler(::caffe::FillerParameter* weight_filler);

  // optional .caffe.FillerParameter bias_filler = 8;
  bool has_bias_filler() const;
  void clear_bias_filler();
  static const int kBiasFillerFieldNumber = 8;
  const ::caffe::FillerParameter& bias_filler() const;
  ::caffe::FillerParameter* mutable_bias_filler();
  ::caffe::FillerParameter* release_bias_filler();
  void set_allocated_bias_filler(::caffe::FillerParameter* bias_filler);

  // optional .caffe.ConvolutionParameter.Engine engine = 15 [default = DEFAULT];
  bool has_engine() const;
  void clear_engine();
  static const int kEngineFieldNumber = 15;
  ::caffe::ConvolutionParameter_Engine engine() const;
  void set_engine(::caffe::ConvolutionParameter_Engine value);

  // optional uint32 dilation_h = 18;
  bool has_dilation_h() const;
  void clear_dilation_h();
  static const int kDilationHFieldNumber = 18;
  ::google::protobuf::uint32 dilation_h() const;
  void set_dilation_h(::google::protobuf::uint32 value);

  // optional uint32 dilation_w = 19;
  bool has_dilation_w() const;
  void clear_dilation_w();
  static const int kDilationWFieldNumber = 19;
  ::google::protobuf::uint32 dilation_w() const;
  void set_dilation_w(::google::protobuf::uint32 value);

  // optional uint32 dilation = 20;
  bool has_dilation() const;
  void clear_dilation();
  static const int kDilationFieldNumber = 20;
  ::google::protobuf::uint32 dilation() const;
  void set_dilation(::google::protobuf::uint32 value);

  // @@protoc_insertion_point(class_scope:caffe.ConvolutionParameter)
 private:
  inline void set_has_num_output();
  inline void clear_has_num_output();
  inline void set_has_bias_term();
  inline void clear_has_bias_term();
  inline void set_has_pad();
  inline void clear_has_pad();
  inline void set_has_pad_h();
  inline void clear_has_pad_h();
  inline void set_has_pad_w();
  inline void clear_has_pad_w();
  inline void set_has_kernel_size();
  inline void clear_has_kernel_size();
  inline void set_has_kernel_h();
  inline void clear_has_kernel_h();
  inline void set_has_kernel_w();
  inline void clear_has_kernel_w();
  inline void set_has_group();
  inline void clear_has_group();
  inline void set_has_stride();
  inline void clear_has_stride();
  inline void set_has_stride_h();
  inline void clear_has_stride_h();
  inline void set_has_stride_w();
  inline void clear_has_stride_w();
  inline void set_has_weight_filler();
  inline void clear_has_weight_filler();
  inline void set_has_bias_filler();
  inline void clear_has_bias_filler();
  inline void set_has_engine();
  inline void clear_has_engine();
  inline void set_has_dilation_h();
  inline void clear_has_dilation_h();
  inline void set_has_dilation_w();
  inline void clear_has_dilation_w();
  inline void set_has_dilation();
  inline void clear_has_dilation();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::caffe::FillerParameter* weight_filler_;
  ::caffe::FillerParameter* bias_filler_;
  ::google::protobuf::uint32 num_output_;
  ::google::protobuf::uint32 pad_;
  ::google::protobuf::uint32 pad_h_;
  ::google::protobuf::uint32 pad_w_;
  ::google::protobuf::uint32 kernel_size_;
  ::google::protobuf::uint32 kernel_h_;
  ::google::protobuf::uint32 kernel_w_;
  ::google::protobuf::uint32 stride_h_;
  ::google::protobuf::uint32 stride_w_;
  int engine_;
  ::google::protobuf::uint32 dilation_h_;
  ::google::protobuf::uint32 dilation_w_;
  ::google::protobuf::uint32 dilation_;
  ::google::protobuf::uint32 stride_;
  bool bias_term_;
  ::google::protobuf::uint32 group_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<ConvolutionParameter> ConvolutionParameter_default_instance_;

// -------------------------------------------------------------------

class DataParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.DataParameter) */ {
 public:
  DataParameter();
  virtual ~DataParameter();

  DataParameter(const DataParameter& from);

  inline DataParameter& operator=(const DataParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const DataParameter& default_instance();

  static const DataParameter* internal_default_instance();

  void Swap(DataParameter* other);

  // implements Message ----------------------------------------------

  inline DataParameter* New() const { return New(NULL); }

  DataParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const DataParameter& from);
  void MergeFrom(const DataParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(DataParameter* other);
  void UnsafeMergeFrom(const DataParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  typedef DataParameter_DB DB;
  static const DB LEVELDB =
    DataParameter_DB_LEVELDB;
  static const DB LMDB =
    DataParameter_DB_LMDB;
  static inline bool DB_IsValid(int value) {
    return DataParameter_DB_IsValid(value);
  }
  static const DB DB_MIN =
    DataParameter_DB_DB_MIN;
  static const DB DB_MAX =
    DataParameter_DB_DB_MAX;
  static const int DB_ARRAYSIZE =
    DataParameter_DB_DB_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  DB_descriptor() {
    return DataParameter_DB_descriptor();
  }
  static inline const ::std::string& DB_Name(DB value) {
    return DataParameter_DB_Name(value);
  }
  static inline bool DB_Parse(const ::std::string& name,
      DB* value) {
    return DataParameter_DB_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // optional string source = 1;
  bool has_source() const;
  void clear_source();
  static const int kSourceFieldNumber = 1;
  const ::std::string& source() const;
  void set_source(const ::std::string& value);
  void set_source(const char* value);
  void set_source(const char* value, size_t size);
  ::std::string* mutable_source();
  ::std::string* release_source();
  void set_allocated_source(::std::string* source);

  // optional uint32 batch_size = 4;
  bool has_batch_size() const;
  void clear_batch_size();
  static const int kBatchSizeFieldNumber = 4;
  ::google::protobuf::uint32 batch_size() const;
  void set_batch_size(::google::protobuf::uint32 value);

  // optional uint32 rand_skip = 7 [default = 0];
  bool has_rand_skip() const;
  void clear_rand_skip();
  static const int kRandSkipFieldNumber = 7;
  ::google::protobuf::uint32 rand_skip() const;
  void set_rand_skip(::google::protobuf::uint32 value);

  // optional .caffe.DataParameter.DB backend = 8 [default = LEVELDB];
  bool has_backend() const;
  void clear_backend();
  static const int kBackendFieldNumber = 8;
  ::caffe::DataParameter_DB backend() const;
  void set_backend(::caffe::DataParameter_DB value);

  // optional float scale = 2 [default = 1];
  bool has_scale() const;
  void clear_scale();
  static const int kScaleFieldNumber = 2;
  float scale() const;
  void set_scale(float value);

  // optional string mean_file = 3;
  bool has_mean_file() const;
  void clear_mean_file();
  static const int kMeanFileFieldNumber = 3;
  const ::std::string& mean_file() const;
  void set_mean_file(const ::std::string& value);
  void set_mean_file(const char* value);
  void set_mean_file(const char* value, size_t size);
  ::std::string* mutable_mean_file();
  ::std::string* release_mean_file();
  void set_allocated_mean_file(::std::string* mean_file);

  // optional uint32 crop_size = 5 [default = 0];
  bool has_crop_size() const;
  void clear_crop_size();
  static const int kCropSizeFieldNumber = 5;
  ::google::protobuf::uint32 crop_size() const;
  void set_crop_size(::google::protobuf::uint32 value);

  // optional bool mirror = 6 [default = false];
  bool has_mirror() const;
  void clear_mirror();
  static const int kMirrorFieldNumber = 6;
  bool mirror() const;
  void set_mirror(bool value);

  // optional bool force_encoded_color = 9 [default = false];
  bool has_force_encoded_color() const;
  void clear_force_encoded_color();
  static const int kForceEncodedColorFieldNumber = 9;
  bool force_encoded_color() const;
  void set_force_encoded_color(bool value);

  // @@protoc_insertion_point(class_scope:caffe.DataParameter)
 private:
  inline void set_has_source();
  inline void clear_has_source();
  inline void set_has_batch_size();
  inline void clear_has_batch_size();
  inline void set_has_rand_skip();
  inline void clear_has_rand_skip();
  inline void set_has_backend();
  inline void clear_has_backend();
  inline void set_has_scale();
  inline void clear_has_scale();
  inline void set_has_mean_file();
  inline void clear_has_mean_file();
  inline void set_has_crop_size();
  inline void clear_has_crop_size();
  inline void set_has_mirror();
  inline void clear_has_mirror();
  inline void set_has_force_encoded_color();
  inline void clear_has_force_encoded_color();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::internal::ArenaStringPtr source_;
  ::google::protobuf::internal::ArenaStringPtr mean_file_;
  ::google::protobuf::uint32 batch_size_;
  ::google::protobuf::uint32 rand_skip_;
  int backend_;
  ::google::protobuf::uint32 crop_size_;
  bool mirror_;
  bool force_encoded_color_;
  float scale_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<DataParameter> DataParameter_default_instance_;

// -------------------------------------------------------------------

class DropoutParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.DropoutParameter) */ {
 public:
  DropoutParameter();
  virtual ~DropoutParameter();

  DropoutParameter(const DropoutParameter& from);

  inline DropoutParameter& operator=(const DropoutParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const DropoutParameter& default_instance();

  static const DropoutParameter* internal_default_instance();

  void Swap(DropoutParameter* other);

  // implements Message ----------------------------------------------

  inline DropoutParameter* New() const { return New(NULL); }

  DropoutParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const DropoutParameter& from);
  void MergeFrom(const DropoutParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(DropoutParameter* other);
  void UnsafeMergeFrom(const DropoutParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional float dropout_ratio = 1 [default = 0.5];
  bool has_dropout_ratio() const;
  void clear_dropout_ratio();
  static const int kDropoutRatioFieldNumber = 1;
  float dropout_ratio() const;
  void set_dropout_ratio(float value);

  // @@protoc_insertion_point(class_scope:caffe.DropoutParameter)
 private:
  inline void set_has_dropout_ratio();
  inline void clear_has_dropout_ratio();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  float dropout_ratio_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<DropoutParameter> DropoutParameter_default_instance_;

// -------------------------------------------------------------------

class DummyDataParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.DummyDataParameter) */ {
 public:
  DummyDataParameter();
  virtual ~DummyDataParameter();

  DummyDataParameter(const DummyDataParameter& from);

  inline DummyDataParameter& operator=(const DummyDataParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const DummyDataParameter& default_instance();

  static const DummyDataParameter* internal_default_instance();

  void Swap(DummyDataParameter* other);

  // implements Message ----------------------------------------------

  inline DummyDataParameter* New() const { return New(NULL); }

  DummyDataParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const DummyDataParameter& from);
  void MergeFrom(const DummyDataParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(DummyDataParameter* other);
  void UnsafeMergeFrom(const DummyDataParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // repeated .caffe.FillerParameter data_filler = 1;
  int data_filler_size() const;
  void clear_data_filler();
  static const int kDataFillerFieldNumber = 1;
  const ::caffe::FillerParameter& data_filler(int index) const;
  ::caffe::FillerParameter* mutable_data_filler(int index);
  ::caffe::FillerParameter* add_data_filler();
  ::google::protobuf::RepeatedPtrField< ::caffe::FillerParameter >*
      mutable_data_filler();
  const ::google::protobuf::RepeatedPtrField< ::caffe::FillerParameter >&
      data_filler() const;

  // repeated .caffe.BlobShape shape = 6;
  int shape_size() const;
  void clear_shape();
  static const int kShapeFieldNumber = 6;
  const ::caffe::BlobShape& shape(int index) const;
  ::caffe::BlobShape* mutable_shape(int index);
  ::caffe::BlobShape* add_shape();
  ::google::protobuf::RepeatedPtrField< ::caffe::BlobShape >*
      mutable_shape();
  const ::google::protobuf::RepeatedPtrField< ::caffe::BlobShape >&
      shape() const;

  // repeated uint32 num = 2;
  int num_size() const;
  void clear_num();
  static const int kNumFieldNumber = 2;
  ::google::protobuf::uint32 num(int index) const;
  void set_num(int index, ::google::protobuf::uint32 value);
  void add_num(::google::protobuf::uint32 value);
  const ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >&
      num() const;
  ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >*
      mutable_num();

  // repeated uint32 channels = 3;
  int channels_size() const;
  void clear_channels();
  static const int kChannelsFieldNumber = 3;
  ::google::protobuf::uint32 channels(int index) const;
  void set_channels(int index, ::google::protobuf::uint32 value);
  void add_channels(::google::protobuf::uint32 value);
  const ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >&
      channels() const;
  ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >*
      mutable_channels();

  // repeated uint32 height = 4;
  int height_size() const;
  void clear_height();
  static const int kHeightFieldNumber = 4;
  ::google::protobuf::uint32 height(int index) const;
  void set_height(int index, ::google::protobuf::uint32 value);
  void add_height(::google::protobuf::uint32 value);
  const ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >&
      height() const;
  ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >*
      mutable_height();

  // repeated uint32 width = 5;
  int width_size() const;
  void clear_width();
  static const int kWidthFieldNumber = 5;
  ::google::protobuf::uint32 width(int index) const;
  void set_width(int index, ::google::protobuf::uint32 value);
  void add_width(::google::protobuf::uint32 value);
  const ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >&
      width() const;
  ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >*
      mutable_width();

  // @@protoc_insertion_point(class_scope:caffe.DummyDataParameter)
 private:

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::RepeatedPtrField< ::caffe::FillerParameter > data_filler_;
  ::google::protobuf::RepeatedPtrField< ::caffe::BlobShape > shape_;
  ::google::protobuf::RepeatedField< ::google::protobuf::uint32 > num_;
  ::google::protobuf::RepeatedField< ::google::protobuf::uint32 > channels_;
  ::google::protobuf::RepeatedField< ::google::protobuf::uint32 > height_;
  ::google::protobuf::RepeatedField< ::google::protobuf::uint32 > width_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<DummyDataParameter> DummyDataParameter_default_instance_;

// -------------------------------------------------------------------

class EltwiseParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.EltwiseParameter) */ {
 public:
  EltwiseParameter();
  virtual ~EltwiseParameter();

  EltwiseParameter(const EltwiseParameter& from);

  inline EltwiseParameter& operator=(const EltwiseParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const EltwiseParameter& default_instance();

  static const EltwiseParameter* internal_default_instance();

  void Swap(EltwiseParameter* other);

  // implements Message ----------------------------------------------

  inline EltwiseParameter* New() const { return New(NULL); }

  EltwiseParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const EltwiseParameter& from);
  void MergeFrom(const EltwiseParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(EltwiseParameter* other);
  void UnsafeMergeFrom(const EltwiseParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  typedef EltwiseParameter_EltwiseOp EltwiseOp;
  static const EltwiseOp PROD =
    EltwiseParameter_EltwiseOp_PROD;
  static const EltwiseOp SUM =
    EltwiseParameter_EltwiseOp_SUM;
  static const EltwiseOp MAX =
    EltwiseParameter_EltwiseOp_MAX;
  static inline bool EltwiseOp_IsValid(int value) {
    return EltwiseParameter_EltwiseOp_IsValid(value);
  }
  static const EltwiseOp EltwiseOp_MIN =
    EltwiseParameter_EltwiseOp_EltwiseOp_MIN;
  static const EltwiseOp EltwiseOp_MAX =
    EltwiseParameter_EltwiseOp_EltwiseOp_MAX;
  static const int EltwiseOp_ARRAYSIZE =
    EltwiseParameter_EltwiseOp_EltwiseOp_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  EltwiseOp_descriptor() {
    return EltwiseParameter_EltwiseOp_descriptor();
  }
  static inline const ::std::string& EltwiseOp_Name(EltwiseOp value) {
    return EltwiseParameter_EltwiseOp_Name(value);
  }
  static inline bool EltwiseOp_Parse(const ::std::string& name,
      EltwiseOp* value) {
    return EltwiseParameter_EltwiseOp_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // optional .caffe.EltwiseParameter.EltwiseOp operation = 1 [default = SUM];
  bool has_operation() const;
  void clear_operation();
  static const int kOperationFieldNumber = 1;
  ::caffe::EltwiseParameter_EltwiseOp operation() const;
  void set_operation(::caffe::EltwiseParameter_EltwiseOp value);

  // repeated float coeff = 2;
  int coeff_size() const;
  void clear_coeff();
  static const int kCoeffFieldNumber = 2;
  float coeff(int index) const;
  void set_coeff(int index, float value);
  void add_coeff(float value);
  const ::google::protobuf::RepeatedField< float >&
      coeff() const;
  ::google::protobuf::RepeatedField< float >*
      mutable_coeff();

  // optional bool stable_prod_grad = 3 [default = true];
  bool has_stable_prod_grad() const;
  void clear_stable_prod_grad();
  static const int kStableProdGradFieldNumber = 3;
  bool stable_prod_grad() const;
  void set_stable_prod_grad(bool value);

  // @@protoc_insertion_point(class_scope:caffe.EltwiseParameter)
 private:
  inline void set_has_operation();
  inline void clear_has_operation();
  inline void set_has_stable_prod_grad();
  inline void clear_has_stable_prod_grad();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::RepeatedField< float > coeff_;
  int operation_;
  bool stable_prod_grad_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<EltwiseParameter> EltwiseParameter_default_instance_;

// -------------------------------------------------------------------

class ExpParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.ExpParameter) */ {
 public:
  ExpParameter();
  virtual ~ExpParameter();

  ExpParameter(const ExpParameter& from);

  inline ExpParameter& operator=(const ExpParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const ExpParameter& default_instance();

  static const ExpParameter* internal_default_instance();

  void Swap(ExpParameter* other);

  // implements Message ----------------------------------------------

  inline ExpParameter* New() const { return New(NULL); }

  ExpParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const ExpParameter& from);
  void MergeFrom(const ExpParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(ExpParameter* other);
  void UnsafeMergeFrom(const ExpParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional float base = 1 [default = -1];
  bool has_base() const;
  void clear_base();
  static const int kBaseFieldNumber = 1;
  float base() const;
  void set_base(float value);

  // optional float scale = 2 [default = 1];
  bool has_scale() const;
  void clear_scale();
  static const int kScaleFieldNumber = 2;
  float scale() const;
  void set_scale(float value);

  // optional float shift = 3 [default = 0];
  bool has_shift() const;
  void clear_shift();
  static const int kShiftFieldNumber = 3;
  float shift() const;
  void set_shift(float value);

  // @@protoc_insertion_point(class_scope:caffe.ExpParameter)
 private:
  inline void set_has_base();
  inline void clear_has_base();
  inline void set_has_scale();
  inline void clear_has_scale();
  inline void set_has_shift();
  inline void clear_has_shift();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  float shift_;
  float base_;
  float scale_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<ExpParameter> ExpParameter_default_instance_;

// -------------------------------------------------------------------

class FlattenParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.FlattenParameter) */ {
 public:
  FlattenParameter();
  virtual ~FlattenParameter();

  FlattenParameter(const FlattenParameter& from);

  inline FlattenParameter& operator=(const FlattenParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const FlattenParameter& default_instance();

  static const FlattenParameter* internal_default_instance();

  void Swap(FlattenParameter* other);

  // implements Message ----------------------------------------------

  inline FlattenParameter* New() const { return New(NULL); }

  FlattenParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const FlattenParameter& from);
  void MergeFrom(const FlattenParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(FlattenParameter* other);
  void UnsafeMergeFrom(const FlattenParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional int32 axis = 1 [default = 1];
  bool has_axis() const;
  void clear_axis();
  static const int kAxisFieldNumber = 1;
  ::google::protobuf::int32 axis() const;
  void set_axis(::google::protobuf::int32 value);

  // optional int32 end_axis = 2 [default = -1];
  bool has_end_axis() const;
  void clear_end_axis();
  static const int kEndAxisFieldNumber = 2;
  ::google::protobuf::int32 end_axis() const;
  void set_end_axis(::google::protobuf::int32 value);

  // @@protoc_insertion_point(class_scope:caffe.FlattenParameter)
 private:
  inline void set_has_axis();
  inline void clear_has_axis();
  inline void set_has_end_axis();
  inline void clear_has_end_axis();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::int32 axis_;
  ::google::protobuf::int32 end_axis_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<FlattenParameter> FlattenParameter_default_instance_;

// -------------------------------------------------------------------

class HDF5DataParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.HDF5DataParameter) */ {
 public:
  HDF5DataParameter();
  virtual ~HDF5DataParameter();

  HDF5DataParameter(const HDF5DataParameter& from);

  inline HDF5DataParameter& operator=(const HDF5DataParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const HDF5DataParameter& default_instance();

  static const HDF5DataParameter* internal_default_instance();

  void Swap(HDF5DataParameter* other);

  // implements Message ----------------------------------------------

  inline HDF5DataParameter* New() const { return New(NULL); }

  HDF5DataParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const HDF5DataParameter& from);
  void MergeFrom(const HDF5DataParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(HDF5DataParameter* other);
  void UnsafeMergeFrom(const HDF5DataParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional string source = 1;
  bool has_source() const;
  void clear_source();
  static const int kSourceFieldNumber = 1;
  const ::std::string& source() const;
  void set_source(const ::std::string& value);
  void set_source(const char* value);
  void set_source(const char* value, size_t size);
  ::std::string* mutable_source();
  ::std::string* release_source();
  void set_allocated_source(::std::string* source);

  // optional uint32 batch_size = 2;
  bool has_batch_size() const;
  void clear_batch_size();
  static const int kBatchSizeFieldNumber = 2;
  ::google::protobuf::uint32 batch_size() const;
  void set_batch_size(::google::protobuf::uint32 value);

  // optional bool shuffle = 3 [default = false];
  bool has_shuffle() const;
  void clear_shuffle();
  static const int kShuffleFieldNumber = 3;
  bool shuffle() const;
  void set_shuffle(bool value);

  // @@protoc_insertion_point(class_scope:caffe.HDF5DataParameter)
 private:
  inline void set_has_source();
  inline void clear_has_source();
  inline void set_has_batch_size();
  inline void clear_has_batch_size();
  inline void set_has_shuffle();
  inline void clear_has_shuffle();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::internal::ArenaStringPtr source_;
  ::google::protobuf::uint32 batch_size_;
  bool shuffle_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<HDF5DataParameter> HDF5DataParameter_default_instance_;

// -------------------------------------------------------------------

class HDF5OutputParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.HDF5OutputParameter) */ {
 public:
  HDF5OutputParameter();
  virtual ~HDF5OutputParameter();

  HDF5OutputParameter(const HDF5OutputParameter& from);

  inline HDF5OutputParameter& operator=(const HDF5OutputParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const HDF5OutputParameter& default_instance();

  static const HDF5OutputParameter* internal_default_instance();

  void Swap(HDF5OutputParameter* other);

  // implements Message ----------------------------------------------

  inline HDF5OutputParameter* New() const { return New(NULL); }

  HDF5OutputParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const HDF5OutputParameter& from);
  void MergeFrom(const HDF5OutputParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(HDF5OutputParameter* other);
  void UnsafeMergeFrom(const HDF5OutputParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional string file_name = 1;
  bool has_file_name() const;
  void clear_file_name();
  static const int kFileNameFieldNumber = 1;
  const ::std::string& file_name() const;
  void set_file_name(const ::std::string& value);
  void set_file_name(const char* value);
  void set_file_name(const char* value, size_t size);
  ::std::string* mutable_file_name();
  ::std::string* release_file_name();
  void set_allocated_file_name(::std::string* file_name);

  // @@protoc_insertion_point(class_scope:caffe.HDF5OutputParameter)
 private:
  inline void set_has_file_name();
  inline void clear_has_file_name();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::internal::ArenaStringPtr file_name_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<HDF5OutputParameter> HDF5OutputParameter_default_instance_;

// -------------------------------------------------------------------

class HingeLossParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.HingeLossParameter) */ {
 public:
  HingeLossParameter();
  virtual ~HingeLossParameter();

  HingeLossParameter(const HingeLossParameter& from);

  inline HingeLossParameter& operator=(const HingeLossParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const HingeLossParameter& default_instance();

  static const HingeLossParameter* internal_default_instance();

  void Swap(HingeLossParameter* other);

  // implements Message ----------------------------------------------

  inline HingeLossParameter* New() const { return New(NULL); }

  HingeLossParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const HingeLossParameter& from);
  void MergeFrom(const HingeLossParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(HingeLossParameter* other);
  void UnsafeMergeFrom(const HingeLossParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  typedef HingeLossParameter_Norm Norm;
  static const Norm L1 =
    HingeLossParameter_Norm_L1;
  static const Norm L2 =
    HingeLossParameter_Norm_L2;
  static inline bool Norm_IsValid(int value) {
    return HingeLossParameter_Norm_IsValid(value);
  }
  static const Norm Norm_MIN =
    HingeLossParameter_Norm_Norm_MIN;
  static const Norm Norm_MAX =
    HingeLossParameter_Norm_Norm_MAX;
  static const int Norm_ARRAYSIZE =
    HingeLossParameter_Norm_Norm_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  Norm_descriptor() {
    return HingeLossParameter_Norm_descriptor();
  }
  static inline const ::std::string& Norm_Name(Norm value) {
    return HingeLossParameter_Norm_Name(value);
  }
  static inline bool Norm_Parse(const ::std::string& name,
      Norm* value) {
    return HingeLossParameter_Norm_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // optional .caffe.HingeLossParameter.Norm norm = 1 [default = L1];
  bool has_norm() const;
  void clear_norm();
  static const int kNormFieldNumber = 1;
  ::caffe::HingeLossParameter_Norm norm() const;
  void set_norm(::caffe::HingeLossParameter_Norm value);

  // @@protoc_insertion_point(class_scope:caffe.HingeLossParameter)
 private:
  inline void set_has_norm();
  inline void clear_has_norm();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  int norm_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<HingeLossParameter> HingeLossParameter_default_instance_;

// -------------------------------------------------------------------

class ImageDataParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.ImageDataParameter) */ {
 public:
  ImageDataParameter();
  virtual ~ImageDataParameter();

  ImageDataParameter(const ImageDataParameter& from);

  inline ImageDataParameter& operator=(const ImageDataParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const ImageDataParameter& default_instance();

  static const ImageDataParameter* internal_default_instance();

  void Swap(ImageDataParameter* other);

  // implements Message ----------------------------------------------

  inline ImageDataParameter* New() const { return New(NULL); }

  ImageDataParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const ImageDataParameter& from);
  void MergeFrom(const ImageDataParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(ImageDataParameter* other);
  void UnsafeMergeFrom(const ImageDataParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional string source = 1;
  bool has_source() const;
  void clear_source();
  static const int kSourceFieldNumber = 1;
  const ::std::string& source() const;
  void set_source(const ::std::string& value);
  void set_source(const char* value);
  void set_source(const char* value, size_t size);
  ::std::string* mutable_source();
  ::std::string* release_source();
  void set_allocated_source(::std::string* source);

  // optional uint32 batch_size = 4;
  bool has_batch_size() const;
  void clear_batch_size();
  static const int kBatchSizeFieldNumber = 4;
  ::google::protobuf::uint32 batch_size() const;
  void set_batch_size(::google::protobuf::uint32 value);

  // optional uint32 rand_skip = 7 [default = 0];
  bool has_rand_skip() const;
  void clear_rand_skip();
  static const int kRandSkipFieldNumber = 7;
  ::google::protobuf::uint32 rand_skip() const;
  void set_rand_skip(::google::protobuf::uint32 value);

  // optional bool shuffle = 8 [default = false];
  bool has_shuffle() const;
  void clear_shuffle();
  static const int kShuffleFieldNumber = 8;
  bool shuffle() const;
  void set_shuffle(bool value);

  // optional uint32 new_height = 9 [default = 0];
  bool has_new_height() const;
  void clear_new_height();
  static const int kNewHeightFieldNumber = 9;
  ::google::protobuf::uint32 new_height() const;
  void set_new_height(::google::protobuf::uint32 value);

  // optional uint32 new_width = 10 [default = 0];
  bool has_new_width() const;
  void clear_new_width();
  static const int kNewWidthFieldNumber = 10;
  ::google::protobuf::uint32 new_width() const;
  void set_new_width(::google::protobuf::uint32 value);

  // optional bool is_color = 11 [default = true];
  bool has_is_color() const;
  void clear_is_color();
  static const int kIsColorFieldNumber = 11;
  bool is_color() const;
  void set_is_color(bool value);

  // optional float scale = 2 [default = 1];
  bool has_scale() const;
  void clear_scale();
  static const int kScaleFieldNumber = 2;
  float scale() const;
  void set_scale(float value);

  // optional string mean_file = 3;
  bool has_mean_file() const;
  void clear_mean_file();
  static const int kMeanFileFieldNumber = 3;
  const ::std::string& mean_file() const;
  void set_mean_file(const ::std::string& value);
  void set_mean_file(const char* value);
  void set_mean_file(const char* value, size_t size);
  ::std::string* mutable_mean_file();
  ::std::string* release_mean_file();
  void set_allocated_mean_file(::std::string* mean_file);

  // optional uint32 crop_size = 5 [default = 0];
  bool has_crop_size() const;
  void clear_crop_size();
  static const int kCropSizeFieldNumber = 5;
  ::google::protobuf::uint32 crop_size() const;
  void set_crop_size(::google::protobuf::uint32 value);

  // optional bool mirror = 6 [default = false];
  bool has_mirror() const;
  void clear_mirror();
  static const int kMirrorFieldNumber = 6;
  bool mirror() const;
  void set_mirror(bool value);

  // optional string root_folder = 12 [default = ""];
  bool has_root_folder() const;
  void clear_root_folder();
  static const int kRootFolderFieldNumber = 12;
  const ::std::string& root_folder() const;
  void set_root_folder(const ::std::string& value);
  void set_root_folder(const char* value);
  void set_root_folder(const char* value, size_t size);
  ::std::string* mutable_root_folder();
  ::std::string* release_root_folder();
  void set_allocated_root_folder(::std::string* root_folder);

  // @@protoc_insertion_point(class_scope:caffe.ImageDataParameter)
 private:
  inline void set_has_source();
  inline void clear_has_source();
  inline void set_has_batch_size();
  inline void clear_has_batch_size();
  inline void set_has_rand_skip();
  inline void clear_has_rand_skip();
  inline void set_has_shuffle();
  inline void clear_has_shuffle();
  inline void set_has_new_height();
  inline void clear_has_new_height();
  inline void set_has_new_width();
  inline void clear_has_new_width();
  inline void set_has_is_color();
  inline void clear_has_is_color();
  inline void set_has_scale();
  inline void clear_has_scale();
  inline void set_has_mean_file();
  inline void clear_has_mean_file();
  inline void set_has_crop_size();
  inline void clear_has_crop_size();
  inline void set_has_mirror();
  inline void clear_has_mirror();
  inline void set_has_root_folder();
  inline void clear_has_root_folder();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::internal::ArenaStringPtr source_;
  ::google::protobuf::internal::ArenaStringPtr mean_file_;
  ::google::protobuf::internal::ArenaStringPtr root_folder_;
  ::google::protobuf::uint32 batch_size_;
  ::google::protobuf::uint32 rand_skip_;
  ::google::protobuf::uint32 new_height_;
  ::google::protobuf::uint32 new_width_;
  bool shuffle_;
  bool mirror_;
  ::google::protobuf::uint32 crop_size_;
  bool is_color_;
  float scale_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<ImageDataParameter> ImageDataParameter_default_instance_;

// -------------------------------------------------------------------

class InfogainLossParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.InfogainLossParameter) */ {
 public:
  InfogainLossParameter();
  virtual ~InfogainLossParameter();

  InfogainLossParameter(const InfogainLossParameter& from);

  inline InfogainLossParameter& operator=(const InfogainLossParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const InfogainLossParameter& default_instance();

  static const InfogainLossParameter* internal_default_instance();

  void Swap(InfogainLossParameter* other);

  // implements Message ----------------------------------------------

  inline InfogainLossParameter* New() const { return New(NULL); }

  InfogainLossParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const InfogainLossParameter& from);
  void MergeFrom(const InfogainLossParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(InfogainLossParameter* other);
  void UnsafeMergeFrom(const InfogainLossParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional string source = 1;
  bool has_source() const;
  void clear_source();
  static const int kSourceFieldNumber = 1;
  const ::std::string& source() const;
  void set_source(const ::std::string& value);
  void set_source(const char* value);
  void set_source(const char* value, size_t size);
  ::std::string* mutable_source();
  ::std::string* release_source();
  void set_allocated_source(::std::string* source);

  // @@protoc_insertion_point(class_scope:caffe.InfogainLossParameter)
 private:
  inline void set_has_source();
  inline void clear_has_source();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::internal::ArenaStringPtr source_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<InfogainLossParameter> InfogainLossParameter_default_instance_;

// -------------------------------------------------------------------

class InnerProductParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.InnerProductParameter) */ {
 public:
  InnerProductParameter();
  virtual ~InnerProductParameter();

  InnerProductParameter(const InnerProductParameter& from);

  inline InnerProductParameter& operator=(const InnerProductParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const InnerProductParameter& default_instance();

  static const InnerProductParameter* internal_default_instance();

  void Swap(InnerProductParameter* other);

  // implements Message ----------------------------------------------

  inline InnerProductParameter* New() const { return New(NULL); }

  InnerProductParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const InnerProductParameter& from);
  void MergeFrom(const InnerProductParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(InnerProductParameter* other);
  void UnsafeMergeFrom(const InnerProductParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional uint32 num_output = 1;
  bool has_num_output() const;
  void clear_num_output();
  static const int kNumOutputFieldNumber = 1;
  ::google::protobuf::uint32 num_output() const;
  void set_num_output(::google::protobuf::uint32 value);

  // optional bool bias_term = 2 [default = true];
  bool has_bias_term() const;
  void clear_bias_term();
  static const int kBiasTermFieldNumber = 2;
  bool bias_term() const;
  void set_bias_term(bool value);

  // optional .caffe.FillerParameter weight_filler = 3;
  bool has_weight_filler() const;
  void clear_weight_filler();
  static const int kWeightFillerFieldNumber = 3;
  const ::caffe::FillerParameter& weight_filler() const;
  ::caffe::FillerParameter* mutable_weight_filler();
  ::caffe::FillerParameter* release_weight_filler();
  void set_allocated_weight_filler(::caffe::FillerParameter* weight_filler);

  // optional .caffe.FillerParameter bias_filler = 4;
  bool has_bias_filler() const;
  void clear_bias_filler();
  static const int kBiasFillerFieldNumber = 4;
  const ::caffe::FillerParameter& bias_filler() const;
  ::caffe::FillerParameter* mutable_bias_filler();
  ::caffe::FillerParameter* release_bias_filler();
  void set_allocated_bias_filler(::caffe::FillerParameter* bias_filler);

  // optional int32 axis = 5 [default = 1];
  bool has_axis() const;
  void clear_axis();
  static const int kAxisFieldNumber = 5;
  ::google::protobuf::int32 axis() const;
  void set_axis(::google::protobuf::int32 value);

  // @@protoc_insertion_point(class_scope:caffe.InnerProductParameter)
 private:
  inline void set_has_num_output();
  inline void clear_has_num_output();
  inline void set_has_bias_term();
  inline void clear_has_bias_term();
  inline void set_has_weight_filler();
  inline void clear_has_weight_filler();
  inline void set_has_bias_filler();
  inline void clear_has_bias_filler();
  inline void set_has_axis();
  inline void clear_has_axis();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::caffe::FillerParameter* weight_filler_;
  ::caffe::FillerParameter* bias_filler_;
  ::google::protobuf::uint32 num_output_;
  bool bias_term_;
  ::google::protobuf::int32 axis_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<InnerProductParameter> InnerProductParameter_default_instance_;

// -------------------------------------------------------------------

class LogParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.LogParameter) */ {
 public:
  LogParameter();
  virtual ~LogParameter();

  LogParameter(const LogParameter& from);

  inline LogParameter& operator=(const LogParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const LogParameter& default_instance();

  static const LogParameter* internal_default_instance();

  void Swap(LogParameter* other);

  // implements Message ----------------------------------------------

  inline LogParameter* New() const { return New(NULL); }

  LogParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const LogParameter& from);
  void MergeFrom(const LogParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(LogParameter* other);
  void UnsafeMergeFrom(const LogParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional float base = 1 [default = -1];
  bool has_base() const;
  void clear_base();
  static const int kBaseFieldNumber = 1;
  float base() const;
  void set_base(float value);

  // optional float scale = 2 [default = 1];
  bool has_scale() const;
  void clear_scale();
  static const int kScaleFieldNumber = 2;
  float scale() const;
  void set_scale(float value);

  // optional float shift = 3 [default = 0];
  bool has_shift() const;
  void clear_shift();
  static const int kShiftFieldNumber = 3;
  float shift() const;
  void set_shift(float value);

  // @@protoc_insertion_point(class_scope:caffe.LogParameter)
 private:
  inline void set_has_base();
  inline void clear_has_base();
  inline void set_has_scale();
  inline void clear_has_scale();
  inline void set_has_shift();
  inline void clear_has_shift();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  float shift_;
  float base_;
  float scale_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<LogParameter> LogParameter_default_instance_;

// -------------------------------------------------------------------

class LRNParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.LRNParameter) */ {
 public:
  LRNParameter();
  virtual ~LRNParameter();

  LRNParameter(const LRNParameter& from);

  inline LRNParameter& operator=(const LRNParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const LRNParameter& default_instance();

  static const LRNParameter* internal_default_instance();

  void Swap(LRNParameter* other);

  // implements Message ----------------------------------------------

  inline LRNParameter* New() const { return New(NULL); }

  LRNParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const LRNParameter& from);
  void MergeFrom(const LRNParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(LRNParameter* other);
  void UnsafeMergeFrom(const LRNParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  typedef LRNParameter_NormRegion NormRegion;
  static const NormRegion ACROSS_CHANNELS =
    LRNParameter_NormRegion_ACROSS_CHANNELS;
  static const NormRegion WITHIN_CHANNEL =
    LRNParameter_NormRegion_WITHIN_CHANNEL;
  static inline bool NormRegion_IsValid(int value) {
    return LRNParameter_NormRegion_IsValid(value);
  }
  static const NormRegion NormRegion_MIN =
    LRNParameter_NormRegion_NormRegion_MIN;
  static const NormRegion NormRegion_MAX =
    LRNParameter_NormRegion_NormRegion_MAX;
  static const int NormRegion_ARRAYSIZE =
    LRNParameter_NormRegion_NormRegion_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  NormRegion_descriptor() {
    return LRNParameter_NormRegion_descriptor();
  }
  static inline const ::std::string& NormRegion_Name(NormRegion value) {
    return LRNParameter_NormRegion_Name(value);
  }
  static inline bool NormRegion_Parse(const ::std::string& name,
      NormRegion* value) {
    return LRNParameter_NormRegion_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // optional uint32 local_size = 1 [default = 5];
  bool has_local_size() const;
  void clear_local_size();
  static const int kLocalSizeFieldNumber = 1;
  ::google::protobuf::uint32 local_size() const;
  void set_local_size(::google::protobuf::uint32 value);

  // optional float alpha = 2 [default = 1];
  bool has_alpha() const;
  void clear_alpha();
  static const int kAlphaFieldNumber = 2;
  float alpha() const;
  void set_alpha(float value);

  // optional float beta = 3 [default = 0.75];
  bool has_beta() const;
  void clear_beta();
  static const int kBetaFieldNumber = 3;
  float beta() const;
  void set_beta(float value);

  // optional .caffe.LRNParameter.NormRegion norm_region = 4 [default = ACROSS_CHANNELS];
  bool has_norm_region() const;
  void clear_norm_region();
  static const int kNormRegionFieldNumber = 4;
  ::caffe::LRNParameter_NormRegion norm_region() const;
  void set_norm_region(::caffe::LRNParameter_NormRegion value);

  // optional float k = 5 [default = 1];
  bool has_k() const;
  void clear_k();
  static const int kKFieldNumber = 5;
  float k() const;
  void set_k(float value);

  // @@protoc_insertion_point(class_scope:caffe.LRNParameter)
 private:
  inline void set_has_local_size();
  inline void clear_has_local_size();
  inline void set_has_alpha();
  inline void clear_has_alpha();
  inline void set_has_beta();
  inline void clear_has_beta();
  inline void set_has_norm_region();
  inline void clear_has_norm_region();
  inline void set_has_k();
  inline void clear_has_k();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  int norm_region_;
  ::google::protobuf::uint32 local_size_;
  float alpha_;
  float beta_;
  float k_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<LRNParameter> LRNParameter_default_instance_;

// -------------------------------------------------------------------

class MemoryDataParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.MemoryDataParameter) */ {
 public:
  MemoryDataParameter();
  virtual ~MemoryDataParameter();

  MemoryDataParameter(const MemoryDataParameter& from);

  inline MemoryDataParameter& operator=(const MemoryDataParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const MemoryDataParameter& default_instance();

  static const MemoryDataParameter* internal_default_instance();

  void Swap(MemoryDataParameter* other);

  // implements Message ----------------------------------------------

  inline MemoryDataParameter* New() const { return New(NULL); }

  MemoryDataParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const MemoryDataParameter& from);
  void MergeFrom(const MemoryDataParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(MemoryDataParameter* other);
  void UnsafeMergeFrom(const MemoryDataParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional uint32 batch_size = 1;
  bool has_batch_size() const;
  void clear_batch_size();
  static const int kBatchSizeFieldNumber = 1;
  ::google::protobuf::uint32 batch_size() const;
  void set_batch_size(::google::protobuf::uint32 value);

  // optional uint32 channels = 2;
  bool has_channels() const;
  void clear_channels();
  static const int kChannelsFieldNumber = 2;
  ::google::protobuf::uint32 channels() const;
  void set_channels(::google::protobuf::uint32 value);

  // optional uint32 height = 3;
  bool has_height() const;
  void clear_height();
  static const int kHeightFieldNumber = 3;
  ::google::protobuf::uint32 height() const;
  void set_height(::google::protobuf::uint32 value);

  // optional uint32 width = 4;
  bool has_width() const;
  void clear_width();
  static const int kWidthFieldNumber = 4;
  ::google::protobuf::uint32 width() const;
  void set_width(::google::protobuf::uint32 value);

  // @@protoc_insertion_point(class_scope:caffe.MemoryDataParameter)
 private:
  inline void set_has_batch_size();
  inline void clear_has_batch_size();
  inline void set_has_channels();
  inline void clear_has_channels();
  inline void set_has_height();
  inline void clear_has_height();
  inline void set_has_width();
  inline void clear_has_width();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::uint32 batch_size_;
  ::google::protobuf::uint32 channels_;
  ::google::protobuf::uint32 height_;
  ::google::protobuf::uint32 width_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<MemoryDataParameter> MemoryDataParameter_default_instance_;

// -------------------------------------------------------------------

class MVNParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.MVNParameter) */ {
 public:
  MVNParameter();
  virtual ~MVNParameter();

  MVNParameter(const MVNParameter& from);

  inline MVNParameter& operator=(const MVNParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const MVNParameter& default_instance();

  static const MVNParameter* internal_default_instance();

  void Swap(MVNParameter* other);

  // implements Message ----------------------------------------------

  inline MVNParameter* New() const { return New(NULL); }

  MVNParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const MVNParameter& from);
  void MergeFrom(const MVNParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(MVNParameter* other);
  void UnsafeMergeFrom(const MVNParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional bool normalize_variance = 1 [default = true];
  bool has_normalize_variance() const;
  void clear_normalize_variance();
  static const int kNormalizeVarianceFieldNumber = 1;
  bool normalize_variance() const;
  void set_normalize_variance(bool value);

  // optional bool across_channels = 2 [default = false];
  bool has_across_channels() const;
  void clear_across_channels();
  static const int kAcrossChannelsFieldNumber = 2;
  bool across_channels() const;
  void set_across_channels(bool value);

  // optional float eps = 3 [default = 1e-09];
  bool has_eps() const;
  void clear_eps();
  static const int kEpsFieldNumber = 3;
  float eps() const;
  void set_eps(float value);

  // @@protoc_insertion_point(class_scope:caffe.MVNParameter)
 private:
  inline void set_has_normalize_variance();
  inline void clear_has_normalize_variance();
  inline void set_has_across_channels();
  inline void clear_has_across_channels();
  inline void set_has_eps();
  inline void clear_has_eps();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  bool across_channels_;
  bool normalize_variance_;
  float eps_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<MVNParameter> MVNParameter_default_instance_;

// -------------------------------------------------------------------

class PoolingParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.PoolingParameter) */ {
 public:
  PoolingParameter();
  virtual ~PoolingParameter();

  PoolingParameter(const PoolingParameter& from);

  inline PoolingParameter& operator=(const PoolingParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const PoolingParameter& default_instance();

  static const PoolingParameter* internal_default_instance();

  void Swap(PoolingParameter* other);

  // implements Message ----------------------------------------------

  inline PoolingParameter* New() const { return New(NULL); }

  PoolingParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const PoolingParameter& from);
  void MergeFrom(const PoolingParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(PoolingParameter* other);
  void UnsafeMergeFrom(const PoolingParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  typedef PoolingParameter_PoolMethod PoolMethod;
  static const PoolMethod MAX =
    PoolingParameter_PoolMethod_MAX;
  static const PoolMethod AVE =
    PoolingParameter_PoolMethod_AVE;
  static const PoolMethod STOCHASTIC =
    PoolingParameter_PoolMethod_STOCHASTIC;
  static inline bool PoolMethod_IsValid(int value) {
    return PoolingParameter_PoolMethod_IsValid(value);
  }
  static const PoolMethod PoolMethod_MIN =
    PoolingParameter_PoolMethod_PoolMethod_MIN;
  static const PoolMethod PoolMethod_MAX =
    PoolingParameter_PoolMethod_PoolMethod_MAX;
  static const int PoolMethod_ARRAYSIZE =
    PoolingParameter_PoolMethod_PoolMethod_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  PoolMethod_descriptor() {
    return PoolingParameter_PoolMethod_descriptor();
  }
  static inline const ::std::string& PoolMethod_Name(PoolMethod value) {
    return PoolingParameter_PoolMethod_Name(value);
  }
  static inline bool PoolMethod_Parse(const ::std::string& name,
      PoolMethod* value) {
    return PoolingParameter_PoolMethod_Parse(name, value);
  }

  typedef PoolingParameter_Engine Engine;
  static const Engine DEFAULT =
    PoolingParameter_Engine_DEFAULT;
  static const Engine CAFFE =
    PoolingParameter_Engine_CAFFE;
  static const Engine CUDNN =
    PoolingParameter_Engine_CUDNN;
  static inline bool Engine_IsValid(int value) {
    return PoolingParameter_Engine_IsValid(value);
  }
  static const Engine Engine_MIN =
    PoolingParameter_Engine_Engine_MIN;
  static const Engine Engine_MAX =
    PoolingParameter_Engine_Engine_MAX;
  static const int Engine_ARRAYSIZE =
    PoolingParameter_Engine_Engine_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  Engine_descriptor() {
    return PoolingParameter_Engine_descriptor();
  }
  static inline const ::std::string& Engine_Name(Engine value) {
    return PoolingParameter_Engine_Name(value);
  }
  static inline bool Engine_Parse(const ::std::string& name,
      Engine* value) {
    return PoolingParameter_Engine_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // optional .caffe.PoolingParameter.PoolMethod pool = 1 [default = MAX];
  bool has_pool() const;
  void clear_pool();
  static const int kPoolFieldNumber = 1;
  ::caffe::PoolingParameter_PoolMethod pool() const;
  void set_pool(::caffe::PoolingParameter_PoolMethod value);

  // optional uint32 pad = 4 [default = 0];
  bool has_pad() const;
  void clear_pad();
  static const int kPadFieldNumber = 4;
  ::google::protobuf::uint32 pad() const;
  void set_pad(::google::protobuf::uint32 value);

  // optional uint32 pad_h = 9 [default = 0];
  bool has_pad_h() const;
  void clear_pad_h();
  static const int kPadHFieldNumber = 9;
  ::google::protobuf::uint32 pad_h() const;
  void set_pad_h(::google::protobuf::uint32 value);

  // optional uint32 pad_w = 10 [default = 0];
  bool has_pad_w() const;
  void clear_pad_w();
  static const int kPadWFieldNumber = 10;
  ::google::protobuf::uint32 pad_w() const;
  void set_pad_w(::google::protobuf::uint32 value);

  // optional uint32 kernel_size = 2;
  bool has_kernel_size() const;
  void clear_kernel_size();
  static const int kKernelSizeFieldNumber = 2;
  ::google::protobuf::uint32 kernel_size() const;
  void set_kernel_size(::google::protobuf::uint32 value);

  // optional uint32 kernel_h = 5;
  bool has_kernel_h() const;
  void clear_kernel_h();
  static const int kKernelHFieldNumber = 5;
  ::google::protobuf::uint32 kernel_h() const;
  void set_kernel_h(::google::protobuf::uint32 value);

  // optional uint32 kernel_w = 6;
  bool has_kernel_w() const;
  void clear_kernel_w();
  static const int kKernelWFieldNumber = 6;
  ::google::protobuf::uint32 kernel_w() const;
  void set_kernel_w(::google::protobuf::uint32 value);

  // optional uint32 stride = 3 [default = 1];
  bool has_stride() const;
  void clear_stride();
  static const int kStrideFieldNumber = 3;
  ::google::protobuf::uint32 stride() const;
  void set_stride(::google::protobuf::uint32 value);

  // optional uint32 stride_h = 7;
  bool has_stride_h() const;
  void clear_stride_h();
  static const int kStrideHFieldNumber = 7;
  ::google::protobuf::uint32 stride_h() const;
  void set_stride_h(::google::protobuf::uint32 value);

  // optional uint32 stride_w = 8;
  bool has_stride_w() const;
  void clear_stride_w();
  static const int kStrideWFieldNumber = 8;
  ::google::protobuf::uint32 stride_w() const;
  void set_stride_w(::google::protobuf::uint32 value);

  // optional .caffe.PoolingParameter.Engine engine = 11 [default = DEFAULT];
  bool has_engine() const;
  void clear_engine();
  static const int kEngineFieldNumber = 11;
  ::caffe::PoolingParameter_Engine engine() const;
  void set_engine(::caffe::PoolingParameter_Engine value);

  // optional bool global_pooling = 12 [default = false];
  bool has_global_pooling() const;
  void clear_global_pooling();
  static const int kGlobalPoolingFieldNumber = 12;
  bool global_pooling() const;
  void set_global_pooling(bool value);

  // @@protoc_insertion_point(class_scope:caffe.PoolingParameter)
 private:
  inline void set_has_pool();
  inline void clear_has_pool();
  inline void set_has_pad();
  inline void clear_has_pad();
  inline void set_has_pad_h();
  inline void clear_has_pad_h();
  inline void set_has_pad_w();
  inline void clear_has_pad_w();
  inline void set_has_kernel_size();
  inline void clear_has_kernel_size();
  inline void set_has_kernel_h();
  inline void clear_has_kernel_h();
  inline void set_has_kernel_w();
  inline void clear_has_kernel_w();
  inline void set_has_stride();
  inline void clear_has_stride();
  inline void set_has_stride_h();
  inline void clear_has_stride_h();
  inline void set_has_stride_w();
  inline void clear_has_stride_w();
  inline void set_has_engine();
  inline void clear_has_engine();
  inline void set_has_global_pooling();
  inline void clear_has_global_pooling();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  int pool_;
  ::google::protobuf::uint32 pad_;
  ::google::protobuf::uint32 pad_h_;
  ::google::protobuf::uint32 pad_w_;
  ::google::protobuf::uint32 kernel_size_;
  ::google::protobuf::uint32 kernel_h_;
  ::google::protobuf::uint32 kernel_w_;
  ::google::protobuf::uint32 stride_h_;
  ::google::protobuf::uint32 stride_w_;
  int engine_;
  bool global_pooling_;
  ::google::protobuf::uint32 stride_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<PoolingParameter> PoolingParameter_default_instance_;

// -------------------------------------------------------------------

class PowerParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.PowerParameter) */ {
 public:
  PowerParameter();
  virtual ~PowerParameter();

  PowerParameter(const PowerParameter& from);

  inline PowerParameter& operator=(const PowerParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const PowerParameter& default_instance();

  static const PowerParameter* internal_default_instance();

  void Swap(PowerParameter* other);

  // implements Message ----------------------------------------------

  inline PowerParameter* New() const { return New(NULL); }

  PowerParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const PowerParameter& from);
  void MergeFrom(const PowerParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(PowerParameter* other);
  void UnsafeMergeFrom(const PowerParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional float power = 1 [default = 1];
  bool has_power() const;
  void clear_power();
  static const int kPowerFieldNumber = 1;
  float power() const;
  void set_power(float value);

  // optional float scale = 2 [default = 1];
  bool has_scale() const;
  void clear_scale();
  static const int kScaleFieldNumber = 2;
  float scale() const;
  void set_scale(float value);

  // optional float shift = 3 [default = 0];
  bool has_shift() const;
  void clear_shift();
  static const int kShiftFieldNumber = 3;
  float shift() const;
  void set_shift(float value);

  // @@protoc_insertion_point(class_scope:caffe.PowerParameter)
 private:
  inline void set_has_power();
  inline void clear_has_power();
  inline void set_has_scale();
  inline void clear_has_scale();
  inline void set_has_shift();
  inline void clear_has_shift();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  float shift_;
  float power_;
  float scale_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<PowerParameter> PowerParameter_default_instance_;

// -------------------------------------------------------------------

class PythonParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.PythonParameter) */ {
 public:
  PythonParameter();
  virtual ~PythonParameter();

  PythonParameter(const PythonParameter& from);

  inline PythonParameter& operator=(const PythonParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const PythonParameter& default_instance();

  static const PythonParameter* internal_default_instance();

  void Swap(PythonParameter* other);

  // implements Message ----------------------------------------------

  inline PythonParameter* New() const { return New(NULL); }

  PythonParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const PythonParameter& from);
  void MergeFrom(const PythonParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(PythonParameter* other);
  void UnsafeMergeFrom(const PythonParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional string module = 1;
  bool has_module() const;
  void clear_module();
  static const int kModuleFieldNumber = 1;
  const ::std::string& module() const;
  void set_module(const ::std::string& value);
  void set_module(const char* value);
  void set_module(const char* value, size_t size);
  ::std::string* mutable_module();
  ::std::string* release_module();
  void set_allocated_module(::std::string* module);

  // optional string layer = 2;
  bool has_layer() const;
  void clear_layer();
  static const int kLayerFieldNumber = 2;
  const ::std::string& layer() const;
  void set_layer(const ::std::string& value);
  void set_layer(const char* value);
  void set_layer(const char* value, size_t size);
  ::std::string* mutable_layer();
  ::std::string* release_layer();
  void set_allocated_layer(::std::string* layer);

  // @@protoc_insertion_point(class_scope:caffe.PythonParameter)
 private:
  inline void set_has_module();
  inline void clear_has_module();
  inline void set_has_layer();
  inline void clear_has_layer();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::internal::ArenaStringPtr module_;
  ::google::protobuf::internal::ArenaStringPtr layer_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<PythonParameter> PythonParameter_default_instance_;

// -------------------------------------------------------------------

class ReductionParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.ReductionParameter) */ {
 public:
  ReductionParameter();
  virtual ~ReductionParameter();

  ReductionParameter(const ReductionParameter& from);

  inline ReductionParameter& operator=(const ReductionParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const ReductionParameter& default_instance();

  static const ReductionParameter* internal_default_instance();

  void Swap(ReductionParameter* other);

  // implements Message ----------------------------------------------

  inline ReductionParameter* New() const { return New(NULL); }

  ReductionParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const ReductionParameter& from);
  void MergeFrom(const ReductionParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(ReductionParameter* other);
  void UnsafeMergeFrom(const ReductionParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  typedef ReductionParameter_ReductionOp ReductionOp;
  static const ReductionOp SUM =
    ReductionParameter_ReductionOp_SUM;
  static const ReductionOp ASUM =
    ReductionParameter_ReductionOp_ASUM;
  static const ReductionOp SUMSQ =
    ReductionParameter_ReductionOp_SUMSQ;
  static const ReductionOp MEAN =
    ReductionParameter_ReductionOp_MEAN;
  static inline bool ReductionOp_IsValid(int value) {
    return ReductionParameter_ReductionOp_IsValid(value);
  }
  static const ReductionOp ReductionOp_MIN =
    ReductionParameter_ReductionOp_ReductionOp_MIN;
  static const ReductionOp ReductionOp_MAX =
    ReductionParameter_ReductionOp_ReductionOp_MAX;
  static const int ReductionOp_ARRAYSIZE =
    ReductionParameter_ReductionOp_ReductionOp_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  ReductionOp_descriptor() {
    return ReductionParameter_ReductionOp_descriptor();
  }
  static inline const ::std::string& ReductionOp_Name(ReductionOp value) {
    return ReductionParameter_ReductionOp_Name(value);
  }
  static inline bool ReductionOp_Parse(const ::std::string& name,
      ReductionOp* value) {
    return ReductionParameter_ReductionOp_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // optional .caffe.ReductionParameter.ReductionOp operation = 1 [default = SUM];
  bool has_operation() const;
  void clear_operation();
  static const int kOperationFieldNumber = 1;
  ::caffe::ReductionParameter_ReductionOp operation() const;
  void set_operation(::caffe::ReductionParameter_ReductionOp value);

  // optional int32 axis = 2 [default = 0];
  bool has_axis() const;
  void clear_axis();
  static const int kAxisFieldNumber = 2;
  ::google::protobuf::int32 axis() const;
  void set_axis(::google::protobuf::int32 value);

  // optional float coeff = 3 [default = 1];
  bool has_coeff() const;
  void clear_coeff();
  static const int kCoeffFieldNumber = 3;
  float coeff() const;
  void set_coeff(float value);

  // @@protoc_insertion_point(class_scope:caffe.ReductionParameter)
 private:
  inline void set_has_operation();
  inline void clear_has_operation();
  inline void set_has_axis();
  inline void clear_has_axis();
  inline void set_has_coeff();
  inline void clear_has_coeff();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::int32 axis_;
  int operation_;
  float coeff_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<ReductionParameter> ReductionParameter_default_instance_;

// -------------------------------------------------------------------

class ReLUParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.ReLUParameter) */ {
 public:
  ReLUParameter();
  virtual ~ReLUParameter();

  ReLUParameter(const ReLUParameter& from);

  inline ReLUParameter& operator=(const ReLUParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const ReLUParameter& default_instance();

  static const ReLUParameter* internal_default_instance();

  void Swap(ReLUParameter* other);

  // implements Message ----------------------------------------------

  inline ReLUParameter* New() const { return New(NULL); }

  ReLUParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const ReLUParameter& from);
  void MergeFrom(const ReLUParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(ReLUParameter* other);
  void UnsafeMergeFrom(const ReLUParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  typedef ReLUParameter_Engine Engine;
  static const Engine DEFAULT =
    ReLUParameter_Engine_DEFAULT;
  static const Engine CAFFE =
    ReLUParameter_Engine_CAFFE;
  static const Engine CUDNN =
    ReLUParameter_Engine_CUDNN;
  static inline bool Engine_IsValid(int value) {
    return ReLUParameter_Engine_IsValid(value);
  }
  static const Engine Engine_MIN =
    ReLUParameter_Engine_Engine_MIN;
  static const Engine Engine_MAX =
    ReLUParameter_Engine_Engine_MAX;
  static const int Engine_ARRAYSIZE =
    ReLUParameter_Engine_Engine_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  Engine_descriptor() {
    return ReLUParameter_Engine_descriptor();
  }
  static inline const ::std::string& Engine_Name(Engine value) {
    return ReLUParameter_Engine_Name(value);
  }
  static inline bool Engine_Parse(const ::std::string& name,
      Engine* value) {
    return ReLUParameter_Engine_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // optional float negative_slope = 1 [default = 0];
  bool has_negative_slope() const;
  void clear_negative_slope();
  static const int kNegativeSlopeFieldNumber = 1;
  float negative_slope() const;
  void set_negative_slope(float value);

  // optional .caffe.ReLUParameter.Engine engine = 2 [default = DEFAULT];
  bool has_engine() const;
  void clear_engine();
  static const int kEngineFieldNumber = 2;
  ::caffe::ReLUParameter_Engine engine() const;
  void set_engine(::caffe::ReLUParameter_Engine value);

  // @@protoc_insertion_point(class_scope:caffe.ReLUParameter)
 private:
  inline void set_has_negative_slope();
  inline void clear_has_negative_slope();
  inline void set_has_engine();
  inline void clear_has_engine();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  float negative_slope_;
  int engine_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<ReLUParameter> ReLUParameter_default_instance_;

// -------------------------------------------------------------------

class ReshapeParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.ReshapeParameter) */ {
 public:
  ReshapeParameter();
  virtual ~ReshapeParameter();

  ReshapeParameter(const ReshapeParameter& from);

  inline ReshapeParameter& operator=(const ReshapeParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const ReshapeParameter& default_instance();

  static const ReshapeParameter* internal_default_instance();

  void Swap(ReshapeParameter* other);

  // implements Message ----------------------------------------------

  inline ReshapeParameter* New() const { return New(NULL); }

  ReshapeParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const ReshapeParameter& from);
  void MergeFrom(const ReshapeParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(ReshapeParameter* other);
  void UnsafeMergeFrom(const ReshapeParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional .caffe.BlobShape shape = 1;
  bool has_shape() const;
  void clear_shape();
  static const int kShapeFieldNumber = 1;
  const ::caffe::BlobShape& shape() const;
  ::caffe::BlobShape* mutable_shape();
  ::caffe::BlobShape* release_shape();
  void set_allocated_shape(::caffe::BlobShape* shape);

  // optional int32 axis = 2 [default = 0];
  bool has_axis() const;
  void clear_axis();
  static const int kAxisFieldNumber = 2;
  ::google::protobuf::int32 axis() const;
  void set_axis(::google::protobuf::int32 value);

  // optional int32 num_axes = 3 [default = -1];
  bool has_num_axes() const;
  void clear_num_axes();
  static const int kNumAxesFieldNumber = 3;
  ::google::protobuf::int32 num_axes() const;
  void set_num_axes(::google::protobuf::int32 value);

  // @@protoc_insertion_point(class_scope:caffe.ReshapeParameter)
 private:
  inline void set_has_shape();
  inline void clear_has_shape();
  inline void set_has_axis();
  inline void clear_has_axis();
  inline void set_has_num_axes();
  inline void clear_has_num_axes();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::caffe::BlobShape* shape_;
  ::google::protobuf::int32 axis_;
  ::google::protobuf::int32 num_axes_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<ReshapeParameter> ReshapeParameter_default_instance_;

// -------------------------------------------------------------------

class SigmoidParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.SigmoidParameter) */ {
 public:
  SigmoidParameter();
  virtual ~SigmoidParameter();

  SigmoidParameter(const SigmoidParameter& from);

  inline SigmoidParameter& operator=(const SigmoidParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const SigmoidParameter& default_instance();

  static const SigmoidParameter* internal_default_instance();

  void Swap(SigmoidParameter* other);

  // implements Message ----------------------------------------------

  inline SigmoidParameter* New() const { return New(NULL); }

  SigmoidParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const SigmoidParameter& from);
  void MergeFrom(const SigmoidParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(SigmoidParameter* other);
  void UnsafeMergeFrom(const SigmoidParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  typedef SigmoidParameter_Engine Engine;
  static const Engine DEFAULT =
    SigmoidParameter_Engine_DEFAULT;
  static const Engine CAFFE =
    SigmoidParameter_Engine_CAFFE;
  static const Engine CUDNN =
    SigmoidParameter_Engine_CUDNN;
  static inline bool Engine_IsValid(int value) {
    return SigmoidParameter_Engine_IsValid(value);
  }
  static const Engine Engine_MIN =
    SigmoidParameter_Engine_Engine_MIN;
  static const Engine Engine_MAX =
    SigmoidParameter_Engine_Engine_MAX;
  static const int Engine_ARRAYSIZE =
    SigmoidParameter_Engine_Engine_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  Engine_descriptor() {
    return SigmoidParameter_Engine_descriptor();
  }
  static inline const ::std::string& Engine_Name(Engine value) {
    return SigmoidParameter_Engine_Name(value);
  }
  static inline bool Engine_Parse(const ::std::string& name,
      Engine* value) {
    return SigmoidParameter_Engine_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // optional .caffe.SigmoidParameter.Engine engine = 1 [default = DEFAULT];
  bool has_engine() const;
  void clear_engine();
  static const int kEngineFieldNumber = 1;
  ::caffe::SigmoidParameter_Engine engine() const;
  void set_engine(::caffe::SigmoidParameter_Engine value);

  // @@protoc_insertion_point(class_scope:caffe.SigmoidParameter)
 private:
  inline void set_has_engine();
  inline void clear_has_engine();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  int engine_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<SigmoidParameter> SigmoidParameter_default_instance_;

// -------------------------------------------------------------------

class SliceParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.SliceParameter) */ {
 public:
  SliceParameter();
  virtual ~SliceParameter();

  SliceParameter(const SliceParameter& from);

  inline SliceParameter& operator=(const SliceParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const SliceParameter& default_instance();

  static const SliceParameter* internal_default_instance();

  void Swap(SliceParameter* other);

  // implements Message ----------------------------------------------

  inline SliceParameter* New() const { return New(NULL); }

  SliceParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const SliceParameter& from);
  void MergeFrom(const SliceParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(SliceParameter* other);
  void UnsafeMergeFrom(const SliceParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional int32 axis = 3 [default = 1];
  bool has_axis() const;
  void clear_axis();
  static const int kAxisFieldNumber = 3;
  ::google::protobuf::int32 axis() const;
  void set_axis(::google::protobuf::int32 value);

  // repeated uint32 slice_point = 2;
  int slice_point_size() const;
  void clear_slice_point();
  static const int kSlicePointFieldNumber = 2;
  ::google::protobuf::uint32 slice_point(int index) const;
  void set_slice_point(int index, ::google::protobuf::uint32 value);
  void add_slice_point(::google::protobuf::uint32 value);
  const ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >&
      slice_point() const;
  ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >*
      mutable_slice_point();

  // optional uint32 slice_dim = 1 [default = 1];
  bool has_slice_dim() const;
  void clear_slice_dim();
  static const int kSliceDimFieldNumber = 1;
  ::google::protobuf::uint32 slice_dim() const;
  void set_slice_dim(::google::protobuf::uint32 value);

  // @@protoc_insertion_point(class_scope:caffe.SliceParameter)
 private:
  inline void set_has_axis();
  inline void clear_has_axis();
  inline void set_has_slice_dim();
  inline void clear_has_slice_dim();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::RepeatedField< ::google::protobuf::uint32 > slice_point_;
  ::google::protobuf::int32 axis_;
  ::google::protobuf::uint32 slice_dim_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<SliceParameter> SliceParameter_default_instance_;

// -------------------------------------------------------------------

class SoftmaxParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.SoftmaxParameter) */ {
 public:
  SoftmaxParameter();
  virtual ~SoftmaxParameter();

  SoftmaxParameter(const SoftmaxParameter& from);

  inline SoftmaxParameter& operator=(const SoftmaxParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const SoftmaxParameter& default_instance();

  static const SoftmaxParameter* internal_default_instance();

  void Swap(SoftmaxParameter* other);

  // implements Message ----------------------------------------------

  inline SoftmaxParameter* New() const { return New(NULL); }

  SoftmaxParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const SoftmaxParameter& from);
  void MergeFrom(const SoftmaxParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(SoftmaxParameter* other);
  void UnsafeMergeFrom(const SoftmaxParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  typedef SoftmaxParameter_Engine Engine;
  static const Engine DEFAULT =
    SoftmaxParameter_Engine_DEFAULT;
  static const Engine CAFFE =
    SoftmaxParameter_Engine_CAFFE;
  static const Engine CUDNN =
    SoftmaxParameter_Engine_CUDNN;
  static inline bool Engine_IsValid(int value) {
    return SoftmaxParameter_Engine_IsValid(value);
  }
  static const Engine Engine_MIN =
    SoftmaxParameter_Engine_Engine_MIN;
  static const Engine Engine_MAX =
    SoftmaxParameter_Engine_Engine_MAX;
  static const int Engine_ARRAYSIZE =
    SoftmaxParameter_Engine_Engine_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  Engine_descriptor() {
    return SoftmaxParameter_Engine_descriptor();
  }
  static inline const ::std::string& Engine_Name(Engine value) {
    return SoftmaxParameter_Engine_Name(value);
  }
  static inline bool Engine_Parse(const ::std::string& name,
      Engine* value) {
    return SoftmaxParameter_Engine_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // optional .caffe.SoftmaxParameter.Engine engine = 1 [default = DEFAULT];
  bool has_engine() const;
  void clear_engine();
  static const int kEngineFieldNumber = 1;
  ::caffe::SoftmaxParameter_Engine engine() const;
  void set_engine(::caffe::SoftmaxParameter_Engine value);

  // optional int32 axis = 2 [default = 1];
  bool has_axis() const;
  void clear_axis();
  static const int kAxisFieldNumber = 2;
  ::google::protobuf::int32 axis() const;
  void set_axis(::google::protobuf::int32 value);

  // @@protoc_insertion_point(class_scope:caffe.SoftmaxParameter)
 private:
  inline void set_has_engine();
  inline void clear_has_engine();
  inline void set_has_axis();
  inline void clear_has_axis();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  int engine_;
  ::google::protobuf::int32 axis_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<SoftmaxParameter> SoftmaxParameter_default_instance_;

// -------------------------------------------------------------------

class TanHParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.TanHParameter) */ {
 public:
  TanHParameter();
  virtual ~TanHParameter();

  TanHParameter(const TanHParameter& from);

  inline TanHParameter& operator=(const TanHParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const TanHParameter& default_instance();

  static const TanHParameter* internal_default_instance();

  void Swap(TanHParameter* other);

  // implements Message ----------------------------------------------

  inline TanHParameter* New() const { return New(NULL); }

  TanHParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const TanHParameter& from);
  void MergeFrom(const TanHParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(TanHParameter* other);
  void UnsafeMergeFrom(const TanHParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  typedef TanHParameter_Engine Engine;
  static const Engine DEFAULT =
    TanHParameter_Engine_DEFAULT;
  static const Engine CAFFE =
    TanHParameter_Engine_CAFFE;
  static const Engine CUDNN =
    TanHParameter_Engine_CUDNN;
  static inline bool Engine_IsValid(int value) {
    return TanHParameter_Engine_IsValid(value);
  }
  static const Engine Engine_MIN =
    TanHParameter_Engine_Engine_MIN;
  static const Engine Engine_MAX =
    TanHParameter_Engine_Engine_MAX;
  static const int Engine_ARRAYSIZE =
    TanHParameter_Engine_Engine_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  Engine_descriptor() {
    return TanHParameter_Engine_descriptor();
  }
  static inline const ::std::string& Engine_Name(Engine value) {
    return TanHParameter_Engine_Name(value);
  }
  static inline bool Engine_Parse(const ::std::string& name,
      Engine* value) {
    return TanHParameter_Engine_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // optional .caffe.TanHParameter.Engine engine = 1 [default = DEFAULT];
  bool has_engine() const;
  void clear_engine();
  static const int kEngineFieldNumber = 1;
  ::caffe::TanHParameter_Engine engine() const;
  void set_engine(::caffe::TanHParameter_Engine value);

  // @@protoc_insertion_point(class_scope:caffe.TanHParameter)
 private:
  inline void set_has_engine();
  inline void clear_has_engine();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  int engine_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<TanHParameter> TanHParameter_default_instance_;

// -------------------------------------------------------------------

class ThresholdParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.ThresholdParameter) */ {
 public:
  ThresholdParameter();
  virtual ~ThresholdParameter();

  ThresholdParameter(const ThresholdParameter& from);

  inline ThresholdParameter& operator=(const ThresholdParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const ThresholdParameter& default_instance();

  static const ThresholdParameter* internal_default_instance();

  void Swap(ThresholdParameter* other);

  // implements Message ----------------------------------------------

  inline ThresholdParameter* New() const { return New(NULL); }

  ThresholdParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const ThresholdParameter& from);
  void MergeFrom(const ThresholdParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(ThresholdParameter* other);
  void UnsafeMergeFrom(const ThresholdParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional float threshold = 1 [default = 0];
  bool has_threshold() const;
  void clear_threshold();
  static const int kThresholdFieldNumber = 1;
  float threshold() const;
  void set_threshold(float value);

  // @@protoc_insertion_point(class_scope:caffe.ThresholdParameter)
 private:
  inline void set_has_threshold();
  inline void clear_has_threshold();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  float threshold_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<ThresholdParameter> ThresholdParameter_default_instance_;

// -------------------------------------------------------------------

class WindowDataParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.WindowDataParameter) */ {
 public:
  WindowDataParameter();
  virtual ~WindowDataParameter();

  WindowDataParameter(const WindowDataParameter& from);

  inline WindowDataParameter& operator=(const WindowDataParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const WindowDataParameter& default_instance();

  static const WindowDataParameter* internal_default_instance();

  void Swap(WindowDataParameter* other);

  // implements Message ----------------------------------------------

  inline WindowDataParameter* New() const { return New(NULL); }

  WindowDataParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const WindowDataParameter& from);
  void MergeFrom(const WindowDataParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(WindowDataParameter* other);
  void UnsafeMergeFrom(const WindowDataParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional string source = 1;
  bool has_source() const;
  void clear_source();
  static const int kSourceFieldNumber = 1;
  const ::std::string& source() const;
  void set_source(const ::std::string& value);
  void set_source(const char* value);
  void set_source(const char* value, size_t size);
  ::std::string* mutable_source();
  ::std::string* release_source();
  void set_allocated_source(::std::string* source);

  // optional float scale = 2 [default = 1];
  bool has_scale() const;
  void clear_scale();
  static const int kScaleFieldNumber = 2;
  float scale() const;
  void set_scale(float value);

  // optional string mean_file = 3;
  bool has_mean_file() const;
  void clear_mean_file();
  static const int kMeanFileFieldNumber = 3;
  const ::std::string& mean_file() const;
  void set_mean_file(const ::std::string& value);
  void set_mean_file(const char* value);
  void set_mean_file(const char* value, size_t size);
  ::std::string* mutable_mean_file();
  ::std::string* release_mean_file();
  void set_allocated_mean_file(::std::string* mean_file);

  // optional uint32 batch_size = 4;
  bool has_batch_size() const;
  void clear_batch_size();
  static const int kBatchSizeFieldNumber = 4;
  ::google::protobuf::uint32 batch_size() const;
  void set_batch_size(::google::protobuf::uint32 value);

  // optional uint32 crop_size = 5 [default = 0];
  bool has_crop_size() const;
  void clear_crop_size();
  static const int kCropSizeFieldNumber = 5;
  ::google::protobuf::uint32 crop_size() const;
  void set_crop_size(::google::protobuf::uint32 value);

  // optional bool mirror = 6 [default = false];
  bool has_mirror() const;
  void clear_mirror();
  static const int kMirrorFieldNumber = 6;
  bool mirror() const;
  void set_mirror(bool value);

  // optional float fg_threshold = 7 [default = 0.5];
  bool has_fg_threshold() const;
  void clear_fg_threshold();
  static const int kFgThresholdFieldNumber = 7;
  float fg_threshold() const;
  void set_fg_threshold(float value);

  // optional float bg_threshold = 8 [default = 0.5];
  bool has_bg_threshold() const;
  void clear_bg_threshold();
  static const int kBgThresholdFieldNumber = 8;
  float bg_threshold() const;
  void set_bg_threshold(float value);

  // optional float fg_fraction = 9 [default = 0.25];
  bool has_fg_fraction() const;
  void clear_fg_fraction();
  static const int kFgFractionFieldNumber = 9;
  float fg_fraction() const;
  void set_fg_fraction(float value);

  // optional uint32 context_pad = 10 [default = 0];
  bool has_context_pad() const;
  void clear_context_pad();
  static const int kContextPadFieldNumber = 10;
  ::google::protobuf::uint32 context_pad() const;
  void set_context_pad(::google::protobuf::uint32 value);

  // optional string crop_mode = 11 [default = "warp"];
  bool has_crop_mode() const;
  void clear_crop_mode();
  static const int kCropModeFieldNumber = 11;
  const ::std::string& crop_mode() const;
  void set_crop_mode(const ::std::string& value);
  void set_crop_mode(const char* value);
  void set_crop_mode(const char* value, size_t size);
  ::std::string* mutable_crop_mode();
  ::std::string* release_crop_mode();
  void set_allocated_crop_mode(::std::string* crop_mode);

  // optional bool cache_images = 12 [default = false];
  bool has_cache_images() const;
  void clear_cache_images();
  static const int kCacheImagesFieldNumber = 12;
  bool cache_images() const;
  void set_cache_images(bool value);

  // optional string root_folder = 13 [default = ""];
  bool has_root_folder() const;
  void clear_root_folder();
  static const int kRootFolderFieldNumber = 13;
  const ::std::string& root_folder() const;
  void set_root_folder(const ::std::string& value);
  void set_root_folder(const char* value);
  void set_root_folder(const char* value, size_t size);
  ::std::string* mutable_root_folder();
  ::std::string* release_root_folder();
  void set_allocated_root_folder(::std::string* root_folder);

  // @@protoc_insertion_point(class_scope:caffe.WindowDataParameter)
 private:
  inline void set_has_source();
  inline void clear_has_source();
  inline void set_has_scale();
  inline void clear_has_scale();
  inline void set_has_mean_file();
  inline void clear_has_mean_file();
  inline void set_has_batch_size();
  inline void clear_has_batch_size();
  inline void set_has_crop_size();
  inline void clear_has_crop_size();
  inline void set_has_mirror();
  inline void clear_has_mirror();
  inline void set_has_fg_threshold();
  inline void clear_has_fg_threshold();
  inline void set_has_bg_threshold();
  inline void clear_has_bg_threshold();
  inline void set_has_fg_fraction();
  inline void clear_has_fg_fraction();
  inline void set_has_context_pad();
  inline void clear_has_context_pad();
  inline void set_has_crop_mode();
  inline void clear_has_crop_mode();
  inline void set_has_cache_images();
  inline void clear_has_cache_images();
  inline void set_has_root_folder();
  inline void clear_has_root_folder();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::internal::ArenaStringPtr source_;
  ::google::protobuf::internal::ArenaStringPtr mean_file_;
  static ::std::string* _default_crop_mode_;
  ::google::protobuf::internal::ArenaStringPtr crop_mode_;
  ::google::protobuf::internal::ArenaStringPtr root_folder_;
  ::google::protobuf::uint32 batch_size_;
  ::google::protobuf::uint32 crop_size_;
  bool mirror_;
  bool cache_images_;
  ::google::protobuf::uint32 context_pad_;
  float scale_;
  float fg_threshold_;
  float bg_threshold_;
  float fg_fraction_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<WindowDataParameter> WindowDataParameter_default_instance_;

// -------------------------------------------------------------------

class SPPParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.SPPParameter) */ {
 public:
  SPPParameter();
  virtual ~SPPParameter();

  SPPParameter(const SPPParameter& from);

  inline SPPParameter& operator=(const SPPParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const SPPParameter& default_instance();

  static const SPPParameter* internal_default_instance();

  void Swap(SPPParameter* other);

  // implements Message ----------------------------------------------

  inline SPPParameter* New() const { return New(NULL); }

  SPPParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const SPPParameter& from);
  void MergeFrom(const SPPParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(SPPParameter* other);
  void UnsafeMergeFrom(const SPPParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  typedef SPPParameter_PoolMethod PoolMethod;
  static const PoolMethod MAX =
    SPPParameter_PoolMethod_MAX;
  static const PoolMethod AVE =
    SPPParameter_PoolMethod_AVE;
  static const PoolMethod STOCHASTIC =
    SPPParameter_PoolMethod_STOCHASTIC;
  static inline bool PoolMethod_IsValid(int value) {
    return SPPParameter_PoolMethod_IsValid(value);
  }
  static const PoolMethod PoolMethod_MIN =
    SPPParameter_PoolMethod_PoolMethod_MIN;
  static const PoolMethod PoolMethod_MAX =
    SPPParameter_PoolMethod_PoolMethod_MAX;
  static const int PoolMethod_ARRAYSIZE =
    SPPParameter_PoolMethod_PoolMethod_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  PoolMethod_descriptor() {
    return SPPParameter_PoolMethod_descriptor();
  }
  static inline const ::std::string& PoolMethod_Name(PoolMethod value) {
    return SPPParameter_PoolMethod_Name(value);
  }
  static inline bool PoolMethod_Parse(const ::std::string& name,
      PoolMethod* value) {
    return SPPParameter_PoolMethod_Parse(name, value);
  }

  typedef SPPParameter_Engine Engine;
  static const Engine DEFAULT =
    SPPParameter_Engine_DEFAULT;
  static const Engine CAFFE =
    SPPParameter_Engine_CAFFE;
  static const Engine CUDNN =
    SPPParameter_Engine_CUDNN;
  static inline bool Engine_IsValid(int value) {
    return SPPParameter_Engine_IsValid(value);
  }
  static const Engine Engine_MIN =
    SPPParameter_Engine_Engine_MIN;
  static const Engine Engine_MAX =
    SPPParameter_Engine_Engine_MAX;
  static const int Engine_ARRAYSIZE =
    SPPParameter_Engine_Engine_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  Engine_descriptor() {
    return SPPParameter_Engine_descriptor();
  }
  static inline const ::std::string& Engine_Name(Engine value) {
    return SPPParameter_Engine_Name(value);
  }
  static inline bool Engine_Parse(const ::std::string& name,
      Engine* value) {
    return SPPParameter_Engine_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // optional uint32 pyramid_height = 1;
  bool has_pyramid_height() const;
  void clear_pyramid_height();
  static const int kPyramidHeightFieldNumber = 1;
  ::google::protobuf::uint32 pyramid_height() const;
  void set_pyramid_height(::google::protobuf::uint32 value);

  // optional .caffe.SPPParameter.PoolMethod pool = 2 [default = MAX];
  bool has_pool() const;
  void clear_pool();
  static const int kPoolFieldNumber = 2;
  ::caffe::SPPParameter_PoolMethod pool() const;
  void set_pool(::caffe::SPPParameter_PoolMethod value);

  // optional .caffe.SPPParameter.Engine engine = 6 [default = DEFAULT];
  bool has_engine() const;
  void clear_engine();
  static const int kEngineFieldNumber = 6;
  ::caffe::SPPParameter_Engine engine() const;
  void set_engine(::caffe::SPPParameter_Engine value);

  // @@protoc_insertion_point(class_scope:caffe.SPPParameter)
 private:
  inline void set_has_pyramid_height();
  inline void clear_has_pyramid_height();
  inline void set_has_pool();
  inline void clear_has_pool();
  inline void set_has_engine();
  inline void clear_has_engine();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::google::protobuf::uint32 pyramid_height_;
  int pool_;
  int engine_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<SPPParameter> SPPParameter_default_instance_;

// -------------------------------------------------------------------

class V1LayerParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.V1LayerParameter) */ {
 public:
  V1LayerParameter();
  virtual ~V1LayerParameter();

  V1LayerParameter(const V1LayerParameter& from);

  inline V1LayerParameter& operator=(const V1LayerParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const V1LayerParameter& default_instance();

  static const V1LayerParameter* internal_default_instance();

  void Swap(V1LayerParameter* other);

  // implements Message ----------------------------------------------

  inline V1LayerParameter* New() const { return New(NULL); }

  V1LayerParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const V1LayerParameter& from);
  void MergeFrom(const V1LayerParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(V1LayerParameter* other);
  void UnsafeMergeFrom(const V1LayerParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  typedef V1LayerParameter_LayerType LayerType;
  static const LayerType NONE =
    V1LayerParameter_LayerType_NONE;
  static const LayerType ABSVAL =
    V1LayerParameter_LayerType_ABSVAL;
  static const LayerType ACCURACY =
    V1LayerParameter_LayerType_ACCURACY;
  static const LayerType ARGMAX =
    V1LayerParameter_LayerType_ARGMAX;
  static const LayerType BNLL =
    V1LayerParameter_LayerType_BNLL;
  static const LayerType CONCAT =
    V1LayerParameter_LayerType_CONCAT;
  static const LayerType CONTRASTIVE_LOSS =
    V1LayerParameter_LayerType_CONTRASTIVE_LOSS;
  static const LayerType CONVOLUTION =
    V1LayerParameter_LayerType_CONVOLUTION;
  static const LayerType DATA =
    V1LayerParameter_LayerType_DATA;
  static const LayerType DECONVOLUTION =
    V1LayerParameter_LayerType_DECONVOLUTION;
  static const LayerType DROPOUT =
    V1LayerParameter_LayerType_DROPOUT;
  static const LayerType DUMMY_DATA =
    V1LayerParameter_LayerType_DUMMY_DATA;
  static const LayerType EUCLIDEAN_LOSS =
    V1LayerParameter_LayerType_EUCLIDEAN_LOSS;
  static const LayerType ELTWISE =
    V1LayerParameter_LayerType_ELTWISE;
  static const LayerType EXP =
    V1LayerParameter_LayerType_EXP;
  static const LayerType FLATTEN =
    V1LayerParameter_LayerType_FLATTEN;
  static const LayerType HDF5_DATA =
    V1LayerParameter_LayerType_HDF5_DATA;
  static const LayerType HDF5_OUTPUT =
    V1LayerParameter_LayerType_HDF5_OUTPUT;
  static const LayerType HINGE_LOSS =
    V1LayerParameter_LayerType_HINGE_LOSS;
  static const LayerType IM2COL =
    V1LayerParameter_LayerType_IM2COL;
  static const LayerType IMAGE_DATA =
    V1LayerParameter_LayerType_IMAGE_DATA;
  static const LayerType INFOGAIN_LOSS =
    V1LayerParameter_LayerType_INFOGAIN_LOSS;
  static const LayerType INNER_PRODUCT =
    V1LayerParameter_LayerType_INNER_PRODUCT;
  static const LayerType LRN =
    V1LayerParameter_LayerType_LRN;
  static const LayerType MEMORY_DATA =
    V1LayerParameter_LayerType_MEMORY_DATA;
  static const LayerType MULTINOMIAL_LOGISTIC_LOSS =
    V1LayerParameter_LayerType_MULTINOMIAL_LOGISTIC_LOSS;
  static const LayerType MVN =
    V1LayerParameter_LayerType_MVN;
  static const LayerType POOLING =
    V1LayerParameter_LayerType_POOLING;
  static const LayerType POWER =
    V1LayerParameter_LayerType_POWER;
  static const LayerType RELU =
    V1LayerParameter_LayerType_RELU;
  static const LayerType SIGMOID =
    V1LayerParameter_LayerType_SIGMOID;
  static const LayerType SIGMOID_CROSS_ENTROPY_LOSS =
    V1LayerParameter_LayerType_SIGMOID_CROSS_ENTROPY_LOSS;
  static const LayerType SILENCE =
    V1LayerParameter_LayerType_SILENCE;
  static const LayerType SOFTMAX =
    V1LayerParameter_LayerType_SOFTMAX;
  static const LayerType SOFTMAX_LOSS =
    V1LayerParameter_LayerType_SOFTMAX_LOSS;
  static const LayerType SPLIT =
    V1LayerParameter_LayerType_SPLIT;
  static const LayerType SLICE =
    V1LayerParameter_LayerType_SLICE;
  static const LayerType TANH =
    V1LayerParameter_LayerType_TANH;
  static const LayerType WINDOW_DATA =
    V1LayerParameter_LayerType_WINDOW_DATA;
  static const LayerType THRESHOLD =
    V1LayerParameter_LayerType_THRESHOLD;
  static inline bool LayerType_IsValid(int value) {
    return V1LayerParameter_LayerType_IsValid(value);
  }
  static const LayerType LayerType_MIN =
    V1LayerParameter_LayerType_LayerType_MIN;
  static const LayerType LayerType_MAX =
    V1LayerParameter_LayerType_LayerType_MAX;
  static const int LayerType_ARRAYSIZE =
    V1LayerParameter_LayerType_LayerType_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  LayerType_descriptor() {
    return V1LayerParameter_LayerType_descriptor();
  }
  static inline const ::std::string& LayerType_Name(LayerType value) {
    return V1LayerParameter_LayerType_Name(value);
  }
  static inline bool LayerType_Parse(const ::std::string& name,
      LayerType* value) {
    return V1LayerParameter_LayerType_Parse(name, value);
  }

  typedef V1LayerParameter_DimCheckMode DimCheckMode;
  static const DimCheckMode STRICT =
    V1LayerParameter_DimCheckMode_STRICT;
  static const DimCheckMode PERMISSIVE =
    V1LayerParameter_DimCheckMode_PERMISSIVE;
  static inline bool DimCheckMode_IsValid(int value) {
    return V1LayerParameter_DimCheckMode_IsValid(value);
  }
  static const DimCheckMode DimCheckMode_MIN =
    V1LayerParameter_DimCheckMode_DimCheckMode_MIN;
  static const DimCheckMode DimCheckMode_MAX =
    V1LayerParameter_DimCheckMode_DimCheckMode_MAX;
  static const int DimCheckMode_ARRAYSIZE =
    V1LayerParameter_DimCheckMode_DimCheckMode_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  DimCheckMode_descriptor() {
    return V1LayerParameter_DimCheckMode_descriptor();
  }
  static inline const ::std::string& DimCheckMode_Name(DimCheckMode value) {
    return V1LayerParameter_DimCheckMode_Name(value);
  }
  static inline bool DimCheckMode_Parse(const ::std::string& name,
      DimCheckMode* value) {
    return V1LayerParameter_DimCheckMode_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // repeated string bottom = 2;
  int bottom_size() const;
  void clear_bottom();
  static const int kBottomFieldNumber = 2;
  const ::std::string& bottom(int index) const;
  ::std::string* mutable_bottom(int index);
  void set_bottom(int index, const ::std::string& value);
  void set_bottom(int index, const char* value);
  void set_bottom(int index, const char* value, size_t size);
  ::std::string* add_bottom();
  void add_bottom(const ::std::string& value);
  void add_bottom(const char* value);
  void add_bottom(const char* value, size_t size);
  const ::google::protobuf::RepeatedPtrField< ::std::string>& bottom() const;
  ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_bottom();

  // repeated string top = 3;
  int top_size() const;
  void clear_top();
  static const int kTopFieldNumber = 3;
  const ::std::string& top(int index) const;
  ::std::string* mutable_top(int index);
  void set_top(int index, const ::std::string& value);
  void set_top(int index, const char* value);
  void set_top(int index, const char* value, size_t size);
  ::std::string* add_top();
  void add_top(const ::std::string& value);
  void add_top(const char* value);
  void add_top(const char* value, size_t size);
  const ::google::protobuf::RepeatedPtrField< ::std::string>& top() const;
  ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_top();

  // optional string name = 4;
  bool has_name() const;
  void clear_name();
  static const int kNameFieldNumber = 4;
  const ::std::string& name() const;
  void set_name(const ::std::string& value);
  void set_name(const char* value);
  void set_name(const char* value, size_t size);
  ::std::string* mutable_name();
  ::std::string* release_name();
  void set_allocated_name(::std::string* name);

  // repeated .caffe.NetStateRule include = 32;
  int include_size() const;
  void clear_include();
  static const int kIncludeFieldNumber = 32;
  const ::caffe::NetStateRule& include(int index) const;
  ::caffe::NetStateRule* mutable_include(int index);
  ::caffe::NetStateRule* add_include();
  ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule >*
      mutable_include();
  const ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule >&
      include() const;

  // repeated .caffe.NetStateRule exclude = 33;
  int exclude_size() const;
  void clear_exclude();
  static const int kExcludeFieldNumber = 33;
  const ::caffe::NetStateRule& exclude(int index) const;
  ::caffe::NetStateRule* mutable_exclude(int index);
  ::caffe::NetStateRule* add_exclude();
  ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule >*
      mutable_exclude();
  const ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule >&
      exclude() const;

  // optional .caffe.V1LayerParameter.LayerType type = 5;
  bool has_type() const;
  void clear_type();
  static const int kTypeFieldNumber = 5;
  ::caffe::V1LayerParameter_LayerType type() const;
  void set_type(::caffe::V1LayerParameter_LayerType value);

  // repeated .caffe.BlobProto blobs = 6;
  int blobs_size() const;
  void clear_blobs();
  static const int kBlobsFieldNumber = 6;
  const ::caffe::BlobProto& blobs(int index) const;
  ::caffe::BlobProto* mutable_blobs(int index);
  ::caffe::BlobProto* add_blobs();
  ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto >*
      mutable_blobs();
  const ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto >&
      blobs() const;

  // repeated string param = 1001;
  int param_size() const;
  void clear_param();
  static const int kParamFieldNumber = 1001;
  const ::std::string& param(int index) const;
  ::std::string* mutable_param(int index);
  void set_param(int index, const ::std::string& value);
  void set_param(int index, const char* value);
  void set_param(int index, const char* value, size_t size);
  ::std::string* add_param();
  void add_param(const ::std::string& value);
  void add_param(const char* value);
  void add_param(const char* value, size_t size);
  const ::google::protobuf::RepeatedPtrField< ::std::string>& param() const;
  ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_param();

  // repeated .caffe.V1LayerParameter.DimCheckMode blob_share_mode = 1002;
  int blob_share_mode_size() const;
  void clear_blob_share_mode();
  static const int kBlobShareModeFieldNumber = 1002;
  ::caffe::V1LayerParameter_DimCheckMode blob_share_mode(int index) const;
  void set_blob_share_mode(int index, ::caffe::V1LayerParameter_DimCheckMode value);
  void add_blob_share_mode(::caffe::V1LayerParameter_DimCheckMode value);
  const ::google::protobuf::RepeatedField<int>& blob_share_mode() const;
  ::google::protobuf::RepeatedField<int>* mutable_blob_share_mode();

  // repeated float blobs_lr = 7;
  int blobs_lr_size() const;
  void clear_blobs_lr();
  static const int kBlobsLrFieldNumber = 7;
  float blobs_lr(int index) const;
  void set_blobs_lr(int index, float value);
  void add_blobs_lr(float value);
  const ::google::protobuf::RepeatedField< float >&
      blobs_lr() const;
  ::google::protobuf::RepeatedField< float >*
      mutable_blobs_lr();

  // repeated float weight_decay = 8;
  int weight_decay_size() const;
  void clear_weight_decay();
  static const int kWeightDecayFieldNumber = 8;
  float weight_decay(int index) const;
  void set_weight_decay(int index, float value);
  void add_weight_decay(float value);
  const ::google::protobuf::RepeatedField< float >&
      weight_decay() const;
  ::google::protobuf::RepeatedField< float >*
      mutable_weight_decay();

  // repeated float loss_weight = 35;
  int loss_weight_size() const;
  void clear_loss_weight();
  static const int kLossWeightFieldNumber = 35;
  float loss_weight(int index) const;
  void set_loss_weight(int index, float value);
  void add_loss_weight(float value);
  const ::google::protobuf::RepeatedField< float >&
      loss_weight() const;
  ::google::protobuf::RepeatedField< float >*
      mutable_loss_weight();

  // optional .caffe.AccuracyParameter accuracy_param = 27;
  bool has_accuracy_param() const;
  void clear_accuracy_param();
  static const int kAccuracyParamFieldNumber = 27;
  const ::caffe::AccuracyParameter& accuracy_param() const;
  ::caffe::AccuracyParameter* mutable_accuracy_param();
  ::caffe::AccuracyParameter* release_accuracy_param();
  void set_allocated_accuracy_param(::caffe::AccuracyParameter* accuracy_param);

  // optional .caffe.ArgMaxParameter argmax_param = 23;
  bool has_argmax_param() const;
  void clear_argmax_param();
  static const int kArgmaxParamFieldNumber = 23;
  const ::caffe::ArgMaxParameter& argmax_param() const;
  ::caffe::ArgMaxParameter* mutable_argmax_param();
  ::caffe::ArgMaxParameter* release_argmax_param();
  void set_allocated_argmax_param(::caffe::ArgMaxParameter* argmax_param);

  // optional .caffe.ConcatParameter concat_param = 9;
  bool has_concat_param() const;
  void clear_concat_param();
  static const int kConcatParamFieldNumber = 9;
  const ::caffe::ConcatParameter& concat_param() const;
  ::caffe::ConcatParameter* mutable_concat_param();
  ::caffe::ConcatParameter* release_concat_param();
  void set_allocated_concat_param(::caffe::ConcatParameter* concat_param);

  // optional .caffe.ContrastiveLossParameter contrastive_loss_param = 40;
  bool has_contrastive_loss_param() const;
  void clear_contrastive_loss_param();
  static const int kContrastiveLossParamFieldNumber = 40;
  const ::caffe::ContrastiveLossParameter& contrastive_loss_param() const;
  ::caffe::ContrastiveLossParameter* mutable_contrastive_loss_param();
  ::caffe::ContrastiveLossParameter* release_contrastive_loss_param();
  void set_allocated_contrastive_loss_param(::caffe::ContrastiveLossParameter* contrastive_loss_param);

  // optional .caffe.ConvolutionParameter convolution_param = 10;
  bool has_convolution_param() const;
  void clear_convolution_param();
  static const int kConvolutionParamFieldNumber = 10;
  const ::caffe::ConvolutionParameter& convolution_param() const;
  ::caffe::ConvolutionParameter* mutable_convolution_param();
  ::caffe::ConvolutionParameter* release_convolution_param();
  void set_allocated_convolution_param(::caffe::ConvolutionParameter* convolution_param);

  // optional .caffe.DataParameter data_param = 11;
  bool has_data_param() const;
  void clear_data_param();
  static const int kDataParamFieldNumber = 11;
  const ::caffe::DataParameter& data_param() const;
  ::caffe::DataParameter* mutable_data_param();
  ::caffe::DataParameter* release_data_param();
  void set_allocated_data_param(::caffe::DataParameter* data_param);

  // optional .caffe.DropoutParameter dropout_param = 12;
  bool has_dropout_param() const;
  void clear_dropout_param();
  static const int kDropoutParamFieldNumber = 12;
  const ::caffe::DropoutParameter& dropout_param() const;
  ::caffe::DropoutParameter* mutable_dropout_param();
  ::caffe::DropoutParameter* release_dropout_param();
  void set_allocated_dropout_param(::caffe::DropoutParameter* dropout_param);

  // optional .caffe.DummyDataParameter dummy_data_param = 26;
  bool has_dummy_data_param() const;
  void clear_dummy_data_param();
  static const int kDummyDataParamFieldNumber = 26;
  const ::caffe::DummyDataParameter& dummy_data_param() const;
  ::caffe::DummyDataParameter* mutable_dummy_data_param();
  ::caffe::DummyDataParameter* release_dummy_data_param();
  void set_allocated_dummy_data_param(::caffe::DummyDataParameter* dummy_data_param);

  // optional .caffe.EltwiseParameter eltwise_param = 24;
  bool has_eltwise_param() const;
  void clear_eltwise_param();
  static const int kEltwiseParamFieldNumber = 24;
  const ::caffe::EltwiseParameter& eltwise_param() const;
  ::caffe::EltwiseParameter* mutable_eltwise_param();
  ::caffe::EltwiseParameter* release_eltwise_param();
  void set_allocated_eltwise_param(::caffe::EltwiseParameter* eltwise_param);

  // optional .caffe.ExpParameter exp_param = 41;
  bool has_exp_param() const;
  void clear_exp_param();
  static const int kExpParamFieldNumber = 41;
  const ::caffe::ExpParameter& exp_param() const;
  ::caffe::ExpParameter* mutable_exp_param();
  ::caffe::ExpParameter* release_exp_param();
  void set_allocated_exp_param(::caffe::ExpParameter* exp_param);

  // optional .caffe.HDF5DataParameter hdf5_data_param = 13;
  bool has_hdf5_data_param() const;
  void clear_hdf5_data_param();
  static const int kHdf5DataParamFieldNumber = 13;
  const ::caffe::HDF5DataParameter& hdf5_data_param() const;
  ::caffe::HDF5DataParameter* mutable_hdf5_data_param();
  ::caffe::HDF5DataParameter* release_hdf5_data_param();
  void set_allocated_hdf5_data_param(::caffe::HDF5DataParameter* hdf5_data_param);

  // optional .caffe.HDF5OutputParameter hdf5_output_param = 14;
  bool has_hdf5_output_param() const;
  void clear_hdf5_output_param();
  static const int kHdf5OutputParamFieldNumber = 14;
  const ::caffe::HDF5OutputParameter& hdf5_output_param() const;
  ::caffe::HDF5OutputParameter* mutable_hdf5_output_param();
  ::caffe::HDF5OutputParameter* release_hdf5_output_param();
  void set_allocated_hdf5_output_param(::caffe::HDF5OutputParameter* hdf5_output_param);

  // optional .caffe.HingeLossParameter hinge_loss_param = 29;
  bool has_hinge_loss_param() const;
  void clear_hinge_loss_param();
  static const int kHingeLossParamFieldNumber = 29;
  const ::caffe::HingeLossParameter& hinge_loss_param() const;
  ::caffe::HingeLossParameter* mutable_hinge_loss_param();
  ::caffe::HingeLossParameter* release_hinge_loss_param();
  void set_allocated_hinge_loss_param(::caffe::HingeLossParameter* hinge_loss_param);

  // optional .caffe.ImageDataParameter image_data_param = 15;
  bool has_image_data_param() const;
  void clear_image_data_param();
  static const int kImageDataParamFieldNumber = 15;
  const ::caffe::ImageDataParameter& image_data_param() const;
  ::caffe::ImageDataParameter* mutable_image_data_param();
  ::caffe::ImageDataParameter* release_image_data_param();
  void set_allocated_image_data_param(::caffe::ImageDataParameter* image_data_param);

  // optional .caffe.InfogainLossParameter infogain_loss_param = 16;
  bool has_infogain_loss_param() const;
  void clear_infogain_loss_param();
  static const int kInfogainLossParamFieldNumber = 16;
  const ::caffe::InfogainLossParameter& infogain_loss_param() const;
  ::caffe::InfogainLossParameter* mutable_infogain_loss_param();
  ::caffe::InfogainLossParameter* release_infogain_loss_param();
  void set_allocated_infogain_loss_param(::caffe::InfogainLossParameter* infogain_loss_param);

  // optional .caffe.InnerProductParameter inner_product_param = 17;
  bool has_inner_product_param() const;
  void clear_inner_product_param();
  static const int kInnerProductParamFieldNumber = 17;
  const ::caffe::InnerProductParameter& inner_product_param() const;
  ::caffe::InnerProductParameter* mutable_inner_product_param();
  ::caffe::InnerProductParameter* release_inner_product_param();
  void set_allocated_inner_product_param(::caffe::InnerProductParameter* inner_product_param);

  // optional .caffe.LRNParameter lrn_param = 18;
  bool has_lrn_param() const;
  void clear_lrn_param();
  static const int kLrnParamFieldNumber = 18;
  const ::caffe::LRNParameter& lrn_param() const;
  ::caffe::LRNParameter* mutable_lrn_param();
  ::caffe::LRNParameter* release_lrn_param();
  void set_allocated_lrn_param(::caffe::LRNParameter* lrn_param);

  // optional .caffe.MemoryDataParameter memory_data_param = 22;
  bool has_memory_data_param() const;
  void clear_memory_data_param();
  static const int kMemoryDataParamFieldNumber = 22;
  const ::caffe::MemoryDataParameter& memory_data_param() const;
  ::caffe::MemoryDataParameter* mutable_memory_data_param();
  ::caffe::MemoryDataParameter* release_memory_data_param();
  void set_allocated_memory_data_param(::caffe::MemoryDataParameter* memory_data_param);

  // optional .caffe.MVNParameter mvn_param = 34;
  bool has_mvn_param() const;
  void clear_mvn_param();
  static const int kMvnParamFieldNumber = 34;
  const ::caffe::MVNParameter& mvn_param() const;
  ::caffe::MVNParameter* mutable_mvn_param();
  ::caffe::MVNParameter* release_mvn_param();
  void set_allocated_mvn_param(::caffe::MVNParameter* mvn_param);

  // optional .caffe.PoolingParameter pooling_param = 19;
  bool has_pooling_param() const;
  void clear_pooling_param();
  static const int kPoolingParamFieldNumber = 19;
  const ::caffe::PoolingParameter& pooling_param() const;
  ::caffe::PoolingParameter* mutable_pooling_param();
  ::caffe::PoolingParameter* release_pooling_param();
  void set_allocated_pooling_param(::caffe::PoolingParameter* pooling_param);

  // optional .caffe.PowerParameter power_param = 21;
  bool has_power_param() const;
  void clear_power_param();
  static const int kPowerParamFieldNumber = 21;
  const ::caffe::PowerParameter& power_param() const;
  ::caffe::PowerParameter* mutable_power_param();
  ::caffe::PowerParameter* release_power_param();
  void set_allocated_power_param(::caffe::PowerParameter* power_param);

  // optional .caffe.ReLUParameter relu_param = 30;
  bool has_relu_param() const;
  void clear_relu_param();
  static const int kReluParamFieldNumber = 30;
  const ::caffe::ReLUParameter& relu_param() const;
  ::caffe::ReLUParameter* mutable_relu_param();
  ::caffe::ReLUParameter* release_relu_param();
  void set_allocated_relu_param(::caffe::ReLUParameter* relu_param);

  // optional .caffe.SigmoidParameter sigmoid_param = 38;
  bool has_sigmoid_param() const;
  void clear_sigmoid_param();
  static const int kSigmoidParamFieldNumber = 38;
  const ::caffe::SigmoidParameter& sigmoid_param() const;
  ::caffe::SigmoidParameter* mutable_sigmoid_param();
  ::caffe::SigmoidParameter* release_sigmoid_param();
  void set_allocated_sigmoid_param(::caffe::SigmoidParameter* sigmoid_param);

  // optional .caffe.SoftmaxParameter softmax_param = 39;
  bool has_softmax_param() const;
  void clear_softmax_param();
  static const int kSoftmaxParamFieldNumber = 39;
  const ::caffe::SoftmaxParameter& softmax_param() const;
  ::caffe::SoftmaxParameter* mutable_softmax_param();
  ::caffe::SoftmaxParameter* release_softmax_param();
  void set_allocated_softmax_param(::caffe::SoftmaxParameter* softmax_param);

  // optional .caffe.SliceParameter slice_param = 31;
  bool has_slice_param() const;
  void clear_slice_param();
  static const int kSliceParamFieldNumber = 31;
  const ::caffe::SliceParameter& slice_param() const;
  ::caffe::SliceParameter* mutable_slice_param();
  ::caffe::SliceParameter* release_slice_param();
  void set_allocated_slice_param(::caffe::SliceParameter* slice_param);

  // optional .caffe.TanHParameter tanh_param = 37;
  bool has_tanh_param() const;
  void clear_tanh_param();
  static const int kTanhParamFieldNumber = 37;
  const ::caffe::TanHParameter& tanh_param() const;
  ::caffe::TanHParameter* mutable_tanh_param();
  ::caffe::TanHParameter* release_tanh_param();
  void set_allocated_tanh_param(::caffe::TanHParameter* tanh_param);

  // optional .caffe.ThresholdParameter threshold_param = 25;
  bool has_threshold_param() const;
  void clear_threshold_param();
  static const int kThresholdParamFieldNumber = 25;
  const ::caffe::ThresholdParameter& threshold_param() const;
  ::caffe::ThresholdParameter* mutable_threshold_param();
  ::caffe::ThresholdParameter* release_threshold_param();
  void set_allocated_threshold_param(::caffe::ThresholdParameter* threshold_param);

  // optional .caffe.WindowDataParameter window_data_param = 20;
  bool has_window_data_param() const;
  void clear_window_data_param();
  static const int kWindowDataParamFieldNumber = 20;
  const ::caffe::WindowDataParameter& window_data_param() const;
  ::caffe::WindowDataParameter* mutable_window_data_param();
  ::caffe::WindowDataParameter* release_window_data_param();
  void set_allocated_window_data_param(::caffe::WindowDataParameter* window_data_param);

  // optional .caffe.TransformationParameter transform_param = 36;
  bool has_transform_param() const;
  void clear_transform_param();
  static const int kTransformParamFieldNumber = 36;
  const ::caffe::TransformationParameter& transform_param() const;
  ::caffe::TransformationParameter* mutable_transform_param();
  ::caffe::TransformationParameter* release_transform_param();
  void set_allocated_transform_param(::caffe::TransformationParameter* transform_param);

  // optional .caffe.LossParameter loss_param = 42;
  bool has_loss_param() const;
  void clear_loss_param();
  static const int kLossParamFieldNumber = 42;
  const ::caffe::LossParameter& loss_param() const;
  ::caffe::LossParameter* mutable_loss_param();
  ::caffe::LossParameter* release_loss_param();
  void set_allocated_loss_param(::caffe::LossParameter* loss_param);

  // optional .caffe.V0LayerParameter layer = 1;
  bool has_layer() const;
  void clear_layer();
  static const int kLayerFieldNumber = 1;
  const ::caffe::V0LayerParameter& layer() const;
  ::caffe::V0LayerParameter* mutable_layer();
  ::caffe::V0LayerParameter* release_layer();
  void set_allocated_layer(::caffe::V0LayerParameter* layer);

  // @@protoc_insertion_point(class_scope:caffe.V1LayerParameter)
 private:
  inline void set_has_name();
  inline void clear_has_name();
  inline void set_has_type();
  inline void clear_has_type();
  inline void set_has_accuracy_param();
  inline void clear_has_accuracy_param();
  inline void set_has_argmax_param();
  inline void clear_has_argmax_param();
  inline void set_has_concat_param();
  inline void clear_has_concat_param();
  inline void set_has_contrastive_loss_param();
  inline void clear_has_contrastive_loss_param();
  inline void set_has_convolution_param();
  inline void clear_has_convolution_param();
  inline void set_has_data_param();
  inline void clear_has_data_param();
  inline void set_has_dropout_param();
  inline void clear_has_dropout_param();
  inline void set_has_dummy_data_param();
  inline void clear_has_dummy_data_param();
  inline void set_has_eltwise_param();
  inline void clear_has_eltwise_param();
  inline void set_has_exp_param();
  inline void clear_has_exp_param();
  inline void set_has_hdf5_data_param();
  inline void clear_has_hdf5_data_param();
  inline void set_has_hdf5_output_param();
  inline void clear_has_hdf5_output_param();
  inline void set_has_hinge_loss_param();
  inline void clear_has_hinge_loss_param();
  inline void set_has_image_data_param();
  inline void clear_has_image_data_param();
  inline void set_has_infogain_loss_param();
  inline void clear_has_infogain_loss_param();
  inline void set_has_inner_product_param();
  inline void clear_has_inner_product_param();
  inline void set_has_lrn_param();
  inline void clear_has_lrn_param();
  inline void set_has_memory_data_param();
  inline void clear_has_memory_data_param();
  inline void set_has_mvn_param();
  inline void clear_has_mvn_param();
  inline void set_has_pooling_param();
  inline void clear_has_pooling_param();
  inline void set_has_power_param();
  inline void clear_has_power_param();
  inline void set_has_relu_param();
  inline void clear_has_relu_param();
  inline void set_has_sigmoid_param();
  inline void clear_has_sigmoid_param();
  inline void set_has_softmax_param();
  inline void clear_has_softmax_param();
  inline void set_has_slice_param();
  inline void clear_has_slice_param();
  inline void set_has_tanh_param();
  inline void clear_has_tanh_param();
  inline void set_has_threshold_param();
  inline void clear_has_threshold_param();
  inline void set_has_window_data_param();
  inline void clear_has_window_data_param();
  inline void set_has_transform_param();
  inline void clear_has_transform_param();
  inline void set_has_loss_param();
  inline void clear_has_loss_param();
  inline void set_has_layer();
  inline void clear_has_layer();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<2> _has_bits_;
  ::google::protobuf::RepeatedPtrField< ::std::string> bottom_;
  ::google::protobuf::RepeatedPtrField< ::std::string> top_;
  ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule > include_;
  ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule > exclude_;
  ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto > blobs_;
  ::google::protobuf::RepeatedPtrField< ::std::string> param_;
  ::google::protobuf::RepeatedField<int> blob_share_mode_;
  ::google::protobuf::RepeatedField< float > blobs_lr_;
  ::google::protobuf::RepeatedField< float > weight_decay_;
  ::google::protobuf::RepeatedField< float > loss_weight_;
  ::google::protobuf::internal::ArenaStringPtr name_;
  ::caffe::AccuracyParameter* accuracy_param_;
  ::caffe::ArgMaxParameter* argmax_param_;
  ::caffe::ConcatParameter* concat_param_;
  ::caffe::ContrastiveLossParameter* contrastive_loss_param_;
  ::caffe::ConvolutionParameter* convolution_param_;
  ::caffe::DataParameter* data_param_;
  ::caffe::DropoutParameter* dropout_param_;
  ::caffe::DummyDataParameter* dummy_data_param_;
  ::caffe::EltwiseParameter* eltwise_param_;
  ::caffe::ExpParameter* exp_param_;
  ::caffe::HDF5DataParameter* hdf5_data_param_;
  ::caffe::HDF5OutputParameter* hdf5_output_param_;
  ::caffe::HingeLossParameter* hinge_loss_param_;
  ::caffe::ImageDataParameter* image_data_param_;
  ::caffe::InfogainLossParameter* infogain_loss_param_;
  ::caffe::InnerProductParameter* inner_product_param_;
  ::caffe::LRNParameter* lrn_param_;
  ::caffe::MemoryDataParameter* memory_data_param_;
  ::caffe::MVNParameter* mvn_param_;
  ::caffe::PoolingParameter* pooling_param_;
  ::caffe::PowerParameter* power_param_;
  ::caffe::ReLUParameter* relu_param_;
  ::caffe::SigmoidParameter* sigmoid_param_;
  ::caffe::SoftmaxParameter* softmax_param_;
  ::caffe::SliceParameter* slice_param_;
  ::caffe::TanHParameter* tanh_param_;
  ::caffe::ThresholdParameter* threshold_param_;
  ::caffe::WindowDataParameter* window_data_param_;
  ::caffe::TransformationParameter* transform_param_;
  ::caffe::LossParameter* loss_param_;
  ::caffe::V0LayerParameter* layer_;
  int type_;
  mutable int _cached_size_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<V1LayerParameter> V1LayerParameter_default_instance_;

// -------------------------------------------------------------------

class V0LayerParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.V0LayerParameter) */ {
 public:
  V0LayerParameter();
  virtual ~V0LayerParameter();

  V0LayerParameter(const V0LayerParameter& from);

  inline V0LayerParameter& operator=(const V0LayerParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const V0LayerParameter& default_instance();

  static const V0LayerParameter* internal_default_instance();

  void Swap(V0LayerParameter* other);

  // implements Message ----------------------------------------------

  inline V0LayerParameter* New() const { return New(NULL); }

  V0LayerParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const V0LayerParameter& from);
  void MergeFrom(const V0LayerParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(V0LayerParameter* other);
  void UnsafeMergeFrom(const V0LayerParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  typedef V0LayerParameter_PoolMethod PoolMethod;
  static const PoolMethod MAX =
    V0LayerParameter_PoolMethod_MAX;
  static const PoolMethod AVE =
    V0LayerParameter_PoolMethod_AVE;
  static const PoolMethod STOCHASTIC =
    V0LayerParameter_PoolMethod_STOCHASTIC;
  static inline bool PoolMethod_IsValid(int value) {
    return V0LayerParameter_PoolMethod_IsValid(value);
  }
  static const PoolMethod PoolMethod_MIN =
    V0LayerParameter_PoolMethod_PoolMethod_MIN;
  static const PoolMethod PoolMethod_MAX =
    V0LayerParameter_PoolMethod_PoolMethod_MAX;
  static const int PoolMethod_ARRAYSIZE =
    V0LayerParameter_PoolMethod_PoolMethod_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  PoolMethod_descriptor() {
    return V0LayerParameter_PoolMethod_descriptor();
  }
  static inline const ::std::string& PoolMethod_Name(PoolMethod value) {
    return V0LayerParameter_PoolMethod_Name(value);
  }
  static inline bool PoolMethod_Parse(const ::std::string& name,
      PoolMethod* value) {
    return V0LayerParameter_PoolMethod_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // optional string name = 1;
  bool has_name() const;
  void clear_name();
  static const int kNameFieldNumber = 1;
  const ::std::string& name() const;
  void set_name(const ::std::string& value);
  void set_name(const char* value);
  void set_name(const char* value, size_t size);
  ::std::string* mutable_name();
  ::std::string* release_name();
  void set_allocated_name(::std::string* name);

  // optional string type = 2;
  bool has_type() const;
  void clear_type();
  static const int kTypeFieldNumber = 2;
  const ::std::string& type() const;
  void set_type(const ::std::string& value);
  void set_type(const char* value);
  void set_type(const char* value, size_t size);
  ::std::string* mutable_type();
  ::std::string* release_type();
  void set_allocated_type(::std::string* type);

  // optional uint32 num_output = 3;
  bool has_num_output() const;
  void clear_num_output();
  static const int kNumOutputFieldNumber = 3;
  ::google::protobuf::uint32 num_output() const;
  void set_num_output(::google::protobuf::uint32 value);

  // optional bool biasterm = 4 [default = true];
  bool has_biasterm() const;
  void clear_biasterm();
  static const int kBiastermFieldNumber = 4;
  bool biasterm() const;
  void set_biasterm(bool value);

  // optional .caffe.FillerParameter weight_filler = 5;
  bool has_weight_filler() const;
  void clear_weight_filler();
  static const int kWeightFillerFieldNumber = 5;
  const ::caffe::FillerParameter& weight_filler() const;
  ::caffe::FillerParameter* mutable_weight_filler();
  ::caffe::FillerParameter* release_weight_filler();
  void set_allocated_weight_filler(::caffe::FillerParameter* weight_filler);

  // optional .caffe.FillerParameter bias_filler = 6;
  bool has_bias_filler() const;
  void clear_bias_filler();
  static const int kBiasFillerFieldNumber = 6;
  const ::caffe::FillerParameter& bias_filler() const;
  ::caffe::FillerParameter* mutable_bias_filler();
  ::caffe::FillerParameter* release_bias_filler();
  void set_allocated_bias_filler(::caffe::FillerParameter* bias_filler);

  // optional uint32 pad = 7 [default = 0];
  bool has_pad() const;
  void clear_pad();
  static const int kPadFieldNumber = 7;
  ::google::protobuf::uint32 pad() const;
  void set_pad(::google::protobuf::uint32 value);

  // optional uint32 kernelsize = 8;
  bool has_kernelsize() const;
  void clear_kernelsize();
  static const int kKernelsizeFieldNumber = 8;
  ::google::protobuf::uint32 kernelsize() const;
  void set_kernelsize(::google::protobuf::uint32 value);

  // optional uint32 group = 9 [default = 1];
  bool has_group() const;
  void clear_group();
  static const int kGroupFieldNumber = 9;
  ::google::protobuf::uint32 group() const;
  void set_group(::google::protobuf::uint32 value);

  // optional uint32 stride = 10 [default = 1];
  bool has_stride() const;
  void clear_stride();
  static const int kStrideFieldNumber = 10;
  ::google::protobuf::uint32 stride() const;
  void set_stride(::google::protobuf::uint32 value);

  // optional .caffe.V0LayerParameter.PoolMethod pool = 11 [default = MAX];
  bool has_pool() const;
  void clear_pool();
  static const int kPoolFieldNumber = 11;
  ::caffe::V0LayerParameter_PoolMethod pool() const;
  void set_pool(::caffe::V0LayerParameter_PoolMethod value);

  // optional float dropout_ratio = 12 [default = 0.5];
  bool has_dropout_ratio() const;
  void clear_dropout_ratio();
  static const int kDropoutRatioFieldNumber = 12;
  float dropout_ratio() const;
  void set_dropout_ratio(float value);

  // optional uint32 local_size = 13 [default = 5];
  bool has_local_size() const;
  void clear_local_size();
  static const int kLocalSizeFieldNumber = 13;
  ::google::protobuf::uint32 local_size() const;
  void set_local_size(::google::protobuf::uint32 value);

  // optional float alpha = 14 [default = 1];
  bool has_alpha() const;
  void clear_alpha();
  static const int kAlphaFieldNumber = 14;
  float alpha() const;
  void set_alpha(float value);

  // optional float beta = 15 [default = 0.75];
  bool has_beta() const;
  void clear_beta();
  static const int kBetaFieldNumber = 15;
  float beta() const;
  void set_beta(float value);

  // optional float k = 22 [default = 1];
  bool has_k() const;
  void clear_k();
  static const int kKFieldNumber = 22;
  float k() const;
  void set_k(float value);

  // optional string source = 16;
  bool has_source() const;
  void clear_source();
  static const int kSourceFieldNumber = 16;
  const ::std::string& source() const;
  void set_source(const ::std::string& value);
  void set_source(const char* value);
  void set_source(const char* value, size_t size);
  ::std::string* mutable_source();
  ::std::string* release_source();
  void set_allocated_source(::std::string* source);

  // optional float scale = 17 [default = 1];
  bool has_scale() const;
  void clear_scale();
  static const int kScaleFieldNumber = 17;
  float scale() const;
  void set_scale(float value);

  // optional string meanfile = 18;
  bool has_meanfile() const;
  void clear_meanfile();
  static const int kMeanfileFieldNumber = 18;
  const ::std::string& meanfile() const;
  void set_meanfile(const ::std::string& value);
  void set_meanfile(const char* value);
  void set_meanfile(const char* value, size_t size);
  ::std::string* mutable_meanfile();
  ::std::string* release_meanfile();
  void set_allocated_meanfile(::std::string* meanfile);

  // optional uint32 batchsize = 19;
  bool has_batchsize() const;
  void clear_batchsize();
  static const int kBatchsizeFieldNumber = 19;
  ::google::protobuf::uint32 batchsize() const;
  void set_batchsize(::google::protobuf::uint32 value);

  // optional uint32 cropsize = 20 [default = 0];
  bool has_cropsize() const;
  void clear_cropsize();
  static const int kCropsizeFieldNumber = 20;
  ::google::protobuf::uint32 cropsize() const;
  void set_cropsize(::google::protobuf::uint32 value);

  // optional bool mirror = 21 [default = false];
  bool has_mirror() const;
  void clear_mirror();
  static const int kMirrorFieldNumber = 21;
  bool mirror() const;
  void set_mirror(bool value);

  // repeated .caffe.BlobProto blobs = 50;
  int blobs_size() const;
  void clear_blobs();
  static const int kBlobsFieldNumber = 50;
  const ::caffe::BlobProto& blobs(int index) const;
  ::caffe::BlobProto* mutable_blobs(int index);
  ::caffe::BlobProto* add_blobs();
  ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto >*
      mutable_blobs();
  const ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto >&
      blobs() const;

  // repeated float blobs_lr = 51;
  int blobs_lr_size() const;
  void clear_blobs_lr();
  static const int kBlobsLrFieldNumber = 51;
  float blobs_lr(int index) const;
  void set_blobs_lr(int index, float value);
  void add_blobs_lr(float value);
  const ::google::protobuf::RepeatedField< float >&
      blobs_lr() const;
  ::google::protobuf::RepeatedField< float >*
      mutable_blobs_lr();

  // repeated float weight_decay = 52;
  int weight_decay_size() const;
  void clear_weight_decay();
  static const int kWeightDecayFieldNumber = 52;
  float weight_decay(int index) const;
  void set_weight_decay(int index, float value);
  void add_weight_decay(float value);
  const ::google::protobuf::RepeatedField< float >&
      weight_decay() const;
  ::google::protobuf::RepeatedField< float >*
      mutable_weight_decay();

  // optional uint32 rand_skip = 53 [default = 0];
  bool has_rand_skip() const;
  void clear_rand_skip();
  static const int kRandSkipFieldNumber = 53;
  ::google::protobuf::uint32 rand_skip() const;
  void set_rand_skip(::google::protobuf::uint32 value);

  // optional float det_fg_threshold = 54 [default = 0.5];
  bool has_det_fg_threshold() const;
  void clear_det_fg_threshold();
  static const int kDetFgThresholdFieldNumber = 54;
  float det_fg_threshold() const;
  void set_det_fg_threshold(float value);

  // optional float det_bg_threshold = 55 [default = 0.5];
  bool has_det_bg_threshold() const;
  void clear_det_bg_threshold();
  static const int kDetBgThresholdFieldNumber = 55;
  float det_bg_threshold() const;
  void set_det_bg_threshold(float value);

  // optional float det_fg_fraction = 56 [default = 0.25];
  bool has_det_fg_fraction() const;
  void clear_det_fg_fraction();
  static const int kDetFgFractionFieldNumber = 56;
  float det_fg_fraction() const;
  void set_det_fg_fraction(float value);

  // optional uint32 det_context_pad = 58 [default = 0];
  bool has_det_context_pad() const;
  void clear_det_context_pad();
  static const int kDetContextPadFieldNumber = 58;
  ::google::protobuf::uint32 det_context_pad() const;
  void set_det_context_pad(::google::protobuf::uint32 value);

  // optional string det_crop_mode = 59 [default = "warp"];
  bool has_det_crop_mode() const;
  void clear_det_crop_mode();
  static const int kDetCropModeFieldNumber = 59;
  const ::std::string& det_crop_mode() const;
  void set_det_crop_mode(const ::std::string& value);
  void set_det_crop_mode(const char* value);
  void set_det_crop_mode(const char* value, size_t size);
  ::std::string* mutable_det_crop_mode();
  ::std::string* release_det_crop_mode();
  void set_allocated_det_crop_mode(::std::string* det_crop_mode);

  // optional int32 new_num = 60 [default = 0];
  bool has_new_num() const;
  void clear_new_num();
  static const int kNewNumFieldNumber = 60;
  ::google::protobuf::int32 new_num() const;
  void set_new_num(::google::protobuf::int32 value);

  // optional int32 new_channels = 61 [default = 0];
  bool has_new_channels() const;
  void clear_new_channels();
  static const int kNewChannelsFieldNumber = 61;
  ::google::protobuf::int32 new_channels() const;
  void set_new_channels(::google::protobuf::int32 value);

  // optional int32 new_height = 62 [default = 0];
  bool has_new_height() const;
  void clear_new_height();
  static const int kNewHeightFieldNumber = 62;
  ::google::protobuf::int32 new_height() const;
  void set_new_height(::google::protobuf::int32 value);

  // optional int32 new_width = 63 [default = 0];
  bool has_new_width() const;
  void clear_new_width();
  static const int kNewWidthFieldNumber = 63;
  ::google::protobuf::int32 new_width() const;
  void set_new_width(::google::protobuf::int32 value);

  // optional bool shuffle_images = 64 [default = false];
  bool has_shuffle_images() const;
  void clear_shuffle_images();
  static const int kShuffleImagesFieldNumber = 64;
  bool shuffle_images() const;
  void set_shuffle_images(bool value);

  // optional uint32 concat_dim = 65 [default = 1];
  bool has_concat_dim() const;
  void clear_concat_dim();
  static const int kConcatDimFieldNumber = 65;
  ::google::protobuf::uint32 concat_dim() const;
  void set_concat_dim(::google::protobuf::uint32 value);

  // optional .caffe.HDF5OutputParameter hdf5_output_param = 1001;
  bool has_hdf5_output_param() const;
  void clear_hdf5_output_param();
  static const int kHdf5OutputParamFieldNumber = 1001;
  const ::caffe::HDF5OutputParameter& hdf5_output_param() const;
  ::caffe::HDF5OutputParameter* mutable_hdf5_output_param();
  ::caffe::HDF5OutputParameter* release_hdf5_output_param();
  void set_allocated_hdf5_output_param(::caffe::HDF5OutputParameter* hdf5_output_param);

  // @@protoc_insertion_point(class_scope:caffe.V0LayerParameter)
 private:
  inline void set_has_name();
  inline void clear_has_name();
  inline void set_has_type();
  inline void clear_has_type();
  inline void set_has_num_output();
  inline void clear_has_num_output();
  inline void set_has_biasterm();
  inline void clear_has_biasterm();
  inline void set_has_weight_filler();
  inline void clear_has_weight_filler();
  inline void set_has_bias_filler();
  inline void clear_has_bias_filler();
  inline void set_has_pad();
  inline void clear_has_pad();
  inline void set_has_kernelsize();
  inline void clear_has_kernelsize();
  inline void set_has_group();
  inline void clear_has_group();
  inline void set_has_stride();
  inline void clear_has_stride();
  inline void set_has_pool();
  inline void clear_has_pool();
  inline void set_has_dropout_ratio();
  inline void clear_has_dropout_ratio();
  inline void set_has_local_size();
  inline void clear_has_local_size();
  inline void set_has_alpha();
  inline void clear_has_alpha();
  inline void set_has_beta();
  inline void clear_has_beta();
  inline void set_has_k();
  inline void clear_has_k();
  inline void set_has_source();
  inline void clear_has_source();
  inline void set_has_scale();
  inline void clear_has_scale();
  inline void set_has_meanfile();
  inline void clear_has_meanfile();
  inline void set_has_batchsize();
  inline void clear_has_batchsize();
  inline void set_has_cropsize();
  inline void clear_has_cropsize();
  inline void set_has_mirror();
  inline void clear_has_mirror();
  inline void set_has_rand_skip();
  inline void clear_has_rand_skip();
  inline void set_has_det_fg_threshold();
  inline void clear_has_det_fg_threshold();
  inline void set_has_det_bg_threshold();
  inline void clear_has_det_bg_threshold();
  inline void set_has_det_fg_fraction();
  inline void clear_has_det_fg_fraction();
  inline void set_has_det_context_pad();
  inline void clear_has_det_context_pad();
  inline void set_has_det_crop_mode();
  inline void clear_has_det_crop_mode();
  inline void set_has_new_num();
  inline void clear_has_new_num();
  inline void set_has_new_channels();
  inline void clear_has_new_channels();
  inline void set_has_new_height();
  inline void clear_has_new_height();
  inline void set_has_new_width();
  inline void clear_has_new_width();
  inline void set_has_shuffle_images();
  inline void clear_has_shuffle_images();
  inline void set_has_concat_dim();
  inline void clear_has_concat_dim();
  inline void set_has_hdf5_output_param();
  inline void clear_has_hdf5_output_param();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<2> _has_bits_;
  ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto > blobs_;
  ::google::protobuf::RepeatedField< float > blobs_lr_;
  ::google::protobuf::RepeatedField< float > weight_decay_;
  ::google::protobuf::internal::ArenaStringPtr name_;
  ::google::protobuf::internal::ArenaStringPtr type_;
  ::google::protobuf::internal::ArenaStringPtr source_;
  ::google::protobuf::internal::ArenaStringPtr meanfile_;
  static ::std::string* _default_det_crop_mode_;
  ::google::protobuf::internal::ArenaStringPtr det_crop_mode_;
  ::caffe::FillerParameter* weight_filler_;
  ::caffe::FillerParameter* bias_filler_;
  ::caffe::HDF5OutputParameter* hdf5_output_param_;
  ::google::protobuf::uint32 num_output_;
  ::google::protobuf::uint32 pad_;
  ::google::protobuf::uint32 kernelsize_;
  int pool_;
  ::google::protobuf::uint32 batchsize_;
  ::google::protobuf::uint32 cropsize_;
  ::google::protobuf::uint32 rand_skip_;
  bool mirror_;
  bool shuffle_images_;
  ::google::protobuf::uint32 det_context_pad_;
  ::google::protobuf::int32 new_num_;
  ::google::protobuf::int32 new_channels_;
  ::google::protobuf::int32 new_height_;
  ::google::protobuf::int32 new_width_;
  ::google::protobuf::uint32 concat_dim_;
  bool biasterm_;
  ::google::protobuf::uint32 group_;
  ::google::protobuf::uint32 stride_;
  float dropout_ratio_;
  ::google::protobuf::uint32 local_size_;
  float alpha_;
  float beta_;
  float k_;
  float scale_;
  float det_fg_threshold_;
  float det_bg_threshold_;
  float det_fg_fraction_;
  mutable int _cached_size_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<V0LayerParameter> V0LayerParameter_default_instance_;

// -------------------------------------------------------------------

class PReLUParameter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.PReLUParameter) */ {
 public:
  PReLUParameter();
  virtual ~PReLUParameter();

  PReLUParameter(const PReLUParameter& from);

  inline PReLUParameter& operator=(const PReLUParameter& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const PReLUParameter& default_instance();

  static const PReLUParameter* internal_default_instance();

  void Swap(PReLUParameter* other);

  // implements Message ----------------------------------------------

  inline PReLUParameter* New() const { return New(NULL); }

  PReLUParameter* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const PReLUParameter& from);
  void MergeFrom(const PReLUParameter& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(PReLUParameter* other);
  void UnsafeMergeFrom(const PReLUParameter& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional .caffe.FillerParameter filler = 1;
  bool has_filler() const;
  void clear_filler();
  static const int kFillerFieldNumber = 1;
  const ::caffe::FillerParameter& filler() const;
  ::caffe::FillerParameter* mutable_filler();
  ::caffe::FillerParameter* release_filler();
  void set_allocated_filler(::caffe::FillerParameter* filler);

  // optional bool channel_shared = 2 [default = false];
  bool has_channel_shared() const;
  void clear_channel_shared();
  static const int kChannelSharedFieldNumber = 2;
  bool channel_shared() const;
  void set_channel_shared(bool value);

  // @@protoc_insertion_point(class_scope:caffe.PReLUParameter)
 private:
  inline void set_has_filler();
  inline void clear_has_filler();
  inline void set_has_channel_shared();
  inline void clear_has_channel_shared();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  ::caffe::FillerParameter* filler_;
  bool channel_shared_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<PReLUParameter> PReLUParameter_default_instance_;

// -------------------------------------------------------------------

class NormalizedBBox : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:caffe.NormalizedBBox) */ {
 public:
  NormalizedBBox();
  virtual ~NormalizedBBox();

  NormalizedBBox(const NormalizedBBox& from);

  inline NormalizedBBox& operator=(const NormalizedBBox& from) {
    CopyFrom(from);
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const NormalizedBBox& default_instance();

  static const NormalizedBBox* internal_default_instance();

  void Swap(NormalizedBBox* other);

  // implements Message ----------------------------------------------

  inline NormalizedBBox* New() const { return New(NULL); }

  NormalizedBBox* New(::google::protobuf::Arena* arena) const;
  void CopyFrom(const ::google::protobuf::Message& from);
  void MergeFrom(const ::google::protobuf::Message& from);
  void CopyFrom(const NormalizedBBox& from);
  void MergeFrom(const NormalizedBBox& from);
  void Clear();
  bool IsInitialized() const;

  size_t ByteSizeLong() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
    return InternalSerializeWithCachedSizesToArray(false, output);
  }
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  void InternalSwap(NormalizedBBox* other);
  void UnsafeMergeFrom(const NormalizedBBox& from);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // optional float xmin = 1;
  bool has_xmin() const;
  void clear_xmin();
  static const int kXminFieldNumber = 1;
  float xmin() const;
  void set_xmin(float value);

  // optional float ymin = 2;
  bool has_ymin() const;
  void clear_ymin();
  static const int kYminFieldNumber = 2;
  float ymin() const;
  void set_ymin(float value);

  // optional float xmax = 3;
  bool has_xmax() const;
  void clear_xmax();
  static const int kXmaxFieldNumber = 3;
  float xmax() const;
  void set_xmax(float value);

  // optional float ymax = 4;
  bool has_ymax() const;
  void clear_ymax();
  static const int kYmaxFieldNumber = 4;
  float ymax() const;
  void set_ymax(float value);

  // optional int32 label = 5;
  bool has_label() const;
  void clear_label();
  static const int kLabelFieldNumber = 5;
  ::google::protobuf::int32 label() const;
  void set_label(::google::protobuf::int32 value);

  // optional bool difficult = 6;
  bool has_difficult() const;
  void clear_difficult();
  static const int kDifficultFieldNumber = 6;
  bool difficult() const;
  void set_difficult(bool value);

  // optional float score = 7;
  bool has_score() const;
  void clear_score();
  static const int kScoreFieldNumber = 7;
  float score() const;
  void set_score(float value);

  // optional float size = 8;
  bool has_size() const;
  void clear_size();
  static const int kSizeFieldNumber = 8;
  float size() const;
  void set_size(float value);

  // @@protoc_insertion_point(class_scope:caffe.NormalizedBBox)
 private:
  inline void set_has_xmin();
  inline void clear_has_xmin();
  inline void set_has_ymin();
  inline void clear_has_ymin();
  inline void set_has_xmax();
  inline void clear_has_xmax();
  inline void set_has_ymax();
  inline void clear_has_ymax();
  inline void set_has_label();
  inline void clear_has_label();
  inline void set_has_difficult();
  inline void clear_has_difficult();
  inline void set_has_score();
  inline void clear_has_score();
  inline void set_has_size();
  inline void clear_has_size();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::HasBits<1> _has_bits_;
  mutable int _cached_size_;
  float xmin_;
  float ymin_;
  float xmax_;
  float ymax_;
  ::google::protobuf::int32 label_;
  bool difficult_;
  float score_;
  float size_;
  friend void  protobuf_InitDefaults_caffe_2eproto_impl();
  friend void  protobuf_AddDesc_caffe_2eproto_impl();
  friend void protobuf_AssignDesc_caffe_2eproto();
  friend void protobuf_ShutdownFile_caffe_2eproto();

  void InitAsDefaultInstance();
};
extern ::google::protobuf::internal::ExplicitlyConstructed<NormalizedBBox> NormalizedBBox_default_instance_;

// ===================================================================


// ===================================================================

#if !PROTOBUF_INLINE_NOT_IN_HEADERS
// BlobShape

// repeated int64 dim = 1 [packed = true];
inline int BlobShape::dim_size() const {
  return dim_.size();
}
inline void BlobShape::clear_dim() {
  dim_.Clear();
}
inline ::google::protobuf::int64 BlobShape::dim(int index) const {
  // @@protoc_insertion_point(field_get:caffe.BlobShape.dim)
  return dim_.Get(index);
}
inline void BlobShape::set_dim(int index, ::google::protobuf::int64 value) {
  dim_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.BlobShape.dim)
}
inline void BlobShape::add_dim(::google::protobuf::int64 value) {
  dim_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.BlobShape.dim)
}
inline const ::google::protobuf::RepeatedField< ::google::protobuf::int64 >&
BlobShape::dim() const {
  // @@protoc_insertion_point(field_list:caffe.BlobShape.dim)
  return dim_;
}
inline ::google::protobuf::RepeatedField< ::google::protobuf::int64 >*
BlobShape::mutable_dim() {
  // @@protoc_insertion_point(field_mutable_list:caffe.BlobShape.dim)
  return &dim_;
}

inline const BlobShape* BlobShape::internal_default_instance() {
  return &BlobShape_default_instance_.get();
}
// -------------------------------------------------------------------

// BlobProto

// optional .caffe.BlobShape shape = 7;
inline bool BlobProto::has_shape() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void BlobProto::set_has_shape() {
  _has_bits_[0] |= 0x00000001u;
}
inline void BlobProto::clear_has_shape() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void BlobProto::clear_shape() {
  if (shape_ != NULL) shape_->::caffe::BlobShape::Clear();
  clear_has_shape();
}
inline const ::caffe::BlobShape& BlobProto::shape() const {
  // @@protoc_insertion_point(field_get:caffe.BlobProto.shape)
  return shape_ != NULL ? *shape_
                         : *::caffe::BlobShape::internal_default_instance();
}
inline ::caffe::BlobShape* BlobProto::mutable_shape() {
  set_has_shape();
  if (shape_ == NULL) {
    shape_ = new ::caffe::BlobShape;
  }
  // @@protoc_insertion_point(field_mutable:caffe.BlobProto.shape)
  return shape_;
}
inline ::caffe::BlobShape* BlobProto::release_shape() {
  // @@protoc_insertion_point(field_release:caffe.BlobProto.shape)
  clear_has_shape();
  ::caffe::BlobShape* temp = shape_;
  shape_ = NULL;
  return temp;
}
inline void BlobProto::set_allocated_shape(::caffe::BlobShape* shape) {
  delete shape_;
  shape_ = shape;
  if (shape) {
    set_has_shape();
  } else {
    clear_has_shape();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.BlobProto.shape)
}

// repeated float data = 5 [packed = true];
inline int BlobProto::data_size() const {
  return data_.size();
}
inline void BlobProto::clear_data() {
  data_.Clear();
}
inline float BlobProto::data(int index) const {
  // @@protoc_insertion_point(field_get:caffe.BlobProto.data)
  return data_.Get(index);
}
inline void BlobProto::set_data(int index, float value) {
  data_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.BlobProto.data)
}
inline void BlobProto::add_data(float value) {
  data_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.BlobProto.data)
}
inline const ::google::protobuf::RepeatedField< float >&
BlobProto::data() const {
  // @@protoc_insertion_point(field_list:caffe.BlobProto.data)
  return data_;
}
inline ::google::protobuf::RepeatedField< float >*
BlobProto::mutable_data() {
  // @@protoc_insertion_point(field_mutable_list:caffe.BlobProto.data)
  return &data_;
}

// repeated float diff = 6 [packed = true];
inline int BlobProto::diff_size() const {
  return diff_.size();
}
inline void BlobProto::clear_diff() {
  diff_.Clear();
}
inline float BlobProto::diff(int index) const {
  // @@protoc_insertion_point(field_get:caffe.BlobProto.diff)
  return diff_.Get(index);
}
inline void BlobProto::set_diff(int index, float value) {
  diff_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.BlobProto.diff)
}
inline void BlobProto::add_diff(float value) {
  diff_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.BlobProto.diff)
}
inline const ::google::protobuf::RepeatedField< float >&
BlobProto::diff() const {
  // @@protoc_insertion_point(field_list:caffe.BlobProto.diff)
  return diff_;
}
inline ::google::protobuf::RepeatedField< float >*
BlobProto::mutable_diff() {
  // @@protoc_insertion_point(field_mutable_list:caffe.BlobProto.diff)
  return &diff_;
}

// optional int32 num = 1 [default = 0];
inline bool BlobProto::has_num() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void BlobProto::set_has_num() {
  _has_bits_[0] |= 0x00000008u;
}
inline void BlobProto::clear_has_num() {
  _has_bits_[0] &= ~0x00000008u;
}
inline void BlobProto::clear_num() {
  num_ = 0;
  clear_has_num();
}
inline ::google::protobuf::int32 BlobProto::num() const {
  // @@protoc_insertion_point(field_get:caffe.BlobProto.num)
  return num_;
}
inline void BlobProto::set_num(::google::protobuf::int32 value) {
  set_has_num();
  num_ = value;
  // @@protoc_insertion_point(field_set:caffe.BlobProto.num)
}

// optional int32 channels = 2 [default = 0];
inline bool BlobProto::has_channels() const {
  return (_has_bits_[0] & 0x00000010u) != 0;
}
inline void BlobProto::set_has_channels() {
  _has_bits_[0] |= 0x00000010u;
}
inline void BlobProto::clear_has_channels() {
  _has_bits_[0] &= ~0x00000010u;
}
inline void BlobProto::clear_channels() {
  channels_ = 0;
  clear_has_channels();
}
inline ::google::protobuf::int32 BlobProto::channels() const {
  // @@protoc_insertion_point(field_get:caffe.BlobProto.channels)
  return channels_;
}
inline void BlobProto::set_channels(::google::protobuf::int32 value) {
  set_has_channels();
  channels_ = value;
  // @@protoc_insertion_point(field_set:caffe.BlobProto.channels)
}

// optional int32 height = 3 [default = 0];
inline bool BlobProto::has_height() const {
  return (_has_bits_[0] & 0x00000020u) != 0;
}
inline void BlobProto::set_has_height() {
  _has_bits_[0] |= 0x00000020u;
}
inline void BlobProto::clear_has_height() {
  _has_bits_[0] &= ~0x00000020u;
}
inline void BlobProto::clear_height() {
  height_ = 0;
  clear_has_height();
}
inline ::google::protobuf::int32 BlobProto::height() const {
  // @@protoc_insertion_point(field_get:caffe.BlobProto.height)
  return height_;
}
inline void BlobProto::set_height(::google::protobuf::int32 value) {
  set_has_height();
  height_ = value;
  // @@protoc_insertion_point(field_set:caffe.BlobProto.height)
}

// optional int32 width = 4 [default = 0];
inline bool BlobProto::has_width() const {
  return (_has_bits_[0] & 0x00000040u) != 0;
}
inline void BlobProto::set_has_width() {
  _has_bits_[0] |= 0x00000040u;
}
inline void BlobProto::clear_has_width() {
  _has_bits_[0] &= ~0x00000040u;
}
inline void BlobProto::clear_width() {
  width_ = 0;
  clear_has_width();
}
inline ::google::protobuf::int32 BlobProto::width() const {
  // @@protoc_insertion_point(field_get:caffe.BlobProto.width)
  return width_;
}
inline void BlobProto::set_width(::google::protobuf::int32 value) {
  set_has_width();
  width_ = value;
  // @@protoc_insertion_point(field_set:caffe.BlobProto.width)
}

inline const BlobProto* BlobProto::internal_default_instance() {
  return &BlobProto_default_instance_.get();
}
// -------------------------------------------------------------------

// BlobProtoVector

// repeated .caffe.BlobProto blobs = 1;
inline int BlobProtoVector::blobs_size() const {
  return blobs_.size();
}
inline void BlobProtoVector::clear_blobs() {
  blobs_.Clear();
}
inline const ::caffe::BlobProto& BlobProtoVector::blobs(int index) const {
  // @@protoc_insertion_point(field_get:caffe.BlobProtoVector.blobs)
  return blobs_.Get(index);
}
inline ::caffe::BlobProto* BlobProtoVector::mutable_blobs(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.BlobProtoVector.blobs)
  return blobs_.Mutable(index);
}
inline ::caffe::BlobProto* BlobProtoVector::add_blobs() {
  // @@protoc_insertion_point(field_add:caffe.BlobProtoVector.blobs)
  return blobs_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto >*
BlobProtoVector::mutable_blobs() {
  // @@protoc_insertion_point(field_mutable_list:caffe.BlobProtoVector.blobs)
  return &blobs_;
}
inline const ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto >&
BlobProtoVector::blobs() const {
  // @@protoc_insertion_point(field_list:caffe.BlobProtoVector.blobs)
  return blobs_;
}

inline const BlobProtoVector* BlobProtoVector::internal_default_instance() {
  return &BlobProtoVector_default_instance_.get();
}
// -------------------------------------------------------------------

// CropParameter

// optional int32 axis = 1 [default = 2];
inline bool CropParameter::has_axis() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void CropParameter::set_has_axis() {
  _has_bits_[0] |= 0x00000001u;
}
inline void CropParameter::clear_has_axis() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void CropParameter::clear_axis() {
  axis_ = 2;
  clear_has_axis();
}
inline ::google::protobuf::int32 CropParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.CropParameter.axis)
  return axis_;
}
inline void CropParameter::set_axis(::google::protobuf::int32 value) {
  set_has_axis();
  axis_ = value;
  // @@protoc_insertion_point(field_set:caffe.CropParameter.axis)
}

// repeated uint32 offset = 2;
inline int CropParameter::offset_size() const {
  return offset_.size();
}
inline void CropParameter::clear_offset() {
  offset_.Clear();
}
inline ::google::protobuf::uint32 CropParameter::offset(int index) const {
  // @@protoc_insertion_point(field_get:caffe.CropParameter.offset)
  return offset_.Get(index);
}
inline void CropParameter::set_offset(int index, ::google::protobuf::uint32 value) {
  offset_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.CropParameter.offset)
}
inline void CropParameter::add_offset(::google::protobuf::uint32 value) {
  offset_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.CropParameter.offset)
}
inline const ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >&
CropParameter::offset() const {
  // @@protoc_insertion_point(field_list:caffe.CropParameter.offset)
  return offset_;
}
inline ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >*
CropParameter::mutable_offset() {
  // @@protoc_insertion_point(field_mutable_list:caffe.CropParameter.offset)
  return &offset_;
}

inline const CropParameter* CropParameter::internal_default_instance() {
  return &CropParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// PermuteParameter

// repeated uint32 order = 1;
inline int PermuteParameter::order_size() const {
  return order_.size();
}
inline void PermuteParameter::clear_order() {
  order_.Clear();
}
inline ::google::protobuf::uint32 PermuteParameter::order(int index) const {
  // @@protoc_insertion_point(field_get:caffe.PermuteParameter.order)
  return order_.Get(index);
}
inline void PermuteParameter::set_order(int index, ::google::protobuf::uint32 value) {
  order_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.PermuteParameter.order)
}
inline void PermuteParameter::add_order(::google::protobuf::uint32 value) {
  order_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.PermuteParameter.order)
}
inline const ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >&
PermuteParameter::order() const {
  // @@protoc_insertion_point(field_list:caffe.PermuteParameter.order)
  return order_;
}
inline ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >*
PermuteParameter::mutable_order() {
  // @@protoc_insertion_point(field_mutable_list:caffe.PermuteParameter.order)
  return &order_;
}

inline const PermuteParameter* PermuteParameter::internal_default_instance() {
  return &PermuteParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// NormalizeBBoxParameter

// optional bool across_spatial = 1 [default = true];
inline bool NormalizeBBoxParameter::has_across_spatial() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void NormalizeBBoxParameter::set_has_across_spatial() {
  _has_bits_[0] |= 0x00000001u;
}
inline void NormalizeBBoxParameter::clear_has_across_spatial() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void NormalizeBBoxParameter::clear_across_spatial() {
  across_spatial_ = true;
  clear_has_across_spatial();
}
inline bool NormalizeBBoxParameter::across_spatial() const {
  // @@protoc_insertion_point(field_get:caffe.NormalizeBBoxParameter.across_spatial)
  return across_spatial_;
}
inline void NormalizeBBoxParameter::set_across_spatial(bool value) {
  set_has_across_spatial();
  across_spatial_ = value;
  // @@protoc_insertion_point(field_set:caffe.NormalizeBBoxParameter.across_spatial)
}

// optional .caffe.FillerParameter scale_filler = 2;
inline bool NormalizeBBoxParameter::has_scale_filler() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void NormalizeBBoxParameter::set_has_scale_filler() {
  _has_bits_[0] |= 0x00000002u;
}
inline void NormalizeBBoxParameter::clear_has_scale_filler() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void NormalizeBBoxParameter::clear_scale_filler() {
  if (scale_filler_ != NULL) scale_filler_->::caffe::FillerParameter::Clear();
  clear_has_scale_filler();
}
inline const ::caffe::FillerParameter& NormalizeBBoxParameter::scale_filler() const {
  // @@protoc_insertion_point(field_get:caffe.NormalizeBBoxParameter.scale_filler)
  return scale_filler_ != NULL ? *scale_filler_
                         : *::caffe::FillerParameter::internal_default_instance();
}
inline ::caffe::FillerParameter* NormalizeBBoxParameter::mutable_scale_filler() {
  set_has_scale_filler();
  if (scale_filler_ == NULL) {
    scale_filler_ = new ::caffe::FillerParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.NormalizeBBoxParameter.scale_filler)
  return scale_filler_;
}
inline ::caffe::FillerParameter* NormalizeBBoxParameter::release_scale_filler() {
  // @@protoc_insertion_point(field_release:caffe.NormalizeBBoxParameter.scale_filler)
  clear_has_scale_filler();
  ::caffe::FillerParameter* temp = scale_filler_;
  scale_filler_ = NULL;
  return temp;
}
inline void NormalizeBBoxParameter::set_allocated_scale_filler(::caffe::FillerParameter* scale_filler) {
  delete scale_filler_;
  scale_filler_ = scale_filler;
  if (scale_filler) {
    set_has_scale_filler();
  } else {
    clear_has_scale_filler();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.NormalizeBBoxParameter.scale_filler)
}

// optional bool channel_shared = 3 [default = true];
inline bool NormalizeBBoxParameter::has_channel_shared() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void NormalizeBBoxParameter::set_has_channel_shared() {
  _has_bits_[0] |= 0x00000004u;
}
inline void NormalizeBBoxParameter::clear_has_channel_shared() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void NormalizeBBoxParameter::clear_channel_shared() {
  channel_shared_ = true;
  clear_has_channel_shared();
}
inline bool NormalizeBBoxParameter::channel_shared() const {
  // @@protoc_insertion_point(field_get:caffe.NormalizeBBoxParameter.channel_shared)
  return channel_shared_;
}
inline void NormalizeBBoxParameter::set_channel_shared(bool value) {
  set_has_channel_shared();
  channel_shared_ = value;
  // @@protoc_insertion_point(field_set:caffe.NormalizeBBoxParameter.channel_shared)
}

// optional float eps = 4 [default = 1e-10];
inline bool NormalizeBBoxParameter::has_eps() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void NormalizeBBoxParameter::set_has_eps() {
  _has_bits_[0] |= 0x00000008u;
}
inline void NormalizeBBoxParameter::clear_has_eps() {
  _has_bits_[0] &= ~0x00000008u;
}
inline void NormalizeBBoxParameter::clear_eps() {
  eps_ = 1e-10f;
  clear_has_eps();
}
inline float NormalizeBBoxParameter::eps() const {
  // @@protoc_insertion_point(field_get:caffe.NormalizeBBoxParameter.eps)
  return eps_;
}
inline void NormalizeBBoxParameter::set_eps(float value) {
  set_has_eps();
  eps_ = value;
  // @@protoc_insertion_point(field_set:caffe.NormalizeBBoxParameter.eps)
}

inline const NormalizeBBoxParameter* NormalizeBBoxParameter::internal_default_instance() {
  return &NormalizeBBoxParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// PriorBoxParameter

// optional float min_size = 1;
inline bool PriorBoxParameter::has_min_size() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void PriorBoxParameter::set_has_min_size() {
  _has_bits_[0] |= 0x00000001u;
}
inline void PriorBoxParameter::clear_has_min_size() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void PriorBoxParameter::clear_min_size() {
  min_size_ = 0;
  clear_has_min_size();
}
inline float PriorBoxParameter::min_size() const {
  // @@protoc_insertion_point(field_get:caffe.PriorBoxParameter.min_size)
  return min_size_;
}
inline void PriorBoxParameter::set_min_size(float value) {
  set_has_min_size();
  min_size_ = value;
  // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.min_size)
}

// optional float max_size = 2;
inline bool PriorBoxParameter::has_max_size() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void PriorBoxParameter::set_has_max_size() {
  _has_bits_[0] |= 0x00000002u;
}
inline void PriorBoxParameter::clear_has_max_size() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void PriorBoxParameter::clear_max_size() {
  max_size_ = 0;
  clear_has_max_size();
}
inline float PriorBoxParameter::max_size() const {
  // @@protoc_insertion_point(field_get:caffe.PriorBoxParameter.max_size)
  return max_size_;
}
inline void PriorBoxParameter::set_max_size(float value) {
  set_has_max_size();
  max_size_ = value;
  // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.max_size)
}

// repeated float aspect_ratio = 3;
inline int PriorBoxParameter::aspect_ratio_size() const {
  return aspect_ratio_.size();
}
inline void PriorBoxParameter::clear_aspect_ratio() {
  aspect_ratio_.Clear();
}
inline float PriorBoxParameter::aspect_ratio(int index) const {
  // @@protoc_insertion_point(field_get:caffe.PriorBoxParameter.aspect_ratio)
  return aspect_ratio_.Get(index);
}
inline void PriorBoxParameter::set_aspect_ratio(int index, float value) {
  aspect_ratio_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.aspect_ratio)
}
inline void PriorBoxParameter::add_aspect_ratio(float value) {
  aspect_ratio_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.PriorBoxParameter.aspect_ratio)
}
inline const ::google::protobuf::RepeatedField< float >&
PriorBoxParameter::aspect_ratio() const {
  // @@protoc_insertion_point(field_list:caffe.PriorBoxParameter.aspect_ratio)
  return aspect_ratio_;
}
inline ::google::protobuf::RepeatedField< float >*
PriorBoxParameter::mutable_aspect_ratio() {
  // @@protoc_insertion_point(field_mutable_list:caffe.PriorBoxParameter.aspect_ratio)
  return &aspect_ratio_;
}

// optional bool flip = 4 [default = true];
inline bool PriorBoxParameter::has_flip() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void PriorBoxParameter::set_has_flip() {
  _has_bits_[0] |= 0x00000008u;
}
inline void PriorBoxParameter::clear_has_flip() {
  _has_bits_[0] &= ~0x00000008u;
}
inline void PriorBoxParameter::clear_flip() {
  flip_ = true;
  clear_has_flip();
}
inline bool PriorBoxParameter::flip() const {
  // @@protoc_insertion_point(field_get:caffe.PriorBoxParameter.flip)
  return flip_;
}
inline void PriorBoxParameter::set_flip(bool value) {
  set_has_flip();
  flip_ = value;
  // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.flip)
}

// optional bool clip = 5 [default = true];
inline bool PriorBoxParameter::has_clip() const {
  return (_has_bits_[0] & 0x00000010u) != 0;
}
inline void PriorBoxParameter::set_has_clip() {
  _has_bits_[0] |= 0x00000010u;
}
inline void PriorBoxParameter::clear_has_clip() {
  _has_bits_[0] &= ~0x00000010u;
}
inline void PriorBoxParameter::clear_clip() {
  clip_ = true;
  clear_has_clip();
}
inline bool PriorBoxParameter::clip() const {
  // @@protoc_insertion_point(field_get:caffe.PriorBoxParameter.clip)
  return clip_;
}
inline void PriorBoxParameter::set_clip(bool value) {
  set_has_clip();
  clip_ = value;
  // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.clip)
}

// repeated float variance = 6;
inline int PriorBoxParameter::variance_size() const {
  return variance_.size();
}
inline void PriorBoxParameter::clear_variance() {
  variance_.Clear();
}
inline float PriorBoxParameter::variance(int index) const {
  // @@protoc_insertion_point(field_get:caffe.PriorBoxParameter.variance)
  return variance_.Get(index);
}
inline void PriorBoxParameter::set_variance(int index, float value) {
  variance_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.variance)
}
inline void PriorBoxParameter::add_variance(float value) {
  variance_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.PriorBoxParameter.variance)
}
inline const ::google::protobuf::RepeatedField< float >&
PriorBoxParameter::variance() const {
  // @@protoc_insertion_point(field_list:caffe.PriorBoxParameter.variance)
  return variance_;
}
inline ::google::protobuf::RepeatedField< float >*
PriorBoxParameter::mutable_variance() {
  // @@protoc_insertion_point(field_mutable_list:caffe.PriorBoxParameter.variance)
  return &variance_;
}

inline const PriorBoxParameter* PriorBoxParameter::internal_default_instance() {
  return &PriorBoxParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// DetectionOutputParameter

// optional uint32 num_classes = 1;
inline bool DetectionOutputParameter::has_num_classes() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void DetectionOutputParameter::set_has_num_classes() {
  _has_bits_[0] |= 0x00000001u;
}
inline void DetectionOutputParameter::clear_has_num_classes() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void DetectionOutputParameter::clear_num_classes() {
  num_classes_ = 0u;
  clear_has_num_classes();
}
inline ::google::protobuf::uint32 DetectionOutputParameter::num_classes() const {
  // @@protoc_insertion_point(field_get:caffe.DetectionOutputParameter.num_classes)
  return num_classes_;
}
inline void DetectionOutputParameter::set_num_classes(::google::protobuf::uint32 value) {
  set_has_num_classes();
  num_classes_ = value;
  // @@protoc_insertion_point(field_set:caffe.DetectionOutputParameter.num_classes)
}

// optional bool share_location = 2 [default = true];
inline bool DetectionOutputParameter::has_share_location() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void DetectionOutputParameter::set_has_share_location() {
  _has_bits_[0] |= 0x00000002u;
}
inline void DetectionOutputParameter::clear_has_share_location() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void DetectionOutputParameter::clear_share_location() {
  share_location_ = true;
  clear_has_share_location();
}
inline bool DetectionOutputParameter::share_location() const {
  // @@protoc_insertion_point(field_get:caffe.DetectionOutputParameter.share_location)
  return share_location_;
}
inline void DetectionOutputParameter::set_share_location(bool value) {
  set_has_share_location();
  share_location_ = value;
  // @@protoc_insertion_point(field_set:caffe.DetectionOutputParameter.share_location)
}

// optional int32 background_label_id = 3 [default = 0];
inline bool DetectionOutputParameter::has_background_label_id() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void DetectionOutputParameter::set_has_background_label_id() {
  _has_bits_[0] |= 0x00000004u;
}
inline void DetectionOutputParameter::clear_has_background_label_id() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void DetectionOutputParameter::clear_background_label_id() {
  background_label_id_ = 0;
  clear_has_background_label_id();
}
inline ::google::protobuf::int32 DetectionOutputParameter::background_label_id() const {
  // @@protoc_insertion_point(field_get:caffe.DetectionOutputParameter.background_label_id)
  return background_label_id_;
}
inline void DetectionOutputParameter::set_background_label_id(::google::protobuf::int32 value) {
  set_has_background_label_id();
  background_label_id_ = value;
  // @@protoc_insertion_point(field_set:caffe.DetectionOutputParameter.background_label_id)
}

// optional .caffe.PriorBoxParameter.CodeType code_type = 6 [default = CORNER];
inline bool DetectionOutputParameter::has_code_type() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void DetectionOutputParameter::set_has_code_type() {
  _has_bits_[0] |= 0x00000008u;
}
inline void DetectionOutputParameter::clear_has_code_type() {
  _has_bits_[0] &= ~0x00000008u;
}
inline void DetectionOutputParameter::clear_code_type() {
  code_type_ = 1;
  clear_has_code_type();
}
inline ::caffe::PriorBoxParameter_CodeType DetectionOutputParameter::code_type() const {
  // @@protoc_insertion_point(field_get:caffe.DetectionOutputParameter.code_type)
  return static_cast< ::caffe::PriorBoxParameter_CodeType >(code_type_);
}
inline void DetectionOutputParameter::set_code_type(::caffe::PriorBoxParameter_CodeType value) {
  assert(::caffe::PriorBoxParameter_CodeType_IsValid(value));
  set_has_code_type();
  code_type_ = value;
  // @@protoc_insertion_point(field_set:caffe.DetectionOutputParameter.code_type)
}

// optional bool variance_encoded_in_target = 8 [default = false];
inline bool DetectionOutputParameter::has_variance_encoded_in_target() const {
  return (_has_bits_[0] & 0x00000010u) != 0;
}
inline void DetectionOutputParameter::set_has_variance_encoded_in_target() {
  _has_bits_[0] |= 0x00000010u;
}
inline void DetectionOutputParameter::clear_has_variance_encoded_in_target() {
  _has_bits_[0] &= ~0x00000010u;
}
inline void DetectionOutputParameter::clear_variance_encoded_in_target() {
  variance_encoded_in_target_ = false;
  clear_has_variance_encoded_in_target();
}
inline bool DetectionOutputParameter::variance_encoded_in_target() const {
  // @@protoc_insertion_point(field_get:caffe.DetectionOutputParameter.variance_encoded_in_target)
  return variance_encoded_in_target_;
}
inline void DetectionOutputParameter::set_variance_encoded_in_target(bool value) {
  set_has_variance_encoded_in_target();
  variance_encoded_in_target_ = value;
  // @@protoc_insertion_point(field_set:caffe.DetectionOutputParameter.variance_encoded_in_target)
}

// optional int32 keep_top_k = 7 [default = -1];
inline bool DetectionOutputParameter::has_keep_top_k() const {
  return (_has_bits_[0] & 0x00000020u) != 0;
}
inline void DetectionOutputParameter::set_has_keep_top_k() {
  _has_bits_[0] |= 0x00000020u;
}
inline void DetectionOutputParameter::clear_has_keep_top_k() {
  _has_bits_[0] &= ~0x00000020u;
}
inline void DetectionOutputParameter::clear_keep_top_k() {
  keep_top_k_ = -1;
  clear_has_keep_top_k();
}
inline ::google::protobuf::int32 DetectionOutputParameter::keep_top_k() const {
  // @@protoc_insertion_point(field_get:caffe.DetectionOutputParameter.keep_top_k)
  return keep_top_k_;
}
inline void DetectionOutputParameter::set_keep_top_k(::google::protobuf::int32 value) {
  set_has_keep_top_k();
  keep_top_k_ = value;
  // @@protoc_insertion_point(field_set:caffe.DetectionOutputParameter.keep_top_k)
}

// optional float confidence_threshold = 9;
inline bool DetectionOutputParameter::has_confidence_threshold() const {
  return (_has_bits_[0] & 0x00000040u) != 0;
}
inline void DetectionOutputParameter::set_has_confidence_threshold() {
  _has_bits_[0] |= 0x00000040u;
}
inline void DetectionOutputParameter::clear_has_confidence_threshold() {
  _has_bits_[0] &= ~0x00000040u;
}
inline void DetectionOutputParameter::clear_confidence_threshold() {
  confidence_threshold_ = 0;
  clear_has_confidence_threshold();
}
inline float DetectionOutputParameter::confidence_threshold() const {
  // @@protoc_insertion_point(field_get:caffe.DetectionOutputParameter.confidence_threshold)
  return confidence_threshold_;
}
inline void DetectionOutputParameter::set_confidence_threshold(float value) {
  set_has_confidence_threshold();
  confidence_threshold_ = value;
  // @@protoc_insertion_point(field_set:caffe.DetectionOutputParameter.confidence_threshold)
}

// optional float nms_threshold = 10 [default = 0.3];
inline bool DetectionOutputParameter::has_nms_threshold() const {
  return (_has_bits_[0] & 0x00000080u) != 0;
}
inline void DetectionOutputParameter::set_has_nms_threshold() {
  _has_bits_[0] |= 0x00000080u;
}
inline void DetectionOutputParameter::clear_has_nms_threshold() {
  _has_bits_[0] &= ~0x00000080u;
}
inline void DetectionOutputParameter::clear_nms_threshold() {
  nms_threshold_ = 0.3f;
  clear_has_nms_threshold();
}
inline float DetectionOutputParameter::nms_threshold() const {
  // @@protoc_insertion_point(field_get:caffe.DetectionOutputParameter.nms_threshold)
  return nms_threshold_;
}
inline void DetectionOutputParameter::set_nms_threshold(float value) {
  set_has_nms_threshold();
  nms_threshold_ = value;
  // @@protoc_insertion_point(field_set:caffe.DetectionOutputParameter.nms_threshold)
}

// optional int32 top_k = 11;
inline bool DetectionOutputParameter::has_top_k() const {
  return (_has_bits_[0] & 0x00000100u) != 0;
}
inline void DetectionOutputParameter::set_has_top_k() {
  _has_bits_[0] |= 0x00000100u;
}
inline void DetectionOutputParameter::clear_has_top_k() {
  _has_bits_[0] &= ~0x00000100u;
}
inline void DetectionOutputParameter::clear_top_k() {
  top_k_ = 0;
  clear_has_top_k();
}
inline ::google::protobuf::int32 DetectionOutputParameter::top_k() const {
  // @@protoc_insertion_point(field_get:caffe.DetectionOutputParameter.top_k)
  return top_k_;
}
inline void DetectionOutputParameter::set_top_k(::google::protobuf::int32 value) {
  set_has_top_k();
  top_k_ = value;
  // @@protoc_insertion_point(field_set:caffe.DetectionOutputParameter.top_k)
}

inline const DetectionOutputParameter* DetectionOutputParameter::internal_default_instance() {
  return &DetectionOutputParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// Datum

// optional int32 channels = 1;
inline bool Datum::has_channels() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void Datum::set_has_channels() {
  _has_bits_[0] |= 0x00000001u;
}
inline void Datum::clear_has_channels() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void Datum::clear_channels() {
  channels_ = 0;
  clear_has_channels();
}
inline ::google::protobuf::int32 Datum::channels() const {
  // @@protoc_insertion_point(field_get:caffe.Datum.channels)
  return channels_;
}
inline void Datum::set_channels(::google::protobuf::int32 value) {
  set_has_channels();
  channels_ = value;
  // @@protoc_insertion_point(field_set:caffe.Datum.channels)
}

// optional int32 height = 2;
inline bool Datum::has_height() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void Datum::set_has_height() {
  _has_bits_[0] |= 0x00000002u;
}
inline void Datum::clear_has_height() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void Datum::clear_height() {
  height_ = 0;
  clear_has_height();
}
inline ::google::protobuf::int32 Datum::height() const {
  // @@protoc_insertion_point(field_get:caffe.Datum.height)
  return height_;
}
inline void Datum::set_height(::google::protobuf::int32 value) {
  set_has_height();
  height_ = value;
  // @@protoc_insertion_point(field_set:caffe.Datum.height)
}

// optional int32 width = 3;
inline bool Datum::has_width() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void Datum::set_has_width() {
  _has_bits_[0] |= 0x00000004u;
}
inline void Datum::clear_has_width() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void Datum::clear_width() {
  width_ = 0;
  clear_has_width();
}
inline ::google::protobuf::int32 Datum::width() const {
  // @@protoc_insertion_point(field_get:caffe.Datum.width)
  return width_;
}
inline void Datum::set_width(::google::protobuf::int32 value) {
  set_has_width();
  width_ = value;
  // @@protoc_insertion_point(field_set:caffe.Datum.width)
}

// optional bytes data = 4;
inline bool Datum::has_data() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void Datum::set_has_data() {
  _has_bits_[0] |= 0x00000008u;
}
inline void Datum::clear_has_data() {
  _has_bits_[0] &= ~0x00000008u;
}
inline void Datum::clear_data() {
  data_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_data();
}
inline const ::std::string& Datum::data() const {
  // @@protoc_insertion_point(field_get:caffe.Datum.data)
  return data_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void Datum::set_data(const ::std::string& value) {
  set_has_data();
  data_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.Datum.data)
}
inline void Datum::set_data(const char* value) {
  set_has_data();
  data_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.Datum.data)
}
inline void Datum::set_data(const void* value, size_t size) {
  set_has_data();
  data_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.Datum.data)
}
inline ::std::string* Datum::mutable_data() {
  set_has_data();
  // @@protoc_insertion_point(field_mutable:caffe.Datum.data)
  return data_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* Datum::release_data() {
  // @@protoc_insertion_point(field_release:caffe.Datum.data)
  clear_has_data();
  return data_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void Datum::set_allocated_data(::std::string* data) {
  if (data != NULL) {
    set_has_data();
  } else {
    clear_has_data();
  }
  data_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), data);
  // @@protoc_insertion_point(field_set_allocated:caffe.Datum.data)
}

// optional int32 label = 5;
inline bool Datum::has_label() const {
  return (_has_bits_[0] & 0x00000010u) != 0;
}
inline void Datum::set_has_label() {
  _has_bits_[0] |= 0x00000010u;
}
inline void Datum::clear_has_label() {
  _has_bits_[0] &= ~0x00000010u;
}
inline void Datum::clear_label() {
  label_ = 0;
  clear_has_label();
}
inline ::google::protobuf::int32 Datum::label() const {
  // @@protoc_insertion_point(field_get:caffe.Datum.label)
  return label_;
}
inline void Datum::set_label(::google::protobuf::int32 value) {
  set_has_label();
  label_ = value;
  // @@protoc_insertion_point(field_set:caffe.Datum.label)
}

// repeated float float_data = 6;
inline int Datum::float_data_size() const {
  return float_data_.size();
}
inline void Datum::clear_float_data() {
  float_data_.Clear();
}
inline float Datum::float_data(int index) const {
  // @@protoc_insertion_point(field_get:caffe.Datum.float_data)
  return float_data_.Get(index);
}
inline void Datum::set_float_data(int index, float value) {
  float_data_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.Datum.float_data)
}
inline void Datum::add_float_data(float value) {
  float_data_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.Datum.float_data)
}
inline const ::google::protobuf::RepeatedField< float >&
Datum::float_data() const {
  // @@protoc_insertion_point(field_list:caffe.Datum.float_data)
  return float_data_;
}
inline ::google::protobuf::RepeatedField< float >*
Datum::mutable_float_data() {
  // @@protoc_insertion_point(field_mutable_list:caffe.Datum.float_data)
  return &float_data_;
}

// optional bool encoded = 7 [default = false];
inline bool Datum::has_encoded() const {
  return (_has_bits_[0] & 0x00000040u) != 0;
}
inline void Datum::set_has_encoded() {
  _has_bits_[0] |= 0x00000040u;
}
inline void Datum::clear_has_encoded() {
  _has_bits_[0] &= ~0x00000040u;
}
inline void Datum::clear_encoded() {
  encoded_ = false;
  clear_has_encoded();
}
inline bool Datum::encoded() const {
  // @@protoc_insertion_point(field_get:caffe.Datum.encoded)
  return encoded_;
}
inline void Datum::set_encoded(bool value) {
  set_has_encoded();
  encoded_ = value;
  // @@protoc_insertion_point(field_set:caffe.Datum.encoded)
}

inline const Datum* Datum::internal_default_instance() {
  return &Datum_default_instance_.get();
}
// -------------------------------------------------------------------

// FillerParameter

// optional string type = 1 [default = "constant"];
inline bool FillerParameter::has_type() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void FillerParameter::set_has_type() {
  _has_bits_[0] |= 0x00000001u;
}
inline void FillerParameter::clear_has_type() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void FillerParameter::clear_type() {
  type_.ClearToDefaultNoArena(_default_type_);
  clear_has_type();
}
inline const ::std::string& FillerParameter::type() const {
  // @@protoc_insertion_point(field_get:caffe.FillerParameter.type)
  return type_.GetNoArena(_default_type_);
}
inline void FillerParameter::set_type(const ::std::string& value) {
  set_has_type();
  type_.SetNoArena(_default_type_, value);
  // @@protoc_insertion_point(field_set:caffe.FillerParameter.type)
}
inline void FillerParameter::set_type(const char* value) {
  set_has_type();
  type_.SetNoArena(_default_type_, ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.FillerParameter.type)
}
inline void FillerParameter::set_type(const char* value, size_t size) {
  set_has_type();
  type_.SetNoArena(_default_type_,
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.FillerParameter.type)
}
inline ::std::string* FillerParameter::mutable_type() {
  set_has_type();
  // @@protoc_insertion_point(field_mutable:caffe.FillerParameter.type)
  return type_.MutableNoArena(_default_type_);
}
inline ::std::string* FillerParameter::release_type() {
  // @@protoc_insertion_point(field_release:caffe.FillerParameter.type)
  clear_has_type();
  return type_.ReleaseNoArena(_default_type_);
}
inline void FillerParameter::set_allocated_type(::std::string* type) {
  if (type != NULL) {
    set_has_type();
  } else {
    clear_has_type();
  }
  type_.SetAllocatedNoArena(_default_type_, type);
  // @@protoc_insertion_point(field_set_allocated:caffe.FillerParameter.type)
}

// optional float value = 2 [default = 0];
inline bool FillerParameter::has_value() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void FillerParameter::set_has_value() {
  _has_bits_[0] |= 0x00000002u;
}
inline void FillerParameter::clear_has_value() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void FillerParameter::clear_value() {
  value_ = 0;
  clear_has_value();
}
inline float FillerParameter::value() const {
  // @@protoc_insertion_point(field_get:caffe.FillerParameter.value)
  return value_;
}
inline void FillerParameter::set_value(float value) {
  set_has_value();
  value_ = value;
  // @@protoc_insertion_point(field_set:caffe.FillerParameter.value)
}

// optional float min = 3 [default = 0];
inline bool FillerParameter::has_min() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void FillerParameter::set_has_min() {
  _has_bits_[0] |= 0x00000004u;
}
inline void FillerParameter::clear_has_min() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void FillerParameter::clear_min() {
  min_ = 0;
  clear_has_min();
}
inline float FillerParameter::min() const {
  // @@protoc_insertion_point(field_get:caffe.FillerParameter.min)
  return min_;
}
inline void FillerParameter::set_min(float value) {
  set_has_min();
  min_ = value;
  // @@protoc_insertion_point(field_set:caffe.FillerParameter.min)
}

// optional float max = 4 [default = 1];
inline bool FillerParameter::has_max() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void FillerParameter::set_has_max() {
  _has_bits_[0] |= 0x00000008u;
}
inline void FillerParameter::clear_has_max() {
  _has_bits_[0] &= ~0x00000008u;
}
inline void FillerParameter::clear_max() {
  max_ = 1;
  clear_has_max();
}
inline float FillerParameter::max() const {
  // @@protoc_insertion_point(field_get:caffe.FillerParameter.max)
  return max_;
}
inline void FillerParameter::set_max(float value) {
  set_has_max();
  max_ = value;
  // @@protoc_insertion_point(field_set:caffe.FillerParameter.max)
}

// optional float mean = 5 [default = 0];
inline bool FillerParameter::has_mean() const {
  return (_has_bits_[0] & 0x00000010u) != 0;
}
inline void FillerParameter::set_has_mean() {
  _has_bits_[0] |= 0x00000010u;
}
inline void FillerParameter::clear_has_mean() {
  _has_bits_[0] &= ~0x00000010u;
}
inline void FillerParameter::clear_mean() {
  mean_ = 0;
  clear_has_mean();
}
inline float FillerParameter::mean() const {
  // @@protoc_insertion_point(field_get:caffe.FillerParameter.mean)
  return mean_;
}
inline void FillerParameter::set_mean(float value) {
  set_has_mean();
  mean_ = value;
  // @@protoc_insertion_point(field_set:caffe.FillerParameter.mean)
}

// optional float std = 6 [default = 1];
inline bool FillerParameter::has_std() const {
  return (_has_bits_[0] & 0x00000020u) != 0;
}
inline void FillerParameter::set_has_std() {
  _has_bits_[0] |= 0x00000020u;
}
inline void FillerParameter::clear_has_std() {
  _has_bits_[0] &= ~0x00000020u;
}
inline void FillerParameter::clear_std() {
  std_ = 1;
  clear_has_std();
}
inline float FillerParameter::std() const {
  // @@protoc_insertion_point(field_get:caffe.FillerParameter.std)
  return std_;
}
inline void FillerParameter::set_std(float value) {
  set_has_std();
  std_ = value;
  // @@protoc_insertion_point(field_set:caffe.FillerParameter.std)
}

// optional int32 sparse = 7 [default = -1];
inline bool FillerParameter::has_sparse() const {
  return (_has_bits_[0] & 0x00000040u) != 0;
}
inline void FillerParameter::set_has_sparse() {
  _has_bits_[0] |= 0x00000040u;
}
inline void FillerParameter::clear_has_sparse() {
  _has_bits_[0] &= ~0x00000040u;
}
inline void FillerParameter::clear_sparse() {
  sparse_ = -1;
  clear_has_sparse();
}
inline ::google::protobuf::int32 FillerParameter::sparse() const {
  // @@protoc_insertion_point(field_get:caffe.FillerParameter.sparse)
  return sparse_;
}
inline void FillerParameter::set_sparse(::google::protobuf::int32 value) {
  set_has_sparse();
  sparse_ = value;
  // @@protoc_insertion_point(field_set:caffe.FillerParameter.sparse)
}

// optional .caffe.FillerParameter.VarianceNorm variance_norm = 8 [default = FAN_IN];
inline bool FillerParameter::has_variance_norm() const {
  return (_has_bits_[0] & 0x00000080u) != 0;
}
inline void FillerParameter::set_has_variance_norm() {
  _has_bits_[0] |= 0x00000080u;
}
inline void FillerParameter::clear_has_variance_norm() {
  _has_bits_[0] &= ~0x00000080u;
}
inline void FillerParameter::clear_variance_norm() {
  variance_norm_ = 0;
  clear_has_variance_norm();
}
inline ::caffe::FillerParameter_VarianceNorm FillerParameter::variance_norm() const {
  // @@protoc_insertion_point(field_get:caffe.FillerParameter.variance_norm)
  return static_cast< ::caffe::FillerParameter_VarianceNorm >(variance_norm_);
}
inline void FillerParameter::set_variance_norm(::caffe::FillerParameter_VarianceNorm value) {
  assert(::caffe::FillerParameter_VarianceNorm_IsValid(value));
  set_has_variance_norm();
  variance_norm_ = value;
  // @@protoc_insertion_point(field_set:caffe.FillerParameter.variance_norm)
}

inline const FillerParameter* FillerParameter::internal_default_instance() {
  return &FillerParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// NetParameter

// optional string name = 1;
inline bool NetParameter::has_name() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void NetParameter::set_has_name() {
  _has_bits_[0] |= 0x00000001u;
}
inline void NetParameter::clear_has_name() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void NetParameter::clear_name() {
  name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_name();
}
inline const ::std::string& NetParameter::name() const {
  // @@protoc_insertion_point(field_get:caffe.NetParameter.name)
  return name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void NetParameter::set_name(const ::std::string& value) {
  set_has_name();
  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.NetParameter.name)
}
inline void NetParameter::set_name(const char* value) {
  set_has_name();
  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.NetParameter.name)
}
inline void NetParameter::set_name(const char* value, size_t size) {
  set_has_name();
  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.NetParameter.name)
}
inline ::std::string* NetParameter::mutable_name() {
  set_has_name();
  // @@protoc_insertion_point(field_mutable:caffe.NetParameter.name)
  return name_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* NetParameter::release_name() {
  // @@protoc_insertion_point(field_release:caffe.NetParameter.name)
  clear_has_name();
  return name_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void NetParameter::set_allocated_name(::std::string* name) {
  if (name != NULL) {
    set_has_name();
  } else {
    clear_has_name();
  }
  name_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), name);
  // @@protoc_insertion_point(field_set_allocated:caffe.NetParameter.name)
}

// repeated string input = 3;
inline int NetParameter::input_size() const {
  return input_.size();
}
inline void NetParameter::clear_input() {
  input_.Clear();
}
inline const ::std::string& NetParameter::input(int index) const {
  // @@protoc_insertion_point(field_get:caffe.NetParameter.input)
  return input_.Get(index);
}
inline ::std::string* NetParameter::mutable_input(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.NetParameter.input)
  return input_.Mutable(index);
}
inline void NetParameter::set_input(int index, const ::std::string& value) {
  // @@protoc_insertion_point(field_set:caffe.NetParameter.input)
  input_.Mutable(index)->assign(value);
}
inline void NetParameter::set_input(int index, const char* value) {
  input_.Mutable(index)->assign(value);
  // @@protoc_insertion_point(field_set_char:caffe.NetParameter.input)
}
inline void NetParameter::set_input(int index, const char* value, size_t size) {
  input_.Mutable(index)->assign(
    reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_set_pointer:caffe.NetParameter.input)
}
inline ::std::string* NetParameter::add_input() {
  // @@protoc_insertion_point(field_add_mutable:caffe.NetParameter.input)
  return input_.Add();
}
inline void NetParameter::add_input(const ::std::string& value) {
  input_.Add()->assign(value);
  // @@protoc_insertion_point(field_add:caffe.NetParameter.input)
}
inline void NetParameter::add_input(const char* value) {
  input_.Add()->assign(value);
  // @@protoc_insertion_point(field_add_char:caffe.NetParameter.input)
}
inline void NetParameter::add_input(const char* value, size_t size) {
  input_.Add()->assign(reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_add_pointer:caffe.NetParameter.input)
}
inline const ::google::protobuf::RepeatedPtrField< ::std::string>&
NetParameter::input() const {
  // @@protoc_insertion_point(field_list:caffe.NetParameter.input)
  return input_;
}
inline ::google::protobuf::RepeatedPtrField< ::std::string>*
NetParameter::mutable_input() {
  // @@protoc_insertion_point(field_mutable_list:caffe.NetParameter.input)
  return &input_;
}

// repeated .caffe.BlobShape input_shape = 8;
inline int NetParameter::input_shape_size() const {
  return input_shape_.size();
}
inline void NetParameter::clear_input_shape() {
  input_shape_.Clear();
}
inline const ::caffe::BlobShape& NetParameter::input_shape(int index) const {
  // @@protoc_insertion_point(field_get:caffe.NetParameter.input_shape)
  return input_shape_.Get(index);
}
inline ::caffe::BlobShape* NetParameter::mutable_input_shape(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.NetParameter.input_shape)
  return input_shape_.Mutable(index);
}
inline ::caffe::BlobShape* NetParameter::add_input_shape() {
  // @@protoc_insertion_point(field_add:caffe.NetParameter.input_shape)
  return input_shape_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::caffe::BlobShape >*
NetParameter::mutable_input_shape() {
  // @@protoc_insertion_point(field_mutable_list:caffe.NetParameter.input_shape)
  return &input_shape_;
}
inline const ::google::protobuf::RepeatedPtrField< ::caffe::BlobShape >&
NetParameter::input_shape() const {
  // @@protoc_insertion_point(field_list:caffe.NetParameter.input_shape)
  return input_shape_;
}

// repeated int32 input_dim = 4;
inline int NetParameter::input_dim_size() const {
  return input_dim_.size();
}
inline void NetParameter::clear_input_dim() {
  input_dim_.Clear();
}
inline ::google::protobuf::int32 NetParameter::input_dim(int index) const {
  // @@protoc_insertion_point(field_get:caffe.NetParameter.input_dim)
  return input_dim_.Get(index);
}
inline void NetParameter::set_input_dim(int index, ::google::protobuf::int32 value) {
  input_dim_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.NetParameter.input_dim)
}
inline void NetParameter::add_input_dim(::google::protobuf::int32 value) {
  input_dim_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.NetParameter.input_dim)
}
inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
NetParameter::input_dim() const {
  // @@protoc_insertion_point(field_list:caffe.NetParameter.input_dim)
  return input_dim_;
}
inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
NetParameter::mutable_input_dim() {
  // @@protoc_insertion_point(field_mutable_list:caffe.NetParameter.input_dim)
  return &input_dim_;
}

// optional bool force_backward = 5 [default = false];
inline bool NetParameter::has_force_backward() const {
  return (_has_bits_[0] & 0x00000010u) != 0;
}
inline void NetParameter::set_has_force_backward() {
  _has_bits_[0] |= 0x00000010u;
}
inline void NetParameter::clear_has_force_backward() {
  _has_bits_[0] &= ~0x00000010u;
}
inline void NetParameter::clear_force_backward() {
  force_backward_ = false;
  clear_has_force_backward();
}
inline bool NetParameter::force_backward() const {
  // @@protoc_insertion_point(field_get:caffe.NetParameter.force_backward)
  return force_backward_;
}
inline void NetParameter::set_force_backward(bool value) {
  set_has_force_backward();
  force_backward_ = value;
  // @@protoc_insertion_point(field_set:caffe.NetParameter.force_backward)
}

// optional .caffe.NetState state = 6;
inline bool NetParameter::has_state() const {
  return (_has_bits_[0] & 0x00000020u) != 0;
}
inline void NetParameter::set_has_state() {
  _has_bits_[0] |= 0x00000020u;
}
inline void NetParameter::clear_has_state() {
  _has_bits_[0] &= ~0x00000020u;
}
inline void NetParameter::clear_state() {
  if (state_ != NULL) state_->::caffe::NetState::Clear();
  clear_has_state();
}
inline const ::caffe::NetState& NetParameter::state() const {
  // @@protoc_insertion_point(field_get:caffe.NetParameter.state)
  return state_ != NULL ? *state_
                         : *::caffe::NetState::internal_default_instance();
}
inline ::caffe::NetState* NetParameter::mutable_state() {
  set_has_state();
  if (state_ == NULL) {
    state_ = new ::caffe::NetState;
  }
  // @@protoc_insertion_point(field_mutable:caffe.NetParameter.state)
  return state_;
}
inline ::caffe::NetState* NetParameter::release_state() {
  // @@protoc_insertion_point(field_release:caffe.NetParameter.state)
  clear_has_state();
  ::caffe::NetState* temp = state_;
  state_ = NULL;
  return temp;
}
inline void NetParameter::set_allocated_state(::caffe::NetState* state) {
  delete state_;
  state_ = state;
  if (state) {
    set_has_state();
  } else {
    clear_has_state();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.NetParameter.state)
}

// optional bool debug_info = 7 [default = false];
inline bool NetParameter::has_debug_info() const {
  return (_has_bits_[0] & 0x00000040u) != 0;
}
inline void NetParameter::set_has_debug_info() {
  _has_bits_[0] |= 0x00000040u;
}
inline void NetParameter::clear_has_debug_info() {
  _has_bits_[0] &= ~0x00000040u;
}
inline void NetParameter::clear_debug_info() {
  debug_info_ = false;
  clear_has_debug_info();
}
inline bool NetParameter::debug_info() const {
  // @@protoc_insertion_point(field_get:caffe.NetParameter.debug_info)
  return debug_info_;
}
inline void NetParameter::set_debug_info(bool value) {
  set_has_debug_info();
  debug_info_ = value;
  // @@protoc_insertion_point(field_set:caffe.NetParameter.debug_info)
}

// repeated .caffe.LayerParameter layer = 100;
inline int NetParameter::layer_size() const {
  return layer_.size();
}
inline void NetParameter::clear_layer() {
  layer_.Clear();
}
inline const ::caffe::LayerParameter& NetParameter::layer(int index) const {
  // @@protoc_insertion_point(field_get:caffe.NetParameter.layer)
  return layer_.Get(index);
}
inline ::caffe::LayerParameter* NetParameter::mutable_layer(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.NetParameter.layer)
  return layer_.Mutable(index);
}
inline ::caffe::LayerParameter* NetParameter::add_layer() {
  // @@protoc_insertion_point(field_add:caffe.NetParameter.layer)
  return layer_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::caffe::LayerParameter >*
NetParameter::mutable_layer() {
  // @@protoc_insertion_point(field_mutable_list:caffe.NetParameter.layer)
  return &layer_;
}
inline const ::google::protobuf::RepeatedPtrField< ::caffe::LayerParameter >&
NetParameter::layer() const {
  // @@protoc_insertion_point(field_list:caffe.NetParameter.layer)
  return layer_;
}

// repeated .caffe.V1LayerParameter layers = 2;
inline int NetParameter::layers_size() const {
  return layers_.size();
}
inline void NetParameter::clear_layers() {
  layers_.Clear();
}
inline const ::caffe::V1LayerParameter& NetParameter::layers(int index) const {
  // @@protoc_insertion_point(field_get:caffe.NetParameter.layers)
  return layers_.Get(index);
}
inline ::caffe::V1LayerParameter* NetParameter::mutable_layers(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.NetParameter.layers)
  return layers_.Mutable(index);
}
inline ::caffe::V1LayerParameter* NetParameter::add_layers() {
  // @@protoc_insertion_point(field_add:caffe.NetParameter.layers)
  return layers_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::caffe::V1LayerParameter >*
NetParameter::mutable_layers() {
  // @@protoc_insertion_point(field_mutable_list:caffe.NetParameter.layers)
  return &layers_;
}
inline const ::google::protobuf::RepeatedPtrField< ::caffe::V1LayerParameter >&
NetParameter::layers() const {
  // @@protoc_insertion_point(field_list:caffe.NetParameter.layers)
  return layers_;
}

inline const NetParameter* NetParameter::internal_default_instance() {
  return &NetParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// SolverParameter

// optional string net = 24;
inline bool SolverParameter::has_net() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void SolverParameter::set_has_net() {
  _has_bits_[0] |= 0x00000001u;
}
inline void SolverParameter::clear_has_net() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void SolverParameter::clear_net() {
  net_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_net();
}
inline const ::std::string& SolverParameter::net() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.net)
  return net_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void SolverParameter::set_net(const ::std::string& value) {
  set_has_net();
  net_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.net)
}
inline void SolverParameter::set_net(const char* value) {
  set_has_net();
  net_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.SolverParameter.net)
}
inline void SolverParameter::set_net(const char* value, size_t size) {
  set_has_net();
  net_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.SolverParameter.net)
}
inline ::std::string* SolverParameter::mutable_net() {
  set_has_net();
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.net)
  return net_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* SolverParameter::release_net() {
  // @@protoc_insertion_point(field_release:caffe.SolverParameter.net)
  clear_has_net();
  return net_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void SolverParameter::set_allocated_net(::std::string* net) {
  if (net != NULL) {
    set_has_net();
  } else {
    clear_has_net();
  }
  net_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), net);
  // @@protoc_insertion_point(field_set_allocated:caffe.SolverParameter.net)
}

// optional .caffe.NetParameter net_param = 25;
inline bool SolverParameter::has_net_param() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void SolverParameter::set_has_net_param() {
  _has_bits_[0] |= 0x00000002u;
}
inline void SolverParameter::clear_has_net_param() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void SolverParameter::clear_net_param() {
  if (net_param_ != NULL) net_param_->::caffe::NetParameter::Clear();
  clear_has_net_param();
}
inline const ::caffe::NetParameter& SolverParameter::net_param() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.net_param)
  return net_param_ != NULL ? *net_param_
                         : *::caffe::NetParameter::internal_default_instance();
}
inline ::caffe::NetParameter* SolverParameter::mutable_net_param() {
  set_has_net_param();
  if (net_param_ == NULL) {
    net_param_ = new ::caffe::NetParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.net_param)
  return net_param_;
}
inline ::caffe::NetParameter* SolverParameter::release_net_param() {
  // @@protoc_insertion_point(field_release:caffe.SolverParameter.net_param)
  clear_has_net_param();
  ::caffe::NetParameter* temp = net_param_;
  net_param_ = NULL;
  return temp;
}
inline void SolverParameter::set_allocated_net_param(::caffe::NetParameter* net_param) {
  delete net_param_;
  net_param_ = net_param;
  if (net_param) {
    set_has_net_param();
  } else {
    clear_has_net_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.SolverParameter.net_param)
}

// optional string train_net = 1;
inline bool SolverParameter::has_train_net() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void SolverParameter::set_has_train_net() {
  _has_bits_[0] |= 0x00000004u;
}
inline void SolverParameter::clear_has_train_net() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void SolverParameter::clear_train_net() {
  train_net_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_train_net();
}
inline const ::std::string& SolverParameter::train_net() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.train_net)
  return train_net_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void SolverParameter::set_train_net(const ::std::string& value) {
  set_has_train_net();
  train_net_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.train_net)
}
inline void SolverParameter::set_train_net(const char* value) {
  set_has_train_net();
  train_net_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.SolverParameter.train_net)
}
inline void SolverParameter::set_train_net(const char* value, size_t size) {
  set_has_train_net();
  train_net_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.SolverParameter.train_net)
}
inline ::std::string* SolverParameter::mutable_train_net() {
  set_has_train_net();
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.train_net)
  return train_net_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* SolverParameter::release_train_net() {
  // @@protoc_insertion_point(field_release:caffe.SolverParameter.train_net)
  clear_has_train_net();
  return train_net_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void SolverParameter::set_allocated_train_net(::std::string* train_net) {
  if (train_net != NULL) {
    set_has_train_net();
  } else {
    clear_has_train_net();
  }
  train_net_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), train_net);
  // @@protoc_insertion_point(field_set_allocated:caffe.SolverParameter.train_net)
}

// repeated string test_net = 2;
inline int SolverParameter::test_net_size() const {
  return test_net_.size();
}
inline void SolverParameter::clear_test_net() {
  test_net_.Clear();
}
inline const ::std::string& SolverParameter::test_net(int index) const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.test_net)
  return test_net_.Get(index);
}
inline ::std::string* SolverParameter::mutable_test_net(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.test_net)
  return test_net_.Mutable(index);
}
inline void SolverParameter::set_test_net(int index, const ::std::string& value) {
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.test_net)
  test_net_.Mutable(index)->assign(value);
}
inline void SolverParameter::set_test_net(int index, const char* value) {
  test_net_.Mutable(index)->assign(value);
  // @@protoc_insertion_point(field_set_char:caffe.SolverParameter.test_net)
}
inline void SolverParameter::set_test_net(int index, const char* value, size_t size) {
  test_net_.Mutable(index)->assign(
    reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_set_pointer:caffe.SolverParameter.test_net)
}
inline ::std::string* SolverParameter::add_test_net() {
  // @@protoc_insertion_point(field_add_mutable:caffe.SolverParameter.test_net)
  return test_net_.Add();
}
inline void SolverParameter::add_test_net(const ::std::string& value) {
  test_net_.Add()->assign(value);
  // @@protoc_insertion_point(field_add:caffe.SolverParameter.test_net)
}
inline void SolverParameter::add_test_net(const char* value) {
  test_net_.Add()->assign(value);
  // @@protoc_insertion_point(field_add_char:caffe.SolverParameter.test_net)
}
inline void SolverParameter::add_test_net(const char* value, size_t size) {
  test_net_.Add()->assign(reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_add_pointer:caffe.SolverParameter.test_net)
}
inline const ::google::protobuf::RepeatedPtrField< ::std::string>&
SolverParameter::test_net() const {
  // @@protoc_insertion_point(field_list:caffe.SolverParameter.test_net)
  return test_net_;
}
inline ::google::protobuf::RepeatedPtrField< ::std::string>*
SolverParameter::mutable_test_net() {
  // @@protoc_insertion_point(field_mutable_list:caffe.SolverParameter.test_net)
  return &test_net_;
}

// optional .caffe.NetParameter train_net_param = 21;
inline bool SolverParameter::has_train_net_param() const {
  return (_has_bits_[0] & 0x00000010u) != 0;
}
inline void SolverParameter::set_has_train_net_param() {
  _has_bits_[0] |= 0x00000010u;
}
inline void SolverParameter::clear_has_train_net_param() {
  _has_bits_[0] &= ~0x00000010u;
}
inline void SolverParameter::clear_train_net_param() {
  if (train_net_param_ != NULL) train_net_param_->::caffe::NetParameter::Clear();
  clear_has_train_net_param();
}
inline const ::caffe::NetParameter& SolverParameter::train_net_param() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.train_net_param)
  return train_net_param_ != NULL ? *train_net_param_
                         : *::caffe::NetParameter::internal_default_instance();
}
inline ::caffe::NetParameter* SolverParameter::mutable_train_net_param() {
  set_has_train_net_param();
  if (train_net_param_ == NULL) {
    train_net_param_ = new ::caffe::NetParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.train_net_param)
  return train_net_param_;
}
inline ::caffe::NetParameter* SolverParameter::release_train_net_param() {
  // @@protoc_insertion_point(field_release:caffe.SolverParameter.train_net_param)
  clear_has_train_net_param();
  ::caffe::NetParameter* temp = train_net_param_;
  train_net_param_ = NULL;
  return temp;
}
inline void SolverParameter::set_allocated_train_net_param(::caffe::NetParameter* train_net_param) {
  delete train_net_param_;
  train_net_param_ = train_net_param;
  if (train_net_param) {
    set_has_train_net_param();
  } else {
    clear_has_train_net_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.SolverParameter.train_net_param)
}

// repeated .caffe.NetParameter test_net_param = 22;
inline int SolverParameter::test_net_param_size() const {
  return test_net_param_.size();
}
inline void SolverParameter::clear_test_net_param() {
  test_net_param_.Clear();
}
inline const ::caffe::NetParameter& SolverParameter::test_net_param(int index) const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.test_net_param)
  return test_net_param_.Get(index);
}
inline ::caffe::NetParameter* SolverParameter::mutable_test_net_param(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.test_net_param)
  return test_net_param_.Mutable(index);
}
inline ::caffe::NetParameter* SolverParameter::add_test_net_param() {
  // @@protoc_insertion_point(field_add:caffe.SolverParameter.test_net_param)
  return test_net_param_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::caffe::NetParameter >*
SolverParameter::mutable_test_net_param() {
  // @@protoc_insertion_point(field_mutable_list:caffe.SolverParameter.test_net_param)
  return &test_net_param_;
}
inline const ::google::protobuf::RepeatedPtrField< ::caffe::NetParameter >&
SolverParameter::test_net_param() const {
  // @@protoc_insertion_point(field_list:caffe.SolverParameter.test_net_param)
  return test_net_param_;
}

// optional .caffe.NetState train_state = 26;
inline bool SolverParameter::has_train_state() const {
  return (_has_bits_[0] & 0x00000040u) != 0;
}
inline void SolverParameter::set_has_train_state() {
  _has_bits_[0] |= 0x00000040u;
}
inline void SolverParameter::clear_has_train_state() {
  _has_bits_[0] &= ~0x00000040u;
}
inline void SolverParameter::clear_train_state() {
  if (train_state_ != NULL) train_state_->::caffe::NetState::Clear();
  clear_has_train_state();
}
inline const ::caffe::NetState& SolverParameter::train_state() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.train_state)
  return train_state_ != NULL ? *train_state_
                         : *::caffe::NetState::internal_default_instance();
}
inline ::caffe::NetState* SolverParameter::mutable_train_state() {
  set_has_train_state();
  if (train_state_ == NULL) {
    train_state_ = new ::caffe::NetState;
  }
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.train_state)
  return train_state_;
}
inline ::caffe::NetState* SolverParameter::release_train_state() {
  // @@protoc_insertion_point(field_release:caffe.SolverParameter.train_state)
  clear_has_train_state();
  ::caffe::NetState* temp = train_state_;
  train_state_ = NULL;
  return temp;
}
inline void SolverParameter::set_allocated_train_state(::caffe::NetState* train_state) {
  delete train_state_;
  train_state_ = train_state;
  if (train_state) {
    set_has_train_state();
  } else {
    clear_has_train_state();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.SolverParameter.train_state)
}

// repeated .caffe.NetState test_state = 27;
inline int SolverParameter::test_state_size() const {
  return test_state_.size();
}
inline void SolverParameter::clear_test_state() {
  test_state_.Clear();
}
inline const ::caffe::NetState& SolverParameter::test_state(int index) const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.test_state)
  return test_state_.Get(index);
}
inline ::caffe::NetState* SolverParameter::mutable_test_state(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.test_state)
  return test_state_.Mutable(index);
}
inline ::caffe::NetState* SolverParameter::add_test_state() {
  // @@protoc_insertion_point(field_add:caffe.SolverParameter.test_state)
  return test_state_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::caffe::NetState >*
SolverParameter::mutable_test_state() {
  // @@protoc_insertion_point(field_mutable_list:caffe.SolverParameter.test_state)
  return &test_state_;
}
inline const ::google::protobuf::RepeatedPtrField< ::caffe::NetState >&
SolverParameter::test_state() const {
  // @@protoc_insertion_point(field_list:caffe.SolverParameter.test_state)
  return test_state_;
}

// repeated int32 test_iter = 3;
inline int SolverParameter::test_iter_size() const {
  return test_iter_.size();
}
inline void SolverParameter::clear_test_iter() {
  test_iter_.Clear();
}
inline ::google::protobuf::int32 SolverParameter::test_iter(int index) const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.test_iter)
  return test_iter_.Get(index);
}
inline void SolverParameter::set_test_iter(int index, ::google::protobuf::int32 value) {
  test_iter_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.test_iter)
}
inline void SolverParameter::add_test_iter(::google::protobuf::int32 value) {
  test_iter_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.SolverParameter.test_iter)
}
inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
SolverParameter::test_iter() const {
  // @@protoc_insertion_point(field_list:caffe.SolverParameter.test_iter)
  return test_iter_;
}
inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
SolverParameter::mutable_test_iter() {
  // @@protoc_insertion_point(field_mutable_list:caffe.SolverParameter.test_iter)
  return &test_iter_;
}

// optional int32 test_interval = 4 [default = 0];
inline bool SolverParameter::has_test_interval() const {
  return (_has_bits_[0] & 0x00000200u) != 0;
}
inline void SolverParameter::set_has_test_interval() {
  _has_bits_[0] |= 0x00000200u;
}
inline void SolverParameter::clear_has_test_interval() {
  _has_bits_[0] &= ~0x00000200u;
}
inline void SolverParameter::clear_test_interval() {
  test_interval_ = 0;
  clear_has_test_interval();
}
inline ::google::protobuf::int32 SolverParameter::test_interval() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.test_interval)
  return test_interval_;
}
inline void SolverParameter::set_test_interval(::google::protobuf::int32 value) {
  set_has_test_interval();
  test_interval_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.test_interval)
}

// optional bool test_compute_loss = 19 [default = false];
inline bool SolverParameter::has_test_compute_loss() const {
  return (_has_bits_[0] & 0x00000400u) != 0;
}
inline void SolverParameter::set_has_test_compute_loss() {
  _has_bits_[0] |= 0x00000400u;
}
inline void SolverParameter::clear_has_test_compute_loss() {
  _has_bits_[0] &= ~0x00000400u;
}
inline void SolverParameter::clear_test_compute_loss() {
  test_compute_loss_ = false;
  clear_has_test_compute_loss();
}
inline bool SolverParameter::test_compute_loss() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.test_compute_loss)
  return test_compute_loss_;
}
inline void SolverParameter::set_test_compute_loss(bool value) {
  set_has_test_compute_loss();
  test_compute_loss_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.test_compute_loss)
}

// optional bool test_initialization = 32 [default = true];
inline bool SolverParameter::has_test_initialization() const {
  return (_has_bits_[0] & 0x00000800u) != 0;
}
inline void SolverParameter::set_has_test_initialization() {
  _has_bits_[0] |= 0x00000800u;
}
inline void SolverParameter::clear_has_test_initialization() {
  _has_bits_[0] &= ~0x00000800u;
}
inline void SolverParameter::clear_test_initialization() {
  test_initialization_ = true;
  clear_has_test_initialization();
}
inline bool SolverParameter::test_initialization() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.test_initialization)
  return test_initialization_;
}
inline void SolverParameter::set_test_initialization(bool value) {
  set_has_test_initialization();
  test_initialization_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.test_initialization)
}

// optional float base_lr = 5;
inline bool SolverParameter::has_base_lr() const {
  return (_has_bits_[0] & 0x00001000u) != 0;
}
inline void SolverParameter::set_has_base_lr() {
  _has_bits_[0] |= 0x00001000u;
}
inline void SolverParameter::clear_has_base_lr() {
  _has_bits_[0] &= ~0x00001000u;
}
inline void SolverParameter::clear_base_lr() {
  base_lr_ = 0;
  clear_has_base_lr();
}
inline float SolverParameter::base_lr() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.base_lr)
  return base_lr_;
}
inline void SolverParameter::set_base_lr(float value) {
  set_has_base_lr();
  base_lr_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.base_lr)
}

// optional int32 display = 6;
inline bool SolverParameter::has_display() const {
  return (_has_bits_[0] & 0x00002000u) != 0;
}
inline void SolverParameter::set_has_display() {
  _has_bits_[0] |= 0x00002000u;
}
inline void SolverParameter::clear_has_display() {
  _has_bits_[0] &= ~0x00002000u;
}
inline void SolverParameter::clear_display() {
  display_ = 0;
  clear_has_display();
}
inline ::google::protobuf::int32 SolverParameter::display() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.display)
  return display_;
}
inline void SolverParameter::set_display(::google::protobuf::int32 value) {
  set_has_display();
  display_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.display)
}

// optional int32 average_loss = 33 [default = 1];
inline bool SolverParameter::has_average_loss() const {
  return (_has_bits_[0] & 0x00004000u) != 0;
}
inline void SolverParameter::set_has_average_loss() {
  _has_bits_[0] |= 0x00004000u;
}
inline void SolverParameter::clear_has_average_loss() {
  _has_bits_[0] &= ~0x00004000u;
}
inline void SolverParameter::clear_average_loss() {
  average_loss_ = 1;
  clear_has_average_loss();
}
inline ::google::protobuf::int32 SolverParameter::average_loss() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.average_loss)
  return average_loss_;
}
inline void SolverParameter::set_average_loss(::google::protobuf::int32 value) {
  set_has_average_loss();
  average_loss_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.average_loss)
}

// optional int32 max_iter = 7;
inline bool SolverParameter::has_max_iter() const {
  return (_has_bits_[0] & 0x00008000u) != 0;
}
inline void SolverParameter::set_has_max_iter() {
  _has_bits_[0] |= 0x00008000u;
}
inline void SolverParameter::clear_has_max_iter() {
  _has_bits_[0] &= ~0x00008000u;
}
inline void SolverParameter::clear_max_iter() {
  max_iter_ = 0;
  clear_has_max_iter();
}
inline ::google::protobuf::int32 SolverParameter::max_iter() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.max_iter)
  return max_iter_;
}
inline void SolverParameter::set_max_iter(::google::protobuf::int32 value) {
  set_has_max_iter();
  max_iter_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.max_iter)
}

// optional int32 iter_size = 36 [default = 1];
inline bool SolverParameter::has_iter_size() const {
  return (_has_bits_[0] & 0x00010000u) != 0;
}
inline void SolverParameter::set_has_iter_size() {
  _has_bits_[0] |= 0x00010000u;
}
inline void SolverParameter::clear_has_iter_size() {
  _has_bits_[0] &= ~0x00010000u;
}
inline void SolverParameter::clear_iter_size() {
  iter_size_ = 1;
  clear_has_iter_size();
}
inline ::google::protobuf::int32 SolverParameter::iter_size() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.iter_size)
  return iter_size_;
}
inline void SolverParameter::set_iter_size(::google::protobuf::int32 value) {
  set_has_iter_size();
  iter_size_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.iter_size)
}

// optional string lr_policy = 8;
inline bool SolverParameter::has_lr_policy() const {
  return (_has_bits_[0] & 0x00020000u) != 0;
}
inline void SolverParameter::set_has_lr_policy() {
  _has_bits_[0] |= 0x00020000u;
}
inline void SolverParameter::clear_has_lr_policy() {
  _has_bits_[0] &= ~0x00020000u;
}
inline void SolverParameter::clear_lr_policy() {
  lr_policy_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_lr_policy();
}
inline const ::std::string& SolverParameter::lr_policy() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.lr_policy)
  return lr_policy_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void SolverParameter::set_lr_policy(const ::std::string& value) {
  set_has_lr_policy();
  lr_policy_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.lr_policy)
}
inline void SolverParameter::set_lr_policy(const char* value) {
  set_has_lr_policy();
  lr_policy_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.SolverParameter.lr_policy)
}
inline void SolverParameter::set_lr_policy(const char* value, size_t size) {
  set_has_lr_policy();
  lr_policy_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.SolverParameter.lr_policy)
}
inline ::std::string* SolverParameter::mutable_lr_policy() {
  set_has_lr_policy();
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.lr_policy)
  return lr_policy_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* SolverParameter::release_lr_policy() {
  // @@protoc_insertion_point(field_release:caffe.SolverParameter.lr_policy)
  clear_has_lr_policy();
  return lr_policy_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void SolverParameter::set_allocated_lr_policy(::std::string* lr_policy) {
  if (lr_policy != NULL) {
    set_has_lr_policy();
  } else {
    clear_has_lr_policy();
  }
  lr_policy_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), lr_policy);
  // @@protoc_insertion_point(field_set_allocated:caffe.SolverParameter.lr_policy)
}

// optional float gamma = 9;
inline bool SolverParameter::has_gamma() const {
  return (_has_bits_[0] & 0x00040000u) != 0;
}
inline void SolverParameter::set_has_gamma() {
  _has_bits_[0] |= 0x00040000u;
}
inline void SolverParameter::clear_has_gamma() {
  _has_bits_[0] &= ~0x00040000u;
}
inline void SolverParameter::clear_gamma() {
  gamma_ = 0;
  clear_has_gamma();
}
inline float SolverParameter::gamma() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.gamma)
  return gamma_;
}
inline void SolverParameter::set_gamma(float value) {
  set_has_gamma();
  gamma_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.gamma)
}

// optional float power = 10;
inline bool SolverParameter::has_power() const {
  return (_has_bits_[0] & 0x00080000u) != 0;
}
inline void SolverParameter::set_has_power() {
  _has_bits_[0] |= 0x00080000u;
}
inline void SolverParameter::clear_has_power() {
  _has_bits_[0] &= ~0x00080000u;
}
inline void SolverParameter::clear_power() {
  power_ = 0;
  clear_has_power();
}
inline float SolverParameter::power() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.power)
  return power_;
}
inline void SolverParameter::set_power(float value) {
  set_has_power();
  power_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.power)
}

// optional float momentum = 11;
inline bool SolverParameter::has_momentum() const {
  return (_has_bits_[0] & 0x00100000u) != 0;
}
inline void SolverParameter::set_has_momentum() {
  _has_bits_[0] |= 0x00100000u;
}
inline void SolverParameter::clear_has_momentum() {
  _has_bits_[0] &= ~0x00100000u;
}
inline void SolverParameter::clear_momentum() {
  momentum_ = 0;
  clear_has_momentum();
}
inline float SolverParameter::momentum() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.momentum)
  return momentum_;
}
inline void SolverParameter::set_momentum(float value) {
  set_has_momentum();
  momentum_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.momentum)
}

// optional float weight_decay = 12;
inline bool SolverParameter::has_weight_decay() const {
  return (_has_bits_[0] & 0x00200000u) != 0;
}
inline void SolverParameter::set_has_weight_decay() {
  _has_bits_[0] |= 0x00200000u;
}
inline void SolverParameter::clear_has_weight_decay() {
  _has_bits_[0] &= ~0x00200000u;
}
inline void SolverParameter::clear_weight_decay() {
  weight_decay_ = 0;
  clear_has_weight_decay();
}
inline float SolverParameter::weight_decay() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.weight_decay)
  return weight_decay_;
}
inline void SolverParameter::set_weight_decay(float value) {
  set_has_weight_decay();
  weight_decay_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.weight_decay)
}

// optional string regularization_type = 29 [default = "L2"];
inline bool SolverParameter::has_regularization_type() const {
  return (_has_bits_[0] & 0x00400000u) != 0;
}
inline void SolverParameter::set_has_regularization_type() {
  _has_bits_[0] |= 0x00400000u;
}
inline void SolverParameter::clear_has_regularization_type() {
  _has_bits_[0] &= ~0x00400000u;
}
inline void SolverParameter::clear_regularization_type() {
  regularization_type_.ClearToDefaultNoArena(_default_regularization_type_);
  clear_has_regularization_type();
}
inline const ::std::string& SolverParameter::regularization_type() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.regularization_type)
  return regularization_type_.GetNoArena(_default_regularization_type_);
}
inline void SolverParameter::set_regularization_type(const ::std::string& value) {
  set_has_regularization_type();
  regularization_type_.SetNoArena(_default_regularization_type_, value);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.regularization_type)
}
inline void SolverParameter::set_regularization_type(const char* value) {
  set_has_regularization_type();
  regularization_type_.SetNoArena(_default_regularization_type_, ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.SolverParameter.regularization_type)
}
inline void SolverParameter::set_regularization_type(const char* value, size_t size) {
  set_has_regularization_type();
  regularization_type_.SetNoArena(_default_regularization_type_,
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.SolverParameter.regularization_type)
}
inline ::std::string* SolverParameter::mutable_regularization_type() {
  set_has_regularization_type();
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.regularization_type)
  return regularization_type_.MutableNoArena(_default_regularization_type_);
}
inline ::std::string* SolverParameter::release_regularization_type() {
  // @@protoc_insertion_point(field_release:caffe.SolverParameter.regularization_type)
  clear_has_regularization_type();
  return regularization_type_.ReleaseNoArena(_default_regularization_type_);
}
inline void SolverParameter::set_allocated_regularization_type(::std::string* regularization_type) {
  if (regularization_type != NULL) {
    set_has_regularization_type();
  } else {
    clear_has_regularization_type();
  }
  regularization_type_.SetAllocatedNoArena(_default_regularization_type_, regularization_type);
  // @@protoc_insertion_point(field_set_allocated:caffe.SolverParameter.regularization_type)
}

// optional int32 stepsize = 13;
inline bool SolverParameter::has_stepsize() const {
  return (_has_bits_[0] & 0x00800000u) != 0;
}
inline void SolverParameter::set_has_stepsize() {
  _has_bits_[0] |= 0x00800000u;
}
inline void SolverParameter::clear_has_stepsize() {
  _has_bits_[0] &= ~0x00800000u;
}
inline void SolverParameter::clear_stepsize() {
  stepsize_ = 0;
  clear_has_stepsize();
}
inline ::google::protobuf::int32 SolverParameter::stepsize() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.stepsize)
  return stepsize_;
}
inline void SolverParameter::set_stepsize(::google::protobuf::int32 value) {
  set_has_stepsize();
  stepsize_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.stepsize)
}

// repeated int32 stepvalue = 34;
inline int SolverParameter::stepvalue_size() const {
  return stepvalue_.size();
}
inline void SolverParameter::clear_stepvalue() {
  stepvalue_.Clear();
}
inline ::google::protobuf::int32 SolverParameter::stepvalue(int index) const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.stepvalue)
  return stepvalue_.Get(index);
}
inline void SolverParameter::set_stepvalue(int index, ::google::protobuf::int32 value) {
  stepvalue_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.stepvalue)
}
inline void SolverParameter::add_stepvalue(::google::protobuf::int32 value) {
  stepvalue_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.SolverParameter.stepvalue)
}
inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
SolverParameter::stepvalue() const {
  // @@protoc_insertion_point(field_list:caffe.SolverParameter.stepvalue)
  return stepvalue_;
}
inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
SolverParameter::mutable_stepvalue() {
  // @@protoc_insertion_point(field_mutable_list:caffe.SolverParameter.stepvalue)
  return &stepvalue_;
}

// optional float clip_gradients = 35 [default = -1];
inline bool SolverParameter::has_clip_gradients() const {
  return (_has_bits_[0] & 0x02000000u) != 0;
}
inline void SolverParameter::set_has_clip_gradients() {
  _has_bits_[0] |= 0x02000000u;
}
inline void SolverParameter::clear_has_clip_gradients() {
  _has_bits_[0] &= ~0x02000000u;
}
inline void SolverParameter::clear_clip_gradients() {
  clip_gradients_ = -1;
  clear_has_clip_gradients();
}
inline float SolverParameter::clip_gradients() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.clip_gradients)
  return clip_gradients_;
}
inline void SolverParameter::set_clip_gradients(float value) {
  set_has_clip_gradients();
  clip_gradients_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.clip_gradients)
}

// optional int32 snapshot = 14 [default = 0];
inline bool SolverParameter::has_snapshot() const {
  return (_has_bits_[0] & 0x04000000u) != 0;
}
inline void SolverParameter::set_has_snapshot() {
  _has_bits_[0] |= 0x04000000u;
}
inline void SolverParameter::clear_has_snapshot() {
  _has_bits_[0] &= ~0x04000000u;
}
inline void SolverParameter::clear_snapshot() {
  snapshot_ = 0;
  clear_has_snapshot();
}
inline ::google::protobuf::int32 SolverParameter::snapshot() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.snapshot)
  return snapshot_;
}
inline void SolverParameter::set_snapshot(::google::protobuf::int32 value) {
  set_has_snapshot();
  snapshot_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.snapshot)
}

// optional string snapshot_prefix = 15;
inline bool SolverParameter::has_snapshot_prefix() const {
  return (_has_bits_[0] & 0x08000000u) != 0;
}
inline void SolverParameter::set_has_snapshot_prefix() {
  _has_bits_[0] |= 0x08000000u;
}
inline void SolverParameter::clear_has_snapshot_prefix() {
  _has_bits_[0] &= ~0x08000000u;
}
inline void SolverParameter::clear_snapshot_prefix() {
  snapshot_prefix_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_snapshot_prefix();
}
inline const ::std::string& SolverParameter::snapshot_prefix() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.snapshot_prefix)
  return snapshot_prefix_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void SolverParameter::set_snapshot_prefix(const ::std::string& value) {
  set_has_snapshot_prefix();
  snapshot_prefix_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.snapshot_prefix)
}
inline void SolverParameter::set_snapshot_prefix(const char* value) {
  set_has_snapshot_prefix();
  snapshot_prefix_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.SolverParameter.snapshot_prefix)
}
inline void SolverParameter::set_snapshot_prefix(const char* value, size_t size) {
  set_has_snapshot_prefix();
  snapshot_prefix_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.SolverParameter.snapshot_prefix)
}
inline ::std::string* SolverParameter::mutable_snapshot_prefix() {
  set_has_snapshot_prefix();
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.snapshot_prefix)
  return snapshot_prefix_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* SolverParameter::release_snapshot_prefix() {
  // @@protoc_insertion_point(field_release:caffe.SolverParameter.snapshot_prefix)
  clear_has_snapshot_prefix();
  return snapshot_prefix_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void SolverParameter::set_allocated_snapshot_prefix(::std::string* snapshot_prefix) {
  if (snapshot_prefix != NULL) {
    set_has_snapshot_prefix();
  } else {
    clear_has_snapshot_prefix();
  }
  snapshot_prefix_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), snapshot_prefix);
  // @@protoc_insertion_point(field_set_allocated:caffe.SolverParameter.snapshot_prefix)
}

// optional bool snapshot_diff = 16 [default = false];
inline bool SolverParameter::has_snapshot_diff() const {
  return (_has_bits_[0] & 0x10000000u) != 0;
}
inline void SolverParameter::set_has_snapshot_diff() {
  _has_bits_[0] |= 0x10000000u;
}
inline void SolverParameter::clear_has_snapshot_diff() {
  _has_bits_[0] &= ~0x10000000u;
}
inline void SolverParameter::clear_snapshot_diff() {
  snapshot_diff_ = false;
  clear_has_snapshot_diff();
}
inline bool SolverParameter::snapshot_diff() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.snapshot_diff)
  return snapshot_diff_;
}
inline void SolverParameter::set_snapshot_diff(bool value) {
  set_has_snapshot_diff();
  snapshot_diff_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.snapshot_diff)
}

// optional .caffe.SolverParameter.SolverMode solver_mode = 17 [default = GPU];
inline bool SolverParameter::has_solver_mode() const {
  return (_has_bits_[0] & 0x20000000u) != 0;
}
inline void SolverParameter::set_has_solver_mode() {
  _has_bits_[0] |= 0x20000000u;
}
inline void SolverParameter::clear_has_solver_mode() {
  _has_bits_[0] &= ~0x20000000u;
}
inline void SolverParameter::clear_solver_mode() {
  solver_mode_ = 1;
  clear_has_solver_mode();
}
inline ::caffe::SolverParameter_SolverMode SolverParameter::solver_mode() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.solver_mode)
  return static_cast< ::caffe::SolverParameter_SolverMode >(solver_mode_);
}
inline void SolverParameter::set_solver_mode(::caffe::SolverParameter_SolverMode value) {
  assert(::caffe::SolverParameter_SolverMode_IsValid(value));
  set_has_solver_mode();
  solver_mode_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.solver_mode)
}

// optional int32 device_id = 18 [default = 0];
inline bool SolverParameter::has_device_id() const {
  return (_has_bits_[0] & 0x40000000u) != 0;
}
inline void SolverParameter::set_has_device_id() {
  _has_bits_[0] |= 0x40000000u;
}
inline void SolverParameter::clear_has_device_id() {
  _has_bits_[0] &= ~0x40000000u;
}
inline void SolverParameter::clear_device_id() {
  device_id_ = 0;
  clear_has_device_id();
}
inline ::google::protobuf::int32 SolverParameter::device_id() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.device_id)
  return device_id_;
}
inline void SolverParameter::set_device_id(::google::protobuf::int32 value) {
  set_has_device_id();
  device_id_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.device_id)
}

// optional int64 random_seed = 20 [default = -1];
inline bool SolverParameter::has_random_seed() const {
  return (_has_bits_[0] & 0x80000000u) != 0;
}
inline void SolverParameter::set_has_random_seed() {
  _has_bits_[0] |= 0x80000000u;
}
inline void SolverParameter::clear_has_random_seed() {
  _has_bits_[0] &= ~0x80000000u;
}
inline void SolverParameter::clear_random_seed() {
  random_seed_ = GOOGLE_LONGLONG(-1);
  clear_has_random_seed();
}
inline ::google::protobuf::int64 SolverParameter::random_seed() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.random_seed)
  return random_seed_;
}
inline void SolverParameter::set_random_seed(::google::protobuf::int64 value) {
  set_has_random_seed();
  random_seed_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.random_seed)
}

// optional .caffe.SolverParameter.SolverType solver_type = 30 [default = SGD];
inline bool SolverParameter::has_solver_type() const {
  return (_has_bits_[1] & 0x00000001u) != 0;
}
inline void SolverParameter::set_has_solver_type() {
  _has_bits_[1] |= 0x00000001u;
}
inline void SolverParameter::clear_has_solver_type() {
  _has_bits_[1] &= ~0x00000001u;
}
inline void SolverParameter::clear_solver_type() {
  solver_type_ = 0;
  clear_has_solver_type();
}
inline ::caffe::SolverParameter_SolverType SolverParameter::solver_type() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.solver_type)
  return static_cast< ::caffe::SolverParameter_SolverType >(solver_type_);
}
inline void SolverParameter::set_solver_type(::caffe::SolverParameter_SolverType value) {
  assert(::caffe::SolverParameter_SolverType_IsValid(value));
  set_has_solver_type();
  solver_type_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.solver_type)
}

// optional float delta = 31 [default = 1e-08];
inline bool SolverParameter::has_delta() const {
  return (_has_bits_[1] & 0x00000002u) != 0;
}
inline void SolverParameter::set_has_delta() {
  _has_bits_[1] |= 0x00000002u;
}
inline void SolverParameter::clear_has_delta() {
  _has_bits_[1] &= ~0x00000002u;
}
inline void SolverParameter::clear_delta() {
  delta_ = 1e-08f;
  clear_has_delta();
}
inline float SolverParameter::delta() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.delta)
  return delta_;
}
inline void SolverParameter::set_delta(float value) {
  set_has_delta();
  delta_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.delta)
}

// optional bool debug_info = 23 [default = false];
inline bool SolverParameter::has_debug_info() const {
  return (_has_bits_[1] & 0x00000004u) != 0;
}
inline void SolverParameter::set_has_debug_info() {
  _has_bits_[1] |= 0x00000004u;
}
inline void SolverParameter::clear_has_debug_info() {
  _has_bits_[1] &= ~0x00000004u;
}
inline void SolverParameter::clear_debug_info() {
  debug_info_ = false;
  clear_has_debug_info();
}
inline bool SolverParameter::debug_info() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.debug_info)
  return debug_info_;
}
inline void SolverParameter::set_debug_info(bool value) {
  set_has_debug_info();
  debug_info_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.debug_info)
}

// optional bool snapshot_after_train = 28 [default = true];
inline bool SolverParameter::has_snapshot_after_train() const {
  return (_has_bits_[1] & 0x00000008u) != 0;
}
inline void SolverParameter::set_has_snapshot_after_train() {
  _has_bits_[1] |= 0x00000008u;
}
inline void SolverParameter::clear_has_snapshot_after_train() {
  _has_bits_[1] &= ~0x00000008u;
}
inline void SolverParameter::clear_snapshot_after_train() {
  snapshot_after_train_ = true;
  clear_has_snapshot_after_train();
}
inline bool SolverParameter::snapshot_after_train() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.snapshot_after_train)
  return snapshot_after_train_;
}
inline void SolverParameter::set_snapshot_after_train(bool value) {
  set_has_snapshot_after_train();
  snapshot_after_train_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.snapshot_after_train)
}

inline const SolverParameter* SolverParameter::internal_default_instance() {
  return &SolverParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// SolverState

// optional int32 iter = 1;
inline bool SolverState::has_iter() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void SolverState::set_has_iter() {
  _has_bits_[0] |= 0x00000001u;
}
inline void SolverState::clear_has_iter() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void SolverState::clear_iter() {
  iter_ = 0;
  clear_has_iter();
}
inline ::google::protobuf::int32 SolverState::iter() const {
  // @@protoc_insertion_point(field_get:caffe.SolverState.iter)
  return iter_;
}
inline void SolverState::set_iter(::google::protobuf::int32 value) {
  set_has_iter();
  iter_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverState.iter)
}

// optional string learned_net = 2;
inline bool SolverState::has_learned_net() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void SolverState::set_has_learned_net() {
  _has_bits_[0] |= 0x00000002u;
}
inline void SolverState::clear_has_learned_net() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void SolverState::clear_learned_net() {
  learned_net_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_learned_net();
}
inline const ::std::string& SolverState::learned_net() const {
  // @@protoc_insertion_point(field_get:caffe.SolverState.learned_net)
  return learned_net_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void SolverState::set_learned_net(const ::std::string& value) {
  set_has_learned_net();
  learned_net_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.SolverState.learned_net)
}
inline void SolverState::set_learned_net(const char* value) {
  set_has_learned_net();
  learned_net_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.SolverState.learned_net)
}
inline void SolverState::set_learned_net(const char* value, size_t size) {
  set_has_learned_net();
  learned_net_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.SolverState.learned_net)
}
inline ::std::string* SolverState::mutable_learned_net() {
  set_has_learned_net();
  // @@protoc_insertion_point(field_mutable:caffe.SolverState.learned_net)
  return learned_net_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* SolverState::release_learned_net() {
  // @@protoc_insertion_point(field_release:caffe.SolverState.learned_net)
  clear_has_learned_net();
  return learned_net_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void SolverState::set_allocated_learned_net(::std::string* learned_net) {
  if (learned_net != NULL) {
    set_has_learned_net();
  } else {
    clear_has_learned_net();
  }
  learned_net_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), learned_net);
  // @@protoc_insertion_point(field_set_allocated:caffe.SolverState.learned_net)
}

// repeated .caffe.BlobProto history = 3;
inline int SolverState::history_size() const {
  return history_.size();
}
inline void SolverState::clear_history() {
  history_.Clear();
}
inline const ::caffe::BlobProto& SolverState::history(int index) const {
  // @@protoc_insertion_point(field_get:caffe.SolverState.history)
  return history_.Get(index);
}
inline ::caffe::BlobProto* SolverState::mutable_history(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.SolverState.history)
  return history_.Mutable(index);
}
inline ::caffe::BlobProto* SolverState::add_history() {
  // @@protoc_insertion_point(field_add:caffe.SolverState.history)
  return history_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto >*
SolverState::mutable_history() {
  // @@protoc_insertion_point(field_mutable_list:caffe.SolverState.history)
  return &history_;
}
inline const ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto >&
SolverState::history() const {
  // @@protoc_insertion_point(field_list:caffe.SolverState.history)
  return history_;
}

// optional int32 current_step = 4 [default = 0];
inline bool SolverState::has_current_step() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void SolverState::set_has_current_step() {
  _has_bits_[0] |= 0x00000008u;
}
inline void SolverState::clear_has_current_step() {
  _has_bits_[0] &= ~0x00000008u;
}
inline void SolverState::clear_current_step() {
  current_step_ = 0;
  clear_has_current_step();
}
inline ::google::protobuf::int32 SolverState::current_step() const {
  // @@protoc_insertion_point(field_get:caffe.SolverState.current_step)
  return current_step_;
}
inline void SolverState::set_current_step(::google::protobuf::int32 value) {
  set_has_current_step();
  current_step_ = value;
  // @@protoc_insertion_point(field_set:caffe.SolverState.current_step)
}

inline const SolverState* SolverState::internal_default_instance() {
  return &SolverState_default_instance_.get();
}
// -------------------------------------------------------------------

// NetState

// optional .caffe.Phase phase = 1 [default = TEST];
inline bool NetState::has_phase() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void NetState::set_has_phase() {
  _has_bits_[0] |= 0x00000001u;
}
inline void NetState::clear_has_phase() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void NetState::clear_phase() {
  phase_ = 1;
  clear_has_phase();
}
inline ::caffe::Phase NetState::phase() const {
  // @@protoc_insertion_point(field_get:caffe.NetState.phase)
  return static_cast< ::caffe::Phase >(phase_);
}
inline void NetState::set_phase(::caffe::Phase value) {
  assert(::caffe::Phase_IsValid(value));
  set_has_phase();
  phase_ = value;
  // @@protoc_insertion_point(field_set:caffe.NetState.phase)
}

// optional int32 level = 2 [default = 0];
inline bool NetState::has_level() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void NetState::set_has_level() {
  _has_bits_[0] |= 0x00000002u;
}
inline void NetState::clear_has_level() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void NetState::clear_level() {
  level_ = 0;
  clear_has_level();
}
inline ::google::protobuf::int32 NetState::level() const {
  // @@protoc_insertion_point(field_get:caffe.NetState.level)
  return level_;
}
inline void NetState::set_level(::google::protobuf::int32 value) {
  set_has_level();
  level_ = value;
  // @@protoc_insertion_point(field_set:caffe.NetState.level)
}

// repeated string stage = 3;
inline int NetState::stage_size() const {
  return stage_.size();
}
inline void NetState::clear_stage() {
  stage_.Clear();
}
inline const ::std::string& NetState::stage(int index) const {
  // @@protoc_insertion_point(field_get:caffe.NetState.stage)
  return stage_.Get(index);
}
inline ::std::string* NetState::mutable_stage(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.NetState.stage)
  return stage_.Mutable(index);
}
inline void NetState::set_stage(int index, const ::std::string& value) {
  // @@protoc_insertion_point(field_set:caffe.NetState.stage)
  stage_.Mutable(index)->assign(value);
}
inline void NetState::set_stage(int index, const char* value) {
  stage_.Mutable(index)->assign(value);
  // @@protoc_insertion_point(field_set_char:caffe.NetState.stage)
}
inline void NetState::set_stage(int index, const char* value, size_t size) {
  stage_.Mutable(index)->assign(
    reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_set_pointer:caffe.NetState.stage)
}
inline ::std::string* NetState::add_stage() {
  // @@protoc_insertion_point(field_add_mutable:caffe.NetState.stage)
  return stage_.Add();
}
inline void NetState::add_stage(const ::std::string& value) {
  stage_.Add()->assign(value);
  // @@protoc_insertion_point(field_add:caffe.NetState.stage)
}
inline void NetState::add_stage(const char* value) {
  stage_.Add()->assign(value);
  // @@protoc_insertion_point(field_add_char:caffe.NetState.stage)
}
inline void NetState::add_stage(const char* value, size_t size) {
  stage_.Add()->assign(reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_add_pointer:caffe.NetState.stage)
}
inline const ::google::protobuf::RepeatedPtrField< ::std::string>&
NetState::stage() const {
  // @@protoc_insertion_point(field_list:caffe.NetState.stage)
  return stage_;
}
inline ::google::protobuf::RepeatedPtrField< ::std::string>*
NetState::mutable_stage() {
  // @@protoc_insertion_point(field_mutable_list:caffe.NetState.stage)
  return &stage_;
}

inline const NetState* NetState::internal_default_instance() {
  return &NetState_default_instance_.get();
}
// -------------------------------------------------------------------

// NetStateRule

// optional .caffe.Phase phase = 1;
inline bool NetStateRule::has_phase() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void NetStateRule::set_has_phase() {
  _has_bits_[0] |= 0x00000001u;
}
inline void NetStateRule::clear_has_phase() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void NetStateRule::clear_phase() {
  phase_ = 0;
  clear_has_phase();
}
inline ::caffe::Phase NetStateRule::phase() const {
  // @@protoc_insertion_point(field_get:caffe.NetStateRule.phase)
  return static_cast< ::caffe::Phase >(phase_);
}
inline void NetStateRule::set_phase(::caffe::Phase value) {
  assert(::caffe::Phase_IsValid(value));
  set_has_phase();
  phase_ = value;
  // @@protoc_insertion_point(field_set:caffe.NetStateRule.phase)
}

// optional int32 min_level = 2;
inline bool NetStateRule::has_min_level() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void NetStateRule::set_has_min_level() {
  _has_bits_[0] |= 0x00000002u;
}
inline void NetStateRule::clear_has_min_level() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void NetStateRule::clear_min_level() {
  min_level_ = 0;
  clear_has_min_level();
}
inline ::google::protobuf::int32 NetStateRule::min_level() const {
  // @@protoc_insertion_point(field_get:caffe.NetStateRule.min_level)
  return min_level_;
}
inline void NetStateRule::set_min_level(::google::protobuf::int32 value) {
  set_has_min_level();
  min_level_ = value;
  // @@protoc_insertion_point(field_set:caffe.NetStateRule.min_level)
}

// optional int32 max_level = 3;
inline bool NetStateRule::has_max_level() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void NetStateRule::set_has_max_level() {
  _has_bits_[0] |= 0x00000004u;
}
inline void NetStateRule::clear_has_max_level() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void NetStateRule::clear_max_level() {
  max_level_ = 0;
  clear_has_max_level();
}
inline ::google::protobuf::int32 NetStateRule::max_level() const {
  // @@protoc_insertion_point(field_get:caffe.NetStateRule.max_level)
  return max_level_;
}
inline void NetStateRule::set_max_level(::google::protobuf::int32 value) {
  set_has_max_level();
  max_level_ = value;
  // @@protoc_insertion_point(field_set:caffe.NetStateRule.max_level)
}

// repeated string stage = 4;
inline int NetStateRule::stage_size() const {
  return stage_.size();
}
inline void NetStateRule::clear_stage() {
  stage_.Clear();
}
inline const ::std::string& NetStateRule::stage(int index) const {
  // @@protoc_insertion_point(field_get:caffe.NetStateRule.stage)
  return stage_.Get(index);
}
inline ::std::string* NetStateRule::mutable_stage(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.NetStateRule.stage)
  return stage_.Mutable(index);
}
inline void NetStateRule::set_stage(int index, const ::std::string& value) {
  // @@protoc_insertion_point(field_set:caffe.NetStateRule.stage)
  stage_.Mutable(index)->assign(value);
}
inline void NetStateRule::set_stage(int index, const char* value) {
  stage_.Mutable(index)->assign(value);
  // @@protoc_insertion_point(field_set_char:caffe.NetStateRule.stage)
}
inline void NetStateRule::set_stage(int index, const char* value, size_t size) {
  stage_.Mutable(index)->assign(
    reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_set_pointer:caffe.NetStateRule.stage)
}
inline ::std::string* NetStateRule::add_stage() {
  // @@protoc_insertion_point(field_add_mutable:caffe.NetStateRule.stage)
  return stage_.Add();
}
inline void NetStateRule::add_stage(const ::std::string& value) {
  stage_.Add()->assign(value);
  // @@protoc_insertion_point(field_add:caffe.NetStateRule.stage)
}
inline void NetStateRule::add_stage(const char* value) {
  stage_.Add()->assign(value);
  // @@protoc_insertion_point(field_add_char:caffe.NetStateRule.stage)
}
inline void NetStateRule::add_stage(const char* value, size_t size) {
  stage_.Add()->assign(reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_add_pointer:caffe.NetStateRule.stage)
}
inline const ::google::protobuf::RepeatedPtrField< ::std::string>&
NetStateRule::stage() const {
  // @@protoc_insertion_point(field_list:caffe.NetStateRule.stage)
  return stage_;
}
inline ::google::protobuf::RepeatedPtrField< ::std::string>*
NetStateRule::mutable_stage() {
  // @@protoc_insertion_point(field_mutable_list:caffe.NetStateRule.stage)
  return &stage_;
}

// repeated string not_stage = 5;
inline int NetStateRule::not_stage_size() const {
  return not_stage_.size();
}
inline void NetStateRule::clear_not_stage() {
  not_stage_.Clear();
}
inline const ::std::string& NetStateRule::not_stage(int index) const {
  // @@protoc_insertion_point(field_get:caffe.NetStateRule.not_stage)
  return not_stage_.Get(index);
}
inline ::std::string* NetStateRule::mutable_not_stage(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.NetStateRule.not_stage)
  return not_stage_.Mutable(index);
}
inline void NetStateRule::set_not_stage(int index, const ::std::string& value) {
  // @@protoc_insertion_point(field_set:caffe.NetStateRule.not_stage)
  not_stage_.Mutable(index)->assign(value);
}
inline void NetStateRule::set_not_stage(int index, const char* value) {
  not_stage_.Mutable(index)->assign(value);
  // @@protoc_insertion_point(field_set_char:caffe.NetStateRule.not_stage)
}
inline void NetStateRule::set_not_stage(int index, const char* value, size_t size) {
  not_stage_.Mutable(index)->assign(
    reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_set_pointer:caffe.NetStateRule.not_stage)
}
inline ::std::string* NetStateRule::add_not_stage() {
  // @@protoc_insertion_point(field_add_mutable:caffe.NetStateRule.not_stage)
  return not_stage_.Add();
}
inline void NetStateRule::add_not_stage(const ::std::string& value) {
  not_stage_.Add()->assign(value);
  // @@protoc_insertion_point(field_add:caffe.NetStateRule.not_stage)
}
inline void NetStateRule::add_not_stage(const char* value) {
  not_stage_.Add()->assign(value);
  // @@protoc_insertion_point(field_add_char:caffe.NetStateRule.not_stage)
}
inline void NetStateRule::add_not_stage(const char* value, size_t size) {
  not_stage_.Add()->assign(reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_add_pointer:caffe.NetStateRule.not_stage)
}
inline const ::google::protobuf::RepeatedPtrField< ::std::string>&
NetStateRule::not_stage() const {
  // @@protoc_insertion_point(field_list:caffe.NetStateRule.not_stage)
  return not_stage_;
}
inline ::google::protobuf::RepeatedPtrField< ::std::string>*
NetStateRule::mutable_not_stage() {
  // @@protoc_insertion_point(field_mutable_list:caffe.NetStateRule.not_stage)
  return &not_stage_;
}

inline const NetStateRule* NetStateRule::internal_default_instance() {
  return &NetStateRule_default_instance_.get();
}
// -------------------------------------------------------------------

// ParamSpec

// optional string name = 1;
inline bool ParamSpec::has_name() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void ParamSpec::set_has_name() {
  _has_bits_[0] |= 0x00000001u;
}
inline void ParamSpec::clear_has_name() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void ParamSpec::clear_name() {
  name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_name();
}
inline const ::std::string& ParamSpec::name() const {
  // @@protoc_insertion_point(field_get:caffe.ParamSpec.name)
  return name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void ParamSpec::set_name(const ::std::string& value) {
  set_has_name();
  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.ParamSpec.name)
}
inline void ParamSpec::set_name(const char* value) {
  set_has_name();
  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.ParamSpec.name)
}
inline void ParamSpec::set_name(const char* value, size_t size) {
  set_has_name();
  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.ParamSpec.name)
}
inline ::std::string* ParamSpec::mutable_name() {
  set_has_name();
  // @@protoc_insertion_point(field_mutable:caffe.ParamSpec.name)
  return name_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* ParamSpec::release_name() {
  // @@protoc_insertion_point(field_release:caffe.ParamSpec.name)
  clear_has_name();
  return name_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void ParamSpec::set_allocated_name(::std::string* name) {
  if (name != NULL) {
    set_has_name();
  } else {
    clear_has_name();
  }
  name_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), name);
  // @@protoc_insertion_point(field_set_allocated:caffe.ParamSpec.name)
}

// optional .caffe.ParamSpec.DimCheckMode share_mode = 2;
inline bool ParamSpec::has_share_mode() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void ParamSpec::set_has_share_mode() {
  _has_bits_[0] |= 0x00000002u;
}
inline void ParamSpec::clear_has_share_mode() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void ParamSpec::clear_share_mode() {
  share_mode_ = 0;
  clear_has_share_mode();
}
inline ::caffe::ParamSpec_DimCheckMode ParamSpec::share_mode() const {
  // @@protoc_insertion_point(field_get:caffe.ParamSpec.share_mode)
  return static_cast< ::caffe::ParamSpec_DimCheckMode >(share_mode_);
}
inline void ParamSpec::set_share_mode(::caffe::ParamSpec_DimCheckMode value) {
  assert(::caffe::ParamSpec_DimCheckMode_IsValid(value));
  set_has_share_mode();
  share_mode_ = value;
  // @@protoc_insertion_point(field_set:caffe.ParamSpec.share_mode)
}

// optional float lr_mult = 3 [default = 1];
inline bool ParamSpec::has_lr_mult() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void ParamSpec::set_has_lr_mult() {
  _has_bits_[0] |= 0x00000004u;
}
inline void ParamSpec::clear_has_lr_mult() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void ParamSpec::clear_lr_mult() {
  lr_mult_ = 1;
  clear_has_lr_mult();
}
inline float ParamSpec::lr_mult() const {
  // @@protoc_insertion_point(field_get:caffe.ParamSpec.lr_mult)
  return lr_mult_;
}
inline void ParamSpec::set_lr_mult(float value) {
  set_has_lr_mult();
  lr_mult_ = value;
  // @@protoc_insertion_point(field_set:caffe.ParamSpec.lr_mult)
}

// optional float decay_mult = 4 [default = 1];
inline bool ParamSpec::has_decay_mult() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void ParamSpec::set_has_decay_mult() {
  _has_bits_[0] |= 0x00000008u;
}
inline void ParamSpec::clear_has_decay_mult() {
  _has_bits_[0] &= ~0x00000008u;
}
inline void ParamSpec::clear_decay_mult() {
  decay_mult_ = 1;
  clear_has_decay_mult();
}
inline float ParamSpec::decay_mult() const {
  // @@protoc_insertion_point(field_get:caffe.ParamSpec.decay_mult)
  return decay_mult_;
}
inline void ParamSpec::set_decay_mult(float value) {
  set_has_decay_mult();
  decay_mult_ = value;
  // @@protoc_insertion_point(field_set:caffe.ParamSpec.decay_mult)
}

inline const ParamSpec* ParamSpec::internal_default_instance() {
  return &ParamSpec_default_instance_.get();
}
// -------------------------------------------------------------------

// LayerParameter

// optional string name = 1;
inline bool LayerParameter::has_name() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void LayerParameter::set_has_name() {
  _has_bits_[0] |= 0x00000001u;
}
inline void LayerParameter::clear_has_name() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void LayerParameter::clear_name() {
  name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_name();
}
inline const ::std::string& LayerParameter::name() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.name)
  return name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void LayerParameter::set_name(const ::std::string& value) {
  set_has_name();
  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.LayerParameter.name)
}
inline void LayerParameter::set_name(const char* value) {
  set_has_name();
  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.LayerParameter.name)
}
inline void LayerParameter::set_name(const char* value, size_t size) {
  set_has_name();
  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.LayerParameter.name)
}
inline ::std::string* LayerParameter::mutable_name() {
  set_has_name();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.name)
  return name_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* LayerParameter::release_name() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.name)
  clear_has_name();
  return name_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void LayerParameter::set_allocated_name(::std::string* name) {
  if (name != NULL) {
    set_has_name();
  } else {
    clear_has_name();
  }
  name_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), name);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.name)
}

// optional string type = 2;
inline bool LayerParameter::has_type() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void LayerParameter::set_has_type() {
  _has_bits_[0] |= 0x00000002u;
}
inline void LayerParameter::clear_has_type() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void LayerParameter::clear_type() {
  type_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_type();
}
inline const ::std::string& LayerParameter::type() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.type)
  return type_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void LayerParameter::set_type(const ::std::string& value) {
  set_has_type();
  type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.LayerParameter.type)
}
inline void LayerParameter::set_type(const char* value) {
  set_has_type();
  type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.LayerParameter.type)
}
inline void LayerParameter::set_type(const char* value, size_t size) {
  set_has_type();
  type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.LayerParameter.type)
}
inline ::std::string* LayerParameter::mutable_type() {
  set_has_type();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.type)
  return type_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* LayerParameter::release_type() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.type)
  clear_has_type();
  return type_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void LayerParameter::set_allocated_type(::std::string* type) {
  if (type != NULL) {
    set_has_type();
  } else {
    clear_has_type();
  }
  type_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), type);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.type)
}

// repeated string bottom = 3;
inline int LayerParameter::bottom_size() const {
  return bottom_.size();
}
inline void LayerParameter::clear_bottom() {
  bottom_.Clear();
}
inline const ::std::string& LayerParameter::bottom(int index) const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.bottom)
  return bottom_.Get(index);
}
inline ::std::string* LayerParameter::mutable_bottom(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.bottom)
  return bottom_.Mutable(index);
}
inline void LayerParameter::set_bottom(int index, const ::std::string& value) {
  // @@protoc_insertion_point(field_set:caffe.LayerParameter.bottom)
  bottom_.Mutable(index)->assign(value);
}
inline void LayerParameter::set_bottom(int index, const char* value) {
  bottom_.Mutable(index)->assign(value);
  // @@protoc_insertion_point(field_set_char:caffe.LayerParameter.bottom)
}
inline void LayerParameter::set_bottom(int index, const char* value, size_t size) {
  bottom_.Mutable(index)->assign(
    reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_set_pointer:caffe.LayerParameter.bottom)
}
inline ::std::string* LayerParameter::add_bottom() {
  // @@protoc_insertion_point(field_add_mutable:caffe.LayerParameter.bottom)
  return bottom_.Add();
}
inline void LayerParameter::add_bottom(const ::std::string& value) {
  bottom_.Add()->assign(value);
  // @@protoc_insertion_point(field_add:caffe.LayerParameter.bottom)
}
inline void LayerParameter::add_bottom(const char* value) {
  bottom_.Add()->assign(value);
  // @@protoc_insertion_point(field_add_char:caffe.LayerParameter.bottom)
}
inline void LayerParameter::add_bottom(const char* value, size_t size) {
  bottom_.Add()->assign(reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_add_pointer:caffe.LayerParameter.bottom)
}
inline const ::google::protobuf::RepeatedPtrField< ::std::string>&
LayerParameter::bottom() const {
  // @@protoc_insertion_point(field_list:caffe.LayerParameter.bottom)
  return bottom_;
}
inline ::google::protobuf::RepeatedPtrField< ::std::string>*
LayerParameter::mutable_bottom() {
  // @@protoc_insertion_point(field_mutable_list:caffe.LayerParameter.bottom)
  return &bottom_;
}

// repeated string top = 4;
inline int LayerParameter::top_size() const {
  return top_.size();
}
inline void LayerParameter::clear_top() {
  top_.Clear();
}
inline const ::std::string& LayerParameter::top(int index) const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.top)
  return top_.Get(index);
}
inline ::std::string* LayerParameter::mutable_top(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.top)
  return top_.Mutable(index);
}
inline void LayerParameter::set_top(int index, const ::std::string& value) {
  // @@protoc_insertion_point(field_set:caffe.LayerParameter.top)
  top_.Mutable(index)->assign(value);
}
inline void LayerParameter::set_top(int index, const char* value) {
  top_.Mutable(index)->assign(value);
  // @@protoc_insertion_point(field_set_char:caffe.LayerParameter.top)
}
inline void LayerParameter::set_top(int index, const char* value, size_t size) {
  top_.Mutable(index)->assign(
    reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_set_pointer:caffe.LayerParameter.top)
}
inline ::std::string* LayerParameter::add_top() {
  // @@protoc_insertion_point(field_add_mutable:caffe.LayerParameter.top)
  return top_.Add();
}
inline void LayerParameter::add_top(const ::std::string& value) {
  top_.Add()->assign(value);
  // @@protoc_insertion_point(field_add:caffe.LayerParameter.top)
}
inline void LayerParameter::add_top(const char* value) {
  top_.Add()->assign(value);
  // @@protoc_insertion_point(field_add_char:caffe.LayerParameter.top)
}
inline void LayerParameter::add_top(const char* value, size_t size) {
  top_.Add()->assign(reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_add_pointer:caffe.LayerParameter.top)
}
inline const ::google::protobuf::RepeatedPtrField< ::std::string>&
LayerParameter::top() const {
  // @@protoc_insertion_point(field_list:caffe.LayerParameter.top)
  return top_;
}
inline ::google::protobuf::RepeatedPtrField< ::std::string>*
LayerParameter::mutable_top() {
  // @@protoc_insertion_point(field_mutable_list:caffe.LayerParameter.top)
  return &top_;
}

// optional .caffe.Phase phase = 10;
inline bool LayerParameter::has_phase() const {
  return (_has_bits_[0] & 0x00000010u) != 0;
}
inline void LayerParameter::set_has_phase() {
  _has_bits_[0] |= 0x00000010u;
}
inline void LayerParameter::clear_has_phase() {
  _has_bits_[0] &= ~0x00000010u;
}
inline void LayerParameter::clear_phase() {
  phase_ = 0;
  clear_has_phase();
}
inline ::caffe::Phase LayerParameter::phase() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.phase)
  return static_cast< ::caffe::Phase >(phase_);
}
inline void LayerParameter::set_phase(::caffe::Phase value) {
  assert(::caffe::Phase_IsValid(value));
  set_has_phase();
  phase_ = value;
  // @@protoc_insertion_point(field_set:caffe.LayerParameter.phase)
}

// repeated float loss_weight = 5;
inline int LayerParameter::loss_weight_size() const {
  return loss_weight_.size();
}
inline void LayerParameter::clear_loss_weight() {
  loss_weight_.Clear();
}
inline float LayerParameter::loss_weight(int index) const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.loss_weight)
  return loss_weight_.Get(index);
}
inline void LayerParameter::set_loss_weight(int index, float value) {
  loss_weight_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.LayerParameter.loss_weight)
}
inline void LayerParameter::add_loss_weight(float value) {
  loss_weight_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.LayerParameter.loss_weight)
}
inline const ::google::protobuf::RepeatedField< float >&
LayerParameter::loss_weight() const {
  // @@protoc_insertion_point(field_list:caffe.LayerParameter.loss_weight)
  return loss_weight_;
}
inline ::google::protobuf::RepeatedField< float >*
LayerParameter::mutable_loss_weight() {
  // @@protoc_insertion_point(field_mutable_list:caffe.LayerParameter.loss_weight)
  return &loss_weight_;
}

// repeated .caffe.ParamSpec param = 6;
inline int LayerParameter::param_size() const {
  return param_.size();
}
inline void LayerParameter::clear_param() {
  param_.Clear();
}
inline const ::caffe::ParamSpec& LayerParameter::param(int index) const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.param)
  return param_.Get(index);
}
inline ::caffe::ParamSpec* LayerParameter::mutable_param(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.param)
  return param_.Mutable(index);
}
inline ::caffe::ParamSpec* LayerParameter::add_param() {
  // @@protoc_insertion_point(field_add:caffe.LayerParameter.param)
  return param_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::caffe::ParamSpec >*
LayerParameter::mutable_param() {
  // @@protoc_insertion_point(field_mutable_list:caffe.LayerParameter.param)
  return &param_;
}
inline const ::google::protobuf::RepeatedPtrField< ::caffe::ParamSpec >&
LayerParameter::param() const {
  // @@protoc_insertion_point(field_list:caffe.LayerParameter.param)
  return param_;
}

// repeated .caffe.BlobProto blobs = 7;
inline int LayerParameter::blobs_size() const {
  return blobs_.size();
}
inline void LayerParameter::clear_blobs() {
  blobs_.Clear();
}
inline const ::caffe::BlobProto& LayerParameter::blobs(int index) const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.blobs)
  return blobs_.Get(index);
}
inline ::caffe::BlobProto* LayerParameter::mutable_blobs(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.blobs)
  return blobs_.Mutable(index);
}
inline ::caffe::BlobProto* LayerParameter::add_blobs() {
  // @@protoc_insertion_point(field_add:caffe.LayerParameter.blobs)
  return blobs_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto >*
LayerParameter::mutable_blobs() {
  // @@protoc_insertion_point(field_mutable_list:caffe.LayerParameter.blobs)
  return &blobs_;
}
inline const ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto >&
LayerParameter::blobs() const {
  // @@protoc_insertion_point(field_list:caffe.LayerParameter.blobs)
  return blobs_;
}

// repeated bool propagate_down = 11;
inline int LayerParameter::propagate_down_size() const {
  return propagate_down_.size();
}
inline void LayerParameter::clear_propagate_down() {
  propagate_down_.Clear();
}
inline bool LayerParameter::propagate_down(int index) const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.propagate_down)
  return propagate_down_.Get(index);
}
inline void LayerParameter::set_propagate_down(int index, bool value) {
  propagate_down_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.LayerParameter.propagate_down)
}
inline void LayerParameter::add_propagate_down(bool value) {
  propagate_down_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.LayerParameter.propagate_down)
}
inline const ::google::protobuf::RepeatedField< bool >&
LayerParameter::propagate_down() const {
  // @@protoc_insertion_point(field_list:caffe.LayerParameter.propagate_down)
  return propagate_down_;
}
inline ::google::protobuf::RepeatedField< bool >*
LayerParameter::mutable_propagate_down() {
  // @@protoc_insertion_point(field_mutable_list:caffe.LayerParameter.propagate_down)
  return &propagate_down_;
}

// repeated .caffe.NetStateRule include = 8;
inline int LayerParameter::include_size() const {
  return include_.size();
}
inline void LayerParameter::clear_include() {
  include_.Clear();
}
inline const ::caffe::NetStateRule& LayerParameter::include(int index) const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.include)
  return include_.Get(index);
}
inline ::caffe::NetStateRule* LayerParameter::mutable_include(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.include)
  return include_.Mutable(index);
}
inline ::caffe::NetStateRule* LayerParameter::add_include() {
  // @@protoc_insertion_point(field_add:caffe.LayerParameter.include)
  return include_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule >*
LayerParameter::mutable_include() {
  // @@protoc_insertion_point(field_mutable_list:caffe.LayerParameter.include)
  return &include_;
}
inline const ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule >&
LayerParameter::include() const {
  // @@protoc_insertion_point(field_list:caffe.LayerParameter.include)
  return include_;
}

// repeated .caffe.NetStateRule exclude = 9;
inline int LayerParameter::exclude_size() const {
  return exclude_.size();
}
inline void LayerParameter::clear_exclude() {
  exclude_.Clear();
}
inline const ::caffe::NetStateRule& LayerParameter::exclude(int index) const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.exclude)
  return exclude_.Get(index);
}
inline ::caffe::NetStateRule* LayerParameter::mutable_exclude(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.exclude)
  return exclude_.Mutable(index);
}
inline ::caffe::NetStateRule* LayerParameter::add_exclude() {
  // @@protoc_insertion_point(field_add:caffe.LayerParameter.exclude)
  return exclude_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule >*
LayerParameter::mutable_exclude() {
  // @@protoc_insertion_point(field_mutable_list:caffe.LayerParameter.exclude)
  return &exclude_;
}
inline const ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule >&
LayerParameter::exclude() const {
  // @@protoc_insertion_point(field_list:caffe.LayerParameter.exclude)
  return exclude_;
}

// optional .caffe.TransformationParameter transform_param = 100;
inline bool LayerParameter::has_transform_param() const {
  return (_has_bits_[0] & 0x00000800u) != 0;
}
inline void LayerParameter::set_has_transform_param() {
  _has_bits_[0] |= 0x00000800u;
}
inline void LayerParameter::clear_has_transform_param() {
  _has_bits_[0] &= ~0x00000800u;
}
inline void LayerParameter::clear_transform_param() {
  if (transform_param_ != NULL) transform_param_->::caffe::TransformationParameter::Clear();
  clear_has_transform_param();
}
inline const ::caffe::TransformationParameter& LayerParameter::transform_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.transform_param)
  return transform_param_ != NULL ? *transform_param_
                         : *::caffe::TransformationParameter::internal_default_instance();
}
inline ::caffe::TransformationParameter* LayerParameter::mutable_transform_param() {
  set_has_transform_param();
  if (transform_param_ == NULL) {
    transform_param_ = new ::caffe::TransformationParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.transform_param)
  return transform_param_;
}
inline ::caffe::TransformationParameter* LayerParameter::release_transform_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.transform_param)
  clear_has_transform_param();
  ::caffe::TransformationParameter* temp = transform_param_;
  transform_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_transform_param(::caffe::TransformationParameter* transform_param) {
  delete transform_param_;
  transform_param_ = transform_param;
  if (transform_param) {
    set_has_transform_param();
  } else {
    clear_has_transform_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.transform_param)
}

// optional .caffe.LossParameter loss_param = 101;
inline bool LayerParameter::has_loss_param() const {
  return (_has_bits_[0] & 0x00001000u) != 0;
}
inline void LayerParameter::set_has_loss_param() {
  _has_bits_[0] |= 0x00001000u;
}
inline void LayerParameter::clear_has_loss_param() {
  _has_bits_[0] &= ~0x00001000u;
}
inline void LayerParameter::clear_loss_param() {
  if (loss_param_ != NULL) loss_param_->::caffe::LossParameter::Clear();
  clear_has_loss_param();
}
inline const ::caffe::LossParameter& LayerParameter::loss_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.loss_param)
  return loss_param_ != NULL ? *loss_param_
                         : *::caffe::LossParameter::internal_default_instance();
}
inline ::caffe::LossParameter* LayerParameter::mutable_loss_param() {
  set_has_loss_param();
  if (loss_param_ == NULL) {
    loss_param_ = new ::caffe::LossParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.loss_param)
  return loss_param_;
}
inline ::caffe::LossParameter* LayerParameter::release_loss_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.loss_param)
  clear_has_loss_param();
  ::caffe::LossParameter* temp = loss_param_;
  loss_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_loss_param(::caffe::LossParameter* loss_param) {
  delete loss_param_;
  loss_param_ = loss_param;
  if (loss_param) {
    set_has_loss_param();
  } else {
    clear_has_loss_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.loss_param)
}

// optional .caffe.AccuracyParameter accuracy_param = 102;
inline bool LayerParameter::has_accuracy_param() const {
  return (_has_bits_[0] & 0x00002000u) != 0;
}
inline void LayerParameter::set_has_accuracy_param() {
  _has_bits_[0] |= 0x00002000u;
}
inline void LayerParameter::clear_has_accuracy_param() {
  _has_bits_[0] &= ~0x00002000u;
}
inline void LayerParameter::clear_accuracy_param() {
  if (accuracy_param_ != NULL) accuracy_param_->::caffe::AccuracyParameter::Clear();
  clear_has_accuracy_param();
}
inline const ::caffe::AccuracyParameter& LayerParameter::accuracy_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.accuracy_param)
  return accuracy_param_ != NULL ? *accuracy_param_
                         : *::caffe::AccuracyParameter::internal_default_instance();
}
inline ::caffe::AccuracyParameter* LayerParameter::mutable_accuracy_param() {
  set_has_accuracy_param();
  if (accuracy_param_ == NULL) {
    accuracy_param_ = new ::caffe::AccuracyParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.accuracy_param)
  return accuracy_param_;
}
inline ::caffe::AccuracyParameter* LayerParameter::release_accuracy_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.accuracy_param)
  clear_has_accuracy_param();
  ::caffe::AccuracyParameter* temp = accuracy_param_;
  accuracy_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_accuracy_param(::caffe::AccuracyParameter* accuracy_param) {
  delete accuracy_param_;
  accuracy_param_ = accuracy_param;
  if (accuracy_param) {
    set_has_accuracy_param();
  } else {
    clear_has_accuracy_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.accuracy_param)
}

// optional .caffe.ArgMaxParameter argmax_param = 103;
inline bool LayerParameter::has_argmax_param() const {
  return (_has_bits_[0] & 0x00004000u) != 0;
}
inline void LayerParameter::set_has_argmax_param() {
  _has_bits_[0] |= 0x00004000u;
}
inline void LayerParameter::clear_has_argmax_param() {
  _has_bits_[0] &= ~0x00004000u;
}
inline void LayerParameter::clear_argmax_param() {
  if (argmax_param_ != NULL) argmax_param_->::caffe::ArgMaxParameter::Clear();
  clear_has_argmax_param();
}
inline const ::caffe::ArgMaxParameter& LayerParameter::argmax_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.argmax_param)
  return argmax_param_ != NULL ? *argmax_param_
                         : *::caffe::ArgMaxParameter::internal_default_instance();
}
inline ::caffe::ArgMaxParameter* LayerParameter::mutable_argmax_param() {
  set_has_argmax_param();
  if (argmax_param_ == NULL) {
    argmax_param_ = new ::caffe::ArgMaxParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.argmax_param)
  return argmax_param_;
}
inline ::caffe::ArgMaxParameter* LayerParameter::release_argmax_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.argmax_param)
  clear_has_argmax_param();
  ::caffe::ArgMaxParameter* temp = argmax_param_;
  argmax_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_argmax_param(::caffe::ArgMaxParameter* argmax_param) {
  delete argmax_param_;
  argmax_param_ = argmax_param;
  if (argmax_param) {
    set_has_argmax_param();
  } else {
    clear_has_argmax_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.argmax_param)
}

// optional .caffe.ConcatParameter concat_param = 104;
inline bool LayerParameter::has_concat_param() const {
  return (_has_bits_[0] & 0x00008000u) != 0;
}
inline void LayerParameter::set_has_concat_param() {
  _has_bits_[0] |= 0x00008000u;
}
inline void LayerParameter::clear_has_concat_param() {
  _has_bits_[0] &= ~0x00008000u;
}
inline void LayerParameter::clear_concat_param() {
  if (concat_param_ != NULL) concat_param_->::caffe::ConcatParameter::Clear();
  clear_has_concat_param();
}
inline const ::caffe::ConcatParameter& LayerParameter::concat_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.concat_param)
  return concat_param_ != NULL ? *concat_param_
                         : *::caffe::ConcatParameter::internal_default_instance();
}
inline ::caffe::ConcatParameter* LayerParameter::mutable_concat_param() {
  set_has_concat_param();
  if (concat_param_ == NULL) {
    concat_param_ = new ::caffe::ConcatParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.concat_param)
  return concat_param_;
}
inline ::caffe::ConcatParameter* LayerParameter::release_concat_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.concat_param)
  clear_has_concat_param();
  ::caffe::ConcatParameter* temp = concat_param_;
  concat_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_concat_param(::caffe::ConcatParameter* concat_param) {
  delete concat_param_;
  concat_param_ = concat_param;
  if (concat_param) {
    set_has_concat_param();
  } else {
    clear_has_concat_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.concat_param)
}

// optional .caffe.ContrastiveLossParameter contrastive_loss_param = 105;
inline bool LayerParameter::has_contrastive_loss_param() const {
  return (_has_bits_[0] & 0x00010000u) != 0;
}
inline void LayerParameter::set_has_contrastive_loss_param() {
  _has_bits_[0] |= 0x00010000u;
}
inline void LayerParameter::clear_has_contrastive_loss_param() {
  _has_bits_[0] &= ~0x00010000u;
}
inline void LayerParameter::clear_contrastive_loss_param() {
  if (contrastive_loss_param_ != NULL) contrastive_loss_param_->::caffe::ContrastiveLossParameter::Clear();
  clear_has_contrastive_loss_param();
}
inline const ::caffe::ContrastiveLossParameter& LayerParameter::contrastive_loss_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.contrastive_loss_param)
  return contrastive_loss_param_ != NULL ? *contrastive_loss_param_
                         : *::caffe::ContrastiveLossParameter::internal_default_instance();
}
inline ::caffe::ContrastiveLossParameter* LayerParameter::mutable_contrastive_loss_param() {
  set_has_contrastive_loss_param();
  if (contrastive_loss_param_ == NULL) {
    contrastive_loss_param_ = new ::caffe::ContrastiveLossParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.contrastive_loss_param)
  return contrastive_loss_param_;
}
inline ::caffe::ContrastiveLossParameter* LayerParameter::release_contrastive_loss_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.contrastive_loss_param)
  clear_has_contrastive_loss_param();
  ::caffe::ContrastiveLossParameter* temp = contrastive_loss_param_;
  contrastive_loss_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_contrastive_loss_param(::caffe::ContrastiveLossParameter* contrastive_loss_param) {
  delete contrastive_loss_param_;
  contrastive_loss_param_ = contrastive_loss_param;
  if (contrastive_loss_param) {
    set_has_contrastive_loss_param();
  } else {
    clear_has_contrastive_loss_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.contrastive_loss_param)
}

// optional .caffe.ConvolutionParameter convolution_param = 106;
inline bool LayerParameter::has_convolution_param() const {
  return (_has_bits_[0] & 0x00020000u) != 0;
}
inline void LayerParameter::set_has_convolution_param() {
  _has_bits_[0] |= 0x00020000u;
}
inline void LayerParameter::clear_has_convolution_param() {
  _has_bits_[0] &= ~0x00020000u;
}
inline void LayerParameter::clear_convolution_param() {
  if (convolution_param_ != NULL) convolution_param_->::caffe::ConvolutionParameter::Clear();
  clear_has_convolution_param();
}
inline const ::caffe::ConvolutionParameter& LayerParameter::convolution_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.convolution_param)
  return convolution_param_ != NULL ? *convolution_param_
                         : *::caffe::ConvolutionParameter::internal_default_instance();
}
inline ::caffe::ConvolutionParameter* LayerParameter::mutable_convolution_param() {
  set_has_convolution_param();
  if (convolution_param_ == NULL) {
    convolution_param_ = new ::caffe::ConvolutionParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.convolution_param)
  return convolution_param_;
}
inline ::caffe::ConvolutionParameter* LayerParameter::release_convolution_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.convolution_param)
  clear_has_convolution_param();
  ::caffe::ConvolutionParameter* temp = convolution_param_;
  convolution_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_convolution_param(::caffe::ConvolutionParameter* convolution_param) {
  delete convolution_param_;
  convolution_param_ = convolution_param;
  if (convolution_param) {
    set_has_convolution_param();
  } else {
    clear_has_convolution_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.convolution_param)
}

// optional .caffe.CropParameter crop_param = 137;
inline bool LayerParameter::has_crop_param() const {
  return (_has_bits_[0] & 0x00040000u) != 0;
}
inline void LayerParameter::set_has_crop_param() {
  _has_bits_[0] |= 0x00040000u;
}
inline void LayerParameter::clear_has_crop_param() {
  _has_bits_[0] &= ~0x00040000u;
}
inline void LayerParameter::clear_crop_param() {
  if (crop_param_ != NULL) crop_param_->::caffe::CropParameter::Clear();
  clear_has_crop_param();
}
inline const ::caffe::CropParameter& LayerParameter::crop_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.crop_param)
  return crop_param_ != NULL ? *crop_param_
                         : *::caffe::CropParameter::internal_default_instance();
}
inline ::caffe::CropParameter* LayerParameter::mutable_crop_param() {
  set_has_crop_param();
  if (crop_param_ == NULL) {
    crop_param_ = new ::caffe::CropParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.crop_param)
  return crop_param_;
}
inline ::caffe::CropParameter* LayerParameter::release_crop_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.crop_param)
  clear_has_crop_param();
  ::caffe::CropParameter* temp = crop_param_;
  crop_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_crop_param(::caffe::CropParameter* crop_param) {
  delete crop_param_;
  crop_param_ = crop_param;
  if (crop_param) {
    set_has_crop_param();
  } else {
    clear_has_crop_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.crop_param)
}

// optional .caffe.DataParameter data_param = 107;
inline bool LayerParameter::has_data_param() const {
  return (_has_bits_[0] & 0x00080000u) != 0;
}
inline void LayerParameter::set_has_data_param() {
  _has_bits_[0] |= 0x00080000u;
}
inline void LayerParameter::clear_has_data_param() {
  _has_bits_[0] &= ~0x00080000u;
}
inline void LayerParameter::clear_data_param() {
  if (data_param_ != NULL) data_param_->::caffe::DataParameter::Clear();
  clear_has_data_param();
}
inline const ::caffe::DataParameter& LayerParameter::data_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.data_param)
  return data_param_ != NULL ? *data_param_
                         : *::caffe::DataParameter::internal_default_instance();
}
inline ::caffe::DataParameter* LayerParameter::mutable_data_param() {
  set_has_data_param();
  if (data_param_ == NULL) {
    data_param_ = new ::caffe::DataParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.data_param)
  return data_param_;
}
inline ::caffe::DataParameter* LayerParameter::release_data_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.data_param)
  clear_has_data_param();
  ::caffe::DataParameter* temp = data_param_;
  data_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_data_param(::caffe::DataParameter* data_param) {
  delete data_param_;
  data_param_ = data_param;
  if (data_param) {
    set_has_data_param();
  } else {
    clear_has_data_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.data_param)
}

// optional .caffe.DetectionOutputParameter detection_output_param = 141;
inline bool LayerParameter::has_detection_output_param() const {
  return (_has_bits_[0] & 0x00100000u) != 0;
}
inline void LayerParameter::set_has_detection_output_param() {
  _has_bits_[0] |= 0x00100000u;
}
inline void LayerParameter::clear_has_detection_output_param() {
  _has_bits_[0] &= ~0x00100000u;
}
inline void LayerParameter::clear_detection_output_param() {
  if (detection_output_param_ != NULL) detection_output_param_->::caffe::DetectionOutputParameter::Clear();
  clear_has_detection_output_param();
}
inline const ::caffe::DetectionOutputParameter& LayerParameter::detection_output_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.detection_output_param)
  return detection_output_param_ != NULL ? *detection_output_param_
                         : *::caffe::DetectionOutputParameter::internal_default_instance();
}
inline ::caffe::DetectionOutputParameter* LayerParameter::mutable_detection_output_param() {
  set_has_detection_output_param();
  if (detection_output_param_ == NULL) {
    detection_output_param_ = new ::caffe::DetectionOutputParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.detection_output_param)
  return detection_output_param_;
}
inline ::caffe::DetectionOutputParameter* LayerParameter::release_detection_output_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.detection_output_param)
  clear_has_detection_output_param();
  ::caffe::DetectionOutputParameter* temp = detection_output_param_;
  detection_output_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_detection_output_param(::caffe::DetectionOutputParameter* detection_output_param) {
  delete detection_output_param_;
  detection_output_param_ = detection_output_param;
  if (detection_output_param) {
    set_has_detection_output_param();
  } else {
    clear_has_detection_output_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.detection_output_param)
}

// optional .caffe.DropoutParameter dropout_param = 108;
inline bool LayerParameter::has_dropout_param() const {
  return (_has_bits_[0] & 0x00200000u) != 0;
}
inline void LayerParameter::set_has_dropout_param() {
  _has_bits_[0] |= 0x00200000u;
}
inline void LayerParameter::clear_has_dropout_param() {
  _has_bits_[0] &= ~0x00200000u;
}
inline void LayerParameter::clear_dropout_param() {
  if (dropout_param_ != NULL) dropout_param_->::caffe::DropoutParameter::Clear();
  clear_has_dropout_param();
}
inline const ::caffe::DropoutParameter& LayerParameter::dropout_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.dropout_param)
  return dropout_param_ != NULL ? *dropout_param_
                         : *::caffe::DropoutParameter::internal_default_instance();
}
inline ::caffe::DropoutParameter* LayerParameter::mutable_dropout_param() {
  set_has_dropout_param();
  if (dropout_param_ == NULL) {
    dropout_param_ = new ::caffe::DropoutParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.dropout_param)
  return dropout_param_;
}
inline ::caffe::DropoutParameter* LayerParameter::release_dropout_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.dropout_param)
  clear_has_dropout_param();
  ::caffe::DropoutParameter* temp = dropout_param_;
  dropout_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_dropout_param(::caffe::DropoutParameter* dropout_param) {
  delete dropout_param_;
  dropout_param_ = dropout_param;
  if (dropout_param) {
    set_has_dropout_param();
  } else {
    clear_has_dropout_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.dropout_param)
}

// optional .caffe.DummyDataParameter dummy_data_param = 109;
inline bool LayerParameter::has_dummy_data_param() const {
  return (_has_bits_[0] & 0x00400000u) != 0;
}
inline void LayerParameter::set_has_dummy_data_param() {
  _has_bits_[0] |= 0x00400000u;
}
inline void LayerParameter::clear_has_dummy_data_param() {
  _has_bits_[0] &= ~0x00400000u;
}
inline void LayerParameter::clear_dummy_data_param() {
  if (dummy_data_param_ != NULL) dummy_data_param_->::caffe::DummyDataParameter::Clear();
  clear_has_dummy_data_param();
}
inline const ::caffe::DummyDataParameter& LayerParameter::dummy_data_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.dummy_data_param)
  return dummy_data_param_ != NULL ? *dummy_data_param_
                         : *::caffe::DummyDataParameter::internal_default_instance();
}
inline ::caffe::DummyDataParameter* LayerParameter::mutable_dummy_data_param() {
  set_has_dummy_data_param();
  if (dummy_data_param_ == NULL) {
    dummy_data_param_ = new ::caffe::DummyDataParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.dummy_data_param)
  return dummy_data_param_;
}
inline ::caffe::DummyDataParameter* LayerParameter::release_dummy_data_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.dummy_data_param)
  clear_has_dummy_data_param();
  ::caffe::DummyDataParameter* temp = dummy_data_param_;
  dummy_data_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_dummy_data_param(::caffe::DummyDataParameter* dummy_data_param) {
  delete dummy_data_param_;
  dummy_data_param_ = dummy_data_param;
  if (dummy_data_param) {
    set_has_dummy_data_param();
  } else {
    clear_has_dummy_data_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.dummy_data_param)
}

// optional .caffe.EltwiseParameter eltwise_param = 110;
inline bool LayerParameter::has_eltwise_param() const {
  return (_has_bits_[0] & 0x00800000u) != 0;
}
inline void LayerParameter::set_has_eltwise_param() {
  _has_bits_[0] |= 0x00800000u;
}
inline void LayerParameter::clear_has_eltwise_param() {
  _has_bits_[0] &= ~0x00800000u;
}
inline void LayerParameter::clear_eltwise_param() {
  if (eltwise_param_ != NULL) eltwise_param_->::caffe::EltwiseParameter::Clear();
  clear_has_eltwise_param();
}
inline const ::caffe::EltwiseParameter& LayerParameter::eltwise_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.eltwise_param)
  return eltwise_param_ != NULL ? *eltwise_param_
                         : *::caffe::EltwiseParameter::internal_default_instance();
}
inline ::caffe::EltwiseParameter* LayerParameter::mutable_eltwise_param() {
  set_has_eltwise_param();
  if (eltwise_param_ == NULL) {
    eltwise_param_ = new ::caffe::EltwiseParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.eltwise_param)
  return eltwise_param_;
}
inline ::caffe::EltwiseParameter* LayerParameter::release_eltwise_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.eltwise_param)
  clear_has_eltwise_param();
  ::caffe::EltwiseParameter* temp = eltwise_param_;
  eltwise_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_eltwise_param(::caffe::EltwiseParameter* eltwise_param) {
  delete eltwise_param_;
  eltwise_param_ = eltwise_param;
  if (eltwise_param) {
    set_has_eltwise_param();
  } else {
    clear_has_eltwise_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.eltwise_param)
}

// optional .caffe.ExpParameter exp_param = 111;
inline bool LayerParameter::has_exp_param() const {
  return (_has_bits_[0] & 0x01000000u) != 0;
}
inline void LayerParameter::set_has_exp_param() {
  _has_bits_[0] |= 0x01000000u;
}
inline void LayerParameter::clear_has_exp_param() {
  _has_bits_[0] &= ~0x01000000u;
}
inline void LayerParameter::clear_exp_param() {
  if (exp_param_ != NULL) exp_param_->::caffe::ExpParameter::Clear();
  clear_has_exp_param();
}
inline const ::caffe::ExpParameter& LayerParameter::exp_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.exp_param)
  return exp_param_ != NULL ? *exp_param_
                         : *::caffe::ExpParameter::internal_default_instance();
}
inline ::caffe::ExpParameter* LayerParameter::mutable_exp_param() {
  set_has_exp_param();
  if (exp_param_ == NULL) {
    exp_param_ = new ::caffe::ExpParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.exp_param)
  return exp_param_;
}
inline ::caffe::ExpParameter* LayerParameter::release_exp_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.exp_param)
  clear_has_exp_param();
  ::caffe::ExpParameter* temp = exp_param_;
  exp_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_exp_param(::caffe::ExpParameter* exp_param) {
  delete exp_param_;
  exp_param_ = exp_param;
  if (exp_param) {
    set_has_exp_param();
  } else {
    clear_has_exp_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.exp_param)
}

// optional .caffe.FlattenParameter flatten_param = 135;
inline bool LayerParameter::has_flatten_param() const {
  return (_has_bits_[0] & 0x02000000u) != 0;
}
inline void LayerParameter::set_has_flatten_param() {
  _has_bits_[0] |= 0x02000000u;
}
inline void LayerParameter::clear_has_flatten_param() {
  _has_bits_[0] &= ~0x02000000u;
}
inline void LayerParameter::clear_flatten_param() {
  if (flatten_param_ != NULL) flatten_param_->::caffe::FlattenParameter::Clear();
  clear_has_flatten_param();
}
inline const ::caffe::FlattenParameter& LayerParameter::flatten_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.flatten_param)
  return flatten_param_ != NULL ? *flatten_param_
                         : *::caffe::FlattenParameter::internal_default_instance();
}
inline ::caffe::FlattenParameter* LayerParameter::mutable_flatten_param() {
  set_has_flatten_param();
  if (flatten_param_ == NULL) {
    flatten_param_ = new ::caffe::FlattenParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.flatten_param)
  return flatten_param_;
}
inline ::caffe::FlattenParameter* LayerParameter::release_flatten_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.flatten_param)
  clear_has_flatten_param();
  ::caffe::FlattenParameter* temp = flatten_param_;
  flatten_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_flatten_param(::caffe::FlattenParameter* flatten_param) {
  delete flatten_param_;
  flatten_param_ = flatten_param;
  if (flatten_param) {
    set_has_flatten_param();
  } else {
    clear_has_flatten_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.flatten_param)
}

// optional .caffe.HDF5DataParameter hdf5_data_param = 112;
inline bool LayerParameter::has_hdf5_data_param() const {
  return (_has_bits_[0] & 0x04000000u) != 0;
}
inline void LayerParameter::set_has_hdf5_data_param() {
  _has_bits_[0] |= 0x04000000u;
}
inline void LayerParameter::clear_has_hdf5_data_param() {
  _has_bits_[0] &= ~0x04000000u;
}
inline void LayerParameter::clear_hdf5_data_param() {
  if (hdf5_data_param_ != NULL) hdf5_data_param_->::caffe::HDF5DataParameter::Clear();
  clear_has_hdf5_data_param();
}
inline const ::caffe::HDF5DataParameter& LayerParameter::hdf5_data_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.hdf5_data_param)
  return hdf5_data_param_ != NULL ? *hdf5_data_param_
                         : *::caffe::HDF5DataParameter::internal_default_instance();
}
inline ::caffe::HDF5DataParameter* LayerParameter::mutable_hdf5_data_param() {
  set_has_hdf5_data_param();
  if (hdf5_data_param_ == NULL) {
    hdf5_data_param_ = new ::caffe::HDF5DataParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.hdf5_data_param)
  return hdf5_data_param_;
}
inline ::caffe::HDF5DataParameter* LayerParameter::release_hdf5_data_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.hdf5_data_param)
  clear_has_hdf5_data_param();
  ::caffe::HDF5DataParameter* temp = hdf5_data_param_;
  hdf5_data_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_hdf5_data_param(::caffe::HDF5DataParameter* hdf5_data_param) {
  delete hdf5_data_param_;
  hdf5_data_param_ = hdf5_data_param;
  if (hdf5_data_param) {
    set_has_hdf5_data_param();
  } else {
    clear_has_hdf5_data_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.hdf5_data_param)
}

// optional .caffe.HDF5OutputParameter hdf5_output_param = 113;
inline bool LayerParameter::has_hdf5_output_param() const {
  return (_has_bits_[0] & 0x08000000u) != 0;
}
inline void LayerParameter::set_has_hdf5_output_param() {
  _has_bits_[0] |= 0x08000000u;
}
inline void LayerParameter::clear_has_hdf5_output_param() {
  _has_bits_[0] &= ~0x08000000u;
}
inline void LayerParameter::clear_hdf5_output_param() {
  if (hdf5_output_param_ != NULL) hdf5_output_param_->::caffe::HDF5OutputParameter::Clear();
  clear_has_hdf5_output_param();
}
inline const ::caffe::HDF5OutputParameter& LayerParameter::hdf5_output_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.hdf5_output_param)
  return hdf5_output_param_ != NULL ? *hdf5_output_param_
                         : *::caffe::HDF5OutputParameter::internal_default_instance();
}
inline ::caffe::HDF5OutputParameter* LayerParameter::mutable_hdf5_output_param() {
  set_has_hdf5_output_param();
  if (hdf5_output_param_ == NULL) {
    hdf5_output_param_ = new ::caffe::HDF5OutputParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.hdf5_output_param)
  return hdf5_output_param_;
}
inline ::caffe::HDF5OutputParameter* LayerParameter::release_hdf5_output_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.hdf5_output_param)
  clear_has_hdf5_output_param();
  ::caffe::HDF5OutputParameter* temp = hdf5_output_param_;
  hdf5_output_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_hdf5_output_param(::caffe::HDF5OutputParameter* hdf5_output_param) {
  delete hdf5_output_param_;
  hdf5_output_param_ = hdf5_output_param;
  if (hdf5_output_param) {
    set_has_hdf5_output_param();
  } else {
    clear_has_hdf5_output_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.hdf5_output_param)
}

// optional .caffe.HingeLossParameter hinge_loss_param = 114;
inline bool LayerParameter::has_hinge_loss_param() const {
  return (_has_bits_[0] & 0x10000000u) != 0;
}
inline void LayerParameter::set_has_hinge_loss_param() {
  _has_bits_[0] |= 0x10000000u;
}
inline void LayerParameter::clear_has_hinge_loss_param() {
  _has_bits_[0] &= ~0x10000000u;
}
inline void LayerParameter::clear_hinge_loss_param() {
  if (hinge_loss_param_ != NULL) hinge_loss_param_->::caffe::HingeLossParameter::Clear();
  clear_has_hinge_loss_param();
}
inline const ::caffe::HingeLossParameter& LayerParameter::hinge_loss_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.hinge_loss_param)
  return hinge_loss_param_ != NULL ? *hinge_loss_param_
                         : *::caffe::HingeLossParameter::internal_default_instance();
}
inline ::caffe::HingeLossParameter* LayerParameter::mutable_hinge_loss_param() {
  set_has_hinge_loss_param();
  if (hinge_loss_param_ == NULL) {
    hinge_loss_param_ = new ::caffe::HingeLossParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.hinge_loss_param)
  return hinge_loss_param_;
}
inline ::caffe::HingeLossParameter* LayerParameter::release_hinge_loss_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.hinge_loss_param)
  clear_has_hinge_loss_param();
  ::caffe::HingeLossParameter* temp = hinge_loss_param_;
  hinge_loss_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_hinge_loss_param(::caffe::HingeLossParameter* hinge_loss_param) {
  delete hinge_loss_param_;
  hinge_loss_param_ = hinge_loss_param;
  if (hinge_loss_param) {
    set_has_hinge_loss_param();
  } else {
    clear_has_hinge_loss_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.hinge_loss_param)
}

// optional .caffe.ImageDataParameter image_data_param = 115;
inline bool LayerParameter::has_image_data_param() const {
  return (_has_bits_[0] & 0x20000000u) != 0;
}
inline void LayerParameter::set_has_image_data_param() {
  _has_bits_[0] |= 0x20000000u;
}
inline void LayerParameter::clear_has_image_data_param() {
  _has_bits_[0] &= ~0x20000000u;
}
inline void LayerParameter::clear_image_data_param() {
  if (image_data_param_ != NULL) image_data_param_->::caffe::ImageDataParameter::Clear();
  clear_has_image_data_param();
}
inline const ::caffe::ImageDataParameter& LayerParameter::image_data_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.image_data_param)
  return image_data_param_ != NULL ? *image_data_param_
                         : *::caffe::ImageDataParameter::internal_default_instance();
}
inline ::caffe::ImageDataParameter* LayerParameter::mutable_image_data_param() {
  set_has_image_data_param();
  if (image_data_param_ == NULL) {
    image_data_param_ = new ::caffe::ImageDataParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.image_data_param)
  return image_data_param_;
}
inline ::caffe::ImageDataParameter* LayerParameter::release_image_data_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.image_data_param)
  clear_has_image_data_param();
  ::caffe::ImageDataParameter* temp = image_data_param_;
  image_data_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_image_data_param(::caffe::ImageDataParameter* image_data_param) {
  delete image_data_param_;
  image_data_param_ = image_data_param;
  if (image_data_param) {
    set_has_image_data_param();
  } else {
    clear_has_image_data_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.image_data_param)
}

// optional .caffe.InfogainLossParameter infogain_loss_param = 116;
inline bool LayerParameter::has_infogain_loss_param() const {
  return (_has_bits_[0] & 0x40000000u) != 0;
}
inline void LayerParameter::set_has_infogain_loss_param() {
  _has_bits_[0] |= 0x40000000u;
}
inline void LayerParameter::clear_has_infogain_loss_param() {
  _has_bits_[0] &= ~0x40000000u;
}
inline void LayerParameter::clear_infogain_loss_param() {
  if (infogain_loss_param_ != NULL) infogain_loss_param_->::caffe::InfogainLossParameter::Clear();
  clear_has_infogain_loss_param();
}
inline const ::caffe::InfogainLossParameter& LayerParameter::infogain_loss_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.infogain_loss_param)
  return infogain_loss_param_ != NULL ? *infogain_loss_param_
                         : *::caffe::InfogainLossParameter::internal_default_instance();
}
inline ::caffe::InfogainLossParameter* LayerParameter::mutable_infogain_loss_param() {
  set_has_infogain_loss_param();
  if (infogain_loss_param_ == NULL) {
    infogain_loss_param_ = new ::caffe::InfogainLossParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.infogain_loss_param)
  return infogain_loss_param_;
}
inline ::caffe::InfogainLossParameter* LayerParameter::release_infogain_loss_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.infogain_loss_param)
  clear_has_infogain_loss_param();
  ::caffe::InfogainLossParameter* temp = infogain_loss_param_;
  infogain_loss_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_infogain_loss_param(::caffe::InfogainLossParameter* infogain_loss_param) {
  delete infogain_loss_param_;
  infogain_loss_param_ = infogain_loss_param;
  if (infogain_loss_param) {
    set_has_infogain_loss_param();
  } else {
    clear_has_infogain_loss_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.infogain_loss_param)
}

// optional .caffe.InnerProductParameter inner_product_param = 117;
inline bool LayerParameter::has_inner_product_param() const {
  return (_has_bits_[0] & 0x80000000u) != 0;
}
inline void LayerParameter::set_has_inner_product_param() {
  _has_bits_[0] |= 0x80000000u;
}
inline void LayerParameter::clear_has_inner_product_param() {
  _has_bits_[0] &= ~0x80000000u;
}
inline void LayerParameter::clear_inner_product_param() {
  if (inner_product_param_ != NULL) inner_product_param_->::caffe::InnerProductParameter::Clear();
  clear_has_inner_product_param();
}
inline const ::caffe::InnerProductParameter& LayerParameter::inner_product_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.inner_product_param)
  return inner_product_param_ != NULL ? *inner_product_param_
                         : *::caffe::InnerProductParameter::internal_default_instance();
}
inline ::caffe::InnerProductParameter* LayerParameter::mutable_inner_product_param() {
  set_has_inner_product_param();
  if (inner_product_param_ == NULL) {
    inner_product_param_ = new ::caffe::InnerProductParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.inner_product_param)
  return inner_product_param_;
}
inline ::caffe::InnerProductParameter* LayerParameter::release_inner_product_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.inner_product_param)
  clear_has_inner_product_param();
  ::caffe::InnerProductParameter* temp = inner_product_param_;
  inner_product_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_inner_product_param(::caffe::InnerProductParameter* inner_product_param) {
  delete inner_product_param_;
  inner_product_param_ = inner_product_param;
  if (inner_product_param) {
    set_has_inner_product_param();
  } else {
    clear_has_inner_product_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.inner_product_param)
}

// optional .caffe.LogParameter log_param = 134;
inline bool LayerParameter::has_log_param() const {
  return (_has_bits_[1] & 0x00000001u) != 0;
}
inline void LayerParameter::set_has_log_param() {
  _has_bits_[1] |= 0x00000001u;
}
inline void LayerParameter::clear_has_log_param() {
  _has_bits_[1] &= ~0x00000001u;
}
inline void LayerParameter::clear_log_param() {
  if (log_param_ != NULL) log_param_->::caffe::LogParameter::Clear();
  clear_has_log_param();
}
inline const ::caffe::LogParameter& LayerParameter::log_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.log_param)
  return log_param_ != NULL ? *log_param_
                         : *::caffe::LogParameter::internal_default_instance();
}
inline ::caffe::LogParameter* LayerParameter::mutable_log_param() {
  set_has_log_param();
  if (log_param_ == NULL) {
    log_param_ = new ::caffe::LogParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.log_param)
  return log_param_;
}
inline ::caffe::LogParameter* LayerParameter::release_log_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.log_param)
  clear_has_log_param();
  ::caffe::LogParameter* temp = log_param_;
  log_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_log_param(::caffe::LogParameter* log_param) {
  delete log_param_;
  log_param_ = log_param;
  if (log_param) {
    set_has_log_param();
  } else {
    clear_has_log_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.log_param)
}

// optional .caffe.LRNParameter lrn_param = 118;
inline bool LayerParameter::has_lrn_param() const {
  return (_has_bits_[1] & 0x00000002u) != 0;
}
inline void LayerParameter::set_has_lrn_param() {
  _has_bits_[1] |= 0x00000002u;
}
inline void LayerParameter::clear_has_lrn_param() {
  _has_bits_[1] &= ~0x00000002u;
}
inline void LayerParameter::clear_lrn_param() {
  if (lrn_param_ != NULL) lrn_param_->::caffe::LRNParameter::Clear();
  clear_has_lrn_param();
}
inline const ::caffe::LRNParameter& LayerParameter::lrn_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.lrn_param)
  return lrn_param_ != NULL ? *lrn_param_
                         : *::caffe::LRNParameter::internal_default_instance();
}
inline ::caffe::LRNParameter* LayerParameter::mutable_lrn_param() {
  set_has_lrn_param();
  if (lrn_param_ == NULL) {
    lrn_param_ = new ::caffe::LRNParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.lrn_param)
  return lrn_param_;
}
inline ::caffe::LRNParameter* LayerParameter::release_lrn_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.lrn_param)
  clear_has_lrn_param();
  ::caffe::LRNParameter* temp = lrn_param_;
  lrn_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_lrn_param(::caffe::LRNParameter* lrn_param) {
  delete lrn_param_;
  lrn_param_ = lrn_param;
  if (lrn_param) {
    set_has_lrn_param();
  } else {
    clear_has_lrn_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.lrn_param)
}

// optional .caffe.MemoryDataParameter memory_data_param = 119;
inline bool LayerParameter::has_memory_data_param() const {
  return (_has_bits_[1] & 0x00000004u) != 0;
}
inline void LayerParameter::set_has_memory_data_param() {
  _has_bits_[1] |= 0x00000004u;
}
inline void LayerParameter::clear_has_memory_data_param() {
  _has_bits_[1] &= ~0x00000004u;
}
inline void LayerParameter::clear_memory_data_param() {
  if (memory_data_param_ != NULL) memory_data_param_->::caffe::MemoryDataParameter::Clear();
  clear_has_memory_data_param();
}
inline const ::caffe::MemoryDataParameter& LayerParameter::memory_data_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.memory_data_param)
  return memory_data_param_ != NULL ? *memory_data_param_
                         : *::caffe::MemoryDataParameter::internal_default_instance();
}
inline ::caffe::MemoryDataParameter* LayerParameter::mutable_memory_data_param() {
  set_has_memory_data_param();
  if (memory_data_param_ == NULL) {
    memory_data_param_ = new ::caffe::MemoryDataParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.memory_data_param)
  return memory_data_param_;
}
inline ::caffe::MemoryDataParameter* LayerParameter::release_memory_data_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.memory_data_param)
  clear_has_memory_data_param();
  ::caffe::MemoryDataParameter* temp = memory_data_param_;
  memory_data_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_memory_data_param(::caffe::MemoryDataParameter* memory_data_param) {
  delete memory_data_param_;
  memory_data_param_ = memory_data_param;
  if (memory_data_param) {
    set_has_memory_data_param();
  } else {
    clear_has_memory_data_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.memory_data_param)
}

// optional .caffe.MVNParameter mvn_param = 120;
inline bool LayerParameter::has_mvn_param() const {
  return (_has_bits_[1] & 0x00000008u) != 0;
}
inline void LayerParameter::set_has_mvn_param() {
  _has_bits_[1] |= 0x00000008u;
}
inline void LayerParameter::clear_has_mvn_param() {
  _has_bits_[1] &= ~0x00000008u;
}
inline void LayerParameter::clear_mvn_param() {
  if (mvn_param_ != NULL) mvn_param_->::caffe::MVNParameter::Clear();
  clear_has_mvn_param();
}
inline const ::caffe::MVNParameter& LayerParameter::mvn_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.mvn_param)
  return mvn_param_ != NULL ? *mvn_param_
                         : *::caffe::MVNParameter::internal_default_instance();
}
inline ::caffe::MVNParameter* LayerParameter::mutable_mvn_param() {
  set_has_mvn_param();
  if (mvn_param_ == NULL) {
    mvn_param_ = new ::caffe::MVNParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.mvn_param)
  return mvn_param_;
}
inline ::caffe::MVNParameter* LayerParameter::release_mvn_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.mvn_param)
  clear_has_mvn_param();
  ::caffe::MVNParameter* temp = mvn_param_;
  mvn_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_mvn_param(::caffe::MVNParameter* mvn_param) {
  delete mvn_param_;
  mvn_param_ = mvn_param;
  if (mvn_param) {
    set_has_mvn_param();
  } else {
    clear_has_mvn_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.mvn_param)
}

// optional .caffe.NormalizeBBoxParameter normalize_bbox_param = 139;
inline bool LayerParameter::has_normalize_bbox_param() const {
  return (_has_bits_[1] & 0x00000010u) != 0;
}
inline void LayerParameter::set_has_normalize_bbox_param() {
  _has_bits_[1] |= 0x00000010u;
}
inline void LayerParameter::clear_has_normalize_bbox_param() {
  _has_bits_[1] &= ~0x00000010u;
}
inline void LayerParameter::clear_normalize_bbox_param() {
  if (normalize_bbox_param_ != NULL) normalize_bbox_param_->::caffe::NormalizeBBoxParameter::Clear();
  clear_has_normalize_bbox_param();
}
inline const ::caffe::NormalizeBBoxParameter& LayerParameter::normalize_bbox_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.normalize_bbox_param)
  return normalize_bbox_param_ != NULL ? *normalize_bbox_param_
                         : *::caffe::NormalizeBBoxParameter::internal_default_instance();
}
inline ::caffe::NormalizeBBoxParameter* LayerParameter::mutable_normalize_bbox_param() {
  set_has_normalize_bbox_param();
  if (normalize_bbox_param_ == NULL) {
    normalize_bbox_param_ = new ::caffe::NormalizeBBoxParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.normalize_bbox_param)
  return normalize_bbox_param_;
}
inline ::caffe::NormalizeBBoxParameter* LayerParameter::release_normalize_bbox_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.normalize_bbox_param)
  clear_has_normalize_bbox_param();
  ::caffe::NormalizeBBoxParameter* temp = normalize_bbox_param_;
  normalize_bbox_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_normalize_bbox_param(::caffe::NormalizeBBoxParameter* normalize_bbox_param) {
  delete normalize_bbox_param_;
  normalize_bbox_param_ = normalize_bbox_param;
  if (normalize_bbox_param) {
    set_has_normalize_bbox_param();
  } else {
    clear_has_normalize_bbox_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.normalize_bbox_param)
}

// optional .caffe.PermuteParameter permute_param = 138;
inline bool LayerParameter::has_permute_param() const {
  return (_has_bits_[1] & 0x00000020u) != 0;
}
inline void LayerParameter::set_has_permute_param() {
  _has_bits_[1] |= 0x00000020u;
}
inline void LayerParameter::clear_has_permute_param() {
  _has_bits_[1] &= ~0x00000020u;
}
inline void LayerParameter::clear_permute_param() {
  if (permute_param_ != NULL) permute_param_->::caffe::PermuteParameter::Clear();
  clear_has_permute_param();
}
inline const ::caffe::PermuteParameter& LayerParameter::permute_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.permute_param)
  return permute_param_ != NULL ? *permute_param_
                         : *::caffe::PermuteParameter::internal_default_instance();
}
inline ::caffe::PermuteParameter* LayerParameter::mutable_permute_param() {
  set_has_permute_param();
  if (permute_param_ == NULL) {
    permute_param_ = new ::caffe::PermuteParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.permute_param)
  return permute_param_;
}
inline ::caffe::PermuteParameter* LayerParameter::release_permute_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.permute_param)
  clear_has_permute_param();
  ::caffe::PermuteParameter* temp = permute_param_;
  permute_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_permute_param(::caffe::PermuteParameter* permute_param) {
  delete permute_param_;
  permute_param_ = permute_param;
  if (permute_param) {
    set_has_permute_param();
  } else {
    clear_has_permute_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.permute_param)
}

// optional .caffe.PoolingParameter pooling_param = 121;
inline bool LayerParameter::has_pooling_param() const {
  return (_has_bits_[1] & 0x00000040u) != 0;
}
inline void LayerParameter::set_has_pooling_param() {
  _has_bits_[1] |= 0x00000040u;
}
inline void LayerParameter::clear_has_pooling_param() {
  _has_bits_[1] &= ~0x00000040u;
}
inline void LayerParameter::clear_pooling_param() {
  if (pooling_param_ != NULL) pooling_param_->::caffe::PoolingParameter::Clear();
  clear_has_pooling_param();
}
inline const ::caffe::PoolingParameter& LayerParameter::pooling_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.pooling_param)
  return pooling_param_ != NULL ? *pooling_param_
                         : *::caffe::PoolingParameter::internal_default_instance();
}
inline ::caffe::PoolingParameter* LayerParameter::mutable_pooling_param() {
  set_has_pooling_param();
  if (pooling_param_ == NULL) {
    pooling_param_ = new ::caffe::PoolingParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.pooling_param)
  return pooling_param_;
}
inline ::caffe::PoolingParameter* LayerParameter::release_pooling_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.pooling_param)
  clear_has_pooling_param();
  ::caffe::PoolingParameter* temp = pooling_param_;
  pooling_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_pooling_param(::caffe::PoolingParameter* pooling_param) {
  delete pooling_param_;
  pooling_param_ = pooling_param;
  if (pooling_param) {
    set_has_pooling_param();
  } else {
    clear_has_pooling_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.pooling_param)
}

// optional .caffe.PowerParameter power_param = 122;
inline bool LayerParameter::has_power_param() const {
  return (_has_bits_[1] & 0x00000080u) != 0;
}
inline void LayerParameter::set_has_power_param() {
  _has_bits_[1] |= 0x00000080u;
}
inline void LayerParameter::clear_has_power_param() {
  _has_bits_[1] &= ~0x00000080u;
}
inline void LayerParameter::clear_power_param() {
  if (power_param_ != NULL) power_param_->::caffe::PowerParameter::Clear();
  clear_has_power_param();
}
inline const ::caffe::PowerParameter& LayerParameter::power_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.power_param)
  return power_param_ != NULL ? *power_param_
                         : *::caffe::PowerParameter::internal_default_instance();
}
inline ::caffe::PowerParameter* LayerParameter::mutable_power_param() {
  set_has_power_param();
  if (power_param_ == NULL) {
    power_param_ = new ::caffe::PowerParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.power_param)
  return power_param_;
}
inline ::caffe::PowerParameter* LayerParameter::release_power_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.power_param)
  clear_has_power_param();
  ::caffe::PowerParameter* temp = power_param_;
  power_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_power_param(::caffe::PowerParameter* power_param) {
  delete power_param_;
  power_param_ = power_param;
  if (power_param) {
    set_has_power_param();
  } else {
    clear_has_power_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.power_param)
}

// optional .caffe.PReLUParameter prelu_param = 131;
inline bool LayerParameter::has_prelu_param() const {
  return (_has_bits_[1] & 0x00000100u) != 0;
}
inline void LayerParameter::set_has_prelu_param() {
  _has_bits_[1] |= 0x00000100u;
}
inline void LayerParameter::clear_has_prelu_param() {
  _has_bits_[1] &= ~0x00000100u;
}
inline void LayerParameter::clear_prelu_param() {
  if (prelu_param_ != NULL) prelu_param_->::caffe::PReLUParameter::Clear();
  clear_has_prelu_param();
}
inline const ::caffe::PReLUParameter& LayerParameter::prelu_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.prelu_param)
  return prelu_param_ != NULL ? *prelu_param_
                         : *::caffe::PReLUParameter::internal_default_instance();
}
inline ::caffe::PReLUParameter* LayerParameter::mutable_prelu_param() {
  set_has_prelu_param();
  if (prelu_param_ == NULL) {
    prelu_param_ = new ::caffe::PReLUParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.prelu_param)
  return prelu_param_;
}
inline ::caffe::PReLUParameter* LayerParameter::release_prelu_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.prelu_param)
  clear_has_prelu_param();
  ::caffe::PReLUParameter* temp = prelu_param_;
  prelu_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_prelu_param(::caffe::PReLUParameter* prelu_param) {
  delete prelu_param_;
  prelu_param_ = prelu_param;
  if (prelu_param) {
    set_has_prelu_param();
  } else {
    clear_has_prelu_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.prelu_param)
}

// optional .caffe.PriorBoxParameter prior_box_param = 140;
inline bool LayerParameter::has_prior_box_param() const {
  return (_has_bits_[1] & 0x00000200u) != 0;
}
inline void LayerParameter::set_has_prior_box_param() {
  _has_bits_[1] |= 0x00000200u;
}
inline void LayerParameter::clear_has_prior_box_param() {
  _has_bits_[1] &= ~0x00000200u;
}
inline void LayerParameter::clear_prior_box_param() {
  if (prior_box_param_ != NULL) prior_box_param_->::caffe::PriorBoxParameter::Clear();
  clear_has_prior_box_param();
}
inline const ::caffe::PriorBoxParameter& LayerParameter::prior_box_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.prior_box_param)
  return prior_box_param_ != NULL ? *prior_box_param_
                         : *::caffe::PriorBoxParameter::internal_default_instance();
}
inline ::caffe::PriorBoxParameter* LayerParameter::mutable_prior_box_param() {
  set_has_prior_box_param();
  if (prior_box_param_ == NULL) {
    prior_box_param_ = new ::caffe::PriorBoxParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.prior_box_param)
  return prior_box_param_;
}
inline ::caffe::PriorBoxParameter* LayerParameter::release_prior_box_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.prior_box_param)
  clear_has_prior_box_param();
  ::caffe::PriorBoxParameter* temp = prior_box_param_;
  prior_box_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_prior_box_param(::caffe::PriorBoxParameter* prior_box_param) {
  delete prior_box_param_;
  prior_box_param_ = prior_box_param;
  if (prior_box_param) {
    set_has_prior_box_param();
  } else {
    clear_has_prior_box_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.prior_box_param)
}

// optional .caffe.PythonParameter python_param = 130;
inline bool LayerParameter::has_python_param() const {
  return (_has_bits_[1] & 0x00000400u) != 0;
}
inline void LayerParameter::set_has_python_param() {
  _has_bits_[1] |= 0x00000400u;
}
inline void LayerParameter::clear_has_python_param() {
  _has_bits_[1] &= ~0x00000400u;
}
inline void LayerParameter::clear_python_param() {
  if (python_param_ != NULL) python_param_->::caffe::PythonParameter::Clear();
  clear_has_python_param();
}
inline const ::caffe::PythonParameter& LayerParameter::python_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.python_param)
  return python_param_ != NULL ? *python_param_
                         : *::caffe::PythonParameter::internal_default_instance();
}
inline ::caffe::PythonParameter* LayerParameter::mutable_python_param() {
  set_has_python_param();
  if (python_param_ == NULL) {
    python_param_ = new ::caffe::PythonParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.python_param)
  return python_param_;
}
inline ::caffe::PythonParameter* LayerParameter::release_python_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.python_param)
  clear_has_python_param();
  ::caffe::PythonParameter* temp = python_param_;
  python_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_python_param(::caffe::PythonParameter* python_param) {
  delete python_param_;
  python_param_ = python_param;
  if (python_param) {
    set_has_python_param();
  } else {
    clear_has_python_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.python_param)
}

// optional .caffe.ReductionParameter reduction_param = 136;
inline bool LayerParameter::has_reduction_param() const {
  return (_has_bits_[1] & 0x00000800u) != 0;
}
inline void LayerParameter::set_has_reduction_param() {
  _has_bits_[1] |= 0x00000800u;
}
inline void LayerParameter::clear_has_reduction_param() {
  _has_bits_[1] &= ~0x00000800u;
}
inline void LayerParameter::clear_reduction_param() {
  if (reduction_param_ != NULL) reduction_param_->::caffe::ReductionParameter::Clear();
  clear_has_reduction_param();
}
inline const ::caffe::ReductionParameter& LayerParameter::reduction_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.reduction_param)
  return reduction_param_ != NULL ? *reduction_param_
                         : *::caffe::ReductionParameter::internal_default_instance();
}
inline ::caffe::ReductionParameter* LayerParameter::mutable_reduction_param() {
  set_has_reduction_param();
  if (reduction_param_ == NULL) {
    reduction_param_ = new ::caffe::ReductionParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.reduction_param)
  return reduction_param_;
}
inline ::caffe::ReductionParameter* LayerParameter::release_reduction_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.reduction_param)
  clear_has_reduction_param();
  ::caffe::ReductionParameter* temp = reduction_param_;
  reduction_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_reduction_param(::caffe::ReductionParameter* reduction_param) {
  delete reduction_param_;
  reduction_param_ = reduction_param;
  if (reduction_param) {
    set_has_reduction_param();
  } else {
    clear_has_reduction_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.reduction_param)
}

// optional .caffe.ReLUParameter relu_param = 123;
inline bool LayerParameter::has_relu_param() const {
  return (_has_bits_[1] & 0x00001000u) != 0;
}
inline void LayerParameter::set_has_relu_param() {
  _has_bits_[1] |= 0x00001000u;
}
inline void LayerParameter::clear_has_relu_param() {
  _has_bits_[1] &= ~0x00001000u;
}
inline void LayerParameter::clear_relu_param() {
  if (relu_param_ != NULL) relu_param_->::caffe::ReLUParameter::Clear();
  clear_has_relu_param();
}
inline const ::caffe::ReLUParameter& LayerParameter::relu_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.relu_param)
  return relu_param_ != NULL ? *relu_param_
                         : *::caffe::ReLUParameter::internal_default_instance();
}
inline ::caffe::ReLUParameter* LayerParameter::mutable_relu_param() {
  set_has_relu_param();
  if (relu_param_ == NULL) {
    relu_param_ = new ::caffe::ReLUParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.relu_param)
  return relu_param_;
}
inline ::caffe::ReLUParameter* LayerParameter::release_relu_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.relu_param)
  clear_has_relu_param();
  ::caffe::ReLUParameter* temp = relu_param_;
  relu_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_relu_param(::caffe::ReLUParameter* relu_param) {
  delete relu_param_;
  relu_param_ = relu_param;
  if (relu_param) {
    set_has_relu_param();
  } else {
    clear_has_relu_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.relu_param)
}

// optional .caffe.ReshapeParameter reshape_param = 133;
inline bool LayerParameter::has_reshape_param() const {
  return (_has_bits_[1] & 0x00002000u) != 0;
}
inline void LayerParameter::set_has_reshape_param() {
  _has_bits_[1] |= 0x00002000u;
}
inline void LayerParameter::clear_has_reshape_param() {
  _has_bits_[1] &= ~0x00002000u;
}
inline void LayerParameter::clear_reshape_param() {
  if (reshape_param_ != NULL) reshape_param_->::caffe::ReshapeParameter::Clear();
  clear_has_reshape_param();
}
inline const ::caffe::ReshapeParameter& LayerParameter::reshape_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.reshape_param)
  return reshape_param_ != NULL ? *reshape_param_
                         : *::caffe::ReshapeParameter::internal_default_instance();
}
inline ::caffe::ReshapeParameter* LayerParameter::mutable_reshape_param() {
  set_has_reshape_param();
  if (reshape_param_ == NULL) {
    reshape_param_ = new ::caffe::ReshapeParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.reshape_param)
  return reshape_param_;
}
inline ::caffe::ReshapeParameter* LayerParameter::release_reshape_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.reshape_param)
  clear_has_reshape_param();
  ::caffe::ReshapeParameter* temp = reshape_param_;
  reshape_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_reshape_param(::caffe::ReshapeParameter* reshape_param) {
  delete reshape_param_;
  reshape_param_ = reshape_param;
  if (reshape_param) {
    set_has_reshape_param();
  } else {
    clear_has_reshape_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.reshape_param)
}

// optional .caffe.SigmoidParameter sigmoid_param = 124;
inline bool LayerParameter::has_sigmoid_param() const {
  return (_has_bits_[1] & 0x00004000u) != 0;
}
inline void LayerParameter::set_has_sigmoid_param() {
  _has_bits_[1] |= 0x00004000u;
}
inline void LayerParameter::clear_has_sigmoid_param() {
  _has_bits_[1] &= ~0x00004000u;
}
inline void LayerParameter::clear_sigmoid_param() {
  if (sigmoid_param_ != NULL) sigmoid_param_->::caffe::SigmoidParameter::Clear();
  clear_has_sigmoid_param();
}
inline const ::caffe::SigmoidParameter& LayerParameter::sigmoid_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.sigmoid_param)
  return sigmoid_param_ != NULL ? *sigmoid_param_
                         : *::caffe::SigmoidParameter::internal_default_instance();
}
inline ::caffe::SigmoidParameter* LayerParameter::mutable_sigmoid_param() {
  set_has_sigmoid_param();
  if (sigmoid_param_ == NULL) {
    sigmoid_param_ = new ::caffe::SigmoidParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.sigmoid_param)
  return sigmoid_param_;
}
inline ::caffe::SigmoidParameter* LayerParameter::release_sigmoid_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.sigmoid_param)
  clear_has_sigmoid_param();
  ::caffe::SigmoidParameter* temp = sigmoid_param_;
  sigmoid_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_sigmoid_param(::caffe::SigmoidParameter* sigmoid_param) {
  delete sigmoid_param_;
  sigmoid_param_ = sigmoid_param;
  if (sigmoid_param) {
    set_has_sigmoid_param();
  } else {
    clear_has_sigmoid_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.sigmoid_param)
}

// optional .caffe.SliceParameter slice_param = 126;
inline bool LayerParameter::has_slice_param() const {
  return (_has_bits_[1] & 0x00008000u) != 0;
}
inline void LayerParameter::set_has_slice_param() {
  _has_bits_[1] |= 0x00008000u;
}
inline void LayerParameter::clear_has_slice_param() {
  _has_bits_[1] &= ~0x00008000u;
}
inline void LayerParameter::clear_slice_param() {
  if (slice_param_ != NULL) slice_param_->::caffe::SliceParameter::Clear();
  clear_has_slice_param();
}
inline const ::caffe::SliceParameter& LayerParameter::slice_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.slice_param)
  return slice_param_ != NULL ? *slice_param_
                         : *::caffe::SliceParameter::internal_default_instance();
}
inline ::caffe::SliceParameter* LayerParameter::mutable_slice_param() {
  set_has_slice_param();
  if (slice_param_ == NULL) {
    slice_param_ = new ::caffe::SliceParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.slice_param)
  return slice_param_;
}
inline ::caffe::SliceParameter* LayerParameter::release_slice_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.slice_param)
  clear_has_slice_param();
  ::caffe::SliceParameter* temp = slice_param_;
  slice_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_slice_param(::caffe::SliceParameter* slice_param) {
  delete slice_param_;
  slice_param_ = slice_param;
  if (slice_param) {
    set_has_slice_param();
  } else {
    clear_has_slice_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.slice_param)
}

// optional .caffe.SoftmaxParameter softmax_param = 125;
inline bool LayerParameter::has_softmax_param() const {
  return (_has_bits_[1] & 0x00010000u) != 0;
}
inline void LayerParameter::set_has_softmax_param() {
  _has_bits_[1] |= 0x00010000u;
}
inline void LayerParameter::clear_has_softmax_param() {
  _has_bits_[1] &= ~0x00010000u;
}
inline void LayerParameter::clear_softmax_param() {
  if (softmax_param_ != NULL) softmax_param_->::caffe::SoftmaxParameter::Clear();
  clear_has_softmax_param();
}
inline const ::caffe::SoftmaxParameter& LayerParameter::softmax_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.softmax_param)
  return softmax_param_ != NULL ? *softmax_param_
                         : *::caffe::SoftmaxParameter::internal_default_instance();
}
inline ::caffe::SoftmaxParameter* LayerParameter::mutable_softmax_param() {
  set_has_softmax_param();
  if (softmax_param_ == NULL) {
    softmax_param_ = new ::caffe::SoftmaxParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.softmax_param)
  return softmax_param_;
}
inline ::caffe::SoftmaxParameter* LayerParameter::release_softmax_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.softmax_param)
  clear_has_softmax_param();
  ::caffe::SoftmaxParameter* temp = softmax_param_;
  softmax_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_softmax_param(::caffe::SoftmaxParameter* softmax_param) {
  delete softmax_param_;
  softmax_param_ = softmax_param;
  if (softmax_param) {
    set_has_softmax_param();
  } else {
    clear_has_softmax_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.softmax_param)
}

// optional .caffe.SPPParameter spp_param = 132;
inline bool LayerParameter::has_spp_param() const {
  return (_has_bits_[1] & 0x00020000u) != 0;
}
inline void LayerParameter::set_has_spp_param() {
  _has_bits_[1] |= 0x00020000u;
}
inline void LayerParameter::clear_has_spp_param() {
  _has_bits_[1] &= ~0x00020000u;
}
inline void LayerParameter::clear_spp_param() {
  if (spp_param_ != NULL) spp_param_->::caffe::SPPParameter::Clear();
  clear_has_spp_param();
}
inline const ::caffe::SPPParameter& LayerParameter::spp_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.spp_param)
  return spp_param_ != NULL ? *spp_param_
                         : *::caffe::SPPParameter::internal_default_instance();
}
inline ::caffe::SPPParameter* LayerParameter::mutable_spp_param() {
  set_has_spp_param();
  if (spp_param_ == NULL) {
    spp_param_ = new ::caffe::SPPParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.spp_param)
  return spp_param_;
}
inline ::caffe::SPPParameter* LayerParameter::release_spp_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.spp_param)
  clear_has_spp_param();
  ::caffe::SPPParameter* temp = spp_param_;
  spp_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_spp_param(::caffe::SPPParameter* spp_param) {
  delete spp_param_;
  spp_param_ = spp_param;
  if (spp_param) {
    set_has_spp_param();
  } else {
    clear_has_spp_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.spp_param)
}

// optional .caffe.TanHParameter tanh_param = 127;
inline bool LayerParameter::has_tanh_param() const {
  return (_has_bits_[1] & 0x00040000u) != 0;
}
inline void LayerParameter::set_has_tanh_param() {
  _has_bits_[1] |= 0x00040000u;
}
inline void LayerParameter::clear_has_tanh_param() {
  _has_bits_[1] &= ~0x00040000u;
}
inline void LayerParameter::clear_tanh_param() {
  if (tanh_param_ != NULL) tanh_param_->::caffe::TanHParameter::Clear();
  clear_has_tanh_param();
}
inline const ::caffe::TanHParameter& LayerParameter::tanh_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.tanh_param)
  return tanh_param_ != NULL ? *tanh_param_
                         : *::caffe::TanHParameter::internal_default_instance();
}
inline ::caffe::TanHParameter* LayerParameter::mutable_tanh_param() {
  set_has_tanh_param();
  if (tanh_param_ == NULL) {
    tanh_param_ = new ::caffe::TanHParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.tanh_param)
  return tanh_param_;
}
inline ::caffe::TanHParameter* LayerParameter::release_tanh_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.tanh_param)
  clear_has_tanh_param();
  ::caffe::TanHParameter* temp = tanh_param_;
  tanh_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_tanh_param(::caffe::TanHParameter* tanh_param) {
  delete tanh_param_;
  tanh_param_ = tanh_param;
  if (tanh_param) {
    set_has_tanh_param();
  } else {
    clear_has_tanh_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.tanh_param)
}

// optional .caffe.ThresholdParameter threshold_param = 128;
inline bool LayerParameter::has_threshold_param() const {
  return (_has_bits_[1] & 0x00080000u) != 0;
}
inline void LayerParameter::set_has_threshold_param() {
  _has_bits_[1] |= 0x00080000u;
}
inline void LayerParameter::clear_has_threshold_param() {
  _has_bits_[1] &= ~0x00080000u;
}
inline void LayerParameter::clear_threshold_param() {
  if (threshold_param_ != NULL) threshold_param_->::caffe::ThresholdParameter::Clear();
  clear_has_threshold_param();
}
inline const ::caffe::ThresholdParameter& LayerParameter::threshold_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.threshold_param)
  return threshold_param_ != NULL ? *threshold_param_
                         : *::caffe::ThresholdParameter::internal_default_instance();
}
inline ::caffe::ThresholdParameter* LayerParameter::mutable_threshold_param() {
  set_has_threshold_param();
  if (threshold_param_ == NULL) {
    threshold_param_ = new ::caffe::ThresholdParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.threshold_param)
  return threshold_param_;
}
inline ::caffe::ThresholdParameter* LayerParameter::release_threshold_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.threshold_param)
  clear_has_threshold_param();
  ::caffe::ThresholdParameter* temp = threshold_param_;
  threshold_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_threshold_param(::caffe::ThresholdParameter* threshold_param) {
  delete threshold_param_;
  threshold_param_ = threshold_param;
  if (threshold_param) {
    set_has_threshold_param();
  } else {
    clear_has_threshold_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.threshold_param)
}

// optional .caffe.WindowDataParameter window_data_param = 129;
inline bool LayerParameter::has_window_data_param() const {
  return (_has_bits_[1] & 0x00100000u) != 0;
}
inline void LayerParameter::set_has_window_data_param() {
  _has_bits_[1] |= 0x00100000u;
}
inline void LayerParameter::clear_has_window_data_param() {
  _has_bits_[1] &= ~0x00100000u;
}
inline void LayerParameter::clear_window_data_param() {
  if (window_data_param_ != NULL) window_data_param_->::caffe::WindowDataParameter::Clear();
  clear_has_window_data_param();
}
inline const ::caffe::WindowDataParameter& LayerParameter::window_data_param() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.window_data_param)
  return window_data_param_ != NULL ? *window_data_param_
                         : *::caffe::WindowDataParameter::internal_default_instance();
}
inline ::caffe::WindowDataParameter* LayerParameter::mutable_window_data_param() {
  set_has_window_data_param();
  if (window_data_param_ == NULL) {
    window_data_param_ = new ::caffe::WindowDataParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.window_data_param)
  return window_data_param_;
}
inline ::caffe::WindowDataParameter* LayerParameter::release_window_data_param() {
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.window_data_param)
  clear_has_window_data_param();
  ::caffe::WindowDataParameter* temp = window_data_param_;
  window_data_param_ = NULL;
  return temp;
}
inline void LayerParameter::set_allocated_window_data_param(::caffe::WindowDataParameter* window_data_param) {
  delete window_data_param_;
  window_data_param_ = window_data_param;
  if (window_data_param) {
    set_has_window_data_param();
  } else {
    clear_has_window_data_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.window_data_param)
}

inline const LayerParameter* LayerParameter::internal_default_instance() {
  return &LayerParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// TransformationParameter

// optional float scale = 1 [default = 1];
inline bool TransformationParameter::has_scale() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void TransformationParameter::set_has_scale() {
  _has_bits_[0] |= 0x00000001u;
}
inline void TransformationParameter::clear_has_scale() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void TransformationParameter::clear_scale() {
  scale_ = 1;
  clear_has_scale();
}
inline float TransformationParameter::scale() const {
  // @@protoc_insertion_point(field_get:caffe.TransformationParameter.scale)
  return scale_;
}
inline void TransformationParameter::set_scale(float value) {
  set_has_scale();
  scale_ = value;
  // @@protoc_insertion_point(field_set:caffe.TransformationParameter.scale)
}

// optional bool mirror = 2 [default = false];
inline bool TransformationParameter::has_mirror() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void TransformationParameter::set_has_mirror() {
  _has_bits_[0] |= 0x00000002u;
}
inline void TransformationParameter::clear_has_mirror() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void TransformationParameter::clear_mirror() {
  mirror_ = false;
  clear_has_mirror();
}
inline bool TransformationParameter::mirror() const {
  // @@protoc_insertion_point(field_get:caffe.TransformationParameter.mirror)
  return mirror_;
}
inline void TransformationParameter::set_mirror(bool value) {
  set_has_mirror();
  mirror_ = value;
  // @@protoc_insertion_point(field_set:caffe.TransformationParameter.mirror)
}

// optional uint32 crop_size = 3 [default = 0];
inline bool TransformationParameter::has_crop_size() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void TransformationParameter::set_has_crop_size() {
  _has_bits_[0] |= 0x00000004u;
}
inline void TransformationParameter::clear_has_crop_size() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void TransformationParameter::clear_crop_size() {
  crop_size_ = 0u;
  clear_has_crop_size();
}
inline ::google::protobuf::uint32 TransformationParameter::crop_size() const {
  // @@protoc_insertion_point(field_get:caffe.TransformationParameter.crop_size)
  return crop_size_;
}
inline void TransformationParameter::set_crop_size(::google::protobuf::uint32 value) {
  set_has_crop_size();
  crop_size_ = value;
  // @@protoc_insertion_point(field_set:caffe.TransformationParameter.crop_size)
}

// optional string mean_file = 4;
inline bool TransformationParameter::has_mean_file() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void TransformationParameter::set_has_mean_file() {
  _has_bits_[0] |= 0x00000008u;
}
inline void TransformationParameter::clear_has_mean_file() {
  _has_bits_[0] &= ~0x00000008u;
}
inline void TransformationParameter::clear_mean_file() {
  mean_file_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_mean_file();
}
inline const ::std::string& TransformationParameter::mean_file() const {
  // @@protoc_insertion_point(field_get:caffe.TransformationParameter.mean_file)
  return mean_file_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void TransformationParameter::set_mean_file(const ::std::string& value) {
  set_has_mean_file();
  mean_file_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.TransformationParameter.mean_file)
}
inline void TransformationParameter::set_mean_file(const char* value) {
  set_has_mean_file();
  mean_file_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.TransformationParameter.mean_file)
}
inline void TransformationParameter::set_mean_file(const char* value, size_t size) {
  set_has_mean_file();
  mean_file_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.TransformationParameter.mean_file)
}
inline ::std::string* TransformationParameter::mutable_mean_file() {
  set_has_mean_file();
  // @@protoc_insertion_point(field_mutable:caffe.TransformationParameter.mean_file)
  return mean_file_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* TransformationParameter::release_mean_file() {
  // @@protoc_insertion_point(field_release:caffe.TransformationParameter.mean_file)
  clear_has_mean_file();
  return mean_file_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void TransformationParameter::set_allocated_mean_file(::std::string* mean_file) {
  if (mean_file != NULL) {
    set_has_mean_file();
  } else {
    clear_has_mean_file();
  }
  mean_file_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), mean_file);
  // @@protoc_insertion_point(field_set_allocated:caffe.TransformationParameter.mean_file)
}

// repeated float mean_value = 5;
inline int TransformationParameter::mean_value_size() const {
  return mean_value_.size();
}
inline void TransformationParameter::clear_mean_value() {
  mean_value_.Clear();
}
inline float TransformationParameter::mean_value(int index) const {
  // @@protoc_insertion_point(field_get:caffe.TransformationParameter.mean_value)
  return mean_value_.Get(index);
}
inline void TransformationParameter::set_mean_value(int index, float value) {
  mean_value_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.TransformationParameter.mean_value)
}
inline void TransformationParameter::add_mean_value(float value) {
  mean_value_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.TransformationParameter.mean_value)
}
inline const ::google::protobuf::RepeatedField< float >&
TransformationParameter::mean_value() const {
  // @@protoc_insertion_point(field_list:caffe.TransformationParameter.mean_value)
  return mean_value_;
}
inline ::google::protobuf::RepeatedField< float >*
TransformationParameter::mutable_mean_value() {
  // @@protoc_insertion_point(field_mutable_list:caffe.TransformationParameter.mean_value)
  return &mean_value_;
}

// optional bool force_color = 6 [default = false];
inline bool TransformationParameter::has_force_color() const {
  return (_has_bits_[0] & 0x00000020u) != 0;
}
inline void TransformationParameter::set_has_force_color() {
  _has_bits_[0] |= 0x00000020u;
}
inline void TransformationParameter::clear_has_force_color() {
  _has_bits_[0] &= ~0x00000020u;
}
inline void TransformationParameter::clear_force_color() {
  force_color_ = false;
  clear_has_force_color();
}
inline bool TransformationParameter::force_color() const {
  // @@protoc_insertion_point(field_get:caffe.TransformationParameter.force_color)
  return force_color_;
}
inline void TransformationParameter::set_force_color(bool value) {
  set_has_force_color();
  force_color_ = value;
  // @@protoc_insertion_point(field_set:caffe.TransformationParameter.force_color)
}

// optional bool force_gray = 7 [default = false];
inline bool TransformationParameter::has_force_gray() const {
  return (_has_bits_[0] & 0x00000040u) != 0;
}
inline void TransformationParameter::set_has_force_gray() {
  _has_bits_[0] |= 0x00000040u;
}
inline void TransformationParameter::clear_has_force_gray() {
  _has_bits_[0] &= ~0x00000040u;
}
inline void TransformationParameter::clear_force_gray() {
  force_gray_ = false;
  clear_has_force_gray();
}
inline bool TransformationParameter::force_gray() const {
  // @@protoc_insertion_point(field_get:caffe.TransformationParameter.force_gray)
  return force_gray_;
}
inline void TransformationParameter::set_force_gray(bool value) {
  set_has_force_gray();
  force_gray_ = value;
  // @@protoc_insertion_point(field_set:caffe.TransformationParameter.force_gray)
}

inline const TransformationParameter* TransformationParameter::internal_default_instance() {
  return &TransformationParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// LossParameter

// optional int32 ignore_label = 1;
inline bool LossParameter::has_ignore_label() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void LossParameter::set_has_ignore_label() {
  _has_bits_[0] |= 0x00000001u;
}
inline void LossParameter::clear_has_ignore_label() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void LossParameter::clear_ignore_label() {
  ignore_label_ = 0;
  clear_has_ignore_label();
}
inline ::google::protobuf::int32 LossParameter::ignore_label() const {
  // @@protoc_insertion_point(field_get:caffe.LossParameter.ignore_label)
  return ignore_label_;
}
inline void LossParameter::set_ignore_label(::google::protobuf::int32 value) {
  set_has_ignore_label();
  ignore_label_ = value;
  // @@protoc_insertion_point(field_set:caffe.LossParameter.ignore_label)
}

// optional bool normalize = 2 [default = true];
inline bool LossParameter::has_normalize() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void LossParameter::set_has_normalize() {
  _has_bits_[0] |= 0x00000002u;
}
inline void LossParameter::clear_has_normalize() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void LossParameter::clear_normalize() {
  normalize_ = true;
  clear_has_normalize();
}
inline bool LossParameter::normalize() const {
  // @@protoc_insertion_point(field_get:caffe.LossParameter.normalize)
  return normalize_;
}
inline void LossParameter::set_normalize(bool value) {
  set_has_normalize();
  normalize_ = value;
  // @@protoc_insertion_point(field_set:caffe.LossParameter.normalize)
}

inline const LossParameter* LossParameter::internal_default_instance() {
  return &LossParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// AccuracyParameter

// optional uint32 top_k = 1 [default = 1];
inline bool AccuracyParameter::has_top_k() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void AccuracyParameter::set_has_top_k() {
  _has_bits_[0] |= 0x00000001u;
}
inline void AccuracyParameter::clear_has_top_k() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void AccuracyParameter::clear_top_k() {
  top_k_ = 1u;
  clear_has_top_k();
}
inline ::google::protobuf::uint32 AccuracyParameter::top_k() const {
  // @@protoc_insertion_point(field_get:caffe.AccuracyParameter.top_k)
  return top_k_;
}
inline void AccuracyParameter::set_top_k(::google::protobuf::uint32 value) {
  set_has_top_k();
  top_k_ = value;
  // @@protoc_insertion_point(field_set:caffe.AccuracyParameter.top_k)
}

// optional int32 axis = 2 [default = 1];
inline bool AccuracyParameter::has_axis() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void AccuracyParameter::set_has_axis() {
  _has_bits_[0] |= 0x00000002u;
}
inline void AccuracyParameter::clear_has_axis() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void AccuracyParameter::clear_axis() {
  axis_ = 1;
  clear_has_axis();
}
inline ::google::protobuf::int32 AccuracyParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.AccuracyParameter.axis)
  return axis_;
}
inline void AccuracyParameter::set_axis(::google::protobuf::int32 value) {
  set_has_axis();
  axis_ = value;
  // @@protoc_insertion_point(field_set:caffe.AccuracyParameter.axis)
}

// optional int32 ignore_label = 3;
inline bool AccuracyParameter::has_ignore_label() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void AccuracyParameter::set_has_ignore_label() {
  _has_bits_[0] |= 0x00000004u;
}
inline void AccuracyParameter::clear_has_ignore_label() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void AccuracyParameter::clear_ignore_label() {
  ignore_label_ = 0;
  clear_has_ignore_label();
}
inline ::google::protobuf::int32 AccuracyParameter::ignore_label() const {
  // @@protoc_insertion_point(field_get:caffe.AccuracyParameter.ignore_label)
  return ignore_label_;
}
inline void AccuracyParameter::set_ignore_label(::google::protobuf::int32 value) {
  set_has_ignore_label();
  ignore_label_ = value;
  // @@protoc_insertion_point(field_set:caffe.AccuracyParameter.ignore_label)
}

inline const AccuracyParameter* AccuracyParameter::internal_default_instance() {
  return &AccuracyParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// ArgMaxParameter

// optional bool out_max_val = 1 [default = false];
inline bool ArgMaxParameter::has_out_max_val() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void ArgMaxParameter::set_has_out_max_val() {
  _has_bits_[0] |= 0x00000001u;
}
inline void ArgMaxParameter::clear_has_out_max_val() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void ArgMaxParameter::clear_out_max_val() {
  out_max_val_ = false;
  clear_has_out_max_val();
}
inline bool ArgMaxParameter::out_max_val() const {
  // @@protoc_insertion_point(field_get:caffe.ArgMaxParameter.out_max_val)
  return out_max_val_;
}
inline void ArgMaxParameter::set_out_max_val(bool value) {
  set_has_out_max_val();
  out_max_val_ = value;
  // @@protoc_insertion_point(field_set:caffe.ArgMaxParameter.out_max_val)
}

// optional uint32 top_k = 2 [default = 1];
inline bool ArgMaxParameter::has_top_k() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void ArgMaxParameter::set_has_top_k() {
  _has_bits_[0] |= 0x00000002u;
}
inline void ArgMaxParameter::clear_has_top_k() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void ArgMaxParameter::clear_top_k() {
  top_k_ = 1u;
  clear_has_top_k();
}
inline ::google::protobuf::uint32 ArgMaxParameter::top_k() const {
  // @@protoc_insertion_point(field_get:caffe.ArgMaxParameter.top_k)
  return top_k_;
}
inline void ArgMaxParameter::set_top_k(::google::protobuf::uint32 value) {
  set_has_top_k();
  top_k_ = value;
  // @@protoc_insertion_point(field_set:caffe.ArgMaxParameter.top_k)
}

inline const ArgMaxParameter* ArgMaxParameter::internal_default_instance() {
  return &ArgMaxParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// ConcatParameter

// optional int32 axis = 2 [default = 1];
inline bool ConcatParameter::has_axis() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void ConcatParameter::set_has_axis() {
  _has_bits_[0] |= 0x00000001u;
}
inline void ConcatParameter::clear_has_axis() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void ConcatParameter::clear_axis() {
  axis_ = 1;
  clear_has_axis();
}
inline ::google::protobuf::int32 ConcatParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.ConcatParameter.axis)
  return axis_;
}
inline void ConcatParameter::set_axis(::google::protobuf::int32 value) {
  set_has_axis();
  axis_ = value;
  // @@protoc_insertion_point(field_set:caffe.ConcatParameter.axis)
}

// optional uint32 concat_dim = 1 [default = 1];
inline bool ConcatParameter::has_concat_dim() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void ConcatParameter::set_has_concat_dim() {
  _has_bits_[0] |= 0x00000002u;
}
inline void ConcatParameter::clear_has_concat_dim() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void ConcatParameter::clear_concat_dim() {
  concat_dim_ = 1u;
  clear_has_concat_dim();
}
inline ::google::protobuf::uint32 ConcatParameter::concat_dim() const {
  // @@protoc_insertion_point(field_get:caffe.ConcatParameter.concat_dim)
  return concat_dim_;
}
inline void ConcatParameter::set_concat_dim(::google::protobuf::uint32 value) {
  set_has_concat_dim();
  concat_dim_ = value;
  // @@protoc_insertion_point(field_set:caffe.ConcatParameter.concat_dim)
}

inline const ConcatParameter* ConcatParameter::internal_default_instance() {
  return &ConcatParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// ContrastiveLossParameter

// optional float margin = 1 [default = 1];
inline bool ContrastiveLossParameter::has_margin() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void ContrastiveLossParameter::set_has_margin() {
  _has_bits_[0] |= 0x00000001u;
}
inline void ContrastiveLossParameter::clear_has_margin() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void ContrastiveLossParameter::clear_margin() {
  margin_ = 1;
  clear_has_margin();
}
inline float ContrastiveLossParameter::margin() const {
  // @@protoc_insertion_point(field_get:caffe.ContrastiveLossParameter.margin)
  return margin_;
}
inline void ContrastiveLossParameter::set_margin(float value) {
  set_has_margin();
  margin_ = value;
  // @@protoc_insertion_point(field_set:caffe.ContrastiveLossParameter.margin)
}

// optional bool legacy_version = 2 [default = false];
inline bool ContrastiveLossParameter::has_legacy_version() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void ContrastiveLossParameter::set_has_legacy_version() {
  _has_bits_[0] |= 0x00000002u;
}
inline void ContrastiveLossParameter::clear_has_legacy_version() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void ContrastiveLossParameter::clear_legacy_version() {
  legacy_version_ = false;
  clear_has_legacy_version();
}
inline bool ContrastiveLossParameter::legacy_version() const {
  // @@protoc_insertion_point(field_get:caffe.ContrastiveLossParameter.legacy_version)
  return legacy_version_;
}
inline void ContrastiveLossParameter::set_legacy_version(bool value) {
  set_has_legacy_version();
  legacy_version_ = value;
  // @@protoc_insertion_point(field_set:caffe.ContrastiveLossParameter.legacy_version)
}

inline const ContrastiveLossParameter* ContrastiveLossParameter::internal_default_instance() {
  return &ContrastiveLossParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// ConvolutionParameter

// optional uint32 num_output = 1;
inline bool ConvolutionParameter::has_num_output() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void ConvolutionParameter::set_has_num_output() {
  _has_bits_[0] |= 0x00000001u;
}
inline void ConvolutionParameter::clear_has_num_output() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void ConvolutionParameter::clear_num_output() {
  num_output_ = 0u;
  clear_has_num_output();
}
inline ::google::protobuf::uint32 ConvolutionParameter::num_output() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.num_output)
  return num_output_;
}
inline void ConvolutionParameter::set_num_output(::google::protobuf::uint32 value) {
  set_has_num_output();
  num_output_ = value;
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.num_output)
}

// optional bool bias_term = 2 [default = true];
inline bool ConvolutionParameter::has_bias_term() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void ConvolutionParameter::set_has_bias_term() {
  _has_bits_[0] |= 0x00000002u;
}
inline void ConvolutionParameter::clear_has_bias_term() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void ConvolutionParameter::clear_bias_term() {
  bias_term_ = true;
  clear_has_bias_term();
}
inline bool ConvolutionParameter::bias_term() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.bias_term)
  return bias_term_;
}
inline void ConvolutionParameter::set_bias_term(bool value) {
  set_has_bias_term();
  bias_term_ = value;
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.bias_term)
}

// optional uint32 pad = 3 [default = 0];
inline bool ConvolutionParameter::has_pad() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void ConvolutionParameter::set_has_pad() {
  _has_bits_[0] |= 0x00000004u;
}
inline void ConvolutionParameter::clear_has_pad() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void ConvolutionParameter::clear_pad() {
  pad_ = 0u;
  clear_has_pad();
}
inline ::google::protobuf::uint32 ConvolutionParameter::pad() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.pad)
  return pad_;
}
inline void ConvolutionParameter::set_pad(::google::protobuf::uint32 value) {
  set_has_pad();
  pad_ = value;
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.pad)
}

// optional uint32 pad_h = 9 [default = 0];
inline bool ConvolutionParameter::has_pad_h() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void ConvolutionParameter::set_has_pad_h() {
  _has_bits_[0] |= 0x00000008u;
}
inline void ConvolutionParameter::clear_has_pad_h() {
  _has_bits_[0] &= ~0x00000008u;
}
inline void ConvolutionParameter::clear_pad_h() {
  pad_h_ = 0u;
  clear_has_pad_h();
}
inline ::google::protobuf::uint32 ConvolutionParameter::pad_h() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.pad_h)
  return pad_h_;
}
inline void ConvolutionParameter::set_pad_h(::google::protobuf::uint32 value) {
  set_has_pad_h();
  pad_h_ = value;
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.pad_h)
}

// optional uint32 pad_w = 10 [default = 0];
inline bool ConvolutionParameter::has_pad_w() const {
  return (_has_bits_[0] & 0x00000010u) != 0;
}
inline void ConvolutionParameter::set_has_pad_w() {
  _has_bits_[0] |= 0x00000010u;
}
inline void ConvolutionParameter::clear_has_pad_w() {
  _has_bits_[0] &= ~0x00000010u;
}
inline void ConvolutionParameter::clear_pad_w() {
  pad_w_ = 0u;
  clear_has_pad_w();
}
inline ::google::protobuf::uint32 ConvolutionParameter::pad_w() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.pad_w)
  return pad_w_;
}
inline void ConvolutionParameter::set_pad_w(::google::protobuf::uint32 value) {
  set_has_pad_w();
  pad_w_ = value;
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.pad_w)
}

// optional uint32 kernel_size = 4;
inline bool ConvolutionParameter::has_kernel_size() const {
  return (_has_bits_[0] & 0x00000020u) != 0;
}
inline void ConvolutionParameter::set_has_kernel_size() {
  _has_bits_[0] |= 0x00000020u;
}
inline void ConvolutionParameter::clear_has_kernel_size() {
  _has_bits_[0] &= ~0x00000020u;
}
inline void ConvolutionParameter::clear_kernel_size() {
  kernel_size_ = 0u;
  clear_has_kernel_size();
}
inline ::google::protobuf::uint32 ConvolutionParameter::kernel_size() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.kernel_size)
  return kernel_size_;
}
inline void ConvolutionParameter::set_kernel_size(::google::protobuf::uint32 value) {
  set_has_kernel_size();
  kernel_size_ = value;
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.kernel_size)
}

// optional uint32 kernel_h = 11;
inline bool ConvolutionParameter::has_kernel_h() const {
  return (_has_bits_[0] & 0x00000040u) != 0;
}
inline void ConvolutionParameter::set_has_kernel_h() {
  _has_bits_[0] |= 0x00000040u;
}
inline void ConvolutionParameter::clear_has_kernel_h() {
  _has_bits_[0] &= ~0x00000040u;
}
inline void ConvolutionParameter::clear_kernel_h() {
  kernel_h_ = 0u;
  clear_has_kernel_h();
}
inline ::google::protobuf::uint32 ConvolutionParameter::kernel_h() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.kernel_h)
  return kernel_h_;
}
inline void ConvolutionParameter::set_kernel_h(::google::protobuf::uint32 value) {
  set_has_kernel_h();
  kernel_h_ = value;
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.kernel_h)
}

// optional uint32 kernel_w = 12;
inline bool ConvolutionParameter::has_kernel_w() const {
  return (_has_bits_[0] & 0x00000080u) != 0;
}
inline void ConvolutionParameter::set_has_kernel_w() {
  _has_bits_[0] |= 0x00000080u;
}
inline void ConvolutionParameter::clear_has_kernel_w() {
  _has_bits_[0] &= ~0x00000080u;
}
inline void ConvolutionParameter::clear_kernel_w() {
  kernel_w_ = 0u;
  clear_has_kernel_w();
}
inline ::google::protobuf::uint32 ConvolutionParameter::kernel_w() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.kernel_w)
  return kernel_w_;
}
inline void ConvolutionParameter::set_kernel_w(::google::protobuf::uint32 value) {
  set_has_kernel_w();
  kernel_w_ = value;
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.kernel_w)
}

// optional uint32 group = 5 [default = 1];
inline bool ConvolutionParameter::has_group() const {
  return (_has_bits_[0] & 0x00000100u) != 0;
}
inline void ConvolutionParameter::set_has_group() {
  _has_bits_[0] |= 0x00000100u;
}
inline void ConvolutionParameter::clear_has_group() {
  _has_bits_[0] &= ~0x00000100u;
}
inline void ConvolutionParameter::clear_group() {
  group_ = 1u;
  clear_has_group();
}
inline ::google::protobuf::uint32 ConvolutionParameter::group() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.group)
  return group_;
}
inline void ConvolutionParameter::set_group(::google::protobuf::uint32 value) {
  set_has_group();
  group_ = value;
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.group)
}

// optional uint32 stride = 6 [default = 1];
inline bool ConvolutionParameter::has_stride() const {
  return (_has_bits_[0] & 0x00000200u) != 0;
}
inline void ConvolutionParameter::set_has_stride() {
  _has_bits_[0] |= 0x00000200u;
}
inline void ConvolutionParameter::clear_has_stride() {
  _has_bits_[0] &= ~0x00000200u;
}
inline void ConvolutionParameter::clear_stride() {
  stride_ = 1u;
  clear_has_stride();
}
inline ::google::protobuf::uint32 ConvolutionParameter::stride() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.stride)
  return stride_;
}
inline void ConvolutionParameter::set_stride(::google::protobuf::uint32 value) {
  set_has_stride();
  stride_ = value;
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.stride)
}

// optional uint32 stride_h = 13;
inline bool ConvolutionParameter::has_stride_h() const {
  return (_has_bits_[0] & 0x00000400u) != 0;
}
inline void ConvolutionParameter::set_has_stride_h() {
  _has_bits_[0] |= 0x00000400u;
}
inline void ConvolutionParameter::clear_has_stride_h() {
  _has_bits_[0] &= ~0x00000400u;
}
inline void ConvolutionParameter::clear_stride_h() {
  stride_h_ = 0u;
  clear_has_stride_h();
}
inline ::google::protobuf::uint32 ConvolutionParameter::stride_h() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.stride_h)
  return stride_h_;
}
inline void ConvolutionParameter::set_stride_h(::google::protobuf::uint32 value) {
  set_has_stride_h();
  stride_h_ = value;
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.stride_h)
}

// optional uint32 stride_w = 14;
inline bool ConvolutionParameter::has_stride_w() const {
  return (_has_bits_[0] & 0x00000800u) != 0;
}
inline void ConvolutionParameter::set_has_stride_w() {
  _has_bits_[0] |= 0x00000800u;
}
inline void ConvolutionParameter::clear_has_stride_w() {
  _has_bits_[0] &= ~0x00000800u;
}
inline void ConvolutionParameter::clear_stride_w() {
  stride_w_ = 0u;
  clear_has_stride_w();
}
inline ::google::protobuf::uint32 ConvolutionParameter::stride_w() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.stride_w)
  return stride_w_;
}
inline void ConvolutionParameter::set_stride_w(::google::protobuf::uint32 value) {
  set_has_stride_w();
  stride_w_ = value;
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.stride_w)
}

// optional .caffe.FillerParameter weight_filler = 7;
inline bool ConvolutionParameter::has_weight_filler() const {
  return (_has_bits_[0] & 0x00001000u) != 0;
}
inline void ConvolutionParameter::set_has_weight_filler() {
  _has_bits_[0] |= 0x00001000u;
}
inline void ConvolutionParameter::clear_has_weight_filler() {
  _has_bits_[0] &= ~0x00001000u;
}
inline void ConvolutionParameter::clear_weight_filler() {
  if (weight_filler_ != NULL) weight_filler_->::caffe::FillerParameter::Clear();
  clear_has_weight_filler();
}
inline const ::caffe::FillerParameter& ConvolutionParameter::weight_filler() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.weight_filler)
  return weight_filler_ != NULL ? *weight_filler_
                         : *::caffe::FillerParameter::internal_default_instance();
}
inline ::caffe::FillerParameter* ConvolutionParameter::mutable_weight_filler() {
  set_has_weight_filler();
  if (weight_filler_ == NULL) {
    weight_filler_ = new ::caffe::FillerParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.ConvolutionParameter.weight_filler)
  return weight_filler_;
}
inline ::caffe::FillerParameter* ConvolutionParameter::release_weight_filler() {
  // @@protoc_insertion_point(field_release:caffe.ConvolutionParameter.weight_filler)
  clear_has_weight_filler();
  ::caffe::FillerParameter* temp = weight_filler_;
  weight_filler_ = NULL;
  return temp;
}
inline void ConvolutionParameter::set_allocated_weight_filler(::caffe::FillerParameter* weight_filler) {
  delete weight_filler_;
  weight_filler_ = weight_filler;
  if (weight_filler) {
    set_has_weight_filler();
  } else {
    clear_has_weight_filler();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.ConvolutionParameter.weight_filler)
}

// optional .caffe.FillerParameter bias_filler = 8;
inline bool ConvolutionParameter::has_bias_filler() const {
  return (_has_bits_[0] & 0x00002000u) != 0;
}
inline void ConvolutionParameter::set_has_bias_filler() {
  _has_bits_[0] |= 0x00002000u;
}
inline void ConvolutionParameter::clear_has_bias_filler() {
  _has_bits_[0] &= ~0x00002000u;
}
inline void ConvolutionParameter::clear_bias_filler() {
  if (bias_filler_ != NULL) bias_filler_->::caffe::FillerParameter::Clear();
  clear_has_bias_filler();
}
inline const ::caffe::FillerParameter& ConvolutionParameter::bias_filler() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.bias_filler)
  return bias_filler_ != NULL ? *bias_filler_
                         : *::caffe::FillerParameter::internal_default_instance();
}
inline ::caffe::FillerParameter* ConvolutionParameter::mutable_bias_filler() {
  set_has_bias_filler();
  if (bias_filler_ == NULL) {
    bias_filler_ = new ::caffe::FillerParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.ConvolutionParameter.bias_filler)
  return bias_filler_;
}
inline ::caffe::FillerParameter* ConvolutionParameter::release_bias_filler() {
  // @@protoc_insertion_point(field_release:caffe.ConvolutionParameter.bias_filler)
  clear_has_bias_filler();
  ::caffe::FillerParameter* temp = bias_filler_;
  bias_filler_ = NULL;
  return temp;
}
inline void ConvolutionParameter::set_allocated_bias_filler(::caffe::FillerParameter* bias_filler) {
  delete bias_filler_;
  bias_filler_ = bias_filler;
  if (bias_filler) {
    set_has_bias_filler();
  } else {
    clear_has_bias_filler();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.ConvolutionParameter.bias_filler)
}

// optional .caffe.ConvolutionParameter.Engine engine = 15 [default = DEFAULT];
inline bool ConvolutionParameter::has_engine() const {
  return (_has_bits_[0] & 0x00004000u) != 0;
}
inline void ConvolutionParameter::set_has_engine() {
  _has_bits_[0] |= 0x00004000u;
}
inline void ConvolutionParameter::clear_has_engine() {
  _has_bits_[0] &= ~0x00004000u;
}
inline void ConvolutionParameter::clear_engine() {
  engine_ = 0;
  clear_has_engine();
}
inline ::caffe::ConvolutionParameter_Engine ConvolutionParameter::engine() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.engine)
  return static_cast< ::caffe::ConvolutionParameter_Engine >(engine_);
}
inline void ConvolutionParameter::set_engine(::caffe::ConvolutionParameter_Engine value) {
  assert(::caffe::ConvolutionParameter_Engine_IsValid(value));
  set_has_engine();
  engine_ = value;
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.engine)
}

// optional uint32 dilation_h = 18;
inline bool ConvolutionParameter::has_dilation_h() const {
  return (_has_bits_[0] & 0x00008000u) != 0;
}
inline void ConvolutionParameter::set_has_dilation_h() {
  _has_bits_[0] |= 0x00008000u;
}
inline void ConvolutionParameter::clear_has_dilation_h() {
  _has_bits_[0] &= ~0x00008000u;
}
inline void ConvolutionParameter::clear_dilation_h() {
  dilation_h_ = 0u;
  clear_has_dilation_h();
}
inline ::google::protobuf::uint32 ConvolutionParameter::dilation_h() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.dilation_h)
  return dilation_h_;
}
inline void ConvolutionParameter::set_dilation_h(::google::protobuf::uint32 value) {
  set_has_dilation_h();
  dilation_h_ = value;
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.dilation_h)
}

// optional uint32 dilation_w = 19;
inline bool ConvolutionParameter::has_dilation_w() const {
  return (_has_bits_[0] & 0x00010000u) != 0;
}
inline void ConvolutionParameter::set_has_dilation_w() {
  _has_bits_[0] |= 0x00010000u;
}
inline void ConvolutionParameter::clear_has_dilation_w() {
  _has_bits_[0] &= ~0x00010000u;
}
inline void ConvolutionParameter::clear_dilation_w() {
  dilation_w_ = 0u;
  clear_has_dilation_w();
}
inline ::google::protobuf::uint32 ConvolutionParameter::dilation_w() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.dilation_w)
  return dilation_w_;
}
inline void ConvolutionParameter::set_dilation_w(::google::protobuf::uint32 value) {
  set_has_dilation_w();
  dilation_w_ = value;
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.dilation_w)
}

// optional uint32 dilation = 20;
inline bool ConvolutionParameter::has_dilation() const {
  return (_has_bits_[0] & 0x00020000u) != 0;
}
inline void ConvolutionParameter::set_has_dilation() {
  _has_bits_[0] |= 0x00020000u;
}
inline void ConvolutionParameter::clear_has_dilation() {
  _has_bits_[0] &= ~0x00020000u;
}
inline void ConvolutionParameter::clear_dilation() {
  dilation_ = 0u;
  clear_has_dilation();
}
inline ::google::protobuf::uint32 ConvolutionParameter::dilation() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.dilation)
  return dilation_;
}
inline void ConvolutionParameter::set_dilation(::google::protobuf::uint32 value) {
  set_has_dilation();
  dilation_ = value;
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.dilation)
}

inline const ConvolutionParameter* ConvolutionParameter::internal_default_instance() {
  return &ConvolutionParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// DataParameter

// optional string source = 1;
inline bool DataParameter::has_source() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void DataParameter::set_has_source() {
  _has_bits_[0] |= 0x00000001u;
}
inline void DataParameter::clear_has_source() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void DataParameter::clear_source() {
  source_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_source();
}
inline const ::std::string& DataParameter::source() const {
  // @@protoc_insertion_point(field_get:caffe.DataParameter.source)
  return source_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void DataParameter::set_source(const ::std::string& value) {
  set_has_source();
  source_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.DataParameter.source)
}
inline void DataParameter::set_source(const char* value) {
  set_has_source();
  source_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.DataParameter.source)
}
inline void DataParameter::set_source(const char* value, size_t size) {
  set_has_source();
  source_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.DataParameter.source)
}
inline ::std::string* DataParameter::mutable_source() {
  set_has_source();
  // @@protoc_insertion_point(field_mutable:caffe.DataParameter.source)
  return source_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* DataParameter::release_source() {
  // @@protoc_insertion_point(field_release:caffe.DataParameter.source)
  clear_has_source();
  return source_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void DataParameter::set_allocated_source(::std::string* source) {
  if (source != NULL) {
    set_has_source();
  } else {
    clear_has_source();
  }
  source_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), source);
  // @@protoc_insertion_point(field_set_allocated:caffe.DataParameter.source)
}

// optional uint32 batch_size = 4;
inline bool DataParameter::has_batch_size() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void DataParameter::set_has_batch_size() {
  _has_bits_[0] |= 0x00000002u;
}
inline void DataParameter::clear_has_batch_size() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void DataParameter::clear_batch_size() {
  batch_size_ = 0u;
  clear_has_batch_size();
}
inline ::google::protobuf::uint32 DataParameter::batch_size() const {
  // @@protoc_insertion_point(field_get:caffe.DataParameter.batch_size)
  return batch_size_;
}
inline void DataParameter::set_batch_size(::google::protobuf::uint32 value) {
  set_has_batch_size();
  batch_size_ = value;
  // @@protoc_insertion_point(field_set:caffe.DataParameter.batch_size)
}

// optional uint32 rand_skip = 7 [default = 0];
inline bool DataParameter::has_rand_skip() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void DataParameter::set_has_rand_skip() {
  _has_bits_[0] |= 0x00000004u;
}
inline void DataParameter::clear_has_rand_skip() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void DataParameter::clear_rand_skip() {
  rand_skip_ = 0u;
  clear_has_rand_skip();
}
inline ::google::protobuf::uint32 DataParameter::rand_skip() const {
  // @@protoc_insertion_point(field_get:caffe.DataParameter.rand_skip)
  return rand_skip_;
}
inline void DataParameter::set_rand_skip(::google::protobuf::uint32 value) {
  set_has_rand_skip();
  rand_skip_ = value;
  // @@protoc_insertion_point(field_set:caffe.DataParameter.rand_skip)
}

// optional .caffe.DataParameter.DB backend = 8 [default = LEVELDB];
inline bool DataParameter::has_backend() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void DataParameter::set_has_backend() {
  _has_bits_[0] |= 0x00000008u;
}
inline void DataParameter::clear_has_backend() {
  _has_bits_[0] &= ~0x00000008u;
}
inline void DataParameter::clear_backend() {
  backend_ = 0;
  clear_has_backend();
}
inline ::caffe::DataParameter_DB DataParameter::backend() const {
  // @@protoc_insertion_point(field_get:caffe.DataParameter.backend)
  return static_cast< ::caffe::DataParameter_DB >(backend_);
}
inline void DataParameter::set_backend(::caffe::DataParameter_DB value) {
  assert(::caffe::DataParameter_DB_IsValid(value));
  set_has_backend();
  backend_ = value;
  // @@protoc_insertion_point(field_set:caffe.DataParameter.backend)
}

// optional float scale = 2 [default = 1];
inline bool DataParameter::has_scale() const {
  return (_has_bits_[0] & 0x00000010u) != 0;
}
inline void DataParameter::set_has_scale() {
  _has_bits_[0] |= 0x00000010u;
}
inline void DataParameter::clear_has_scale() {
  _has_bits_[0] &= ~0x00000010u;
}
inline void DataParameter::clear_scale() {
  scale_ = 1;
  clear_has_scale();
}
inline float DataParameter::scale() const {
  // @@protoc_insertion_point(field_get:caffe.DataParameter.scale)
  return scale_;
}
inline void DataParameter::set_scale(float value) {
  set_has_scale();
  scale_ = value;
  // @@protoc_insertion_point(field_set:caffe.DataParameter.scale)
}

// optional string mean_file = 3;
inline bool DataParameter::has_mean_file() const {
  return (_has_bits_[0] & 0x00000020u) != 0;
}
inline void DataParameter::set_has_mean_file() {
  _has_bits_[0] |= 0x00000020u;
}
inline void DataParameter::clear_has_mean_file() {
  _has_bits_[0] &= ~0x00000020u;
}
inline void DataParameter::clear_mean_file() {
  mean_file_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_mean_file();
}
inline const ::std::string& DataParameter::mean_file() const {
  // @@protoc_insertion_point(field_get:caffe.DataParameter.mean_file)
  return mean_file_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void DataParameter::set_mean_file(const ::std::string& value) {
  set_has_mean_file();
  mean_file_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.DataParameter.mean_file)
}
inline void DataParameter::set_mean_file(const char* value) {
  set_has_mean_file();
  mean_file_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.DataParameter.mean_file)
}
inline void DataParameter::set_mean_file(const char* value, size_t size) {
  set_has_mean_file();
  mean_file_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.DataParameter.mean_file)
}
inline ::std::string* DataParameter::mutable_mean_file() {
  set_has_mean_file();
  // @@protoc_insertion_point(field_mutable:caffe.DataParameter.mean_file)
  return mean_file_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* DataParameter::release_mean_file() {
  // @@protoc_insertion_point(field_release:caffe.DataParameter.mean_file)
  clear_has_mean_file();
  return mean_file_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void DataParameter::set_allocated_mean_file(::std::string* mean_file) {
  if (mean_file != NULL) {
    set_has_mean_file();
  } else {
    clear_has_mean_file();
  }
  mean_file_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), mean_file);
  // @@protoc_insertion_point(field_set_allocated:caffe.DataParameter.mean_file)
}

// optional uint32 crop_size = 5 [default = 0];
inline bool DataParameter::has_crop_size() const {
  return (_has_bits_[0] & 0x00000040u) != 0;
}
inline void DataParameter::set_has_crop_size() {
  _has_bits_[0] |= 0x00000040u;
}
inline void DataParameter::clear_has_crop_size() {
  _has_bits_[0] &= ~0x00000040u;
}
inline void DataParameter::clear_crop_size() {
  crop_size_ = 0u;
  clear_has_crop_size();
}
inline ::google::protobuf::uint32 DataParameter::crop_size() const {
  // @@protoc_insertion_point(field_get:caffe.DataParameter.crop_size)
  return crop_size_;
}
inline void DataParameter::set_crop_size(::google::protobuf::uint32 value) {
  set_has_crop_size();
  crop_size_ = value;
  // @@protoc_insertion_point(field_set:caffe.DataParameter.crop_size)
}

// optional bool mirror = 6 [default = false];
inline bool DataParameter::has_mirror() const {
  return (_has_bits_[0] & 0x00000080u) != 0;
}
inline void DataParameter::set_has_mirror() {
  _has_bits_[0] |= 0x00000080u;
}
inline void DataParameter::clear_has_mirror() {
  _has_bits_[0] &= ~0x00000080u;
}
inline void DataParameter::clear_mirror() {
  mirror_ = false;
  clear_has_mirror();
}
inline bool DataParameter::mirror() const {
  // @@protoc_insertion_point(field_get:caffe.DataParameter.mirror)
  return mirror_;
}
inline void DataParameter::set_mirror(bool value) {
  set_has_mirror();
  mirror_ = value;
  // @@protoc_insertion_point(field_set:caffe.DataParameter.mirror)
}

// optional bool force_encoded_color = 9 [default = false];
inline bool DataParameter::has_force_encoded_color() const {
  return (_has_bits_[0] & 0x00000100u) != 0;
}
inline void DataParameter::set_has_force_encoded_color() {
  _has_bits_[0] |= 0x00000100u;
}
inline void DataParameter::clear_has_force_encoded_color() {
  _has_bits_[0] &= ~0x00000100u;
}
inline void DataParameter::clear_force_encoded_color() {
  force_encoded_color_ = false;
  clear_has_force_encoded_color();
}
inline bool DataParameter::force_encoded_color() const {
  // @@protoc_insertion_point(field_get:caffe.DataParameter.force_encoded_color)
  return force_encoded_color_;
}
inline void DataParameter::set_force_encoded_color(bool value) {
  set_has_force_encoded_color();
  force_encoded_color_ = value;
  // @@protoc_insertion_point(field_set:caffe.DataParameter.force_encoded_color)
}

inline const DataParameter* DataParameter::internal_default_instance() {
  return &DataParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// DropoutParameter

// optional float dropout_ratio = 1 [default = 0.5];
inline bool DropoutParameter::has_dropout_ratio() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void DropoutParameter::set_has_dropout_ratio() {
  _has_bits_[0] |= 0x00000001u;
}
inline void DropoutParameter::clear_has_dropout_ratio() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void DropoutParameter::clear_dropout_ratio() {
  dropout_ratio_ = 0.5f;
  clear_has_dropout_ratio();
}
inline float DropoutParameter::dropout_ratio() const {
  // @@protoc_insertion_point(field_get:caffe.DropoutParameter.dropout_ratio)
  return dropout_ratio_;
}
inline void DropoutParameter::set_dropout_ratio(float value) {
  set_has_dropout_ratio();
  dropout_ratio_ = value;
  // @@protoc_insertion_point(field_set:caffe.DropoutParameter.dropout_ratio)
}

inline const DropoutParameter* DropoutParameter::internal_default_instance() {
  return &DropoutParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// DummyDataParameter

// repeated .caffe.FillerParameter data_filler = 1;
inline int DummyDataParameter::data_filler_size() const {
  return data_filler_.size();
}
inline void DummyDataParameter::clear_data_filler() {
  data_filler_.Clear();
}
inline const ::caffe::FillerParameter& DummyDataParameter::data_filler(int index) const {
  // @@protoc_insertion_point(field_get:caffe.DummyDataParameter.data_filler)
  return data_filler_.Get(index);
}
inline ::caffe::FillerParameter* DummyDataParameter::mutable_data_filler(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.DummyDataParameter.data_filler)
  return data_filler_.Mutable(index);
}
inline ::caffe::FillerParameter* DummyDataParameter::add_data_filler() {
  // @@protoc_insertion_point(field_add:caffe.DummyDataParameter.data_filler)
  return data_filler_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::caffe::FillerParameter >*
DummyDataParameter::mutable_data_filler() {
  // @@protoc_insertion_point(field_mutable_list:caffe.DummyDataParameter.data_filler)
  return &data_filler_;
}
inline const ::google::protobuf::RepeatedPtrField< ::caffe::FillerParameter >&
DummyDataParameter::data_filler() const {
  // @@protoc_insertion_point(field_list:caffe.DummyDataParameter.data_filler)
  return data_filler_;
}

// repeated .caffe.BlobShape shape = 6;
inline int DummyDataParameter::shape_size() const {
  return shape_.size();
}
inline void DummyDataParameter::clear_shape() {
  shape_.Clear();
}
inline const ::caffe::BlobShape& DummyDataParameter::shape(int index) const {
  // @@protoc_insertion_point(field_get:caffe.DummyDataParameter.shape)
  return shape_.Get(index);
}
inline ::caffe::BlobShape* DummyDataParameter::mutable_shape(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.DummyDataParameter.shape)
  return shape_.Mutable(index);
}
inline ::caffe::BlobShape* DummyDataParameter::add_shape() {
  // @@protoc_insertion_point(field_add:caffe.DummyDataParameter.shape)
  return shape_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::caffe::BlobShape >*
DummyDataParameter::mutable_shape() {
  // @@protoc_insertion_point(field_mutable_list:caffe.DummyDataParameter.shape)
  return &shape_;
}
inline const ::google::protobuf::RepeatedPtrField< ::caffe::BlobShape >&
DummyDataParameter::shape() const {
  // @@protoc_insertion_point(field_list:caffe.DummyDataParameter.shape)
  return shape_;
}

// repeated uint32 num = 2;
inline int DummyDataParameter::num_size() const {
  return num_.size();
}
inline void DummyDataParameter::clear_num() {
  num_.Clear();
}
inline ::google::protobuf::uint32 DummyDataParameter::num(int index) const {
  // @@protoc_insertion_point(field_get:caffe.DummyDataParameter.num)
  return num_.Get(index);
}
inline void DummyDataParameter::set_num(int index, ::google::protobuf::uint32 value) {
  num_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.DummyDataParameter.num)
}
inline void DummyDataParameter::add_num(::google::protobuf::uint32 value) {
  num_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.DummyDataParameter.num)
}
inline const ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >&
DummyDataParameter::num() const {
  // @@protoc_insertion_point(field_list:caffe.DummyDataParameter.num)
  return num_;
}
inline ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >*
DummyDataParameter::mutable_num() {
  // @@protoc_insertion_point(field_mutable_list:caffe.DummyDataParameter.num)
  return &num_;
}

// repeated uint32 channels = 3;
inline int DummyDataParameter::channels_size() const {
  return channels_.size();
}
inline void DummyDataParameter::clear_channels() {
  channels_.Clear();
}
inline ::google::protobuf::uint32 DummyDataParameter::channels(int index) const {
  // @@protoc_insertion_point(field_get:caffe.DummyDataParameter.channels)
  return channels_.Get(index);
}
inline void DummyDataParameter::set_channels(int index, ::google::protobuf::uint32 value) {
  channels_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.DummyDataParameter.channels)
}
inline void DummyDataParameter::add_channels(::google::protobuf::uint32 value) {
  channels_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.DummyDataParameter.channels)
}
inline const ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >&
DummyDataParameter::channels() const {
  // @@protoc_insertion_point(field_list:caffe.DummyDataParameter.channels)
  return channels_;
}
inline ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >*
DummyDataParameter::mutable_channels() {
  // @@protoc_insertion_point(field_mutable_list:caffe.DummyDataParameter.channels)
  return &channels_;
}

// repeated uint32 height = 4;
inline int DummyDataParameter::height_size() const {
  return height_.size();
}
inline void DummyDataParameter::clear_height() {
  height_.Clear();
}
inline ::google::protobuf::uint32 DummyDataParameter::height(int index) const {
  // @@protoc_insertion_point(field_get:caffe.DummyDataParameter.height)
  return height_.Get(index);
}
inline void DummyDataParameter::set_height(int index, ::google::protobuf::uint32 value) {
  height_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.DummyDataParameter.height)
}
inline void DummyDataParameter::add_height(::google::protobuf::uint32 value) {
  height_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.DummyDataParameter.height)
}
inline const ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >&
DummyDataParameter::height() const {
  // @@protoc_insertion_point(field_list:caffe.DummyDataParameter.height)
  return height_;
}
inline ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >*
DummyDataParameter::mutable_height() {
  // @@protoc_insertion_point(field_mutable_list:caffe.DummyDataParameter.height)
  return &height_;
}

// repeated uint32 width = 5;
inline int DummyDataParameter::width_size() const {
  return width_.size();
}
inline void DummyDataParameter::clear_width() {
  width_.Clear();
}
inline ::google::protobuf::uint32 DummyDataParameter::width(int index) const {
  // @@protoc_insertion_point(field_get:caffe.DummyDataParameter.width)
  return width_.Get(index);
}
inline void DummyDataParameter::set_width(int index, ::google::protobuf::uint32 value) {
  width_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.DummyDataParameter.width)
}
inline void DummyDataParameter::add_width(::google::protobuf::uint32 value) {
  width_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.DummyDataParameter.width)
}
inline const ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >&
DummyDataParameter::width() const {
  // @@protoc_insertion_point(field_list:caffe.DummyDataParameter.width)
  return width_;
}
inline ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >*
DummyDataParameter::mutable_width() {
  // @@protoc_insertion_point(field_mutable_list:caffe.DummyDataParameter.width)
  return &width_;
}

inline const DummyDataParameter* DummyDataParameter::internal_default_instance() {
  return &DummyDataParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// EltwiseParameter

// optional .caffe.EltwiseParameter.EltwiseOp operation = 1 [default = SUM];
inline bool EltwiseParameter::has_operation() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void EltwiseParameter::set_has_operation() {
  _has_bits_[0] |= 0x00000001u;
}
inline void EltwiseParameter::clear_has_operation() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void EltwiseParameter::clear_operation() {
  operation_ = 1;
  clear_has_operation();
}
inline ::caffe::EltwiseParameter_EltwiseOp EltwiseParameter::operation() const {
  // @@protoc_insertion_point(field_get:caffe.EltwiseParameter.operation)
  return static_cast< ::caffe::EltwiseParameter_EltwiseOp >(operation_);
}
inline void EltwiseParameter::set_operation(::caffe::EltwiseParameter_EltwiseOp value) {
  assert(::caffe::EltwiseParameter_EltwiseOp_IsValid(value));
  set_has_operation();
  operation_ = value;
  // @@protoc_insertion_point(field_set:caffe.EltwiseParameter.operation)
}

// repeated float coeff = 2;
inline int EltwiseParameter::coeff_size() const {
  return coeff_.size();
}
inline void EltwiseParameter::clear_coeff() {
  coeff_.Clear();
}
inline float EltwiseParameter::coeff(int index) const {
  // @@protoc_insertion_point(field_get:caffe.EltwiseParameter.coeff)
  return coeff_.Get(index);
}
inline void EltwiseParameter::set_coeff(int index, float value) {
  coeff_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.EltwiseParameter.coeff)
}
inline void EltwiseParameter::add_coeff(float value) {
  coeff_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.EltwiseParameter.coeff)
}
inline const ::google::protobuf::RepeatedField< float >&
EltwiseParameter::coeff() const {
  // @@protoc_insertion_point(field_list:caffe.EltwiseParameter.coeff)
  return coeff_;
}
inline ::google::protobuf::RepeatedField< float >*
EltwiseParameter::mutable_coeff() {
  // @@protoc_insertion_point(field_mutable_list:caffe.EltwiseParameter.coeff)
  return &coeff_;
}

// optional bool stable_prod_grad = 3 [default = true];
inline bool EltwiseParameter::has_stable_prod_grad() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void EltwiseParameter::set_has_stable_prod_grad() {
  _has_bits_[0] |= 0x00000004u;
}
inline void EltwiseParameter::clear_has_stable_prod_grad() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void EltwiseParameter::clear_stable_prod_grad() {
  stable_prod_grad_ = true;
  clear_has_stable_prod_grad();
}
inline bool EltwiseParameter::stable_prod_grad() const {
  // @@protoc_insertion_point(field_get:caffe.EltwiseParameter.stable_prod_grad)
  return stable_prod_grad_;
}
inline void EltwiseParameter::set_stable_prod_grad(bool value) {
  set_has_stable_prod_grad();
  stable_prod_grad_ = value;
  // @@protoc_insertion_point(field_set:caffe.EltwiseParameter.stable_prod_grad)
}

inline const EltwiseParameter* EltwiseParameter::internal_default_instance() {
  return &EltwiseParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// ExpParameter

// optional float base = 1 [default = -1];
inline bool ExpParameter::has_base() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void ExpParameter::set_has_base() {
  _has_bits_[0] |= 0x00000001u;
}
inline void ExpParameter::clear_has_base() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void ExpParameter::clear_base() {
  base_ = -1;
  clear_has_base();
}
inline float ExpParameter::base() const {
  // @@protoc_insertion_point(field_get:caffe.ExpParameter.base)
  return base_;
}
inline void ExpParameter::set_base(float value) {
  set_has_base();
  base_ = value;
  // @@protoc_insertion_point(field_set:caffe.ExpParameter.base)
}

// optional float scale = 2 [default = 1];
inline bool ExpParameter::has_scale() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void ExpParameter::set_has_scale() {
  _has_bits_[0] |= 0x00000002u;
}
inline void ExpParameter::clear_has_scale() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void ExpParameter::clear_scale() {
  scale_ = 1;
  clear_has_scale();
}
inline float ExpParameter::scale() const {
  // @@protoc_insertion_point(field_get:caffe.ExpParameter.scale)
  return scale_;
}
inline void ExpParameter::set_scale(float value) {
  set_has_scale();
  scale_ = value;
  // @@protoc_insertion_point(field_set:caffe.ExpParameter.scale)
}

// optional float shift = 3 [default = 0];
inline bool ExpParameter::has_shift() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void ExpParameter::set_has_shift() {
  _has_bits_[0] |= 0x00000004u;
}
inline void ExpParameter::clear_has_shift() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void ExpParameter::clear_shift() {
  shift_ = 0;
  clear_has_shift();
}
inline float ExpParameter::shift() const {
  // @@protoc_insertion_point(field_get:caffe.ExpParameter.shift)
  return shift_;
}
inline void ExpParameter::set_shift(float value) {
  set_has_shift();
  shift_ = value;
  // @@protoc_insertion_point(field_set:caffe.ExpParameter.shift)
}

inline const ExpParameter* ExpParameter::internal_default_instance() {
  return &ExpParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// FlattenParameter

// optional int32 axis = 1 [default = 1];
inline bool FlattenParameter::has_axis() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void FlattenParameter::set_has_axis() {
  _has_bits_[0] |= 0x00000001u;
}
inline void FlattenParameter::clear_has_axis() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void FlattenParameter::clear_axis() {
  axis_ = 1;
  clear_has_axis();
}
inline ::google::protobuf::int32 FlattenParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.FlattenParameter.axis)
  return axis_;
}
inline void FlattenParameter::set_axis(::google::protobuf::int32 value) {
  set_has_axis();
  axis_ = value;
  // @@protoc_insertion_point(field_set:caffe.FlattenParameter.axis)
}

// optional int32 end_axis = 2 [default = -1];
inline bool FlattenParameter::has_end_axis() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void FlattenParameter::set_has_end_axis() {
  _has_bits_[0] |= 0x00000002u;
}
inline void FlattenParameter::clear_has_end_axis() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void FlattenParameter::clear_end_axis() {
  end_axis_ = -1;
  clear_has_end_axis();
}
inline ::google::protobuf::int32 FlattenParameter::end_axis() const {
  // @@protoc_insertion_point(field_get:caffe.FlattenParameter.end_axis)
  return end_axis_;
}
inline void FlattenParameter::set_end_axis(::google::protobuf::int32 value) {
  set_has_end_axis();
  end_axis_ = value;
  // @@protoc_insertion_point(field_set:caffe.FlattenParameter.end_axis)
}

inline const FlattenParameter* FlattenParameter::internal_default_instance() {
  return &FlattenParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// HDF5DataParameter

// optional string source = 1;
inline bool HDF5DataParameter::has_source() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void HDF5DataParameter::set_has_source() {
  _has_bits_[0] |= 0x00000001u;
}
inline void HDF5DataParameter::clear_has_source() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void HDF5DataParameter::clear_source() {
  source_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_source();
}
inline const ::std::string& HDF5DataParameter::source() const {
  // @@protoc_insertion_point(field_get:caffe.HDF5DataParameter.source)
  return source_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void HDF5DataParameter::set_source(const ::std::string& value) {
  set_has_source();
  source_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.HDF5DataParameter.source)
}
inline void HDF5DataParameter::set_source(const char* value) {
  set_has_source();
  source_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.HDF5DataParameter.source)
}
inline void HDF5DataParameter::set_source(const char* value, size_t size) {
  set_has_source();
  source_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.HDF5DataParameter.source)
}
inline ::std::string* HDF5DataParameter::mutable_source() {
  set_has_source();
  // @@protoc_insertion_point(field_mutable:caffe.HDF5DataParameter.source)
  return source_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* HDF5DataParameter::release_source() {
  // @@protoc_insertion_point(field_release:caffe.HDF5DataParameter.source)
  clear_has_source();
  return source_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void HDF5DataParameter::set_allocated_source(::std::string* source) {
  if (source != NULL) {
    set_has_source();
  } else {
    clear_has_source();
  }
  source_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), source);
  // @@protoc_insertion_point(field_set_allocated:caffe.HDF5DataParameter.source)
}

// optional uint32 batch_size = 2;
inline bool HDF5DataParameter::has_batch_size() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void HDF5DataParameter::set_has_batch_size() {
  _has_bits_[0] |= 0x00000002u;
}
inline void HDF5DataParameter::clear_has_batch_size() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void HDF5DataParameter::clear_batch_size() {
  batch_size_ = 0u;
  clear_has_batch_size();
}
inline ::google::protobuf::uint32 HDF5DataParameter::batch_size() const {
  // @@protoc_insertion_point(field_get:caffe.HDF5DataParameter.batch_size)
  return batch_size_;
}
inline void HDF5DataParameter::set_batch_size(::google::protobuf::uint32 value) {
  set_has_batch_size();
  batch_size_ = value;
  // @@protoc_insertion_point(field_set:caffe.HDF5DataParameter.batch_size)
}

// optional bool shuffle = 3 [default = false];
inline bool HDF5DataParameter::has_shuffle() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void HDF5DataParameter::set_has_shuffle() {
  _has_bits_[0] |= 0x00000004u;
}
inline void HDF5DataParameter::clear_has_shuffle() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void HDF5DataParameter::clear_shuffle() {
  shuffle_ = false;
  clear_has_shuffle();
}
inline bool HDF5DataParameter::shuffle() const {
  // @@protoc_insertion_point(field_get:caffe.HDF5DataParameter.shuffle)
  return shuffle_;
}
inline void HDF5DataParameter::set_shuffle(bool value) {
  set_has_shuffle();
  shuffle_ = value;
  // @@protoc_insertion_point(field_set:caffe.HDF5DataParameter.shuffle)
}

inline const HDF5DataParameter* HDF5DataParameter::internal_default_instance() {
  return &HDF5DataParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// HDF5OutputParameter

// optional string file_name = 1;
inline bool HDF5OutputParameter::has_file_name() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void HDF5OutputParameter::set_has_file_name() {
  _has_bits_[0] |= 0x00000001u;
}
inline void HDF5OutputParameter::clear_has_file_name() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void HDF5OutputParameter::clear_file_name() {
  file_name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_file_name();
}
inline const ::std::string& HDF5OutputParameter::file_name() const {
  // @@protoc_insertion_point(field_get:caffe.HDF5OutputParameter.file_name)
  return file_name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void HDF5OutputParameter::set_file_name(const ::std::string& value) {
  set_has_file_name();
  file_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.HDF5OutputParameter.file_name)
}
inline void HDF5OutputParameter::set_file_name(const char* value) {
  set_has_file_name();
  file_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.HDF5OutputParameter.file_name)
}
inline void HDF5OutputParameter::set_file_name(const char* value, size_t size) {
  set_has_file_name();
  file_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.HDF5OutputParameter.file_name)
}
inline ::std::string* HDF5OutputParameter::mutable_file_name() {
  set_has_file_name();
  // @@protoc_insertion_point(field_mutable:caffe.HDF5OutputParameter.file_name)
  return file_name_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* HDF5OutputParameter::release_file_name() {
  // @@protoc_insertion_point(field_release:caffe.HDF5OutputParameter.file_name)
  clear_has_file_name();
  return file_name_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void HDF5OutputParameter::set_allocated_file_name(::std::string* file_name) {
  if (file_name != NULL) {
    set_has_file_name();
  } else {
    clear_has_file_name();
  }
  file_name_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), file_name);
  // @@protoc_insertion_point(field_set_allocated:caffe.HDF5OutputParameter.file_name)
}

inline const HDF5OutputParameter* HDF5OutputParameter::internal_default_instance() {
  return &HDF5OutputParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// HingeLossParameter

// optional .caffe.HingeLossParameter.Norm norm = 1 [default = L1];
inline bool HingeLossParameter::has_norm() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void HingeLossParameter::set_has_norm() {
  _has_bits_[0] |= 0x00000001u;
}
inline void HingeLossParameter::clear_has_norm() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void HingeLossParameter::clear_norm() {
  norm_ = 1;
  clear_has_norm();
}
inline ::caffe::HingeLossParameter_Norm HingeLossParameter::norm() const {
  // @@protoc_insertion_point(field_get:caffe.HingeLossParameter.norm)
  return static_cast< ::caffe::HingeLossParameter_Norm >(norm_);
}
inline void HingeLossParameter::set_norm(::caffe::HingeLossParameter_Norm value) {
  assert(::caffe::HingeLossParameter_Norm_IsValid(value));
  set_has_norm();
  norm_ = value;
  // @@protoc_insertion_point(field_set:caffe.HingeLossParameter.norm)
}

inline const HingeLossParameter* HingeLossParameter::internal_default_instance() {
  return &HingeLossParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// ImageDataParameter

// optional string source = 1;
inline bool ImageDataParameter::has_source() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void ImageDataParameter::set_has_source() {
  _has_bits_[0] |= 0x00000001u;
}
inline void ImageDataParameter::clear_has_source() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void ImageDataParameter::clear_source() {
  source_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_source();
}
inline const ::std::string& ImageDataParameter::source() const {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.source)
  return source_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void ImageDataParameter::set_source(const ::std::string& value) {
  set_has_source();
  source_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.source)
}
inline void ImageDataParameter::set_source(const char* value) {
  set_has_source();
  source_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.ImageDataParameter.source)
}
inline void ImageDataParameter::set_source(const char* value, size_t size) {
  set_has_source();
  source_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.ImageDataParameter.source)
}
inline ::std::string* ImageDataParameter::mutable_source() {
  set_has_source();
  // @@protoc_insertion_point(field_mutable:caffe.ImageDataParameter.source)
  return source_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* ImageDataParameter::release_source() {
  // @@protoc_insertion_point(field_release:caffe.ImageDataParameter.source)
  clear_has_source();
  return source_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void ImageDataParameter::set_allocated_source(::std::string* source) {
  if (source != NULL) {
    set_has_source();
  } else {
    clear_has_source();
  }
  source_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), source);
  // @@protoc_insertion_point(field_set_allocated:caffe.ImageDataParameter.source)
}

// optional uint32 batch_size = 4;
inline bool ImageDataParameter::has_batch_size() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void ImageDataParameter::set_has_batch_size() {
  _has_bits_[0] |= 0x00000002u;
}
inline void ImageDataParameter::clear_has_batch_size() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void ImageDataParameter::clear_batch_size() {
  batch_size_ = 0u;
  clear_has_batch_size();
}
inline ::google::protobuf::uint32 ImageDataParameter::batch_size() const {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.batch_size)
  return batch_size_;
}
inline void ImageDataParameter::set_batch_size(::google::protobuf::uint32 value) {
  set_has_batch_size();
  batch_size_ = value;
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.batch_size)
}

// optional uint32 rand_skip = 7 [default = 0];
inline bool ImageDataParameter::has_rand_skip() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void ImageDataParameter::set_has_rand_skip() {
  _has_bits_[0] |= 0x00000004u;
}
inline void ImageDataParameter::clear_has_rand_skip() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void ImageDataParameter::clear_rand_skip() {
  rand_skip_ = 0u;
  clear_has_rand_skip();
}
inline ::google::protobuf::uint32 ImageDataParameter::rand_skip() const {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.rand_skip)
  return rand_skip_;
}
inline void ImageDataParameter::set_rand_skip(::google::protobuf::uint32 value) {
  set_has_rand_skip();
  rand_skip_ = value;
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.rand_skip)
}

// optional bool shuffle = 8 [default = false];
inline bool ImageDataParameter::has_shuffle() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void ImageDataParameter::set_has_shuffle() {
  _has_bits_[0] |= 0x00000008u;
}
inline void ImageDataParameter::clear_has_shuffle() {
  _has_bits_[0] &= ~0x00000008u;
}
inline void ImageDataParameter::clear_shuffle() {
  shuffle_ = false;
  clear_has_shuffle();
}
inline bool ImageDataParameter::shuffle() const {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.shuffle)
  return shuffle_;
}
inline void ImageDataParameter::set_shuffle(bool value) {
  set_has_shuffle();
  shuffle_ = value;
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.shuffle)
}

// optional uint32 new_height = 9 [default = 0];
inline bool ImageDataParameter::has_new_height() const {
  return (_has_bits_[0] & 0x00000010u) != 0;
}
inline void ImageDataParameter::set_has_new_height() {
  _has_bits_[0] |= 0x00000010u;
}
inline void ImageDataParameter::clear_has_new_height() {
  _has_bits_[0] &= ~0x00000010u;
}
inline void ImageDataParameter::clear_new_height() {
  new_height_ = 0u;
  clear_has_new_height();
}
inline ::google::protobuf::uint32 ImageDataParameter::new_height() const {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.new_height)
  return new_height_;
}
inline void ImageDataParameter::set_new_height(::google::protobuf::uint32 value) {
  set_has_new_height();
  new_height_ = value;
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.new_height)
}

// optional uint32 new_width = 10 [default = 0];
inline bool ImageDataParameter::has_new_width() const {
  return (_has_bits_[0] & 0x00000020u) != 0;
}
inline void ImageDataParameter::set_has_new_width() {
  _has_bits_[0] |= 0x00000020u;
}
inline void ImageDataParameter::clear_has_new_width() {
  _has_bits_[0] &= ~0x00000020u;
}
inline void ImageDataParameter::clear_new_width() {
  new_width_ = 0u;
  clear_has_new_width();
}
inline ::google::protobuf::uint32 ImageDataParameter::new_width() const {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.new_width)
  return new_width_;
}
inline void ImageDataParameter::set_new_width(::google::protobuf::uint32 value) {
  set_has_new_width();
  new_width_ = value;
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.new_width)
}

// optional bool is_color = 11 [default = true];
inline bool ImageDataParameter::has_is_color() const {
  return (_has_bits_[0] & 0x00000040u) != 0;
}
inline void ImageDataParameter::set_has_is_color() {
  _has_bits_[0] |= 0x00000040u;
}
inline void ImageDataParameter::clear_has_is_color() {
  _has_bits_[0] &= ~0x00000040u;
}
inline void ImageDataParameter::clear_is_color() {
  is_color_ = true;
  clear_has_is_color();
}
inline bool ImageDataParameter::is_color() const {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.is_color)
  return is_color_;
}
inline void ImageDataParameter::set_is_color(bool value) {
  set_has_is_color();
  is_color_ = value;
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.is_color)
}

// optional float scale = 2 [default = 1];
inline bool ImageDataParameter::has_scale() const {
  return (_has_bits_[0] & 0x00000080u) != 0;
}
inline void ImageDataParameter::set_has_scale() {
  _has_bits_[0] |= 0x00000080u;
}
inline void ImageDataParameter::clear_has_scale() {
  _has_bits_[0] &= ~0x00000080u;
}
inline void ImageDataParameter::clear_scale() {
  scale_ = 1;
  clear_has_scale();
}
inline float ImageDataParameter::scale() const {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.scale)
  return scale_;
}
inline void ImageDataParameter::set_scale(float value) {
  set_has_scale();
  scale_ = value;
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.scale)
}

// optional string mean_file = 3;
inline bool ImageDataParameter::has_mean_file() const {
  return (_has_bits_[0] & 0x00000100u) != 0;
}
inline void ImageDataParameter::set_has_mean_file() {
  _has_bits_[0] |= 0x00000100u;
}
inline void ImageDataParameter::clear_has_mean_file() {
  _has_bits_[0] &= ~0x00000100u;
}
inline void ImageDataParameter::clear_mean_file() {
  mean_file_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_mean_file();
}
inline const ::std::string& ImageDataParameter::mean_file() const {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.mean_file)
  return mean_file_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void ImageDataParameter::set_mean_file(const ::std::string& value) {
  set_has_mean_file();
  mean_file_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.mean_file)
}
inline void ImageDataParameter::set_mean_file(const char* value) {
  set_has_mean_file();
  mean_file_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.ImageDataParameter.mean_file)
}
inline void ImageDataParameter::set_mean_file(const char* value, size_t size) {
  set_has_mean_file();
  mean_file_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.ImageDataParameter.mean_file)
}
inline ::std::string* ImageDataParameter::mutable_mean_file() {
  set_has_mean_file();
  // @@protoc_insertion_point(field_mutable:caffe.ImageDataParameter.mean_file)
  return mean_file_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* ImageDataParameter::release_mean_file() {
  // @@protoc_insertion_point(field_release:caffe.ImageDataParameter.mean_file)
  clear_has_mean_file();
  return mean_file_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void ImageDataParameter::set_allocated_mean_file(::std::string* mean_file) {
  if (mean_file != NULL) {
    set_has_mean_file();
  } else {
    clear_has_mean_file();
  }
  mean_file_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), mean_file);
  // @@protoc_insertion_point(field_set_allocated:caffe.ImageDataParameter.mean_file)
}

// optional uint32 crop_size = 5 [default = 0];
inline bool ImageDataParameter::has_crop_size() const {
  return (_has_bits_[0] & 0x00000200u) != 0;
}
inline void ImageDataParameter::set_has_crop_size() {
  _has_bits_[0] |= 0x00000200u;
}
inline void ImageDataParameter::clear_has_crop_size() {
  _has_bits_[0] &= ~0x00000200u;
}
inline void ImageDataParameter::clear_crop_size() {
  crop_size_ = 0u;
  clear_has_crop_size();
}
inline ::google::protobuf::uint32 ImageDataParameter::crop_size() const {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.crop_size)
  return crop_size_;
}
inline void ImageDataParameter::set_crop_size(::google::protobuf::uint32 value) {
  set_has_crop_size();
  crop_size_ = value;
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.crop_size)
}

// optional bool mirror = 6 [default = false];
inline bool ImageDataParameter::has_mirror() const {
  return (_has_bits_[0] & 0x00000400u) != 0;
}
inline void ImageDataParameter::set_has_mirror() {
  _has_bits_[0] |= 0x00000400u;
}
inline void ImageDataParameter::clear_has_mirror() {
  _has_bits_[0] &= ~0x00000400u;
}
inline void ImageDataParameter::clear_mirror() {
  mirror_ = false;
  clear_has_mirror();
}
inline bool ImageDataParameter::mirror() const {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.mirror)
  return mirror_;
}
inline void ImageDataParameter::set_mirror(bool value) {
  set_has_mirror();
  mirror_ = value;
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.mirror)
}

// optional string root_folder = 12 [default = ""];
inline bool ImageDataParameter::has_root_folder() const {
  return (_has_bits_[0] & 0x00000800u) != 0;
}
inline void ImageDataParameter::set_has_root_folder() {
  _has_bits_[0] |= 0x00000800u;
}
inline void ImageDataParameter::clear_has_root_folder() {
  _has_bits_[0] &= ~0x00000800u;
}
inline void ImageDataParameter::clear_root_folder() {
  root_folder_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_root_folder();
}
inline const ::std::string& ImageDataParameter::root_folder() const {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.root_folder)
  return root_folder_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void ImageDataParameter::set_root_folder(const ::std::string& value) {
  set_has_root_folder();
  root_folder_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.root_folder)
}
inline void ImageDataParameter::set_root_folder(const char* value) {
  set_has_root_folder();
  root_folder_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.ImageDataParameter.root_folder)
}
inline void ImageDataParameter::set_root_folder(const char* value, size_t size) {
  set_has_root_folder();
  root_folder_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.ImageDataParameter.root_folder)
}
inline ::std::string* ImageDataParameter::mutable_root_folder() {
  set_has_root_folder();
  // @@protoc_insertion_point(field_mutable:caffe.ImageDataParameter.root_folder)
  return root_folder_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* ImageDataParameter::release_root_folder() {
  // @@protoc_insertion_point(field_release:caffe.ImageDataParameter.root_folder)
  clear_has_root_folder();
  return root_folder_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void ImageDataParameter::set_allocated_root_folder(::std::string* root_folder) {
  if (root_folder != NULL) {
    set_has_root_folder();
  } else {
    clear_has_root_folder();
  }
  root_folder_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), root_folder);
  // @@protoc_insertion_point(field_set_allocated:caffe.ImageDataParameter.root_folder)
}

inline const ImageDataParameter* ImageDataParameter::internal_default_instance() {
  return &ImageDataParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// InfogainLossParameter

// optional string source = 1;
inline bool InfogainLossParameter::has_source() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void InfogainLossParameter::set_has_source() {
  _has_bits_[0] |= 0x00000001u;
}
inline void InfogainLossParameter::clear_has_source() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void InfogainLossParameter::clear_source() {
  source_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_source();
}
inline const ::std::string& InfogainLossParameter::source() const {
  // @@protoc_insertion_point(field_get:caffe.InfogainLossParameter.source)
  return source_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void InfogainLossParameter::set_source(const ::std::string& value) {
  set_has_source();
  source_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.InfogainLossParameter.source)
}
inline void InfogainLossParameter::set_source(const char* value) {
  set_has_source();
  source_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.InfogainLossParameter.source)
}
inline void InfogainLossParameter::set_source(const char* value, size_t size) {
  set_has_source();
  source_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.InfogainLossParameter.source)
}
inline ::std::string* InfogainLossParameter::mutable_source() {
  set_has_source();
  // @@protoc_insertion_point(field_mutable:caffe.InfogainLossParameter.source)
  return source_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* InfogainLossParameter::release_source() {
  // @@protoc_insertion_point(field_release:caffe.InfogainLossParameter.source)
  clear_has_source();
  return source_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void InfogainLossParameter::set_allocated_source(::std::string* source) {
  if (source != NULL) {
    set_has_source();
  } else {
    clear_has_source();
  }
  source_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), source);
  // @@protoc_insertion_point(field_set_allocated:caffe.InfogainLossParameter.source)
}

inline const InfogainLossParameter* InfogainLossParameter::internal_default_instance() {
  return &InfogainLossParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// InnerProductParameter

// optional uint32 num_output = 1;
inline bool InnerProductParameter::has_num_output() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void InnerProductParameter::set_has_num_output() {
  _has_bits_[0] |= 0x00000001u;
}
inline void InnerProductParameter::clear_has_num_output() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void InnerProductParameter::clear_num_output() {
  num_output_ = 0u;
  clear_has_num_output();
}
inline ::google::protobuf::uint32 InnerProductParameter::num_output() const {
  // @@protoc_insertion_point(field_get:caffe.InnerProductParameter.num_output)
  return num_output_;
}
inline void InnerProductParameter::set_num_output(::google::protobuf::uint32 value) {
  set_has_num_output();
  num_output_ = value;
  // @@protoc_insertion_point(field_set:caffe.InnerProductParameter.num_output)
}

// optional bool bias_term = 2 [default = true];
inline bool InnerProductParameter::has_bias_term() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void InnerProductParameter::set_has_bias_term() {
  _has_bits_[0] |= 0x00000002u;
}
inline void InnerProductParameter::clear_has_bias_term() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void InnerProductParameter::clear_bias_term() {
  bias_term_ = true;
  clear_has_bias_term();
}
inline bool InnerProductParameter::bias_term() const {
  // @@protoc_insertion_point(field_get:caffe.InnerProductParameter.bias_term)
  return bias_term_;
}
inline void InnerProductParameter::set_bias_term(bool value) {
  set_has_bias_term();
  bias_term_ = value;
  // @@protoc_insertion_point(field_set:caffe.InnerProductParameter.bias_term)
}

// optional .caffe.FillerParameter weight_filler = 3;
inline bool InnerProductParameter::has_weight_filler() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void InnerProductParameter::set_has_weight_filler() {
  _has_bits_[0] |= 0x00000004u;
}
inline void InnerProductParameter::clear_has_weight_filler() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void InnerProductParameter::clear_weight_filler() {
  if (weight_filler_ != NULL) weight_filler_->::caffe::FillerParameter::Clear();
  clear_has_weight_filler();
}
inline const ::caffe::FillerParameter& InnerProductParameter::weight_filler() const {
  // @@protoc_insertion_point(field_get:caffe.InnerProductParameter.weight_filler)
  return weight_filler_ != NULL ? *weight_filler_
                         : *::caffe::FillerParameter::internal_default_instance();
}
inline ::caffe::FillerParameter* InnerProductParameter::mutable_weight_filler() {
  set_has_weight_filler();
  if (weight_filler_ == NULL) {
    weight_filler_ = new ::caffe::FillerParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.InnerProductParameter.weight_filler)
  return weight_filler_;
}
inline ::caffe::FillerParameter* InnerProductParameter::release_weight_filler() {
  // @@protoc_insertion_point(field_release:caffe.InnerProductParameter.weight_filler)
  clear_has_weight_filler();
  ::caffe::FillerParameter* temp = weight_filler_;
  weight_filler_ = NULL;
  return temp;
}
inline void InnerProductParameter::set_allocated_weight_filler(::caffe::FillerParameter* weight_filler) {
  delete weight_filler_;
  weight_filler_ = weight_filler;
  if (weight_filler) {
    set_has_weight_filler();
  } else {
    clear_has_weight_filler();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.InnerProductParameter.weight_filler)
}

// optional .caffe.FillerParameter bias_filler = 4;
inline bool InnerProductParameter::has_bias_filler() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void InnerProductParameter::set_has_bias_filler() {
  _has_bits_[0] |= 0x00000008u;
}
inline void InnerProductParameter::clear_has_bias_filler() {
  _has_bits_[0] &= ~0x00000008u;
}
inline void InnerProductParameter::clear_bias_filler() {
  if (bias_filler_ != NULL) bias_filler_->::caffe::FillerParameter::Clear();
  clear_has_bias_filler();
}
inline const ::caffe::FillerParameter& InnerProductParameter::bias_filler() const {
  // @@protoc_insertion_point(field_get:caffe.InnerProductParameter.bias_filler)
  return bias_filler_ != NULL ? *bias_filler_
                         : *::caffe::FillerParameter::internal_default_instance();
}
inline ::caffe::FillerParameter* InnerProductParameter::mutable_bias_filler() {
  set_has_bias_filler();
  if (bias_filler_ == NULL) {
    bias_filler_ = new ::caffe::FillerParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.InnerProductParameter.bias_filler)
  return bias_filler_;
}
inline ::caffe::FillerParameter* InnerProductParameter::release_bias_filler() {
  // @@protoc_insertion_point(field_release:caffe.InnerProductParameter.bias_filler)
  clear_has_bias_filler();
  ::caffe::FillerParameter* temp = bias_filler_;
  bias_filler_ = NULL;
  return temp;
}
inline void InnerProductParameter::set_allocated_bias_filler(::caffe::FillerParameter* bias_filler) {
  delete bias_filler_;
  bias_filler_ = bias_filler;
  if (bias_filler) {
    set_has_bias_filler();
  } else {
    clear_has_bias_filler();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.InnerProductParameter.bias_filler)
}

// optional int32 axis = 5 [default = 1];
inline bool InnerProductParameter::has_axis() const {
  return (_has_bits_[0] & 0x00000010u) != 0;
}
inline void InnerProductParameter::set_has_axis() {
  _has_bits_[0] |= 0x00000010u;
}
inline void InnerProductParameter::clear_has_axis() {
  _has_bits_[0] &= ~0x00000010u;
}
inline void InnerProductParameter::clear_axis() {
  axis_ = 1;
  clear_has_axis();
}
inline ::google::protobuf::int32 InnerProductParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.InnerProductParameter.axis)
  return axis_;
}
inline void InnerProductParameter::set_axis(::google::protobuf::int32 value) {
  set_has_axis();
  axis_ = value;
  // @@protoc_insertion_point(field_set:caffe.InnerProductParameter.axis)
}

inline const InnerProductParameter* InnerProductParameter::internal_default_instance() {
  return &InnerProductParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// LogParameter

// optional float base = 1 [default = -1];
inline bool LogParameter::has_base() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void LogParameter::set_has_base() {
  _has_bits_[0] |= 0x00000001u;
}
inline void LogParameter::clear_has_base() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void LogParameter::clear_base() {
  base_ = -1;
  clear_has_base();
}
inline float LogParameter::base() const {
  // @@protoc_insertion_point(field_get:caffe.LogParameter.base)
  return base_;
}
inline void LogParameter::set_base(float value) {
  set_has_base();
  base_ = value;
  // @@protoc_insertion_point(field_set:caffe.LogParameter.base)
}

// optional float scale = 2 [default = 1];
inline bool LogParameter::has_scale() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void LogParameter::set_has_scale() {
  _has_bits_[0] |= 0x00000002u;
}
inline void LogParameter::clear_has_scale() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void LogParameter::clear_scale() {
  scale_ = 1;
  clear_has_scale();
}
inline float LogParameter::scale() const {
  // @@protoc_insertion_point(field_get:caffe.LogParameter.scale)
  return scale_;
}
inline void LogParameter::set_scale(float value) {
  set_has_scale();
  scale_ = value;
  // @@protoc_insertion_point(field_set:caffe.LogParameter.scale)
}

// optional float shift = 3 [default = 0];
inline bool LogParameter::has_shift() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void LogParameter::set_has_shift() {
  _has_bits_[0] |= 0x00000004u;
}
inline void LogParameter::clear_has_shift() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void LogParameter::clear_shift() {
  shift_ = 0;
  clear_has_shift();
}
inline float LogParameter::shift() const {
  // @@protoc_insertion_point(field_get:caffe.LogParameter.shift)
  return shift_;
}
inline void LogParameter::set_shift(float value) {
  set_has_shift();
  shift_ = value;
  // @@protoc_insertion_point(field_set:caffe.LogParameter.shift)
}

inline const LogParameter* LogParameter::internal_default_instance() {
  return &LogParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// LRNParameter

// optional uint32 local_size = 1 [default = 5];
inline bool LRNParameter::has_local_size() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void LRNParameter::set_has_local_size() {
  _has_bits_[0] |= 0x00000001u;
}
inline void LRNParameter::clear_has_local_size() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void LRNParameter::clear_local_size() {
  local_size_ = 5u;
  clear_has_local_size();
}
inline ::google::protobuf::uint32 LRNParameter::local_size() const {
  // @@protoc_insertion_point(field_get:caffe.LRNParameter.local_size)
  return local_size_;
}
inline void LRNParameter::set_local_size(::google::protobuf::uint32 value) {
  set_has_local_size();
  local_size_ = value;
  // @@protoc_insertion_point(field_set:caffe.LRNParameter.local_size)
}

// optional float alpha = 2 [default = 1];
inline bool LRNParameter::has_alpha() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void LRNParameter::set_has_alpha() {
  _has_bits_[0] |= 0x00000002u;
}
inline void LRNParameter::clear_has_alpha() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void LRNParameter::clear_alpha() {
  alpha_ = 1;
  clear_has_alpha();
}
inline float LRNParameter::alpha() const {
  // @@protoc_insertion_point(field_get:caffe.LRNParameter.alpha)
  return alpha_;
}
inline void LRNParameter::set_alpha(float value) {
  set_has_alpha();
  alpha_ = value;
  // @@protoc_insertion_point(field_set:caffe.LRNParameter.alpha)
}

// optional float beta = 3 [default = 0.75];
inline bool LRNParameter::has_beta() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void LRNParameter::set_has_beta() {
  _has_bits_[0] |= 0x00000004u;
}
inline void LRNParameter::clear_has_beta() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void LRNParameter::clear_beta() {
  beta_ = 0.75f;
  clear_has_beta();
}
inline float LRNParameter::beta() const {
  // @@protoc_insertion_point(field_get:caffe.LRNParameter.beta)
  return beta_;
}
inline void LRNParameter::set_beta(float value) {
  set_has_beta();
  beta_ = value;
  // @@protoc_insertion_point(field_set:caffe.LRNParameter.beta)
}

// optional .caffe.LRNParameter.NormRegion norm_region = 4 [default = ACROSS_CHANNELS];
inline bool LRNParameter::has_norm_region() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void LRNParameter::set_has_norm_region() {
  _has_bits_[0] |= 0x00000008u;
}
inline void LRNParameter::clear_has_norm_region() {
  _has_bits_[0] &= ~0x00000008u;
}
inline void LRNParameter::clear_norm_region() {
  norm_region_ = 0;
  clear_has_norm_region();
}
inline ::caffe::LRNParameter_NormRegion LRNParameter::norm_region() const {
  // @@protoc_insertion_point(field_get:caffe.LRNParameter.norm_region)
  return static_cast< ::caffe::LRNParameter_NormRegion >(norm_region_);
}
inline void LRNParameter::set_norm_region(::caffe::LRNParameter_NormRegion value) {
  assert(::caffe::LRNParameter_NormRegion_IsValid(value));
  set_has_norm_region();
  norm_region_ = value;
  // @@protoc_insertion_point(field_set:caffe.LRNParameter.norm_region)
}

// optional float k = 5 [default = 1];
inline bool LRNParameter::has_k() const {
  return (_has_bits_[0] & 0x00000010u) != 0;
}
inline void LRNParameter::set_has_k() {
  _has_bits_[0] |= 0x00000010u;
}
inline void LRNParameter::clear_has_k() {
  _has_bits_[0] &= ~0x00000010u;
}
inline void LRNParameter::clear_k() {
  k_ = 1;
  clear_has_k();
}
inline float LRNParameter::k() const {
  // @@protoc_insertion_point(field_get:caffe.LRNParameter.k)
  return k_;
}
inline void LRNParameter::set_k(float value) {
  set_has_k();
  k_ = value;
  // @@protoc_insertion_point(field_set:caffe.LRNParameter.k)
}

inline const LRNParameter* LRNParameter::internal_default_instance() {
  return &LRNParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// MemoryDataParameter

// optional uint32 batch_size = 1;
inline bool MemoryDataParameter::has_batch_size() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void MemoryDataParameter::set_has_batch_size() {
  _has_bits_[0] |= 0x00000001u;
}
inline void MemoryDataParameter::clear_has_batch_size() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void MemoryDataParameter::clear_batch_size() {
  batch_size_ = 0u;
  clear_has_batch_size();
}
inline ::google::protobuf::uint32 MemoryDataParameter::batch_size() const {
  // @@protoc_insertion_point(field_get:caffe.MemoryDataParameter.batch_size)
  return batch_size_;
}
inline void MemoryDataParameter::set_batch_size(::google::protobuf::uint32 value) {
  set_has_batch_size();
  batch_size_ = value;
  // @@protoc_insertion_point(field_set:caffe.MemoryDataParameter.batch_size)
}

// optional uint32 channels = 2;
inline bool MemoryDataParameter::has_channels() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void MemoryDataParameter::set_has_channels() {
  _has_bits_[0] |= 0x00000002u;
}
inline void MemoryDataParameter::clear_has_channels() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void MemoryDataParameter::clear_channels() {
  channels_ = 0u;
  clear_has_channels();
}
inline ::google::protobuf::uint32 MemoryDataParameter::channels() const {
  // @@protoc_insertion_point(field_get:caffe.MemoryDataParameter.channels)
  return channels_;
}
inline void MemoryDataParameter::set_channels(::google::protobuf::uint32 value) {
  set_has_channels();
  channels_ = value;
  // @@protoc_insertion_point(field_set:caffe.MemoryDataParameter.channels)
}

// optional uint32 height = 3;
inline bool MemoryDataParameter::has_height() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void MemoryDataParameter::set_has_height() {
  _has_bits_[0] |= 0x00000004u;
}
inline void MemoryDataParameter::clear_has_height() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void MemoryDataParameter::clear_height() {
  height_ = 0u;
  clear_has_height();
}
inline ::google::protobuf::uint32 MemoryDataParameter::height() const {
  // @@protoc_insertion_point(field_get:caffe.MemoryDataParameter.height)
  return height_;
}
inline void MemoryDataParameter::set_height(::google::protobuf::uint32 value) {
  set_has_height();
  height_ = value;
  // @@protoc_insertion_point(field_set:caffe.MemoryDataParameter.height)
}

// optional uint32 width = 4;
inline bool MemoryDataParameter::has_width() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void MemoryDataParameter::set_has_width() {
  _has_bits_[0] |= 0x00000008u;
}
inline void MemoryDataParameter::clear_has_width() {
  _has_bits_[0] &= ~0x00000008u;
}
inline void MemoryDataParameter::clear_width() {
  width_ = 0u;
  clear_has_width();
}
inline ::google::protobuf::uint32 MemoryDataParameter::width() const {
  // @@protoc_insertion_point(field_get:caffe.MemoryDataParameter.width)
  return width_;
}
inline void MemoryDataParameter::set_width(::google::protobuf::uint32 value) {
  set_has_width();
  width_ = value;
  // @@protoc_insertion_point(field_set:caffe.MemoryDataParameter.width)
}

inline const MemoryDataParameter* MemoryDataParameter::internal_default_instance() {
  return &MemoryDataParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// MVNParameter

// optional bool normalize_variance = 1 [default = true];
inline bool MVNParameter::has_normalize_variance() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void MVNParameter::set_has_normalize_variance() {
  _has_bits_[0] |= 0x00000001u;
}
inline void MVNParameter::clear_has_normalize_variance() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void MVNParameter::clear_normalize_variance() {
  normalize_variance_ = true;
  clear_has_normalize_variance();
}
inline bool MVNParameter::normalize_variance() const {
  // @@protoc_insertion_point(field_get:caffe.MVNParameter.normalize_variance)
  return normalize_variance_;
}
inline void MVNParameter::set_normalize_variance(bool value) {
  set_has_normalize_variance();
  normalize_variance_ = value;
  // @@protoc_insertion_point(field_set:caffe.MVNParameter.normalize_variance)
}

// optional bool across_channels = 2 [default = false];
inline bool MVNParameter::has_across_channels() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void MVNParameter::set_has_across_channels() {
  _has_bits_[0] |= 0x00000002u;
}
inline void MVNParameter::clear_has_across_channels() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void MVNParameter::clear_across_channels() {
  across_channels_ = false;
  clear_has_across_channels();
}
inline bool MVNParameter::across_channels() const {
  // @@protoc_insertion_point(field_get:caffe.MVNParameter.across_channels)
  return across_channels_;
}
inline void MVNParameter::set_across_channels(bool value) {
  set_has_across_channels();
  across_channels_ = value;
  // @@protoc_insertion_point(field_set:caffe.MVNParameter.across_channels)
}

// optional float eps = 3 [default = 1e-09];
inline bool MVNParameter::has_eps() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void MVNParameter::set_has_eps() {
  _has_bits_[0] |= 0x00000004u;
}
inline void MVNParameter::clear_has_eps() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void MVNParameter::clear_eps() {
  eps_ = 1e-09f;
  clear_has_eps();
}
inline float MVNParameter::eps() const {
  // @@protoc_insertion_point(field_get:caffe.MVNParameter.eps)
  return eps_;
}
inline void MVNParameter::set_eps(float value) {
  set_has_eps();
  eps_ = value;
  // @@protoc_insertion_point(field_set:caffe.MVNParameter.eps)
}

inline const MVNParameter* MVNParameter::internal_default_instance() {
  return &MVNParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// PoolingParameter

// optional .caffe.PoolingParameter.PoolMethod pool = 1 [default = MAX];
inline bool PoolingParameter::has_pool() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void PoolingParameter::set_has_pool() {
  _has_bits_[0] |= 0x00000001u;
}
inline void PoolingParameter::clear_has_pool() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void PoolingParameter::clear_pool() {
  pool_ = 0;
  clear_has_pool();
}
inline ::caffe::PoolingParameter_PoolMethod PoolingParameter::pool() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.pool)
  return static_cast< ::caffe::PoolingParameter_PoolMethod >(pool_);
}
inline void PoolingParameter::set_pool(::caffe::PoolingParameter_PoolMethod value) {
  assert(::caffe::PoolingParameter_PoolMethod_IsValid(value));
  set_has_pool();
  pool_ = value;
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.pool)
}

// optional uint32 pad = 4 [default = 0];
inline bool PoolingParameter::has_pad() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void PoolingParameter::set_has_pad() {
  _has_bits_[0] |= 0x00000002u;
}
inline void PoolingParameter::clear_has_pad() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void PoolingParameter::clear_pad() {
  pad_ = 0u;
  clear_has_pad();
}
inline ::google::protobuf::uint32 PoolingParameter::pad() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.pad)
  return pad_;
}
inline void PoolingParameter::set_pad(::google::protobuf::uint32 value) {
  set_has_pad();
  pad_ = value;
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.pad)
}

// optional uint32 pad_h = 9 [default = 0];
inline bool PoolingParameter::has_pad_h() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void PoolingParameter::set_has_pad_h() {
  _has_bits_[0] |= 0x00000004u;
}
inline void PoolingParameter::clear_has_pad_h() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void PoolingParameter::clear_pad_h() {
  pad_h_ = 0u;
  clear_has_pad_h();
}
inline ::google::protobuf::uint32 PoolingParameter::pad_h() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.pad_h)
  return pad_h_;
}
inline void PoolingParameter::set_pad_h(::google::protobuf::uint32 value) {
  set_has_pad_h();
  pad_h_ = value;
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.pad_h)
}

// optional uint32 pad_w = 10 [default = 0];
inline bool PoolingParameter::has_pad_w() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void PoolingParameter::set_has_pad_w() {
  _has_bits_[0] |= 0x00000008u;
}
inline void PoolingParameter::clear_has_pad_w() {
  _has_bits_[0] &= ~0x00000008u;
}
inline void PoolingParameter::clear_pad_w() {
  pad_w_ = 0u;
  clear_has_pad_w();
}
inline ::google::protobuf::uint32 PoolingParameter::pad_w() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.pad_w)
  return pad_w_;
}
inline void PoolingParameter::set_pad_w(::google::protobuf::uint32 value) {
  set_has_pad_w();
  pad_w_ = value;
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.pad_w)
}

// optional uint32 kernel_size = 2;
inline bool PoolingParameter::has_kernel_size() const {
  return (_has_bits_[0] & 0x00000010u) != 0;
}
inline void PoolingParameter::set_has_kernel_size() {
  _has_bits_[0] |= 0x00000010u;
}
inline void PoolingParameter::clear_has_kernel_size() {
  _has_bits_[0] &= ~0x00000010u;
}
inline void PoolingParameter::clear_kernel_size() {
  kernel_size_ = 0u;
  clear_has_kernel_size();
}
inline ::google::protobuf::uint32 PoolingParameter::kernel_size() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.kernel_size)
  return kernel_size_;
}
inline void PoolingParameter::set_kernel_size(::google::protobuf::uint32 value) {
  set_has_kernel_size();
  kernel_size_ = value;
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.kernel_size)
}

// optional uint32 kernel_h = 5;
inline bool PoolingParameter::has_kernel_h() const {
  return (_has_bits_[0] & 0x00000020u) != 0;
}
inline void PoolingParameter::set_has_kernel_h() {
  _has_bits_[0] |= 0x00000020u;
}
inline void PoolingParameter::clear_has_kernel_h() {
  _has_bits_[0] &= ~0x00000020u;
}
inline void PoolingParameter::clear_kernel_h() {
  kernel_h_ = 0u;
  clear_has_kernel_h();
}
inline ::google::protobuf::uint32 PoolingParameter::kernel_h() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.kernel_h)
  return kernel_h_;
}
inline void PoolingParameter::set_kernel_h(::google::protobuf::uint32 value) {
  set_has_kernel_h();
  kernel_h_ = value;
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.kernel_h)
}

// optional uint32 kernel_w = 6;
inline bool PoolingParameter::has_kernel_w() const {
  return (_has_bits_[0] & 0x00000040u) != 0;
}
inline void PoolingParameter::set_has_kernel_w() {
  _has_bits_[0] |= 0x00000040u;
}
inline void PoolingParameter::clear_has_kernel_w() {
  _has_bits_[0] &= ~0x00000040u;
}
inline void PoolingParameter::clear_kernel_w() {
  kernel_w_ = 0u;
  clear_has_kernel_w();
}
inline ::google::protobuf::uint32 PoolingParameter::kernel_w() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.kernel_w)
  return kernel_w_;
}
inline void PoolingParameter::set_kernel_w(::google::protobuf::uint32 value) {
  set_has_kernel_w();
  kernel_w_ = value;
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.kernel_w)
}

// optional uint32 stride = 3 [default = 1];
inline bool PoolingParameter::has_stride() const {
  return (_has_bits_[0] & 0x00000080u) != 0;
}
inline void PoolingParameter::set_has_stride() {
  _has_bits_[0] |= 0x00000080u;
}
inline void PoolingParameter::clear_has_stride() {
  _has_bits_[0] &= ~0x00000080u;
}
inline void PoolingParameter::clear_stride() {
  stride_ = 1u;
  clear_has_stride();
}
inline ::google::protobuf::uint32 PoolingParameter::stride() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.stride)
  return stride_;
}
inline void PoolingParameter::set_stride(::google::protobuf::uint32 value) {
  set_has_stride();
  stride_ = value;
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.stride)
}

// optional uint32 stride_h = 7;
inline bool PoolingParameter::has_stride_h() const {
  return (_has_bits_[0] & 0x00000100u) != 0;
}
inline void PoolingParameter::set_has_stride_h() {
  _has_bits_[0] |= 0x00000100u;
}
inline void PoolingParameter::clear_has_stride_h() {
  _has_bits_[0] &= ~0x00000100u;
}
inline void PoolingParameter::clear_stride_h() {
  stride_h_ = 0u;
  clear_has_stride_h();
}
inline ::google::protobuf::uint32 PoolingParameter::stride_h() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.stride_h)
  return stride_h_;
}
inline void PoolingParameter::set_stride_h(::google::protobuf::uint32 value) {
  set_has_stride_h();
  stride_h_ = value;
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.stride_h)
}

// optional uint32 stride_w = 8;
inline bool PoolingParameter::has_stride_w() const {
  return (_has_bits_[0] & 0x00000200u) != 0;
}
inline void PoolingParameter::set_has_stride_w() {
  _has_bits_[0] |= 0x00000200u;
}
inline void PoolingParameter::clear_has_stride_w() {
  _has_bits_[0] &= ~0x00000200u;
}
inline void PoolingParameter::clear_stride_w() {
  stride_w_ = 0u;
  clear_has_stride_w();
}
inline ::google::protobuf::uint32 PoolingParameter::stride_w() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.stride_w)
  return stride_w_;
}
inline void PoolingParameter::set_stride_w(::google::protobuf::uint32 value) {
  set_has_stride_w();
  stride_w_ = value;
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.stride_w)
}

// optional .caffe.PoolingParameter.Engine engine = 11 [default = DEFAULT];
inline bool PoolingParameter::has_engine() const {
  return (_has_bits_[0] & 0x00000400u) != 0;
}
inline void PoolingParameter::set_has_engine() {
  _has_bits_[0] |= 0x00000400u;
}
inline void PoolingParameter::clear_has_engine() {
  _has_bits_[0] &= ~0x00000400u;
}
inline void PoolingParameter::clear_engine() {
  engine_ = 0;
  clear_has_engine();
}
inline ::caffe::PoolingParameter_Engine PoolingParameter::engine() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.engine)
  return static_cast< ::caffe::PoolingParameter_Engine >(engine_);
}
inline void PoolingParameter::set_engine(::caffe::PoolingParameter_Engine value) {
  assert(::caffe::PoolingParameter_Engine_IsValid(value));
  set_has_engine();
  engine_ = value;
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.engine)
}

// optional bool global_pooling = 12 [default = false];
inline bool PoolingParameter::has_global_pooling() const {
  return (_has_bits_[0] & 0x00000800u) != 0;
}
inline void PoolingParameter::set_has_global_pooling() {
  _has_bits_[0] |= 0x00000800u;
}
inline void PoolingParameter::clear_has_global_pooling() {
  _has_bits_[0] &= ~0x00000800u;
}
inline void PoolingParameter::clear_global_pooling() {
  global_pooling_ = false;
  clear_has_global_pooling();
}
inline bool PoolingParameter::global_pooling() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.global_pooling)
  return global_pooling_;
}
inline void PoolingParameter::set_global_pooling(bool value) {
  set_has_global_pooling();
  global_pooling_ = value;
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.global_pooling)
}

inline const PoolingParameter* PoolingParameter::internal_default_instance() {
  return &PoolingParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// PowerParameter

// optional float power = 1 [default = 1];
inline bool PowerParameter::has_power() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void PowerParameter::set_has_power() {
  _has_bits_[0] |= 0x00000001u;
}
inline void PowerParameter::clear_has_power() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void PowerParameter::clear_power() {
  power_ = 1;
  clear_has_power();
}
inline float PowerParameter::power() const {
  // @@protoc_insertion_point(field_get:caffe.PowerParameter.power)
  return power_;
}
inline void PowerParameter::set_power(float value) {
  set_has_power();
  power_ = value;
  // @@protoc_insertion_point(field_set:caffe.PowerParameter.power)
}

// optional float scale = 2 [default = 1];
inline bool PowerParameter::has_scale() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void PowerParameter::set_has_scale() {
  _has_bits_[0] |= 0x00000002u;
}
inline void PowerParameter::clear_has_scale() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void PowerParameter::clear_scale() {
  scale_ = 1;
  clear_has_scale();
}
inline float PowerParameter::scale() const {
  // @@protoc_insertion_point(field_get:caffe.PowerParameter.scale)
  return scale_;
}
inline void PowerParameter::set_scale(float value) {
  set_has_scale();
  scale_ = value;
  // @@protoc_insertion_point(field_set:caffe.PowerParameter.scale)
}

// optional float shift = 3 [default = 0];
inline bool PowerParameter::has_shift() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void PowerParameter::set_has_shift() {
  _has_bits_[0] |= 0x00000004u;
}
inline void PowerParameter::clear_has_shift() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void PowerParameter::clear_shift() {
  shift_ = 0;
  clear_has_shift();
}
inline float PowerParameter::shift() const {
  // @@protoc_insertion_point(field_get:caffe.PowerParameter.shift)
  return shift_;
}
inline void PowerParameter::set_shift(float value) {
  set_has_shift();
  shift_ = value;
  // @@protoc_insertion_point(field_set:caffe.PowerParameter.shift)
}

inline const PowerParameter* PowerParameter::internal_default_instance() {
  return &PowerParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// PythonParameter

// optional string module = 1;
inline bool PythonParameter::has_module() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void PythonParameter::set_has_module() {
  _has_bits_[0] |= 0x00000001u;
}
inline void PythonParameter::clear_has_module() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void PythonParameter::clear_module() {
  module_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_module();
}
inline const ::std::string& PythonParameter::module() const {
  // @@protoc_insertion_point(field_get:caffe.PythonParameter.module)
  return module_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void PythonParameter::set_module(const ::std::string& value) {
  set_has_module();
  module_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.PythonParameter.module)
}
inline void PythonParameter::set_module(const char* value) {
  set_has_module();
  module_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.PythonParameter.module)
}
inline void PythonParameter::set_module(const char* value, size_t size) {
  set_has_module();
  module_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.PythonParameter.module)
}
inline ::std::string* PythonParameter::mutable_module() {
  set_has_module();
  // @@protoc_insertion_point(field_mutable:caffe.PythonParameter.module)
  return module_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* PythonParameter::release_module() {
  // @@protoc_insertion_point(field_release:caffe.PythonParameter.module)
  clear_has_module();
  return module_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void PythonParameter::set_allocated_module(::std::string* module) {
  if (module != NULL) {
    set_has_module();
  } else {
    clear_has_module();
  }
  module_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), module);
  // @@protoc_insertion_point(field_set_allocated:caffe.PythonParameter.module)
}

// optional string layer = 2;
inline bool PythonParameter::has_layer() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void PythonParameter::set_has_layer() {
  _has_bits_[0] |= 0x00000002u;
}
inline void PythonParameter::clear_has_layer() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void PythonParameter::clear_layer() {
  layer_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_layer();
}
inline const ::std::string& PythonParameter::layer() const {
  // @@protoc_insertion_point(field_get:caffe.PythonParameter.layer)
  return layer_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void PythonParameter::set_layer(const ::std::string& value) {
  set_has_layer();
  layer_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.PythonParameter.layer)
}
inline void PythonParameter::set_layer(const char* value) {
  set_has_layer();
  layer_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.PythonParameter.layer)
}
inline void PythonParameter::set_layer(const char* value, size_t size) {
  set_has_layer();
  layer_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.PythonParameter.layer)
}
inline ::std::string* PythonParameter::mutable_layer() {
  set_has_layer();
  // @@protoc_insertion_point(field_mutable:caffe.PythonParameter.layer)
  return layer_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* PythonParameter::release_layer() {
  // @@protoc_insertion_point(field_release:caffe.PythonParameter.layer)
  clear_has_layer();
  return layer_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void PythonParameter::set_allocated_layer(::std::string* layer) {
  if (layer != NULL) {
    set_has_layer();
  } else {
    clear_has_layer();
  }
  layer_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), layer);
  // @@protoc_insertion_point(field_set_allocated:caffe.PythonParameter.layer)
}

inline const PythonParameter* PythonParameter::internal_default_instance() {
  return &PythonParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// ReductionParameter

// optional .caffe.ReductionParameter.ReductionOp operation = 1 [default = SUM];
inline bool ReductionParameter::has_operation() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void ReductionParameter::set_has_operation() {
  _has_bits_[0] |= 0x00000001u;
}
inline void ReductionParameter::clear_has_operation() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void ReductionParameter::clear_operation() {
  operation_ = 1;
  clear_has_operation();
}
inline ::caffe::ReductionParameter_ReductionOp ReductionParameter::operation() const {
  // @@protoc_insertion_point(field_get:caffe.ReductionParameter.operation)
  return static_cast< ::caffe::ReductionParameter_ReductionOp >(operation_);
}
inline void ReductionParameter::set_operation(::caffe::ReductionParameter_ReductionOp value) {
  assert(::caffe::ReductionParameter_ReductionOp_IsValid(value));
  set_has_operation();
  operation_ = value;
  // @@protoc_insertion_point(field_set:caffe.ReductionParameter.operation)
}

// optional int32 axis = 2 [default = 0];
inline bool ReductionParameter::has_axis() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void ReductionParameter::set_has_axis() {
  _has_bits_[0] |= 0x00000002u;
}
inline void ReductionParameter::clear_has_axis() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void ReductionParameter::clear_axis() {
  axis_ = 0;
  clear_has_axis();
}
inline ::google::protobuf::int32 ReductionParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.ReductionParameter.axis)
  return axis_;
}
inline void ReductionParameter::set_axis(::google::protobuf::int32 value) {
  set_has_axis();
  axis_ = value;
  // @@protoc_insertion_point(field_set:caffe.ReductionParameter.axis)
}

// optional float coeff = 3 [default = 1];
inline bool ReductionParameter::has_coeff() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void ReductionParameter::set_has_coeff() {
  _has_bits_[0] |= 0x00000004u;
}
inline void ReductionParameter::clear_has_coeff() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void ReductionParameter::clear_coeff() {
  coeff_ = 1;
  clear_has_coeff();
}
inline float ReductionParameter::coeff() const {
  // @@protoc_insertion_point(field_get:caffe.ReductionParameter.coeff)
  return coeff_;
}
inline void ReductionParameter::set_coeff(float value) {
  set_has_coeff();
  coeff_ = value;
  // @@protoc_insertion_point(field_set:caffe.ReductionParameter.coeff)
}

inline const ReductionParameter* ReductionParameter::internal_default_instance() {
  return &ReductionParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// ReLUParameter

// optional float negative_slope = 1 [default = 0];
inline bool ReLUParameter::has_negative_slope() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void ReLUParameter::set_has_negative_slope() {
  _has_bits_[0] |= 0x00000001u;
}
inline void ReLUParameter::clear_has_negative_slope() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void ReLUParameter::clear_negative_slope() {
  negative_slope_ = 0;
  clear_has_negative_slope();
}
inline float ReLUParameter::negative_slope() const {
  // @@protoc_insertion_point(field_get:caffe.ReLUParameter.negative_slope)
  return negative_slope_;
}
inline void ReLUParameter::set_negative_slope(float value) {
  set_has_negative_slope();
  negative_slope_ = value;
  // @@protoc_insertion_point(field_set:caffe.ReLUParameter.negative_slope)
}

// optional .caffe.ReLUParameter.Engine engine = 2 [default = DEFAULT];
inline bool ReLUParameter::has_engine() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void ReLUParameter::set_has_engine() {
  _has_bits_[0] |= 0x00000002u;
}
inline void ReLUParameter::clear_has_engine() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void ReLUParameter::clear_engine() {
  engine_ = 0;
  clear_has_engine();
}
inline ::caffe::ReLUParameter_Engine ReLUParameter::engine() const {
  // @@protoc_insertion_point(field_get:caffe.ReLUParameter.engine)
  return static_cast< ::caffe::ReLUParameter_Engine >(engine_);
}
inline void ReLUParameter::set_engine(::caffe::ReLUParameter_Engine value) {
  assert(::caffe::ReLUParameter_Engine_IsValid(value));
  set_has_engine();
  engine_ = value;
  // @@protoc_insertion_point(field_set:caffe.ReLUParameter.engine)
}

inline const ReLUParameter* ReLUParameter::internal_default_instance() {
  return &ReLUParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// ReshapeParameter

// optional .caffe.BlobShape shape = 1;
inline bool ReshapeParameter::has_shape() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void ReshapeParameter::set_has_shape() {
  _has_bits_[0] |= 0x00000001u;
}
inline void ReshapeParameter::clear_has_shape() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void ReshapeParameter::clear_shape() {
  if (shape_ != NULL) shape_->::caffe::BlobShape::Clear();
  clear_has_shape();
}
inline const ::caffe::BlobShape& ReshapeParameter::shape() const {
  // @@protoc_insertion_point(field_get:caffe.ReshapeParameter.shape)
  return shape_ != NULL ? *shape_
                         : *::caffe::BlobShape::internal_default_instance();
}
inline ::caffe::BlobShape* ReshapeParameter::mutable_shape() {
  set_has_shape();
  if (shape_ == NULL) {
    shape_ = new ::caffe::BlobShape;
  }
  // @@protoc_insertion_point(field_mutable:caffe.ReshapeParameter.shape)
  return shape_;
}
inline ::caffe::BlobShape* ReshapeParameter::release_shape() {
  // @@protoc_insertion_point(field_release:caffe.ReshapeParameter.shape)
  clear_has_shape();
  ::caffe::BlobShape* temp = shape_;
  shape_ = NULL;
  return temp;
}
inline void ReshapeParameter::set_allocated_shape(::caffe::BlobShape* shape) {
  delete shape_;
  shape_ = shape;
  if (shape) {
    set_has_shape();
  } else {
    clear_has_shape();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.ReshapeParameter.shape)
}

// optional int32 axis = 2 [default = 0];
inline bool ReshapeParameter::has_axis() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void ReshapeParameter::set_has_axis() {
  _has_bits_[0] |= 0x00000002u;
}
inline void ReshapeParameter::clear_has_axis() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void ReshapeParameter::clear_axis() {
  axis_ = 0;
  clear_has_axis();
}
inline ::google::protobuf::int32 ReshapeParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.ReshapeParameter.axis)
  return axis_;
}
inline void ReshapeParameter::set_axis(::google::protobuf::int32 value) {
  set_has_axis();
  axis_ = value;
  // @@protoc_insertion_point(field_set:caffe.ReshapeParameter.axis)
}

// optional int32 num_axes = 3 [default = -1];
inline bool ReshapeParameter::has_num_axes() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void ReshapeParameter::set_has_num_axes() {
  _has_bits_[0] |= 0x00000004u;
}
inline void ReshapeParameter::clear_has_num_axes() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void ReshapeParameter::clear_num_axes() {
  num_axes_ = -1;
  clear_has_num_axes();
}
inline ::google::protobuf::int32 ReshapeParameter::num_axes() const {
  // @@protoc_insertion_point(field_get:caffe.ReshapeParameter.num_axes)
  return num_axes_;
}
inline void ReshapeParameter::set_num_axes(::google::protobuf::int32 value) {
  set_has_num_axes();
  num_axes_ = value;
  // @@protoc_insertion_point(field_set:caffe.ReshapeParameter.num_axes)
}

inline const ReshapeParameter* ReshapeParameter::internal_default_instance() {
  return &ReshapeParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// SigmoidParameter

// optional .caffe.SigmoidParameter.Engine engine = 1 [default = DEFAULT];
inline bool SigmoidParameter::has_engine() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void SigmoidParameter::set_has_engine() {
  _has_bits_[0] |= 0x00000001u;
}
inline void SigmoidParameter::clear_has_engine() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void SigmoidParameter::clear_engine() {
  engine_ = 0;
  clear_has_engine();
}
inline ::caffe::SigmoidParameter_Engine SigmoidParameter::engine() const {
  // @@protoc_insertion_point(field_get:caffe.SigmoidParameter.engine)
  return static_cast< ::caffe::SigmoidParameter_Engine >(engine_);
}
inline void SigmoidParameter::set_engine(::caffe::SigmoidParameter_Engine value) {
  assert(::caffe::SigmoidParameter_Engine_IsValid(value));
  set_has_engine();
  engine_ = value;
  // @@protoc_insertion_point(field_set:caffe.SigmoidParameter.engine)
}

inline const SigmoidParameter* SigmoidParameter::internal_default_instance() {
  return &SigmoidParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// SliceParameter

// optional int32 axis = 3 [default = 1];
inline bool SliceParameter::has_axis() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void SliceParameter::set_has_axis() {
  _has_bits_[0] |= 0x00000001u;
}
inline void SliceParameter::clear_has_axis() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void SliceParameter::clear_axis() {
  axis_ = 1;
  clear_has_axis();
}
inline ::google::protobuf::int32 SliceParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.SliceParameter.axis)
  return axis_;
}
inline void SliceParameter::set_axis(::google::protobuf::int32 value) {
  set_has_axis();
  axis_ = value;
  // @@protoc_insertion_point(field_set:caffe.SliceParameter.axis)
}

// repeated uint32 slice_point = 2;
inline int SliceParameter::slice_point_size() const {
  return slice_point_.size();
}
inline void SliceParameter::clear_slice_point() {
  slice_point_.Clear();
}
inline ::google::protobuf::uint32 SliceParameter::slice_point(int index) const {
  // @@protoc_insertion_point(field_get:caffe.SliceParameter.slice_point)
  return slice_point_.Get(index);
}
inline void SliceParameter::set_slice_point(int index, ::google::protobuf::uint32 value) {
  slice_point_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.SliceParameter.slice_point)
}
inline void SliceParameter::add_slice_point(::google::protobuf::uint32 value) {
  slice_point_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.SliceParameter.slice_point)
}
inline const ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >&
SliceParameter::slice_point() const {
  // @@protoc_insertion_point(field_list:caffe.SliceParameter.slice_point)
  return slice_point_;
}
inline ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >*
SliceParameter::mutable_slice_point() {
  // @@protoc_insertion_point(field_mutable_list:caffe.SliceParameter.slice_point)
  return &slice_point_;
}

// optional uint32 slice_dim = 1 [default = 1];
inline bool SliceParameter::has_slice_dim() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void SliceParameter::set_has_slice_dim() {
  _has_bits_[0] |= 0x00000004u;
}
inline void SliceParameter::clear_has_slice_dim() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void SliceParameter::clear_slice_dim() {
  slice_dim_ = 1u;
  clear_has_slice_dim();
}
inline ::google::protobuf::uint32 SliceParameter::slice_dim() const {
  // @@protoc_insertion_point(field_get:caffe.SliceParameter.slice_dim)
  return slice_dim_;
}
inline void SliceParameter::set_slice_dim(::google::protobuf::uint32 value) {
  set_has_slice_dim();
  slice_dim_ = value;
  // @@protoc_insertion_point(field_set:caffe.SliceParameter.slice_dim)
}

inline const SliceParameter* SliceParameter::internal_default_instance() {
  return &SliceParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// SoftmaxParameter

// optional .caffe.SoftmaxParameter.Engine engine = 1 [default = DEFAULT];
inline bool SoftmaxParameter::has_engine() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void SoftmaxParameter::set_has_engine() {
  _has_bits_[0] |= 0x00000001u;
}
inline void SoftmaxParameter::clear_has_engine() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void SoftmaxParameter::clear_engine() {
  engine_ = 0;
  clear_has_engine();
}
inline ::caffe::SoftmaxParameter_Engine SoftmaxParameter::engine() const {
  // @@protoc_insertion_point(field_get:caffe.SoftmaxParameter.engine)
  return static_cast< ::caffe::SoftmaxParameter_Engine >(engine_);
}
inline void SoftmaxParameter::set_engine(::caffe::SoftmaxParameter_Engine value) {
  assert(::caffe::SoftmaxParameter_Engine_IsValid(value));
  set_has_engine();
  engine_ = value;
  // @@protoc_insertion_point(field_set:caffe.SoftmaxParameter.engine)
}

// optional int32 axis = 2 [default = 1];
inline bool SoftmaxParameter::has_axis() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void SoftmaxParameter::set_has_axis() {
  _has_bits_[0] |= 0x00000002u;
}
inline void SoftmaxParameter::clear_has_axis() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void SoftmaxParameter::clear_axis() {
  axis_ = 1;
  clear_has_axis();
}
inline ::google::protobuf::int32 SoftmaxParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.SoftmaxParameter.axis)
  return axis_;
}
inline void SoftmaxParameter::set_axis(::google::protobuf::int32 value) {
  set_has_axis();
  axis_ = value;
  // @@protoc_insertion_point(field_set:caffe.SoftmaxParameter.axis)
}

inline const SoftmaxParameter* SoftmaxParameter::internal_default_instance() {
  return &SoftmaxParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// TanHParameter

// optional .caffe.TanHParameter.Engine engine = 1 [default = DEFAULT];
inline bool TanHParameter::has_engine() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void TanHParameter::set_has_engine() {
  _has_bits_[0] |= 0x00000001u;
}
inline void TanHParameter::clear_has_engine() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void TanHParameter::clear_engine() {
  engine_ = 0;
  clear_has_engine();
}
inline ::caffe::TanHParameter_Engine TanHParameter::engine() const {
  // @@protoc_insertion_point(field_get:caffe.TanHParameter.engine)
  return static_cast< ::caffe::TanHParameter_Engine >(engine_);
}
inline void TanHParameter::set_engine(::caffe::TanHParameter_Engine value) {
  assert(::caffe::TanHParameter_Engine_IsValid(value));
  set_has_engine();
  engine_ = value;
  // @@protoc_insertion_point(field_set:caffe.TanHParameter.engine)
}

inline const TanHParameter* TanHParameter::internal_default_instance() {
  return &TanHParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// ThresholdParameter

// optional float threshold = 1 [default = 0];
inline bool ThresholdParameter::has_threshold() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void ThresholdParameter::set_has_threshold() {
  _has_bits_[0] |= 0x00000001u;
}
inline void ThresholdParameter::clear_has_threshold() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void ThresholdParameter::clear_threshold() {
  threshold_ = 0;
  clear_has_threshold();
}
inline float ThresholdParameter::threshold() const {
  // @@protoc_insertion_point(field_get:caffe.ThresholdParameter.threshold)
  return threshold_;
}
inline void ThresholdParameter::set_threshold(float value) {
  set_has_threshold();
  threshold_ = value;
  // @@protoc_insertion_point(field_set:caffe.ThresholdParameter.threshold)
}

inline const ThresholdParameter* ThresholdParameter::internal_default_instance() {
  return &ThresholdParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// WindowDataParameter

// optional string source = 1;
inline bool WindowDataParameter::has_source() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void WindowDataParameter::set_has_source() {
  _has_bits_[0] |= 0x00000001u;
}
inline void WindowDataParameter::clear_has_source() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void WindowDataParameter::clear_source() {
  source_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_source();
}
inline const ::std::string& WindowDataParameter::source() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.source)
  return source_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void WindowDataParameter::set_source(const ::std::string& value) {
  set_has_source();
  source_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.source)
}
inline void WindowDataParameter::set_source(const char* value) {
  set_has_source();
  source_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.WindowDataParameter.source)
}
inline void WindowDataParameter::set_source(const char* value, size_t size) {
  set_has_source();
  source_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.WindowDataParameter.source)
}
inline ::std::string* WindowDataParameter::mutable_source() {
  set_has_source();
  // @@protoc_insertion_point(field_mutable:caffe.WindowDataParameter.source)
  return source_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* WindowDataParameter::release_source() {
  // @@protoc_insertion_point(field_release:caffe.WindowDataParameter.source)
  clear_has_source();
  return source_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void WindowDataParameter::set_allocated_source(::std::string* source) {
  if (source != NULL) {
    set_has_source();
  } else {
    clear_has_source();
  }
  source_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), source);
  // @@protoc_insertion_point(field_set_allocated:caffe.WindowDataParameter.source)
}

// optional float scale = 2 [default = 1];
inline bool WindowDataParameter::has_scale() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void WindowDataParameter::set_has_scale() {
  _has_bits_[0] |= 0x00000002u;
}
inline void WindowDataParameter::clear_has_scale() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void WindowDataParameter::clear_scale() {
  scale_ = 1;
  clear_has_scale();
}
inline float WindowDataParameter::scale() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.scale)
  return scale_;
}
inline void WindowDataParameter::set_scale(float value) {
  set_has_scale();
  scale_ = value;
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.scale)
}

// optional string mean_file = 3;
inline bool WindowDataParameter::has_mean_file() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void WindowDataParameter::set_has_mean_file() {
  _has_bits_[0] |= 0x00000004u;
}
inline void WindowDataParameter::clear_has_mean_file() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void WindowDataParameter::clear_mean_file() {
  mean_file_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_mean_file();
}
inline const ::std::string& WindowDataParameter::mean_file() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.mean_file)
  return mean_file_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void WindowDataParameter::set_mean_file(const ::std::string& value) {
  set_has_mean_file();
  mean_file_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.mean_file)
}
inline void WindowDataParameter::set_mean_file(const char* value) {
  set_has_mean_file();
  mean_file_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.WindowDataParameter.mean_file)
}
inline void WindowDataParameter::set_mean_file(const char* value, size_t size) {
  set_has_mean_file();
  mean_file_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.WindowDataParameter.mean_file)
}
inline ::std::string* WindowDataParameter::mutable_mean_file() {
  set_has_mean_file();
  // @@protoc_insertion_point(field_mutable:caffe.WindowDataParameter.mean_file)
  return mean_file_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* WindowDataParameter::release_mean_file() {
  // @@protoc_insertion_point(field_release:caffe.WindowDataParameter.mean_file)
  clear_has_mean_file();
  return mean_file_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void WindowDataParameter::set_allocated_mean_file(::std::string* mean_file) {
  if (mean_file != NULL) {
    set_has_mean_file();
  } else {
    clear_has_mean_file();
  }
  mean_file_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), mean_file);
  // @@protoc_insertion_point(field_set_allocated:caffe.WindowDataParameter.mean_file)
}

// optional uint32 batch_size = 4;
inline bool WindowDataParameter::has_batch_size() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void WindowDataParameter::set_has_batch_size() {
  _has_bits_[0] |= 0x00000008u;
}
inline void WindowDataParameter::clear_has_batch_size() {
  _has_bits_[0] &= ~0x00000008u;
}
inline void WindowDataParameter::clear_batch_size() {
  batch_size_ = 0u;
  clear_has_batch_size();
}
inline ::google::protobuf::uint32 WindowDataParameter::batch_size() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.batch_size)
  return batch_size_;
}
inline void WindowDataParameter::set_batch_size(::google::protobuf::uint32 value) {
  set_has_batch_size();
  batch_size_ = value;
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.batch_size)
}

// optional uint32 crop_size = 5 [default = 0];
inline bool WindowDataParameter::has_crop_size() const {
  return (_has_bits_[0] & 0x00000010u) != 0;
}
inline void WindowDataParameter::set_has_crop_size() {
  _has_bits_[0] |= 0x00000010u;
}
inline void WindowDataParameter::clear_has_crop_size() {
  _has_bits_[0] &= ~0x00000010u;
}
inline void WindowDataParameter::clear_crop_size() {
  crop_size_ = 0u;
  clear_has_crop_size();
}
inline ::google::protobuf::uint32 WindowDataParameter::crop_size() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.crop_size)
  return crop_size_;
}
inline void WindowDataParameter::set_crop_size(::google::protobuf::uint32 value) {
  set_has_crop_size();
  crop_size_ = value;
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.crop_size)
}

// optional bool mirror = 6 [default = false];
inline bool WindowDataParameter::has_mirror() const {
  return (_has_bits_[0] & 0x00000020u) != 0;
}
inline void WindowDataParameter::set_has_mirror() {
  _has_bits_[0] |= 0x00000020u;
}
inline void WindowDataParameter::clear_has_mirror() {
  _has_bits_[0] &= ~0x00000020u;
}
inline void WindowDataParameter::clear_mirror() {
  mirror_ = false;
  clear_has_mirror();
}
inline bool WindowDataParameter::mirror() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.mirror)
  return mirror_;
}
inline void WindowDataParameter::set_mirror(bool value) {
  set_has_mirror();
  mirror_ = value;
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.mirror)
}

// optional float fg_threshold = 7 [default = 0.5];
inline bool WindowDataParameter::has_fg_threshold() const {
  return (_has_bits_[0] & 0x00000040u) != 0;
}
inline void WindowDataParameter::set_has_fg_threshold() {
  _has_bits_[0] |= 0x00000040u;
}
inline void WindowDataParameter::clear_has_fg_threshold() {
  _has_bits_[0] &= ~0x00000040u;
}
inline void WindowDataParameter::clear_fg_threshold() {
  fg_threshold_ = 0.5f;
  clear_has_fg_threshold();
}
inline float WindowDataParameter::fg_threshold() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.fg_threshold)
  return fg_threshold_;
}
inline void WindowDataParameter::set_fg_threshold(float value) {
  set_has_fg_threshold();
  fg_threshold_ = value;
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.fg_threshold)
}

// optional float bg_threshold = 8 [default = 0.5];
inline bool WindowDataParameter::has_bg_threshold() const {
  return (_has_bits_[0] & 0x00000080u) != 0;
}
inline void WindowDataParameter::set_has_bg_threshold() {
  _has_bits_[0] |= 0x00000080u;
}
inline void WindowDataParameter::clear_has_bg_threshold() {
  _has_bits_[0] &= ~0x00000080u;
}
inline void WindowDataParameter::clear_bg_threshold() {
  bg_threshold_ = 0.5f;
  clear_has_bg_threshold();
}
inline float WindowDataParameter::bg_threshold() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.bg_threshold)
  return bg_threshold_;
}
inline void WindowDataParameter::set_bg_threshold(float value) {
  set_has_bg_threshold();
  bg_threshold_ = value;
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.bg_threshold)
}

// optional float fg_fraction = 9 [default = 0.25];
inline bool WindowDataParameter::has_fg_fraction() const {
  return (_has_bits_[0] & 0x00000100u) != 0;
}
inline void WindowDataParameter::set_has_fg_fraction() {
  _has_bits_[0] |= 0x00000100u;
}
inline void WindowDataParameter::clear_has_fg_fraction() {
  _has_bits_[0] &= ~0x00000100u;
}
inline void WindowDataParameter::clear_fg_fraction() {
  fg_fraction_ = 0.25f;
  clear_has_fg_fraction();
}
inline float WindowDataParameter::fg_fraction() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.fg_fraction)
  return fg_fraction_;
}
inline void WindowDataParameter::set_fg_fraction(float value) {
  set_has_fg_fraction();
  fg_fraction_ = value;
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.fg_fraction)
}

// optional uint32 context_pad = 10 [default = 0];
inline bool WindowDataParameter::has_context_pad() const {
  return (_has_bits_[0] & 0x00000200u) != 0;
}
inline void WindowDataParameter::set_has_context_pad() {
  _has_bits_[0] |= 0x00000200u;
}
inline void WindowDataParameter::clear_has_context_pad() {
  _has_bits_[0] &= ~0x00000200u;
}
inline void WindowDataParameter::clear_context_pad() {
  context_pad_ = 0u;
  clear_has_context_pad();
}
inline ::google::protobuf::uint32 WindowDataParameter::context_pad() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.context_pad)
  return context_pad_;
}
inline void WindowDataParameter::set_context_pad(::google::protobuf::uint32 value) {
  set_has_context_pad();
  context_pad_ = value;
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.context_pad)
}

// optional string crop_mode = 11 [default = "warp"];
inline bool WindowDataParameter::has_crop_mode() const {
  return (_has_bits_[0] & 0x00000400u) != 0;
}
inline void WindowDataParameter::set_has_crop_mode() {
  _has_bits_[0] |= 0x00000400u;
}
inline void WindowDataParameter::clear_has_crop_mode() {
  _has_bits_[0] &= ~0x00000400u;
}
inline void WindowDataParameter::clear_crop_mode() {
  crop_mode_.ClearToDefaultNoArena(_default_crop_mode_);
  clear_has_crop_mode();
}
inline const ::std::string& WindowDataParameter::crop_mode() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.crop_mode)
  return crop_mode_.GetNoArena(_default_crop_mode_);
}
inline void WindowDataParameter::set_crop_mode(const ::std::string& value) {
  set_has_crop_mode();
  crop_mode_.SetNoArena(_default_crop_mode_, value);
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.crop_mode)
}
inline void WindowDataParameter::set_crop_mode(const char* value) {
  set_has_crop_mode();
  crop_mode_.SetNoArena(_default_crop_mode_, ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.WindowDataParameter.crop_mode)
}
inline void WindowDataParameter::set_crop_mode(const char* value, size_t size) {
  set_has_crop_mode();
  crop_mode_.SetNoArena(_default_crop_mode_,
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.WindowDataParameter.crop_mode)
}
inline ::std::string* WindowDataParameter::mutable_crop_mode() {
  set_has_crop_mode();
  // @@protoc_insertion_point(field_mutable:caffe.WindowDataParameter.crop_mode)
  return crop_mode_.MutableNoArena(_default_crop_mode_);
}
inline ::std::string* WindowDataParameter::release_crop_mode() {
  // @@protoc_insertion_point(field_release:caffe.WindowDataParameter.crop_mode)
  clear_has_crop_mode();
  return crop_mode_.ReleaseNoArena(_default_crop_mode_);
}
inline void WindowDataParameter::set_allocated_crop_mode(::std::string* crop_mode) {
  if (crop_mode != NULL) {
    set_has_crop_mode();
  } else {
    clear_has_crop_mode();
  }
  crop_mode_.SetAllocatedNoArena(_default_crop_mode_, crop_mode);
  // @@protoc_insertion_point(field_set_allocated:caffe.WindowDataParameter.crop_mode)
}

// optional bool cache_images = 12 [default = false];
inline bool WindowDataParameter::has_cache_images() const {
  return (_has_bits_[0] & 0x00000800u) != 0;
}
inline void WindowDataParameter::set_has_cache_images() {
  _has_bits_[0] |= 0x00000800u;
}
inline void WindowDataParameter::clear_has_cache_images() {
  _has_bits_[0] &= ~0x00000800u;
}
inline void WindowDataParameter::clear_cache_images() {
  cache_images_ = false;
  clear_has_cache_images();
}
inline bool WindowDataParameter::cache_images() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.cache_images)
  return cache_images_;
}
inline void WindowDataParameter::set_cache_images(bool value) {
  set_has_cache_images();
  cache_images_ = value;
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.cache_images)
}

// optional string root_folder = 13 [default = ""];
inline bool WindowDataParameter::has_root_folder() const {
  return (_has_bits_[0] & 0x00001000u) != 0;
}
inline void WindowDataParameter::set_has_root_folder() {
  _has_bits_[0] |= 0x00001000u;
}
inline void WindowDataParameter::clear_has_root_folder() {
  _has_bits_[0] &= ~0x00001000u;
}
inline void WindowDataParameter::clear_root_folder() {
  root_folder_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_root_folder();
}
inline const ::std::string& WindowDataParameter::root_folder() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.root_folder)
  return root_folder_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void WindowDataParameter::set_root_folder(const ::std::string& value) {
  set_has_root_folder();
  root_folder_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.root_folder)
}
inline void WindowDataParameter::set_root_folder(const char* value) {
  set_has_root_folder();
  root_folder_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.WindowDataParameter.root_folder)
}
inline void WindowDataParameter::set_root_folder(const char* value, size_t size) {
  set_has_root_folder();
  root_folder_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.WindowDataParameter.root_folder)
}
inline ::std::string* WindowDataParameter::mutable_root_folder() {
  set_has_root_folder();
  // @@protoc_insertion_point(field_mutable:caffe.WindowDataParameter.root_folder)
  return root_folder_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* WindowDataParameter::release_root_folder() {
  // @@protoc_insertion_point(field_release:caffe.WindowDataParameter.root_folder)
  clear_has_root_folder();
  return root_folder_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void WindowDataParameter::set_allocated_root_folder(::std::string* root_folder) {
  if (root_folder != NULL) {
    set_has_root_folder();
  } else {
    clear_has_root_folder();
  }
  root_folder_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), root_folder);
  // @@protoc_insertion_point(field_set_allocated:caffe.WindowDataParameter.root_folder)
}

inline const WindowDataParameter* WindowDataParameter::internal_default_instance() {
  return &WindowDataParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// SPPParameter

// optional uint32 pyramid_height = 1;
inline bool SPPParameter::has_pyramid_height() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void SPPParameter::set_has_pyramid_height() {
  _has_bits_[0] |= 0x00000001u;
}
inline void SPPParameter::clear_has_pyramid_height() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void SPPParameter::clear_pyramid_height() {
  pyramid_height_ = 0u;
  clear_has_pyramid_height();
}
inline ::google::protobuf::uint32 SPPParameter::pyramid_height() const {
  // @@protoc_insertion_point(field_get:caffe.SPPParameter.pyramid_height)
  return pyramid_height_;
}
inline void SPPParameter::set_pyramid_height(::google::protobuf::uint32 value) {
  set_has_pyramid_height();
  pyramid_height_ = value;
  // @@protoc_insertion_point(field_set:caffe.SPPParameter.pyramid_height)
}

// optional .caffe.SPPParameter.PoolMethod pool = 2 [default = MAX];
inline bool SPPParameter::has_pool() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void SPPParameter::set_has_pool() {
  _has_bits_[0] |= 0x00000002u;
}
inline void SPPParameter::clear_has_pool() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void SPPParameter::clear_pool() {
  pool_ = 0;
  clear_has_pool();
}
inline ::caffe::SPPParameter_PoolMethod SPPParameter::pool() const {
  // @@protoc_insertion_point(field_get:caffe.SPPParameter.pool)
  return static_cast< ::caffe::SPPParameter_PoolMethod >(pool_);
}
inline void SPPParameter::set_pool(::caffe::SPPParameter_PoolMethod value) {
  assert(::caffe::SPPParameter_PoolMethod_IsValid(value));
  set_has_pool();
  pool_ = value;
  // @@protoc_insertion_point(field_set:caffe.SPPParameter.pool)
}

// optional .caffe.SPPParameter.Engine engine = 6 [default = DEFAULT];
inline bool SPPParameter::has_engine() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void SPPParameter::set_has_engine() {
  _has_bits_[0] |= 0x00000004u;
}
inline void SPPParameter::clear_has_engine() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void SPPParameter::clear_engine() {
  engine_ = 0;
  clear_has_engine();
}
inline ::caffe::SPPParameter_Engine SPPParameter::engine() const {
  // @@protoc_insertion_point(field_get:caffe.SPPParameter.engine)
  return static_cast< ::caffe::SPPParameter_Engine >(engine_);
}
inline void SPPParameter::set_engine(::caffe::SPPParameter_Engine value) {
  assert(::caffe::SPPParameter_Engine_IsValid(value));
  set_has_engine();
  engine_ = value;
  // @@protoc_insertion_point(field_set:caffe.SPPParameter.engine)
}

inline const SPPParameter* SPPParameter::internal_default_instance() {
  return &SPPParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// V1LayerParameter

// repeated string bottom = 2;
inline int V1LayerParameter::bottom_size() const {
  return bottom_.size();
}
inline void V1LayerParameter::clear_bottom() {
  bottom_.Clear();
}
inline const ::std::string& V1LayerParameter::bottom(int index) const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.bottom)
  return bottom_.Get(index);
}
inline ::std::string* V1LayerParameter::mutable_bottom(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.bottom)
  return bottom_.Mutable(index);
}
inline void V1LayerParameter::set_bottom(int index, const ::std::string& value) {
  // @@protoc_insertion_point(field_set:caffe.V1LayerParameter.bottom)
  bottom_.Mutable(index)->assign(value);
}
inline void V1LayerParameter::set_bottom(int index, const char* value) {
  bottom_.Mutable(index)->assign(value);
  // @@protoc_insertion_point(field_set_char:caffe.V1LayerParameter.bottom)
}
inline void V1LayerParameter::set_bottom(int index, const char* value, size_t size) {
  bottom_.Mutable(index)->assign(
    reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_set_pointer:caffe.V1LayerParameter.bottom)
}
inline ::std::string* V1LayerParameter::add_bottom() {
  // @@protoc_insertion_point(field_add_mutable:caffe.V1LayerParameter.bottom)
  return bottom_.Add();
}
inline void V1LayerParameter::add_bottom(const ::std::string& value) {
  bottom_.Add()->assign(value);
  // @@protoc_insertion_point(field_add:caffe.V1LayerParameter.bottom)
}
inline void V1LayerParameter::add_bottom(const char* value) {
  bottom_.Add()->assign(value);
  // @@protoc_insertion_point(field_add_char:caffe.V1LayerParameter.bottom)
}
inline void V1LayerParameter::add_bottom(const char* value, size_t size) {
  bottom_.Add()->assign(reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_add_pointer:caffe.V1LayerParameter.bottom)
}
inline const ::google::protobuf::RepeatedPtrField< ::std::string>&
V1LayerParameter::bottom() const {
  // @@protoc_insertion_point(field_list:caffe.V1LayerParameter.bottom)
  return bottom_;
}
inline ::google::protobuf::RepeatedPtrField< ::std::string>*
V1LayerParameter::mutable_bottom() {
  // @@protoc_insertion_point(field_mutable_list:caffe.V1LayerParameter.bottom)
  return &bottom_;
}

// repeated string top = 3;
inline int V1LayerParameter::top_size() const {
  return top_.size();
}
inline void V1LayerParameter::clear_top() {
  top_.Clear();
}
inline const ::std::string& V1LayerParameter::top(int index) const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.top)
  return top_.Get(index);
}
inline ::std::string* V1LayerParameter::mutable_top(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.top)
  return top_.Mutable(index);
}
inline void V1LayerParameter::set_top(int index, const ::std::string& value) {
  // @@protoc_insertion_point(field_set:caffe.V1LayerParameter.top)
  top_.Mutable(index)->assign(value);
}
inline void V1LayerParameter::set_top(int index, const char* value) {
  top_.Mutable(index)->assign(value);
  // @@protoc_insertion_point(field_set_char:caffe.V1LayerParameter.top)
}
inline void V1LayerParameter::set_top(int index, const char* value, size_t size) {
  top_.Mutable(index)->assign(
    reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_set_pointer:caffe.V1LayerParameter.top)
}
inline ::std::string* V1LayerParameter::add_top() {
  // @@protoc_insertion_point(field_add_mutable:caffe.V1LayerParameter.top)
  return top_.Add();
}
inline void V1LayerParameter::add_top(const ::std::string& value) {
  top_.Add()->assign(value);
  // @@protoc_insertion_point(field_add:caffe.V1LayerParameter.top)
}
inline void V1LayerParameter::add_top(const char* value) {
  top_.Add()->assign(value);
  // @@protoc_insertion_point(field_add_char:caffe.V1LayerParameter.top)
}
inline void V1LayerParameter::add_top(const char* value, size_t size) {
  top_.Add()->assign(reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_add_pointer:caffe.V1LayerParameter.top)
}
inline const ::google::protobuf::RepeatedPtrField< ::std::string>&
V1LayerParameter::top() const {
  // @@protoc_insertion_point(field_list:caffe.V1LayerParameter.top)
  return top_;
}
inline ::google::protobuf::RepeatedPtrField< ::std::string>*
V1LayerParameter::mutable_top() {
  // @@protoc_insertion_point(field_mutable_list:caffe.V1LayerParameter.top)
  return &top_;
}

// optional string name = 4;
inline bool V1LayerParameter::has_name() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void V1LayerParameter::set_has_name() {
  _has_bits_[0] |= 0x00000004u;
}
inline void V1LayerParameter::clear_has_name() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void V1LayerParameter::clear_name() {
  name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_name();
}
inline const ::std::string& V1LayerParameter::name() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.name)
  return name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void V1LayerParameter::set_name(const ::std::string& value) {
  set_has_name();
  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.V1LayerParameter.name)
}
inline void V1LayerParameter::set_name(const char* value) {
  set_has_name();
  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.V1LayerParameter.name)
}
inline void V1LayerParameter::set_name(const char* value, size_t size) {
  set_has_name();
  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.V1LayerParameter.name)
}
inline ::std::string* V1LayerParameter::mutable_name() {
  set_has_name();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.name)
  return name_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* V1LayerParameter::release_name() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.name)
  clear_has_name();
  return name_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void V1LayerParameter::set_allocated_name(::std::string* name) {
  if (name != NULL) {
    set_has_name();
  } else {
    clear_has_name();
  }
  name_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), name);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.name)
}

// repeated .caffe.NetStateRule include = 32;
inline int V1LayerParameter::include_size() const {
  return include_.size();
}
inline void V1LayerParameter::clear_include() {
  include_.Clear();
}
inline const ::caffe::NetStateRule& V1LayerParameter::include(int index) const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.include)
  return include_.Get(index);
}
inline ::caffe::NetStateRule* V1LayerParameter::mutable_include(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.include)
  return include_.Mutable(index);
}
inline ::caffe::NetStateRule* V1LayerParameter::add_include() {
  // @@protoc_insertion_point(field_add:caffe.V1LayerParameter.include)
  return include_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule >*
V1LayerParameter::mutable_include() {
  // @@protoc_insertion_point(field_mutable_list:caffe.V1LayerParameter.include)
  return &include_;
}
inline const ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule >&
V1LayerParameter::include() const {
  // @@protoc_insertion_point(field_list:caffe.V1LayerParameter.include)
  return include_;
}

// repeated .caffe.NetStateRule exclude = 33;
inline int V1LayerParameter::exclude_size() const {
  return exclude_.size();
}
inline void V1LayerParameter::clear_exclude() {
  exclude_.Clear();
}
inline const ::caffe::NetStateRule& V1LayerParameter::exclude(int index) const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.exclude)
  return exclude_.Get(index);
}
inline ::caffe::NetStateRule* V1LayerParameter::mutable_exclude(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.exclude)
  return exclude_.Mutable(index);
}
inline ::caffe::NetStateRule* V1LayerParameter::add_exclude() {
  // @@protoc_insertion_point(field_add:caffe.V1LayerParameter.exclude)
  return exclude_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule >*
V1LayerParameter::mutable_exclude() {
  // @@protoc_insertion_point(field_mutable_list:caffe.V1LayerParameter.exclude)
  return &exclude_;
}
inline const ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule >&
V1LayerParameter::exclude() const {
  // @@protoc_insertion_point(field_list:caffe.V1LayerParameter.exclude)
  return exclude_;
}

// optional .caffe.V1LayerParameter.LayerType type = 5;
inline bool V1LayerParameter::has_type() const {
  return (_has_bits_[0] & 0x00000020u) != 0;
}
inline void V1LayerParameter::set_has_type() {
  _has_bits_[0] |= 0x00000020u;
}
inline void V1LayerParameter::clear_has_type() {
  _has_bits_[0] &= ~0x00000020u;
}
inline void V1LayerParameter::clear_type() {
  type_ = 0;
  clear_has_type();
}
inline ::caffe::V1LayerParameter_LayerType V1LayerParameter::type() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.type)
  return static_cast< ::caffe::V1LayerParameter_LayerType >(type_);
}
inline void V1LayerParameter::set_type(::caffe::V1LayerParameter_LayerType value) {
  assert(::caffe::V1LayerParameter_LayerType_IsValid(value));
  set_has_type();
  type_ = value;
  // @@protoc_insertion_point(field_set:caffe.V1LayerParameter.type)
}

// repeated .caffe.BlobProto blobs = 6;
inline int V1LayerParameter::blobs_size() const {
  return blobs_.size();
}
inline void V1LayerParameter::clear_blobs() {
  blobs_.Clear();
}
inline const ::caffe::BlobProto& V1LayerParameter::blobs(int index) const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.blobs)
  return blobs_.Get(index);
}
inline ::caffe::BlobProto* V1LayerParameter::mutable_blobs(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.blobs)
  return blobs_.Mutable(index);
}
inline ::caffe::BlobProto* V1LayerParameter::add_blobs() {
  // @@protoc_insertion_point(field_add:caffe.V1LayerParameter.blobs)
  return blobs_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto >*
V1LayerParameter::mutable_blobs() {
  // @@protoc_insertion_point(field_mutable_list:caffe.V1LayerParameter.blobs)
  return &blobs_;
}
inline const ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto >&
V1LayerParameter::blobs() const {
  // @@protoc_insertion_point(field_list:caffe.V1LayerParameter.blobs)
  return blobs_;
}

// repeated string param = 1001;
inline int V1LayerParameter::param_size() const {
  return param_.size();
}
inline void V1LayerParameter::clear_param() {
  param_.Clear();
}
inline const ::std::string& V1LayerParameter::param(int index) const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.param)
  return param_.Get(index);
}
inline ::std::string* V1LayerParameter::mutable_param(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.param)
  return param_.Mutable(index);
}
inline void V1LayerParameter::set_param(int index, const ::std::string& value) {
  // @@protoc_insertion_point(field_set:caffe.V1LayerParameter.param)
  param_.Mutable(index)->assign(value);
}
inline void V1LayerParameter::set_param(int index, const char* value) {
  param_.Mutable(index)->assign(value);
  // @@protoc_insertion_point(field_set_char:caffe.V1LayerParameter.param)
}
inline void V1LayerParameter::set_param(int index, const char* value, size_t size) {
  param_.Mutable(index)->assign(
    reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_set_pointer:caffe.V1LayerParameter.param)
}
inline ::std::string* V1LayerParameter::add_param() {
  // @@protoc_insertion_point(field_add_mutable:caffe.V1LayerParameter.param)
  return param_.Add();
}
inline void V1LayerParameter::add_param(const ::std::string& value) {
  param_.Add()->assign(value);
  // @@protoc_insertion_point(field_add:caffe.V1LayerParameter.param)
}
inline void V1LayerParameter::add_param(const char* value) {
  param_.Add()->assign(value);
  // @@protoc_insertion_point(field_add_char:caffe.V1LayerParameter.param)
}
inline void V1LayerParameter::add_param(const char* value, size_t size) {
  param_.Add()->assign(reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_add_pointer:caffe.V1LayerParameter.param)
}
inline const ::google::protobuf::RepeatedPtrField< ::std::string>&
V1LayerParameter::param() const {
  // @@protoc_insertion_point(field_list:caffe.V1LayerParameter.param)
  return param_;
}
inline ::google::protobuf::RepeatedPtrField< ::std::string>*
V1LayerParameter::mutable_param() {
  // @@protoc_insertion_point(field_mutable_list:caffe.V1LayerParameter.param)
  return &param_;
}

// repeated .caffe.V1LayerParameter.DimCheckMode blob_share_mode = 1002;
inline int V1LayerParameter::blob_share_mode_size() const {
  return blob_share_mode_.size();
}
inline void V1LayerParameter::clear_blob_share_mode() {
  blob_share_mode_.Clear();
}
inline ::caffe::V1LayerParameter_DimCheckMode V1LayerParameter::blob_share_mode(int index) const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.blob_share_mode)
  return static_cast< ::caffe::V1LayerParameter_DimCheckMode >(blob_share_mode_.Get(index));
}
inline void V1LayerParameter::set_blob_share_mode(int index, ::caffe::V1LayerParameter_DimCheckMode value) {
  assert(::caffe::V1LayerParameter_DimCheckMode_IsValid(value));
  blob_share_mode_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.V1LayerParameter.blob_share_mode)
}
inline void V1LayerParameter::add_blob_share_mode(::caffe::V1LayerParameter_DimCheckMode value) {
  assert(::caffe::V1LayerParameter_DimCheckMode_IsValid(value));
  blob_share_mode_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.V1LayerParameter.blob_share_mode)
}
inline const ::google::protobuf::RepeatedField<int>&
V1LayerParameter::blob_share_mode() const {
  // @@protoc_insertion_point(field_list:caffe.V1LayerParameter.blob_share_mode)
  return blob_share_mode_;
}
inline ::google::protobuf::RepeatedField<int>*
V1LayerParameter::mutable_blob_share_mode() {
  // @@protoc_insertion_point(field_mutable_list:caffe.V1LayerParameter.blob_share_mode)
  return &blob_share_mode_;
}

// repeated float blobs_lr = 7;
inline int V1LayerParameter::blobs_lr_size() const {
  return blobs_lr_.size();
}
inline void V1LayerParameter::clear_blobs_lr() {
  blobs_lr_.Clear();
}
inline float V1LayerParameter::blobs_lr(int index) const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.blobs_lr)
  return blobs_lr_.Get(index);
}
inline void V1LayerParameter::set_blobs_lr(int index, float value) {
  blobs_lr_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.V1LayerParameter.blobs_lr)
}
inline void V1LayerParameter::add_blobs_lr(float value) {
  blobs_lr_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.V1LayerParameter.blobs_lr)
}
inline const ::google::protobuf::RepeatedField< float >&
V1LayerParameter::blobs_lr() const {
  // @@protoc_insertion_point(field_list:caffe.V1LayerParameter.blobs_lr)
  return blobs_lr_;
}
inline ::google::protobuf::RepeatedField< float >*
V1LayerParameter::mutable_blobs_lr() {
  // @@protoc_insertion_point(field_mutable_list:caffe.V1LayerParameter.blobs_lr)
  return &blobs_lr_;
}

// repeated float weight_decay = 8;
inline int V1LayerParameter::weight_decay_size() const {
  return weight_decay_.size();
}
inline void V1LayerParameter::clear_weight_decay() {
  weight_decay_.Clear();
}
inline float V1LayerParameter::weight_decay(int index) const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.weight_decay)
  return weight_decay_.Get(index);
}
inline void V1LayerParameter::set_weight_decay(int index, float value) {
  weight_decay_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.V1LayerParameter.weight_decay)
}
inline void V1LayerParameter::add_weight_decay(float value) {
  weight_decay_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.V1LayerParameter.weight_decay)
}
inline const ::google::protobuf::RepeatedField< float >&
V1LayerParameter::weight_decay() const {
  // @@protoc_insertion_point(field_list:caffe.V1LayerParameter.weight_decay)
  return weight_decay_;
}
inline ::google::protobuf::RepeatedField< float >*
V1LayerParameter::mutable_weight_decay() {
  // @@protoc_insertion_point(field_mutable_list:caffe.V1LayerParameter.weight_decay)
  return &weight_decay_;
}

// repeated float loss_weight = 35;
inline int V1LayerParameter::loss_weight_size() const {
  return loss_weight_.size();
}
inline void V1LayerParameter::clear_loss_weight() {
  loss_weight_.Clear();
}
inline float V1LayerParameter::loss_weight(int index) const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.loss_weight)
  return loss_weight_.Get(index);
}
inline void V1LayerParameter::set_loss_weight(int index, float value) {
  loss_weight_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.V1LayerParameter.loss_weight)
}
inline void V1LayerParameter::add_loss_weight(float value) {
  loss_weight_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.V1LayerParameter.loss_weight)
}
inline const ::google::protobuf::RepeatedField< float >&
V1LayerParameter::loss_weight() const {
  // @@protoc_insertion_point(field_list:caffe.V1LayerParameter.loss_weight)
  return loss_weight_;
}
inline ::google::protobuf::RepeatedField< float >*
V1LayerParameter::mutable_loss_weight() {
  // @@protoc_insertion_point(field_mutable_list:caffe.V1LayerParameter.loss_weight)
  return &loss_weight_;
}

// optional .caffe.AccuracyParameter accuracy_param = 27;
inline bool V1LayerParameter::has_accuracy_param() const {
  return (_has_bits_[0] & 0x00001000u) != 0;
}
inline void V1LayerParameter::set_has_accuracy_param() {
  _has_bits_[0] |= 0x00001000u;
}
inline void V1LayerParameter::clear_has_accuracy_param() {
  _has_bits_[0] &= ~0x00001000u;
}
inline void V1LayerParameter::clear_accuracy_param() {
  if (accuracy_param_ != NULL) accuracy_param_->::caffe::AccuracyParameter::Clear();
  clear_has_accuracy_param();
}
inline const ::caffe::AccuracyParameter& V1LayerParameter::accuracy_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.accuracy_param)
  return accuracy_param_ != NULL ? *accuracy_param_
                         : *::caffe::AccuracyParameter::internal_default_instance();
}
inline ::caffe::AccuracyParameter* V1LayerParameter::mutable_accuracy_param() {
  set_has_accuracy_param();
  if (accuracy_param_ == NULL) {
    accuracy_param_ = new ::caffe::AccuracyParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.accuracy_param)
  return accuracy_param_;
}
inline ::caffe::AccuracyParameter* V1LayerParameter::release_accuracy_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.accuracy_param)
  clear_has_accuracy_param();
  ::caffe::AccuracyParameter* temp = accuracy_param_;
  accuracy_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_accuracy_param(::caffe::AccuracyParameter* accuracy_param) {
  delete accuracy_param_;
  accuracy_param_ = accuracy_param;
  if (accuracy_param) {
    set_has_accuracy_param();
  } else {
    clear_has_accuracy_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.accuracy_param)
}

// optional .caffe.ArgMaxParameter argmax_param = 23;
inline bool V1LayerParameter::has_argmax_param() const {
  return (_has_bits_[0] & 0x00002000u) != 0;
}
inline void V1LayerParameter::set_has_argmax_param() {
  _has_bits_[0] |= 0x00002000u;
}
inline void V1LayerParameter::clear_has_argmax_param() {
  _has_bits_[0] &= ~0x00002000u;
}
inline void V1LayerParameter::clear_argmax_param() {
  if (argmax_param_ != NULL) argmax_param_->::caffe::ArgMaxParameter::Clear();
  clear_has_argmax_param();
}
inline const ::caffe::ArgMaxParameter& V1LayerParameter::argmax_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.argmax_param)
  return argmax_param_ != NULL ? *argmax_param_
                         : *::caffe::ArgMaxParameter::internal_default_instance();
}
inline ::caffe::ArgMaxParameter* V1LayerParameter::mutable_argmax_param() {
  set_has_argmax_param();
  if (argmax_param_ == NULL) {
    argmax_param_ = new ::caffe::ArgMaxParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.argmax_param)
  return argmax_param_;
}
inline ::caffe::ArgMaxParameter* V1LayerParameter::release_argmax_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.argmax_param)
  clear_has_argmax_param();
  ::caffe::ArgMaxParameter* temp = argmax_param_;
  argmax_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_argmax_param(::caffe::ArgMaxParameter* argmax_param) {
  delete argmax_param_;
  argmax_param_ = argmax_param;
  if (argmax_param) {
    set_has_argmax_param();
  } else {
    clear_has_argmax_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.argmax_param)
}

// optional .caffe.ConcatParameter concat_param = 9;
inline bool V1LayerParameter::has_concat_param() const {
  return (_has_bits_[0] & 0x00004000u) != 0;
}
inline void V1LayerParameter::set_has_concat_param() {
  _has_bits_[0] |= 0x00004000u;
}
inline void V1LayerParameter::clear_has_concat_param() {
  _has_bits_[0] &= ~0x00004000u;
}
inline void V1LayerParameter::clear_concat_param() {
  if (concat_param_ != NULL) concat_param_->::caffe::ConcatParameter::Clear();
  clear_has_concat_param();
}
inline const ::caffe::ConcatParameter& V1LayerParameter::concat_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.concat_param)
  return concat_param_ != NULL ? *concat_param_
                         : *::caffe::ConcatParameter::internal_default_instance();
}
inline ::caffe::ConcatParameter* V1LayerParameter::mutable_concat_param() {
  set_has_concat_param();
  if (concat_param_ == NULL) {
    concat_param_ = new ::caffe::ConcatParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.concat_param)
  return concat_param_;
}
inline ::caffe::ConcatParameter* V1LayerParameter::release_concat_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.concat_param)
  clear_has_concat_param();
  ::caffe::ConcatParameter* temp = concat_param_;
  concat_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_concat_param(::caffe::ConcatParameter* concat_param) {
  delete concat_param_;
  concat_param_ = concat_param;
  if (concat_param) {
    set_has_concat_param();
  } else {
    clear_has_concat_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.concat_param)
}

// optional .caffe.ContrastiveLossParameter contrastive_loss_param = 40;
inline bool V1LayerParameter::has_contrastive_loss_param() const {
  return (_has_bits_[0] & 0x00008000u) != 0;
}
inline void V1LayerParameter::set_has_contrastive_loss_param() {
  _has_bits_[0] |= 0x00008000u;
}
inline void V1LayerParameter::clear_has_contrastive_loss_param() {
  _has_bits_[0] &= ~0x00008000u;
}
inline void V1LayerParameter::clear_contrastive_loss_param() {
  if (contrastive_loss_param_ != NULL) contrastive_loss_param_->::caffe::ContrastiveLossParameter::Clear();
  clear_has_contrastive_loss_param();
}
inline const ::caffe::ContrastiveLossParameter& V1LayerParameter::contrastive_loss_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.contrastive_loss_param)
  return contrastive_loss_param_ != NULL ? *contrastive_loss_param_
                         : *::caffe::ContrastiveLossParameter::internal_default_instance();
}
inline ::caffe::ContrastiveLossParameter* V1LayerParameter::mutable_contrastive_loss_param() {
  set_has_contrastive_loss_param();
  if (contrastive_loss_param_ == NULL) {
    contrastive_loss_param_ = new ::caffe::ContrastiveLossParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.contrastive_loss_param)
  return contrastive_loss_param_;
}
inline ::caffe::ContrastiveLossParameter* V1LayerParameter::release_contrastive_loss_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.contrastive_loss_param)
  clear_has_contrastive_loss_param();
  ::caffe::ContrastiveLossParameter* temp = contrastive_loss_param_;
  contrastive_loss_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_contrastive_loss_param(::caffe::ContrastiveLossParameter* contrastive_loss_param) {
  delete contrastive_loss_param_;
  contrastive_loss_param_ = contrastive_loss_param;
  if (contrastive_loss_param) {
    set_has_contrastive_loss_param();
  } else {
    clear_has_contrastive_loss_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.contrastive_loss_param)
}

// optional .caffe.ConvolutionParameter convolution_param = 10;
inline bool V1LayerParameter::has_convolution_param() const {
  return (_has_bits_[0] & 0x00010000u) != 0;
}
inline void V1LayerParameter::set_has_convolution_param() {
  _has_bits_[0] |= 0x00010000u;
}
inline void V1LayerParameter::clear_has_convolution_param() {
  _has_bits_[0] &= ~0x00010000u;
}
inline void V1LayerParameter::clear_convolution_param() {
  if (convolution_param_ != NULL) convolution_param_->::caffe::ConvolutionParameter::Clear();
  clear_has_convolution_param();
}
inline const ::caffe::ConvolutionParameter& V1LayerParameter::convolution_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.convolution_param)
  return convolution_param_ != NULL ? *convolution_param_
                         : *::caffe::ConvolutionParameter::internal_default_instance();
}
inline ::caffe::ConvolutionParameter* V1LayerParameter::mutable_convolution_param() {
  set_has_convolution_param();
  if (convolution_param_ == NULL) {
    convolution_param_ = new ::caffe::ConvolutionParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.convolution_param)
  return convolution_param_;
}
inline ::caffe::ConvolutionParameter* V1LayerParameter::release_convolution_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.convolution_param)
  clear_has_convolution_param();
  ::caffe::ConvolutionParameter* temp = convolution_param_;
  convolution_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_convolution_param(::caffe::ConvolutionParameter* convolution_param) {
  delete convolution_param_;
  convolution_param_ = convolution_param;
  if (convolution_param) {
    set_has_convolution_param();
  } else {
    clear_has_convolution_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.convolution_param)
}

// optional .caffe.DataParameter data_param = 11;
inline bool V1LayerParameter::has_data_param() const {
  return (_has_bits_[0] & 0x00020000u) != 0;
}
inline void V1LayerParameter::set_has_data_param() {
  _has_bits_[0] |= 0x00020000u;
}
inline void V1LayerParameter::clear_has_data_param() {
  _has_bits_[0] &= ~0x00020000u;
}
inline void V1LayerParameter::clear_data_param() {
  if (data_param_ != NULL) data_param_->::caffe::DataParameter::Clear();
  clear_has_data_param();
}
inline const ::caffe::DataParameter& V1LayerParameter::data_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.data_param)
  return data_param_ != NULL ? *data_param_
                         : *::caffe::DataParameter::internal_default_instance();
}
inline ::caffe::DataParameter* V1LayerParameter::mutable_data_param() {
  set_has_data_param();
  if (data_param_ == NULL) {
    data_param_ = new ::caffe::DataParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.data_param)
  return data_param_;
}
inline ::caffe::DataParameter* V1LayerParameter::release_data_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.data_param)
  clear_has_data_param();
  ::caffe::DataParameter* temp = data_param_;
  data_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_data_param(::caffe::DataParameter* data_param) {
  delete data_param_;
  data_param_ = data_param;
  if (data_param) {
    set_has_data_param();
  } else {
    clear_has_data_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.data_param)
}

// optional .caffe.DropoutParameter dropout_param = 12;
inline bool V1LayerParameter::has_dropout_param() const {
  return (_has_bits_[0] & 0x00040000u) != 0;
}
inline void V1LayerParameter::set_has_dropout_param() {
  _has_bits_[0] |= 0x00040000u;
}
inline void V1LayerParameter::clear_has_dropout_param() {
  _has_bits_[0] &= ~0x00040000u;
}
inline void V1LayerParameter::clear_dropout_param() {
  if (dropout_param_ != NULL) dropout_param_->::caffe::DropoutParameter::Clear();
  clear_has_dropout_param();
}
inline const ::caffe::DropoutParameter& V1LayerParameter::dropout_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.dropout_param)
  return dropout_param_ != NULL ? *dropout_param_
                         : *::caffe::DropoutParameter::internal_default_instance();
}
inline ::caffe::DropoutParameter* V1LayerParameter::mutable_dropout_param() {
  set_has_dropout_param();
  if (dropout_param_ == NULL) {
    dropout_param_ = new ::caffe::DropoutParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.dropout_param)
  return dropout_param_;
}
inline ::caffe::DropoutParameter* V1LayerParameter::release_dropout_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.dropout_param)
  clear_has_dropout_param();
  ::caffe::DropoutParameter* temp = dropout_param_;
  dropout_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_dropout_param(::caffe::DropoutParameter* dropout_param) {
  delete dropout_param_;
  dropout_param_ = dropout_param;
  if (dropout_param) {
    set_has_dropout_param();
  } else {
    clear_has_dropout_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.dropout_param)
}

// optional .caffe.DummyDataParameter dummy_data_param = 26;
inline bool V1LayerParameter::has_dummy_data_param() const {
  return (_has_bits_[0] & 0x00080000u) != 0;
}
inline void V1LayerParameter::set_has_dummy_data_param() {
  _has_bits_[0] |= 0x00080000u;
}
inline void V1LayerParameter::clear_has_dummy_data_param() {
  _has_bits_[0] &= ~0x00080000u;
}
inline void V1LayerParameter::clear_dummy_data_param() {
  if (dummy_data_param_ != NULL) dummy_data_param_->::caffe::DummyDataParameter::Clear();
  clear_has_dummy_data_param();
}
inline const ::caffe::DummyDataParameter& V1LayerParameter::dummy_data_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.dummy_data_param)
  return dummy_data_param_ != NULL ? *dummy_data_param_
                         : *::caffe::DummyDataParameter::internal_default_instance();
}
inline ::caffe::DummyDataParameter* V1LayerParameter::mutable_dummy_data_param() {
  set_has_dummy_data_param();
  if (dummy_data_param_ == NULL) {
    dummy_data_param_ = new ::caffe::DummyDataParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.dummy_data_param)
  return dummy_data_param_;
}
inline ::caffe::DummyDataParameter* V1LayerParameter::release_dummy_data_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.dummy_data_param)
  clear_has_dummy_data_param();
  ::caffe::DummyDataParameter* temp = dummy_data_param_;
  dummy_data_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_dummy_data_param(::caffe::DummyDataParameter* dummy_data_param) {
  delete dummy_data_param_;
  dummy_data_param_ = dummy_data_param;
  if (dummy_data_param) {
    set_has_dummy_data_param();
  } else {
    clear_has_dummy_data_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.dummy_data_param)
}

// optional .caffe.EltwiseParameter eltwise_param = 24;
inline bool V1LayerParameter::has_eltwise_param() const {
  return (_has_bits_[0] & 0x00100000u) != 0;
}
inline void V1LayerParameter::set_has_eltwise_param() {
  _has_bits_[0] |= 0x00100000u;
}
inline void V1LayerParameter::clear_has_eltwise_param() {
  _has_bits_[0] &= ~0x00100000u;
}
inline void V1LayerParameter::clear_eltwise_param() {
  if (eltwise_param_ != NULL) eltwise_param_->::caffe::EltwiseParameter::Clear();
  clear_has_eltwise_param();
}
inline const ::caffe::EltwiseParameter& V1LayerParameter::eltwise_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.eltwise_param)
  return eltwise_param_ != NULL ? *eltwise_param_
                         : *::caffe::EltwiseParameter::internal_default_instance();
}
inline ::caffe::EltwiseParameter* V1LayerParameter::mutable_eltwise_param() {
  set_has_eltwise_param();
  if (eltwise_param_ == NULL) {
    eltwise_param_ = new ::caffe::EltwiseParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.eltwise_param)
  return eltwise_param_;
}
inline ::caffe::EltwiseParameter* V1LayerParameter::release_eltwise_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.eltwise_param)
  clear_has_eltwise_param();
  ::caffe::EltwiseParameter* temp = eltwise_param_;
  eltwise_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_eltwise_param(::caffe::EltwiseParameter* eltwise_param) {
  delete eltwise_param_;
  eltwise_param_ = eltwise_param;
  if (eltwise_param) {
    set_has_eltwise_param();
  } else {
    clear_has_eltwise_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.eltwise_param)
}

// optional .caffe.ExpParameter exp_param = 41;
inline bool V1LayerParameter::has_exp_param() const {
  return (_has_bits_[0] & 0x00200000u) != 0;
}
inline void V1LayerParameter::set_has_exp_param() {
  _has_bits_[0] |= 0x00200000u;
}
inline void V1LayerParameter::clear_has_exp_param() {
  _has_bits_[0] &= ~0x00200000u;
}
inline void V1LayerParameter::clear_exp_param() {
  if (exp_param_ != NULL) exp_param_->::caffe::ExpParameter::Clear();
  clear_has_exp_param();
}
inline const ::caffe::ExpParameter& V1LayerParameter::exp_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.exp_param)
  return exp_param_ != NULL ? *exp_param_
                         : *::caffe::ExpParameter::internal_default_instance();
}
inline ::caffe::ExpParameter* V1LayerParameter::mutable_exp_param() {
  set_has_exp_param();
  if (exp_param_ == NULL) {
    exp_param_ = new ::caffe::ExpParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.exp_param)
  return exp_param_;
}
inline ::caffe::ExpParameter* V1LayerParameter::release_exp_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.exp_param)
  clear_has_exp_param();
  ::caffe::ExpParameter* temp = exp_param_;
  exp_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_exp_param(::caffe::ExpParameter* exp_param) {
  delete exp_param_;
  exp_param_ = exp_param;
  if (exp_param) {
    set_has_exp_param();
  } else {
    clear_has_exp_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.exp_param)
}

// optional .caffe.HDF5DataParameter hdf5_data_param = 13;
inline bool V1LayerParameter::has_hdf5_data_param() const {
  return (_has_bits_[0] & 0x00400000u) != 0;
}
inline void V1LayerParameter::set_has_hdf5_data_param() {
  _has_bits_[0] |= 0x00400000u;
}
inline void V1LayerParameter::clear_has_hdf5_data_param() {
  _has_bits_[0] &= ~0x00400000u;
}
inline void V1LayerParameter::clear_hdf5_data_param() {
  if (hdf5_data_param_ != NULL) hdf5_data_param_->::caffe::HDF5DataParameter::Clear();
  clear_has_hdf5_data_param();
}
inline const ::caffe::HDF5DataParameter& V1LayerParameter::hdf5_data_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.hdf5_data_param)
  return hdf5_data_param_ != NULL ? *hdf5_data_param_
                         : *::caffe::HDF5DataParameter::internal_default_instance();
}
inline ::caffe::HDF5DataParameter* V1LayerParameter::mutable_hdf5_data_param() {
  set_has_hdf5_data_param();
  if (hdf5_data_param_ == NULL) {
    hdf5_data_param_ = new ::caffe::HDF5DataParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.hdf5_data_param)
  return hdf5_data_param_;
}
inline ::caffe::HDF5DataParameter* V1LayerParameter::release_hdf5_data_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.hdf5_data_param)
  clear_has_hdf5_data_param();
  ::caffe::HDF5DataParameter* temp = hdf5_data_param_;
  hdf5_data_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_hdf5_data_param(::caffe::HDF5DataParameter* hdf5_data_param) {
  delete hdf5_data_param_;
  hdf5_data_param_ = hdf5_data_param;
  if (hdf5_data_param) {
    set_has_hdf5_data_param();
  } else {
    clear_has_hdf5_data_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.hdf5_data_param)
}

// optional .caffe.HDF5OutputParameter hdf5_output_param = 14;
inline bool V1LayerParameter::has_hdf5_output_param() const {
  return (_has_bits_[0] & 0x00800000u) != 0;
}
inline void V1LayerParameter::set_has_hdf5_output_param() {
  _has_bits_[0] |= 0x00800000u;
}
inline void V1LayerParameter::clear_has_hdf5_output_param() {
  _has_bits_[0] &= ~0x00800000u;
}
inline void V1LayerParameter::clear_hdf5_output_param() {
  if (hdf5_output_param_ != NULL) hdf5_output_param_->::caffe::HDF5OutputParameter::Clear();
  clear_has_hdf5_output_param();
}
inline const ::caffe::HDF5OutputParameter& V1LayerParameter::hdf5_output_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.hdf5_output_param)
  return hdf5_output_param_ != NULL ? *hdf5_output_param_
                         : *::caffe::HDF5OutputParameter::internal_default_instance();
}
inline ::caffe::HDF5OutputParameter* V1LayerParameter::mutable_hdf5_output_param() {
  set_has_hdf5_output_param();
  if (hdf5_output_param_ == NULL) {
    hdf5_output_param_ = new ::caffe::HDF5OutputParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.hdf5_output_param)
  return hdf5_output_param_;
}
inline ::caffe::HDF5OutputParameter* V1LayerParameter::release_hdf5_output_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.hdf5_output_param)
  clear_has_hdf5_output_param();
  ::caffe::HDF5OutputParameter* temp = hdf5_output_param_;
  hdf5_output_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_hdf5_output_param(::caffe::HDF5OutputParameter* hdf5_output_param) {
  delete hdf5_output_param_;
  hdf5_output_param_ = hdf5_output_param;
  if (hdf5_output_param) {
    set_has_hdf5_output_param();
  } else {
    clear_has_hdf5_output_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.hdf5_output_param)
}

// optional .caffe.HingeLossParameter hinge_loss_param = 29;
inline bool V1LayerParameter::has_hinge_loss_param() const {
  return (_has_bits_[0] & 0x01000000u) != 0;
}
inline void V1LayerParameter::set_has_hinge_loss_param() {
  _has_bits_[0] |= 0x01000000u;
}
inline void V1LayerParameter::clear_has_hinge_loss_param() {
  _has_bits_[0] &= ~0x01000000u;
}
inline void V1LayerParameter::clear_hinge_loss_param() {
  if (hinge_loss_param_ != NULL) hinge_loss_param_->::caffe::HingeLossParameter::Clear();
  clear_has_hinge_loss_param();
}
inline const ::caffe::HingeLossParameter& V1LayerParameter::hinge_loss_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.hinge_loss_param)
  return hinge_loss_param_ != NULL ? *hinge_loss_param_
                         : *::caffe::HingeLossParameter::internal_default_instance();
}
inline ::caffe::HingeLossParameter* V1LayerParameter::mutable_hinge_loss_param() {
  set_has_hinge_loss_param();
  if (hinge_loss_param_ == NULL) {
    hinge_loss_param_ = new ::caffe::HingeLossParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.hinge_loss_param)
  return hinge_loss_param_;
}
inline ::caffe::HingeLossParameter* V1LayerParameter::release_hinge_loss_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.hinge_loss_param)
  clear_has_hinge_loss_param();
  ::caffe::HingeLossParameter* temp = hinge_loss_param_;
  hinge_loss_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_hinge_loss_param(::caffe::HingeLossParameter* hinge_loss_param) {
  delete hinge_loss_param_;
  hinge_loss_param_ = hinge_loss_param;
  if (hinge_loss_param) {
    set_has_hinge_loss_param();
  } else {
    clear_has_hinge_loss_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.hinge_loss_param)
}

// optional .caffe.ImageDataParameter image_data_param = 15;
inline bool V1LayerParameter::has_image_data_param() const {
  return (_has_bits_[0] & 0x02000000u) != 0;
}
inline void V1LayerParameter::set_has_image_data_param() {
  _has_bits_[0] |= 0x02000000u;
}
inline void V1LayerParameter::clear_has_image_data_param() {
  _has_bits_[0] &= ~0x02000000u;
}
inline void V1LayerParameter::clear_image_data_param() {
  if (image_data_param_ != NULL) image_data_param_->::caffe::ImageDataParameter::Clear();
  clear_has_image_data_param();
}
inline const ::caffe::ImageDataParameter& V1LayerParameter::image_data_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.image_data_param)
  return image_data_param_ != NULL ? *image_data_param_
                         : *::caffe::ImageDataParameter::internal_default_instance();
}
inline ::caffe::ImageDataParameter* V1LayerParameter::mutable_image_data_param() {
  set_has_image_data_param();
  if (image_data_param_ == NULL) {
    image_data_param_ = new ::caffe::ImageDataParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.image_data_param)
  return image_data_param_;
}
inline ::caffe::ImageDataParameter* V1LayerParameter::release_image_data_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.image_data_param)
  clear_has_image_data_param();
  ::caffe::ImageDataParameter* temp = image_data_param_;
  image_data_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_image_data_param(::caffe::ImageDataParameter* image_data_param) {
  delete image_data_param_;
  image_data_param_ = image_data_param;
  if (image_data_param) {
    set_has_image_data_param();
  } else {
    clear_has_image_data_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.image_data_param)
}

// optional .caffe.InfogainLossParameter infogain_loss_param = 16;
inline bool V1LayerParameter::has_infogain_loss_param() const {
  return (_has_bits_[0] & 0x04000000u) != 0;
}
inline void V1LayerParameter::set_has_infogain_loss_param() {
  _has_bits_[0] |= 0x04000000u;
}
inline void V1LayerParameter::clear_has_infogain_loss_param() {
  _has_bits_[0] &= ~0x04000000u;
}
inline void V1LayerParameter::clear_infogain_loss_param() {
  if (infogain_loss_param_ != NULL) infogain_loss_param_->::caffe::InfogainLossParameter::Clear();
  clear_has_infogain_loss_param();
}
inline const ::caffe::InfogainLossParameter& V1LayerParameter::infogain_loss_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.infogain_loss_param)
  return infogain_loss_param_ != NULL ? *infogain_loss_param_
                         : *::caffe::InfogainLossParameter::internal_default_instance();
}
inline ::caffe::InfogainLossParameter* V1LayerParameter::mutable_infogain_loss_param() {
  set_has_infogain_loss_param();
  if (infogain_loss_param_ == NULL) {
    infogain_loss_param_ = new ::caffe::InfogainLossParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.infogain_loss_param)
  return infogain_loss_param_;
}
inline ::caffe::InfogainLossParameter* V1LayerParameter::release_infogain_loss_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.infogain_loss_param)
  clear_has_infogain_loss_param();
  ::caffe::InfogainLossParameter* temp = infogain_loss_param_;
  infogain_loss_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_infogain_loss_param(::caffe::InfogainLossParameter* infogain_loss_param) {
  delete infogain_loss_param_;
  infogain_loss_param_ = infogain_loss_param;
  if (infogain_loss_param) {
    set_has_infogain_loss_param();
  } else {
    clear_has_infogain_loss_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.infogain_loss_param)
}

// optional .caffe.InnerProductParameter inner_product_param = 17;
inline bool V1LayerParameter::has_inner_product_param() const {
  return (_has_bits_[0] & 0x08000000u) != 0;
}
inline void V1LayerParameter::set_has_inner_product_param() {
  _has_bits_[0] |= 0x08000000u;
}
inline void V1LayerParameter::clear_has_inner_product_param() {
  _has_bits_[0] &= ~0x08000000u;
}
inline void V1LayerParameter::clear_inner_product_param() {
  if (inner_product_param_ != NULL) inner_product_param_->::caffe::InnerProductParameter::Clear();
  clear_has_inner_product_param();
}
inline const ::caffe::InnerProductParameter& V1LayerParameter::inner_product_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.inner_product_param)
  return inner_product_param_ != NULL ? *inner_product_param_
                         : *::caffe::InnerProductParameter::internal_default_instance();
}
inline ::caffe::InnerProductParameter* V1LayerParameter::mutable_inner_product_param() {
  set_has_inner_product_param();
  if (inner_product_param_ == NULL) {
    inner_product_param_ = new ::caffe::InnerProductParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.inner_product_param)
  return inner_product_param_;
}
inline ::caffe::InnerProductParameter* V1LayerParameter::release_inner_product_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.inner_product_param)
  clear_has_inner_product_param();
  ::caffe::InnerProductParameter* temp = inner_product_param_;
  inner_product_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_inner_product_param(::caffe::InnerProductParameter* inner_product_param) {
  delete inner_product_param_;
  inner_product_param_ = inner_product_param;
  if (inner_product_param) {
    set_has_inner_product_param();
  } else {
    clear_has_inner_product_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.inner_product_param)
}

// optional .caffe.LRNParameter lrn_param = 18;
inline bool V1LayerParameter::has_lrn_param() const {
  return (_has_bits_[0] & 0x10000000u) != 0;
}
inline void V1LayerParameter::set_has_lrn_param() {
  _has_bits_[0] |= 0x10000000u;
}
inline void V1LayerParameter::clear_has_lrn_param() {
  _has_bits_[0] &= ~0x10000000u;
}
inline void V1LayerParameter::clear_lrn_param() {
  if (lrn_param_ != NULL) lrn_param_->::caffe::LRNParameter::Clear();
  clear_has_lrn_param();
}
inline const ::caffe::LRNParameter& V1LayerParameter::lrn_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.lrn_param)
  return lrn_param_ != NULL ? *lrn_param_
                         : *::caffe::LRNParameter::internal_default_instance();
}
inline ::caffe::LRNParameter* V1LayerParameter::mutable_lrn_param() {
  set_has_lrn_param();
  if (lrn_param_ == NULL) {
    lrn_param_ = new ::caffe::LRNParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.lrn_param)
  return lrn_param_;
}
inline ::caffe::LRNParameter* V1LayerParameter::release_lrn_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.lrn_param)
  clear_has_lrn_param();
  ::caffe::LRNParameter* temp = lrn_param_;
  lrn_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_lrn_param(::caffe::LRNParameter* lrn_param) {
  delete lrn_param_;
  lrn_param_ = lrn_param;
  if (lrn_param) {
    set_has_lrn_param();
  } else {
    clear_has_lrn_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.lrn_param)
}

// optional .caffe.MemoryDataParameter memory_data_param = 22;
inline bool V1LayerParameter::has_memory_data_param() const {
  return (_has_bits_[0] & 0x20000000u) != 0;
}
inline void V1LayerParameter::set_has_memory_data_param() {
  _has_bits_[0] |= 0x20000000u;
}
inline void V1LayerParameter::clear_has_memory_data_param() {
  _has_bits_[0] &= ~0x20000000u;
}
inline void V1LayerParameter::clear_memory_data_param() {
  if (memory_data_param_ != NULL) memory_data_param_->::caffe::MemoryDataParameter::Clear();
  clear_has_memory_data_param();
}
inline const ::caffe::MemoryDataParameter& V1LayerParameter::memory_data_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.memory_data_param)
  return memory_data_param_ != NULL ? *memory_data_param_
                         : *::caffe::MemoryDataParameter::internal_default_instance();
}
inline ::caffe::MemoryDataParameter* V1LayerParameter::mutable_memory_data_param() {
  set_has_memory_data_param();
  if (memory_data_param_ == NULL) {
    memory_data_param_ = new ::caffe::MemoryDataParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.memory_data_param)
  return memory_data_param_;
}
inline ::caffe::MemoryDataParameter* V1LayerParameter::release_memory_data_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.memory_data_param)
  clear_has_memory_data_param();
  ::caffe::MemoryDataParameter* temp = memory_data_param_;
  memory_data_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_memory_data_param(::caffe::MemoryDataParameter* memory_data_param) {
  delete memory_data_param_;
  memory_data_param_ = memory_data_param;
  if (memory_data_param) {
    set_has_memory_data_param();
  } else {
    clear_has_memory_data_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.memory_data_param)
}

// optional .caffe.MVNParameter mvn_param = 34;
inline bool V1LayerParameter::has_mvn_param() const {
  return (_has_bits_[0] & 0x40000000u) != 0;
}
inline void V1LayerParameter::set_has_mvn_param() {
  _has_bits_[0] |= 0x40000000u;
}
inline void V1LayerParameter::clear_has_mvn_param() {
  _has_bits_[0] &= ~0x40000000u;
}
inline void V1LayerParameter::clear_mvn_param() {
  if (mvn_param_ != NULL) mvn_param_->::caffe::MVNParameter::Clear();
  clear_has_mvn_param();
}
inline const ::caffe::MVNParameter& V1LayerParameter::mvn_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.mvn_param)
  return mvn_param_ != NULL ? *mvn_param_
                         : *::caffe::MVNParameter::internal_default_instance();
}
inline ::caffe::MVNParameter* V1LayerParameter::mutable_mvn_param() {
  set_has_mvn_param();
  if (mvn_param_ == NULL) {
    mvn_param_ = new ::caffe::MVNParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.mvn_param)
  return mvn_param_;
}
inline ::caffe::MVNParameter* V1LayerParameter::release_mvn_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.mvn_param)
  clear_has_mvn_param();
  ::caffe::MVNParameter* temp = mvn_param_;
  mvn_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_mvn_param(::caffe::MVNParameter* mvn_param) {
  delete mvn_param_;
  mvn_param_ = mvn_param;
  if (mvn_param) {
    set_has_mvn_param();
  } else {
    clear_has_mvn_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.mvn_param)
}

// optional .caffe.PoolingParameter pooling_param = 19;
inline bool V1LayerParameter::has_pooling_param() const {
  return (_has_bits_[0] & 0x80000000u) != 0;
}
inline void V1LayerParameter::set_has_pooling_param() {
  _has_bits_[0] |= 0x80000000u;
}
inline void V1LayerParameter::clear_has_pooling_param() {
  _has_bits_[0] &= ~0x80000000u;
}
inline void V1LayerParameter::clear_pooling_param() {
  if (pooling_param_ != NULL) pooling_param_->::caffe::PoolingParameter::Clear();
  clear_has_pooling_param();
}
inline const ::caffe::PoolingParameter& V1LayerParameter::pooling_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.pooling_param)
  return pooling_param_ != NULL ? *pooling_param_
                         : *::caffe::PoolingParameter::internal_default_instance();
}
inline ::caffe::PoolingParameter* V1LayerParameter::mutable_pooling_param() {
  set_has_pooling_param();
  if (pooling_param_ == NULL) {
    pooling_param_ = new ::caffe::PoolingParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.pooling_param)
  return pooling_param_;
}
inline ::caffe::PoolingParameter* V1LayerParameter::release_pooling_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.pooling_param)
  clear_has_pooling_param();
  ::caffe::PoolingParameter* temp = pooling_param_;
  pooling_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_pooling_param(::caffe::PoolingParameter* pooling_param) {
  delete pooling_param_;
  pooling_param_ = pooling_param;
  if (pooling_param) {
    set_has_pooling_param();
  } else {
    clear_has_pooling_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.pooling_param)
}

// optional .caffe.PowerParameter power_param = 21;
inline bool V1LayerParameter::has_power_param() const {
  return (_has_bits_[1] & 0x00000001u) != 0;
}
inline void V1LayerParameter::set_has_power_param() {
  _has_bits_[1] |= 0x00000001u;
}
inline void V1LayerParameter::clear_has_power_param() {
  _has_bits_[1] &= ~0x00000001u;
}
inline void V1LayerParameter::clear_power_param() {
  if (power_param_ != NULL) power_param_->::caffe::PowerParameter::Clear();
  clear_has_power_param();
}
inline const ::caffe::PowerParameter& V1LayerParameter::power_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.power_param)
  return power_param_ != NULL ? *power_param_
                         : *::caffe::PowerParameter::internal_default_instance();
}
inline ::caffe::PowerParameter* V1LayerParameter::mutable_power_param() {
  set_has_power_param();
  if (power_param_ == NULL) {
    power_param_ = new ::caffe::PowerParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.power_param)
  return power_param_;
}
inline ::caffe::PowerParameter* V1LayerParameter::release_power_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.power_param)
  clear_has_power_param();
  ::caffe::PowerParameter* temp = power_param_;
  power_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_power_param(::caffe::PowerParameter* power_param) {
  delete power_param_;
  power_param_ = power_param;
  if (power_param) {
    set_has_power_param();
  } else {
    clear_has_power_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.power_param)
}

// optional .caffe.ReLUParameter relu_param = 30;
inline bool V1LayerParameter::has_relu_param() const {
  return (_has_bits_[1] & 0x00000002u) != 0;
}
inline void V1LayerParameter::set_has_relu_param() {
  _has_bits_[1] |= 0x00000002u;
}
inline void V1LayerParameter::clear_has_relu_param() {
  _has_bits_[1] &= ~0x00000002u;
}
inline void V1LayerParameter::clear_relu_param() {
  if (relu_param_ != NULL) relu_param_->::caffe::ReLUParameter::Clear();
  clear_has_relu_param();
}
inline const ::caffe::ReLUParameter& V1LayerParameter::relu_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.relu_param)
  return relu_param_ != NULL ? *relu_param_
                         : *::caffe::ReLUParameter::internal_default_instance();
}
inline ::caffe::ReLUParameter* V1LayerParameter::mutable_relu_param() {
  set_has_relu_param();
  if (relu_param_ == NULL) {
    relu_param_ = new ::caffe::ReLUParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.relu_param)
  return relu_param_;
}
inline ::caffe::ReLUParameter* V1LayerParameter::release_relu_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.relu_param)
  clear_has_relu_param();
  ::caffe::ReLUParameter* temp = relu_param_;
  relu_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_relu_param(::caffe::ReLUParameter* relu_param) {
  delete relu_param_;
  relu_param_ = relu_param;
  if (relu_param) {
    set_has_relu_param();
  } else {
    clear_has_relu_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.relu_param)
}

// optional .caffe.SigmoidParameter sigmoid_param = 38;
inline bool V1LayerParameter::has_sigmoid_param() const {
  return (_has_bits_[1] & 0x00000004u) != 0;
}
inline void V1LayerParameter::set_has_sigmoid_param() {
  _has_bits_[1] |= 0x00000004u;
}
inline void V1LayerParameter::clear_has_sigmoid_param() {
  _has_bits_[1] &= ~0x00000004u;
}
inline void V1LayerParameter::clear_sigmoid_param() {
  if (sigmoid_param_ != NULL) sigmoid_param_->::caffe::SigmoidParameter::Clear();
  clear_has_sigmoid_param();
}
inline const ::caffe::SigmoidParameter& V1LayerParameter::sigmoid_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.sigmoid_param)
  return sigmoid_param_ != NULL ? *sigmoid_param_
                         : *::caffe::SigmoidParameter::internal_default_instance();
}
inline ::caffe::SigmoidParameter* V1LayerParameter::mutable_sigmoid_param() {
  set_has_sigmoid_param();
  if (sigmoid_param_ == NULL) {
    sigmoid_param_ = new ::caffe::SigmoidParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.sigmoid_param)
  return sigmoid_param_;
}
inline ::caffe::SigmoidParameter* V1LayerParameter::release_sigmoid_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.sigmoid_param)
  clear_has_sigmoid_param();
  ::caffe::SigmoidParameter* temp = sigmoid_param_;
  sigmoid_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_sigmoid_param(::caffe::SigmoidParameter* sigmoid_param) {
  delete sigmoid_param_;
  sigmoid_param_ = sigmoid_param;
  if (sigmoid_param) {
    set_has_sigmoid_param();
  } else {
    clear_has_sigmoid_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.sigmoid_param)
}

// optional .caffe.SoftmaxParameter softmax_param = 39;
inline bool V1LayerParameter::has_softmax_param() const {
  return (_has_bits_[1] & 0x00000008u) != 0;
}
inline void V1LayerParameter::set_has_softmax_param() {
  _has_bits_[1] |= 0x00000008u;
}
inline void V1LayerParameter::clear_has_softmax_param() {
  _has_bits_[1] &= ~0x00000008u;
}
inline void V1LayerParameter::clear_softmax_param() {
  if (softmax_param_ != NULL) softmax_param_->::caffe::SoftmaxParameter::Clear();
  clear_has_softmax_param();
}
inline const ::caffe::SoftmaxParameter& V1LayerParameter::softmax_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.softmax_param)
  return softmax_param_ != NULL ? *softmax_param_
                         : *::caffe::SoftmaxParameter::internal_default_instance();
}
inline ::caffe::SoftmaxParameter* V1LayerParameter::mutable_softmax_param() {
  set_has_softmax_param();
  if (softmax_param_ == NULL) {
    softmax_param_ = new ::caffe::SoftmaxParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.softmax_param)
  return softmax_param_;
}
inline ::caffe::SoftmaxParameter* V1LayerParameter::release_softmax_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.softmax_param)
  clear_has_softmax_param();
  ::caffe::SoftmaxParameter* temp = softmax_param_;
  softmax_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_softmax_param(::caffe::SoftmaxParameter* softmax_param) {
  delete softmax_param_;
  softmax_param_ = softmax_param;
  if (softmax_param) {
    set_has_softmax_param();
  } else {
    clear_has_softmax_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.softmax_param)
}

// optional .caffe.SliceParameter slice_param = 31;
inline bool V1LayerParameter::has_slice_param() const {
  return (_has_bits_[1] & 0x00000010u) != 0;
}
inline void V1LayerParameter::set_has_slice_param() {
  _has_bits_[1] |= 0x00000010u;
}
inline void V1LayerParameter::clear_has_slice_param() {
  _has_bits_[1] &= ~0x00000010u;
}
inline void V1LayerParameter::clear_slice_param() {
  if (slice_param_ != NULL) slice_param_->::caffe::SliceParameter::Clear();
  clear_has_slice_param();
}
inline const ::caffe::SliceParameter& V1LayerParameter::slice_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.slice_param)
  return slice_param_ != NULL ? *slice_param_
                         : *::caffe::SliceParameter::internal_default_instance();
}
inline ::caffe::SliceParameter* V1LayerParameter::mutable_slice_param() {
  set_has_slice_param();
  if (slice_param_ == NULL) {
    slice_param_ = new ::caffe::SliceParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.slice_param)
  return slice_param_;
}
inline ::caffe::SliceParameter* V1LayerParameter::release_slice_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.slice_param)
  clear_has_slice_param();
  ::caffe::SliceParameter* temp = slice_param_;
  slice_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_slice_param(::caffe::SliceParameter* slice_param) {
  delete slice_param_;
  slice_param_ = slice_param;
  if (slice_param) {
    set_has_slice_param();
  } else {
    clear_has_slice_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.slice_param)
}

// optional .caffe.TanHParameter tanh_param = 37;
inline bool V1LayerParameter::has_tanh_param() const {
  return (_has_bits_[1] & 0x00000020u) != 0;
}
inline void V1LayerParameter::set_has_tanh_param() {
  _has_bits_[1] |= 0x00000020u;
}
inline void V1LayerParameter::clear_has_tanh_param() {
  _has_bits_[1] &= ~0x00000020u;
}
inline void V1LayerParameter::clear_tanh_param() {
  if (tanh_param_ != NULL) tanh_param_->::caffe::TanHParameter::Clear();
  clear_has_tanh_param();
}
inline const ::caffe::TanHParameter& V1LayerParameter::tanh_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.tanh_param)
  return tanh_param_ != NULL ? *tanh_param_
                         : *::caffe::TanHParameter::internal_default_instance();
}
inline ::caffe::TanHParameter* V1LayerParameter::mutable_tanh_param() {
  set_has_tanh_param();
  if (tanh_param_ == NULL) {
    tanh_param_ = new ::caffe::TanHParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.tanh_param)
  return tanh_param_;
}
inline ::caffe::TanHParameter* V1LayerParameter::release_tanh_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.tanh_param)
  clear_has_tanh_param();
  ::caffe::TanHParameter* temp = tanh_param_;
  tanh_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_tanh_param(::caffe::TanHParameter* tanh_param) {
  delete tanh_param_;
  tanh_param_ = tanh_param;
  if (tanh_param) {
    set_has_tanh_param();
  } else {
    clear_has_tanh_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.tanh_param)
}

// optional .caffe.ThresholdParameter threshold_param = 25;
inline bool V1LayerParameter::has_threshold_param() const {
  return (_has_bits_[1] & 0x00000040u) != 0;
}
inline void V1LayerParameter::set_has_threshold_param() {
  _has_bits_[1] |= 0x00000040u;
}
inline void V1LayerParameter::clear_has_threshold_param() {
  _has_bits_[1] &= ~0x00000040u;
}
inline void V1LayerParameter::clear_threshold_param() {
  if (threshold_param_ != NULL) threshold_param_->::caffe::ThresholdParameter::Clear();
  clear_has_threshold_param();
}
inline const ::caffe::ThresholdParameter& V1LayerParameter::threshold_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.threshold_param)
  return threshold_param_ != NULL ? *threshold_param_
                         : *::caffe::ThresholdParameter::internal_default_instance();
}
inline ::caffe::ThresholdParameter* V1LayerParameter::mutable_threshold_param() {
  set_has_threshold_param();
  if (threshold_param_ == NULL) {
    threshold_param_ = new ::caffe::ThresholdParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.threshold_param)
  return threshold_param_;
}
inline ::caffe::ThresholdParameter* V1LayerParameter::release_threshold_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.threshold_param)
  clear_has_threshold_param();
  ::caffe::ThresholdParameter* temp = threshold_param_;
  threshold_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_threshold_param(::caffe::ThresholdParameter* threshold_param) {
  delete threshold_param_;
  threshold_param_ = threshold_param;
  if (threshold_param) {
    set_has_threshold_param();
  } else {
    clear_has_threshold_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.threshold_param)
}

// optional .caffe.WindowDataParameter window_data_param = 20;
inline bool V1LayerParameter::has_window_data_param() const {
  return (_has_bits_[1] & 0x00000080u) != 0;
}
inline void V1LayerParameter::set_has_window_data_param() {
  _has_bits_[1] |= 0x00000080u;
}
inline void V1LayerParameter::clear_has_window_data_param() {
  _has_bits_[1] &= ~0x00000080u;
}
inline void V1LayerParameter::clear_window_data_param() {
  if (window_data_param_ != NULL) window_data_param_->::caffe::WindowDataParameter::Clear();
  clear_has_window_data_param();
}
inline const ::caffe::WindowDataParameter& V1LayerParameter::window_data_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.window_data_param)
  return window_data_param_ != NULL ? *window_data_param_
                         : *::caffe::WindowDataParameter::internal_default_instance();
}
inline ::caffe::WindowDataParameter* V1LayerParameter::mutable_window_data_param() {
  set_has_window_data_param();
  if (window_data_param_ == NULL) {
    window_data_param_ = new ::caffe::WindowDataParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.window_data_param)
  return window_data_param_;
}
inline ::caffe::WindowDataParameter* V1LayerParameter::release_window_data_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.window_data_param)
  clear_has_window_data_param();
  ::caffe::WindowDataParameter* temp = window_data_param_;
  window_data_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_window_data_param(::caffe::WindowDataParameter* window_data_param) {
  delete window_data_param_;
  window_data_param_ = window_data_param;
  if (window_data_param) {
    set_has_window_data_param();
  } else {
    clear_has_window_data_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.window_data_param)
}

// optional .caffe.TransformationParameter transform_param = 36;
inline bool V1LayerParameter::has_transform_param() const {
  return (_has_bits_[1] & 0x00000100u) != 0;
}
inline void V1LayerParameter::set_has_transform_param() {
  _has_bits_[1] |= 0x00000100u;
}
inline void V1LayerParameter::clear_has_transform_param() {
  _has_bits_[1] &= ~0x00000100u;
}
inline void V1LayerParameter::clear_transform_param() {
  if (transform_param_ != NULL) transform_param_->::caffe::TransformationParameter::Clear();
  clear_has_transform_param();
}
inline const ::caffe::TransformationParameter& V1LayerParameter::transform_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.transform_param)
  return transform_param_ != NULL ? *transform_param_
                         : *::caffe::TransformationParameter::internal_default_instance();
}
inline ::caffe::TransformationParameter* V1LayerParameter::mutable_transform_param() {
  set_has_transform_param();
  if (transform_param_ == NULL) {
    transform_param_ = new ::caffe::TransformationParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.transform_param)
  return transform_param_;
}
inline ::caffe::TransformationParameter* V1LayerParameter::release_transform_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.transform_param)
  clear_has_transform_param();
  ::caffe::TransformationParameter* temp = transform_param_;
  transform_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_transform_param(::caffe::TransformationParameter* transform_param) {
  delete transform_param_;
  transform_param_ = transform_param;
  if (transform_param) {
    set_has_transform_param();
  } else {
    clear_has_transform_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.transform_param)
}

// optional .caffe.LossParameter loss_param = 42;
inline bool V1LayerParameter::has_loss_param() const {
  return (_has_bits_[1] & 0x00000200u) != 0;
}
inline void V1LayerParameter::set_has_loss_param() {
  _has_bits_[1] |= 0x00000200u;
}
inline void V1LayerParameter::clear_has_loss_param() {
  _has_bits_[1] &= ~0x00000200u;
}
inline void V1LayerParameter::clear_loss_param() {
  if (loss_param_ != NULL) loss_param_->::caffe::LossParameter::Clear();
  clear_has_loss_param();
}
inline const ::caffe::LossParameter& V1LayerParameter::loss_param() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.loss_param)
  return loss_param_ != NULL ? *loss_param_
                         : *::caffe::LossParameter::internal_default_instance();
}
inline ::caffe::LossParameter* V1LayerParameter::mutable_loss_param() {
  set_has_loss_param();
  if (loss_param_ == NULL) {
    loss_param_ = new ::caffe::LossParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.loss_param)
  return loss_param_;
}
inline ::caffe::LossParameter* V1LayerParameter::release_loss_param() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.loss_param)
  clear_has_loss_param();
  ::caffe::LossParameter* temp = loss_param_;
  loss_param_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_loss_param(::caffe::LossParameter* loss_param) {
  delete loss_param_;
  loss_param_ = loss_param;
  if (loss_param) {
    set_has_loss_param();
  } else {
    clear_has_loss_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.loss_param)
}

// optional .caffe.V0LayerParameter layer = 1;
inline bool V1LayerParameter::has_layer() const {
  return (_has_bits_[1] & 0x00000400u) != 0;
}
inline void V1LayerParameter::set_has_layer() {
  _has_bits_[1] |= 0x00000400u;
}
inline void V1LayerParameter::clear_has_layer() {
  _has_bits_[1] &= ~0x00000400u;
}
inline void V1LayerParameter::clear_layer() {
  if (layer_ != NULL) layer_->::caffe::V0LayerParameter::Clear();
  clear_has_layer();
}
inline const ::caffe::V0LayerParameter& V1LayerParameter::layer() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.layer)
  return layer_ != NULL ? *layer_
                         : *::caffe::V0LayerParameter::internal_default_instance();
}
inline ::caffe::V0LayerParameter* V1LayerParameter::mutable_layer() {
  set_has_layer();
  if (layer_ == NULL) {
    layer_ = new ::caffe::V0LayerParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.layer)
  return layer_;
}
inline ::caffe::V0LayerParameter* V1LayerParameter::release_layer() {
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.layer)
  clear_has_layer();
  ::caffe::V0LayerParameter* temp = layer_;
  layer_ = NULL;
  return temp;
}
inline void V1LayerParameter::set_allocated_layer(::caffe::V0LayerParameter* layer) {
  delete layer_;
  layer_ = layer;
  if (layer) {
    set_has_layer();
  } else {
    clear_has_layer();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.layer)
}

inline const V1LayerParameter* V1LayerParameter::internal_default_instance() {
  return &V1LayerParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// V0LayerParameter

// optional string name = 1;
inline bool V0LayerParameter::has_name() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void V0LayerParameter::set_has_name() {
  _has_bits_[0] |= 0x00000001u;
}
inline void V0LayerParameter::clear_has_name() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void V0LayerParameter::clear_name() {
  name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_name();
}
inline const ::std::string& V0LayerParameter::name() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.name)
  return name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void V0LayerParameter::set_name(const ::std::string& value) {
  set_has_name();
  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.name)
}
inline void V0LayerParameter::set_name(const char* value) {
  set_has_name();
  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.V0LayerParameter.name)
}
inline void V0LayerParameter::set_name(const char* value, size_t size) {
  set_has_name();
  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.V0LayerParameter.name)
}
inline ::std::string* V0LayerParameter::mutable_name() {
  set_has_name();
  // @@protoc_insertion_point(field_mutable:caffe.V0LayerParameter.name)
  return name_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* V0LayerParameter::release_name() {
  // @@protoc_insertion_point(field_release:caffe.V0LayerParameter.name)
  clear_has_name();
  return name_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void V0LayerParameter::set_allocated_name(::std::string* name) {
  if (name != NULL) {
    set_has_name();
  } else {
    clear_has_name();
  }
  name_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), name);
  // @@protoc_insertion_point(field_set_allocated:caffe.V0LayerParameter.name)
}

// optional string type = 2;
inline bool V0LayerParameter::has_type() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void V0LayerParameter::set_has_type() {
  _has_bits_[0] |= 0x00000002u;
}
inline void V0LayerParameter::clear_has_type() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void V0LayerParameter::clear_type() {
  type_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_type();
}
inline const ::std::string& V0LayerParameter::type() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.type)
  return type_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void V0LayerParameter::set_type(const ::std::string& value) {
  set_has_type();
  type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.type)
}
inline void V0LayerParameter::set_type(const char* value) {
  set_has_type();
  type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.V0LayerParameter.type)
}
inline void V0LayerParameter::set_type(const char* value, size_t size) {
  set_has_type();
  type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.V0LayerParameter.type)
}
inline ::std::string* V0LayerParameter::mutable_type() {
  set_has_type();
  // @@protoc_insertion_point(field_mutable:caffe.V0LayerParameter.type)
  return type_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* V0LayerParameter::release_type() {
  // @@protoc_insertion_point(field_release:caffe.V0LayerParameter.type)
  clear_has_type();
  return type_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void V0LayerParameter::set_allocated_type(::std::string* type) {
  if (type != NULL) {
    set_has_type();
  } else {
    clear_has_type();
  }
  type_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), type);
  // @@protoc_insertion_point(field_set_allocated:caffe.V0LayerParameter.type)
}

// optional uint32 num_output = 3;
inline bool V0LayerParameter::has_num_output() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void V0LayerParameter::set_has_num_output() {
  _has_bits_[0] |= 0x00000004u;
}
inline void V0LayerParameter::clear_has_num_output() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void V0LayerParameter::clear_num_output() {
  num_output_ = 0u;
  clear_has_num_output();
}
inline ::google::protobuf::uint32 V0LayerParameter::num_output() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.num_output)
  return num_output_;
}
inline void V0LayerParameter::set_num_output(::google::protobuf::uint32 value) {
  set_has_num_output();
  num_output_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.num_output)
}

// optional bool biasterm = 4 [default = true];
inline bool V0LayerParameter::has_biasterm() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void V0LayerParameter::set_has_biasterm() {
  _has_bits_[0] |= 0x00000008u;
}
inline void V0LayerParameter::clear_has_biasterm() {
  _has_bits_[0] &= ~0x00000008u;
}
inline void V0LayerParameter::clear_biasterm() {
  biasterm_ = true;
  clear_has_biasterm();
}
inline bool V0LayerParameter::biasterm() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.biasterm)
  return biasterm_;
}
inline void V0LayerParameter::set_biasterm(bool value) {
  set_has_biasterm();
  biasterm_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.biasterm)
}

// optional .caffe.FillerParameter weight_filler = 5;
inline bool V0LayerParameter::has_weight_filler() const {
  return (_has_bits_[0] & 0x00000010u) != 0;
}
inline void V0LayerParameter::set_has_weight_filler() {
  _has_bits_[0] |= 0x00000010u;
}
inline void V0LayerParameter::clear_has_weight_filler() {
  _has_bits_[0] &= ~0x00000010u;
}
inline void V0LayerParameter::clear_weight_filler() {
  if (weight_filler_ != NULL) weight_filler_->::caffe::FillerParameter::Clear();
  clear_has_weight_filler();
}
inline const ::caffe::FillerParameter& V0LayerParameter::weight_filler() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.weight_filler)
  return weight_filler_ != NULL ? *weight_filler_
                         : *::caffe::FillerParameter::internal_default_instance();
}
inline ::caffe::FillerParameter* V0LayerParameter::mutable_weight_filler() {
  set_has_weight_filler();
  if (weight_filler_ == NULL) {
    weight_filler_ = new ::caffe::FillerParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V0LayerParameter.weight_filler)
  return weight_filler_;
}
inline ::caffe::FillerParameter* V0LayerParameter::release_weight_filler() {
  // @@protoc_insertion_point(field_release:caffe.V0LayerParameter.weight_filler)
  clear_has_weight_filler();
  ::caffe::FillerParameter* temp = weight_filler_;
  weight_filler_ = NULL;
  return temp;
}
inline void V0LayerParameter::set_allocated_weight_filler(::caffe::FillerParameter* weight_filler) {
  delete weight_filler_;
  weight_filler_ = weight_filler;
  if (weight_filler) {
    set_has_weight_filler();
  } else {
    clear_has_weight_filler();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V0LayerParameter.weight_filler)
}

// optional .caffe.FillerParameter bias_filler = 6;
inline bool V0LayerParameter::has_bias_filler() const {
  return (_has_bits_[0] & 0x00000020u) != 0;
}
inline void V0LayerParameter::set_has_bias_filler() {
  _has_bits_[0] |= 0x00000020u;
}
inline void V0LayerParameter::clear_has_bias_filler() {
  _has_bits_[0] &= ~0x00000020u;
}
inline void V0LayerParameter::clear_bias_filler() {
  if (bias_filler_ != NULL) bias_filler_->::caffe::FillerParameter::Clear();
  clear_has_bias_filler();
}
inline const ::caffe::FillerParameter& V0LayerParameter::bias_filler() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.bias_filler)
  return bias_filler_ != NULL ? *bias_filler_
                         : *::caffe::FillerParameter::internal_default_instance();
}
inline ::caffe::FillerParameter* V0LayerParameter::mutable_bias_filler() {
  set_has_bias_filler();
  if (bias_filler_ == NULL) {
    bias_filler_ = new ::caffe::FillerParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V0LayerParameter.bias_filler)
  return bias_filler_;
}
inline ::caffe::FillerParameter* V0LayerParameter::release_bias_filler() {
  // @@protoc_insertion_point(field_release:caffe.V0LayerParameter.bias_filler)
  clear_has_bias_filler();
  ::caffe::FillerParameter* temp = bias_filler_;
  bias_filler_ = NULL;
  return temp;
}
inline void V0LayerParameter::set_allocated_bias_filler(::caffe::FillerParameter* bias_filler) {
  delete bias_filler_;
  bias_filler_ = bias_filler;
  if (bias_filler) {
    set_has_bias_filler();
  } else {
    clear_has_bias_filler();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V0LayerParameter.bias_filler)
}

// optional uint32 pad = 7 [default = 0];
inline bool V0LayerParameter::has_pad() const {
  return (_has_bits_[0] & 0x00000040u) != 0;
}
inline void V0LayerParameter::set_has_pad() {
  _has_bits_[0] |= 0x00000040u;
}
inline void V0LayerParameter::clear_has_pad() {
  _has_bits_[0] &= ~0x00000040u;
}
inline void V0LayerParameter::clear_pad() {
  pad_ = 0u;
  clear_has_pad();
}
inline ::google::protobuf::uint32 V0LayerParameter::pad() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.pad)
  return pad_;
}
inline void V0LayerParameter::set_pad(::google::protobuf::uint32 value) {
  set_has_pad();
  pad_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.pad)
}

// optional uint32 kernelsize = 8;
inline bool V0LayerParameter::has_kernelsize() const {
  return (_has_bits_[0] & 0x00000080u) != 0;
}
inline void V0LayerParameter::set_has_kernelsize() {
  _has_bits_[0] |= 0x00000080u;
}
inline void V0LayerParameter::clear_has_kernelsize() {
  _has_bits_[0] &= ~0x00000080u;
}
inline void V0LayerParameter::clear_kernelsize() {
  kernelsize_ = 0u;
  clear_has_kernelsize();
}
inline ::google::protobuf::uint32 V0LayerParameter::kernelsize() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.kernelsize)
  return kernelsize_;
}
inline void V0LayerParameter::set_kernelsize(::google::protobuf::uint32 value) {
  set_has_kernelsize();
  kernelsize_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.kernelsize)
}

// optional uint32 group = 9 [default = 1];
inline bool V0LayerParameter::has_group() const {
  return (_has_bits_[0] & 0x00000100u) != 0;
}
inline void V0LayerParameter::set_has_group() {
  _has_bits_[0] |= 0x00000100u;
}
inline void V0LayerParameter::clear_has_group() {
  _has_bits_[0] &= ~0x00000100u;
}
inline void V0LayerParameter::clear_group() {
  group_ = 1u;
  clear_has_group();
}
inline ::google::protobuf::uint32 V0LayerParameter::group() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.group)
  return group_;
}
inline void V0LayerParameter::set_group(::google::protobuf::uint32 value) {
  set_has_group();
  group_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.group)
}

// optional uint32 stride = 10 [default = 1];
inline bool V0LayerParameter::has_stride() const {
  return (_has_bits_[0] & 0x00000200u) != 0;
}
inline void V0LayerParameter::set_has_stride() {
  _has_bits_[0] |= 0x00000200u;
}
inline void V0LayerParameter::clear_has_stride() {
  _has_bits_[0] &= ~0x00000200u;
}
inline void V0LayerParameter::clear_stride() {
  stride_ = 1u;
  clear_has_stride();
}
inline ::google::protobuf::uint32 V0LayerParameter::stride() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.stride)
  return stride_;
}
inline void V0LayerParameter::set_stride(::google::protobuf::uint32 value) {
  set_has_stride();
  stride_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.stride)
}

// optional .caffe.V0LayerParameter.PoolMethod pool = 11 [default = MAX];
inline bool V0LayerParameter::has_pool() const {
  return (_has_bits_[0] & 0x00000400u) != 0;
}
inline void V0LayerParameter::set_has_pool() {
  _has_bits_[0] |= 0x00000400u;
}
inline void V0LayerParameter::clear_has_pool() {
  _has_bits_[0] &= ~0x00000400u;
}
inline void V0LayerParameter::clear_pool() {
  pool_ = 0;
  clear_has_pool();
}
inline ::caffe::V0LayerParameter_PoolMethod V0LayerParameter::pool() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.pool)
  return static_cast< ::caffe::V0LayerParameter_PoolMethod >(pool_);
}
inline void V0LayerParameter::set_pool(::caffe::V0LayerParameter_PoolMethod value) {
  assert(::caffe::V0LayerParameter_PoolMethod_IsValid(value));
  set_has_pool();
  pool_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.pool)
}

// optional float dropout_ratio = 12 [default = 0.5];
inline bool V0LayerParameter::has_dropout_ratio() const {
  return (_has_bits_[0] & 0x00000800u) != 0;
}
inline void V0LayerParameter::set_has_dropout_ratio() {
  _has_bits_[0] |= 0x00000800u;
}
inline void V0LayerParameter::clear_has_dropout_ratio() {
  _has_bits_[0] &= ~0x00000800u;
}
inline void V0LayerParameter::clear_dropout_ratio() {
  dropout_ratio_ = 0.5f;
  clear_has_dropout_ratio();
}
inline float V0LayerParameter::dropout_ratio() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.dropout_ratio)
  return dropout_ratio_;
}
inline void V0LayerParameter::set_dropout_ratio(float value) {
  set_has_dropout_ratio();
  dropout_ratio_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.dropout_ratio)
}

// optional uint32 local_size = 13 [default = 5];
inline bool V0LayerParameter::has_local_size() const {
  return (_has_bits_[0] & 0x00001000u) != 0;
}
inline void V0LayerParameter::set_has_local_size() {
  _has_bits_[0] |= 0x00001000u;
}
inline void V0LayerParameter::clear_has_local_size() {
  _has_bits_[0] &= ~0x00001000u;
}
inline void V0LayerParameter::clear_local_size() {
  local_size_ = 5u;
  clear_has_local_size();
}
inline ::google::protobuf::uint32 V0LayerParameter::local_size() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.local_size)
  return local_size_;
}
inline void V0LayerParameter::set_local_size(::google::protobuf::uint32 value) {
  set_has_local_size();
  local_size_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.local_size)
}

// optional float alpha = 14 [default = 1];
inline bool V0LayerParameter::has_alpha() const {
  return (_has_bits_[0] & 0x00002000u) != 0;
}
inline void V0LayerParameter::set_has_alpha() {
  _has_bits_[0] |= 0x00002000u;
}
inline void V0LayerParameter::clear_has_alpha() {
  _has_bits_[0] &= ~0x00002000u;
}
inline void V0LayerParameter::clear_alpha() {
  alpha_ = 1;
  clear_has_alpha();
}
inline float V0LayerParameter::alpha() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.alpha)
  return alpha_;
}
inline void V0LayerParameter::set_alpha(float value) {
  set_has_alpha();
  alpha_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.alpha)
}

// optional float beta = 15 [default = 0.75];
inline bool V0LayerParameter::has_beta() const {
  return (_has_bits_[0] & 0x00004000u) != 0;
}
inline void V0LayerParameter::set_has_beta() {
  _has_bits_[0] |= 0x00004000u;
}
inline void V0LayerParameter::clear_has_beta() {
  _has_bits_[0] &= ~0x00004000u;
}
inline void V0LayerParameter::clear_beta() {
  beta_ = 0.75f;
  clear_has_beta();
}
inline float V0LayerParameter::beta() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.beta)
  return beta_;
}
inline void V0LayerParameter::set_beta(float value) {
  set_has_beta();
  beta_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.beta)
}

// optional float k = 22 [default = 1];
inline bool V0LayerParameter::has_k() const {
  return (_has_bits_[0] & 0x00008000u) != 0;
}
inline void V0LayerParameter::set_has_k() {
  _has_bits_[0] |= 0x00008000u;
}
inline void V0LayerParameter::clear_has_k() {
  _has_bits_[0] &= ~0x00008000u;
}
inline void V0LayerParameter::clear_k() {
  k_ = 1;
  clear_has_k();
}
inline float V0LayerParameter::k() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.k)
  return k_;
}
inline void V0LayerParameter::set_k(float value) {
  set_has_k();
  k_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.k)
}

// optional string source = 16;
inline bool V0LayerParameter::has_source() const {
  return (_has_bits_[0] & 0x00010000u) != 0;
}
inline void V0LayerParameter::set_has_source() {
  _has_bits_[0] |= 0x00010000u;
}
inline void V0LayerParameter::clear_has_source() {
  _has_bits_[0] &= ~0x00010000u;
}
inline void V0LayerParameter::clear_source() {
  source_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_source();
}
inline const ::std::string& V0LayerParameter::source() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.source)
  return source_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void V0LayerParameter::set_source(const ::std::string& value) {
  set_has_source();
  source_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.source)
}
inline void V0LayerParameter::set_source(const char* value) {
  set_has_source();
  source_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.V0LayerParameter.source)
}
inline void V0LayerParameter::set_source(const char* value, size_t size) {
  set_has_source();
  source_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.V0LayerParameter.source)
}
inline ::std::string* V0LayerParameter::mutable_source() {
  set_has_source();
  // @@protoc_insertion_point(field_mutable:caffe.V0LayerParameter.source)
  return source_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* V0LayerParameter::release_source() {
  // @@protoc_insertion_point(field_release:caffe.V0LayerParameter.source)
  clear_has_source();
  return source_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void V0LayerParameter::set_allocated_source(::std::string* source) {
  if (source != NULL) {
    set_has_source();
  } else {
    clear_has_source();
  }
  source_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), source);
  // @@protoc_insertion_point(field_set_allocated:caffe.V0LayerParameter.source)
}

// optional float scale = 17 [default = 1];
inline bool V0LayerParameter::has_scale() const {
  return (_has_bits_[0] & 0x00020000u) != 0;
}
inline void V0LayerParameter::set_has_scale() {
  _has_bits_[0] |= 0x00020000u;
}
inline void V0LayerParameter::clear_has_scale() {
  _has_bits_[0] &= ~0x00020000u;
}
inline void V0LayerParameter::clear_scale() {
  scale_ = 1;
  clear_has_scale();
}
inline float V0LayerParameter::scale() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.scale)
  return scale_;
}
inline void V0LayerParameter::set_scale(float value) {
  set_has_scale();
  scale_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.scale)
}

// optional string meanfile = 18;
inline bool V0LayerParameter::has_meanfile() const {
  return (_has_bits_[0] & 0x00040000u) != 0;
}
inline void V0LayerParameter::set_has_meanfile() {
  _has_bits_[0] |= 0x00040000u;
}
inline void V0LayerParameter::clear_has_meanfile() {
  _has_bits_[0] &= ~0x00040000u;
}
inline void V0LayerParameter::clear_meanfile() {
  meanfile_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  clear_has_meanfile();
}
inline const ::std::string& V0LayerParameter::meanfile() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.meanfile)
  return meanfile_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void V0LayerParameter::set_meanfile(const ::std::string& value) {
  set_has_meanfile();
  meanfile_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.meanfile)
}
inline void V0LayerParameter::set_meanfile(const char* value) {
  set_has_meanfile();
  meanfile_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.V0LayerParameter.meanfile)
}
inline void V0LayerParameter::set_meanfile(const char* value, size_t size) {
  set_has_meanfile();
  meanfile_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.V0LayerParameter.meanfile)
}
inline ::std::string* V0LayerParameter::mutable_meanfile() {
  set_has_meanfile();
  // @@protoc_insertion_point(field_mutable:caffe.V0LayerParameter.meanfile)
  return meanfile_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* V0LayerParameter::release_meanfile() {
  // @@protoc_insertion_point(field_release:caffe.V0LayerParameter.meanfile)
  clear_has_meanfile();
  return meanfile_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void V0LayerParameter::set_allocated_meanfile(::std::string* meanfile) {
  if (meanfile != NULL) {
    set_has_meanfile();
  } else {
    clear_has_meanfile();
  }
  meanfile_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), meanfile);
  // @@protoc_insertion_point(field_set_allocated:caffe.V0LayerParameter.meanfile)
}

// optional uint32 batchsize = 19;
inline bool V0LayerParameter::has_batchsize() const {
  return (_has_bits_[0] & 0x00080000u) != 0;
}
inline void V0LayerParameter::set_has_batchsize() {
  _has_bits_[0] |= 0x00080000u;
}
inline void V0LayerParameter::clear_has_batchsize() {
  _has_bits_[0] &= ~0x00080000u;
}
inline void V0LayerParameter::clear_batchsize() {
  batchsize_ = 0u;
  clear_has_batchsize();
}
inline ::google::protobuf::uint32 V0LayerParameter::batchsize() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.batchsize)
  return batchsize_;
}
inline void V0LayerParameter::set_batchsize(::google::protobuf::uint32 value) {
  set_has_batchsize();
  batchsize_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.batchsize)
}

// optional uint32 cropsize = 20 [default = 0];
inline bool V0LayerParameter::has_cropsize() const {
  return (_has_bits_[0] & 0x00100000u) != 0;
}
inline void V0LayerParameter::set_has_cropsize() {
  _has_bits_[0] |= 0x00100000u;
}
inline void V0LayerParameter::clear_has_cropsize() {
  _has_bits_[0] &= ~0x00100000u;
}
inline void V0LayerParameter::clear_cropsize() {
  cropsize_ = 0u;
  clear_has_cropsize();
}
inline ::google::protobuf::uint32 V0LayerParameter::cropsize() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.cropsize)
  return cropsize_;
}
inline void V0LayerParameter::set_cropsize(::google::protobuf::uint32 value) {
  set_has_cropsize();
  cropsize_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.cropsize)
}

// optional bool mirror = 21 [default = false];
inline bool V0LayerParameter::has_mirror() const {
  return (_has_bits_[0] & 0x00200000u) != 0;
}
inline void V0LayerParameter::set_has_mirror() {
  _has_bits_[0] |= 0x00200000u;
}
inline void V0LayerParameter::clear_has_mirror() {
  _has_bits_[0] &= ~0x00200000u;
}
inline void V0LayerParameter::clear_mirror() {
  mirror_ = false;
  clear_has_mirror();
}
inline bool V0LayerParameter::mirror() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.mirror)
  return mirror_;
}
inline void V0LayerParameter::set_mirror(bool value) {
  set_has_mirror();
  mirror_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.mirror)
}

// repeated .caffe.BlobProto blobs = 50;
inline int V0LayerParameter::blobs_size() const {
  return blobs_.size();
}
inline void V0LayerParameter::clear_blobs() {
  blobs_.Clear();
}
inline const ::caffe::BlobProto& V0LayerParameter::blobs(int index) const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.blobs)
  return blobs_.Get(index);
}
inline ::caffe::BlobProto* V0LayerParameter::mutable_blobs(int index) {
  // @@protoc_insertion_point(field_mutable:caffe.V0LayerParameter.blobs)
  return blobs_.Mutable(index);
}
inline ::caffe::BlobProto* V0LayerParameter::add_blobs() {
  // @@protoc_insertion_point(field_add:caffe.V0LayerParameter.blobs)
  return blobs_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto >*
V0LayerParameter::mutable_blobs() {
  // @@protoc_insertion_point(field_mutable_list:caffe.V0LayerParameter.blobs)
  return &blobs_;
}
inline const ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto >&
V0LayerParameter::blobs() const {
  // @@protoc_insertion_point(field_list:caffe.V0LayerParameter.blobs)
  return blobs_;
}

// repeated float blobs_lr = 51;
inline int V0LayerParameter::blobs_lr_size() const {
  return blobs_lr_.size();
}
inline void V0LayerParameter::clear_blobs_lr() {
  blobs_lr_.Clear();
}
inline float V0LayerParameter::blobs_lr(int index) const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.blobs_lr)
  return blobs_lr_.Get(index);
}
inline void V0LayerParameter::set_blobs_lr(int index, float value) {
  blobs_lr_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.blobs_lr)
}
inline void V0LayerParameter::add_blobs_lr(float value) {
  blobs_lr_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.V0LayerParameter.blobs_lr)
}
inline const ::google::protobuf::RepeatedField< float >&
V0LayerParameter::blobs_lr() const {
  // @@protoc_insertion_point(field_list:caffe.V0LayerParameter.blobs_lr)
  return blobs_lr_;
}
inline ::google::protobuf::RepeatedField< float >*
V0LayerParameter::mutable_blobs_lr() {
  // @@protoc_insertion_point(field_mutable_list:caffe.V0LayerParameter.blobs_lr)
  return &blobs_lr_;
}

// repeated float weight_decay = 52;
inline int V0LayerParameter::weight_decay_size() const {
  return weight_decay_.size();
}
inline void V0LayerParameter::clear_weight_decay() {
  weight_decay_.Clear();
}
inline float V0LayerParameter::weight_decay(int index) const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.weight_decay)
  return weight_decay_.Get(index);
}
inline void V0LayerParameter::set_weight_decay(int index, float value) {
  weight_decay_.Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.weight_decay)
}
inline void V0LayerParameter::add_weight_decay(float value) {
  weight_decay_.Add(value);
  // @@protoc_insertion_point(field_add:caffe.V0LayerParameter.weight_decay)
}
inline const ::google::protobuf::RepeatedField< float >&
V0LayerParameter::weight_decay() const {
  // @@protoc_insertion_point(field_list:caffe.V0LayerParameter.weight_decay)
  return weight_decay_;
}
inline ::google::protobuf::RepeatedField< float >*
V0LayerParameter::mutable_weight_decay() {
  // @@protoc_insertion_point(field_mutable_list:caffe.V0LayerParameter.weight_decay)
  return &weight_decay_;
}

// optional uint32 rand_skip = 53 [default = 0];
inline bool V0LayerParameter::has_rand_skip() const {
  return (_has_bits_[0] & 0x02000000u) != 0;
}
inline void V0LayerParameter::set_has_rand_skip() {
  _has_bits_[0] |= 0x02000000u;
}
inline void V0LayerParameter::clear_has_rand_skip() {
  _has_bits_[0] &= ~0x02000000u;
}
inline void V0LayerParameter::clear_rand_skip() {
  rand_skip_ = 0u;
  clear_has_rand_skip();
}
inline ::google::protobuf::uint32 V0LayerParameter::rand_skip() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.rand_skip)
  return rand_skip_;
}
inline void V0LayerParameter::set_rand_skip(::google::protobuf::uint32 value) {
  set_has_rand_skip();
  rand_skip_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.rand_skip)
}

// optional float det_fg_threshold = 54 [default = 0.5];
inline bool V0LayerParameter::has_det_fg_threshold() const {
  return (_has_bits_[0] & 0x04000000u) != 0;
}
inline void V0LayerParameter::set_has_det_fg_threshold() {
  _has_bits_[0] |= 0x04000000u;
}
inline void V0LayerParameter::clear_has_det_fg_threshold() {
  _has_bits_[0] &= ~0x04000000u;
}
inline void V0LayerParameter::clear_det_fg_threshold() {
  det_fg_threshold_ = 0.5f;
  clear_has_det_fg_threshold();
}
inline float V0LayerParameter::det_fg_threshold() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.det_fg_threshold)
  return det_fg_threshold_;
}
inline void V0LayerParameter::set_det_fg_threshold(float value) {
  set_has_det_fg_threshold();
  det_fg_threshold_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.det_fg_threshold)
}

// optional float det_bg_threshold = 55 [default = 0.5];
inline bool V0LayerParameter::has_det_bg_threshold() const {
  return (_has_bits_[0] & 0x08000000u) != 0;
}
inline void V0LayerParameter::set_has_det_bg_threshold() {
  _has_bits_[0] |= 0x08000000u;
}
inline void V0LayerParameter::clear_has_det_bg_threshold() {
  _has_bits_[0] &= ~0x08000000u;
}
inline void V0LayerParameter::clear_det_bg_threshold() {
  det_bg_threshold_ = 0.5f;
  clear_has_det_bg_threshold();
}
inline float V0LayerParameter::det_bg_threshold() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.det_bg_threshold)
  return det_bg_threshold_;
}
inline void V0LayerParameter::set_det_bg_threshold(float value) {
  set_has_det_bg_threshold();
  det_bg_threshold_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.det_bg_threshold)
}

// optional float det_fg_fraction = 56 [default = 0.25];
inline bool V0LayerParameter::has_det_fg_fraction() const {
  return (_has_bits_[0] & 0x10000000u) != 0;
}
inline void V0LayerParameter::set_has_det_fg_fraction() {
  _has_bits_[0] |= 0x10000000u;
}
inline void V0LayerParameter::clear_has_det_fg_fraction() {
  _has_bits_[0] &= ~0x10000000u;
}
inline void V0LayerParameter::clear_det_fg_fraction() {
  det_fg_fraction_ = 0.25f;
  clear_has_det_fg_fraction();
}
inline float V0LayerParameter::det_fg_fraction() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.det_fg_fraction)
  return det_fg_fraction_;
}
inline void V0LayerParameter::set_det_fg_fraction(float value) {
  set_has_det_fg_fraction();
  det_fg_fraction_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.det_fg_fraction)
}

// optional uint32 det_context_pad = 58 [default = 0];
inline bool V0LayerParameter::has_det_context_pad() const {
  return (_has_bits_[0] & 0x20000000u) != 0;
}
inline void V0LayerParameter::set_has_det_context_pad() {
  _has_bits_[0] |= 0x20000000u;
}
inline void V0LayerParameter::clear_has_det_context_pad() {
  _has_bits_[0] &= ~0x20000000u;
}
inline void V0LayerParameter::clear_det_context_pad() {
  det_context_pad_ = 0u;
  clear_has_det_context_pad();
}
inline ::google::protobuf::uint32 V0LayerParameter::det_context_pad() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.det_context_pad)
  return det_context_pad_;
}
inline void V0LayerParameter::set_det_context_pad(::google::protobuf::uint32 value) {
  set_has_det_context_pad();
  det_context_pad_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.det_context_pad)
}

// optional string det_crop_mode = 59 [default = "warp"];
inline bool V0LayerParameter::has_det_crop_mode() const {
  return (_has_bits_[0] & 0x40000000u) != 0;
}
inline void V0LayerParameter::set_has_det_crop_mode() {
  _has_bits_[0] |= 0x40000000u;
}
inline void V0LayerParameter::clear_has_det_crop_mode() {
  _has_bits_[0] &= ~0x40000000u;
}
inline void V0LayerParameter::clear_det_crop_mode() {
  det_crop_mode_.ClearToDefaultNoArena(_default_det_crop_mode_);
  clear_has_det_crop_mode();
}
inline const ::std::string& V0LayerParameter::det_crop_mode() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.det_crop_mode)
  return det_crop_mode_.GetNoArena(_default_det_crop_mode_);
}
inline void V0LayerParameter::set_det_crop_mode(const ::std::string& value) {
  set_has_det_crop_mode();
  det_crop_mode_.SetNoArena(_default_det_crop_mode_, value);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.det_crop_mode)
}
inline void V0LayerParameter::set_det_crop_mode(const char* value) {
  set_has_det_crop_mode();
  det_crop_mode_.SetNoArena(_default_det_crop_mode_, ::std::string(value));
  // @@protoc_insertion_point(field_set_char:caffe.V0LayerParameter.det_crop_mode)
}
inline void V0LayerParameter::set_det_crop_mode(const char* value, size_t size) {
  set_has_det_crop_mode();
  det_crop_mode_.SetNoArena(_default_det_crop_mode_,
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:caffe.V0LayerParameter.det_crop_mode)
}
inline ::std::string* V0LayerParameter::mutable_det_crop_mode() {
  set_has_det_crop_mode();
  // @@protoc_insertion_point(field_mutable:caffe.V0LayerParameter.det_crop_mode)
  return det_crop_mode_.MutableNoArena(_default_det_crop_mode_);
}
inline ::std::string* V0LayerParameter::release_det_crop_mode() {
  // @@protoc_insertion_point(field_release:caffe.V0LayerParameter.det_crop_mode)
  clear_has_det_crop_mode();
  return det_crop_mode_.ReleaseNoArena(_default_det_crop_mode_);
}
inline void V0LayerParameter::set_allocated_det_crop_mode(::std::string* det_crop_mode) {
  if (det_crop_mode != NULL) {
    set_has_det_crop_mode();
  } else {
    clear_has_det_crop_mode();
  }
  det_crop_mode_.SetAllocatedNoArena(_default_det_crop_mode_, det_crop_mode);
  // @@protoc_insertion_point(field_set_allocated:caffe.V0LayerParameter.det_crop_mode)
}

// optional int32 new_num = 60 [default = 0];
inline bool V0LayerParameter::has_new_num() const {
  return (_has_bits_[0] & 0x80000000u) != 0;
}
inline void V0LayerParameter::set_has_new_num() {
  _has_bits_[0] |= 0x80000000u;
}
inline void V0LayerParameter::clear_has_new_num() {
  _has_bits_[0] &= ~0x80000000u;
}
inline void V0LayerParameter::clear_new_num() {
  new_num_ = 0;
  clear_has_new_num();
}
inline ::google::protobuf::int32 V0LayerParameter::new_num() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.new_num)
  return new_num_;
}
inline void V0LayerParameter::set_new_num(::google::protobuf::int32 value) {
  set_has_new_num();
  new_num_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.new_num)
}

// optional int32 new_channels = 61 [default = 0];
inline bool V0LayerParameter::has_new_channels() const {
  return (_has_bits_[1] & 0x00000001u) != 0;
}
inline void V0LayerParameter::set_has_new_channels() {
  _has_bits_[1] |= 0x00000001u;
}
inline void V0LayerParameter::clear_has_new_channels() {
  _has_bits_[1] &= ~0x00000001u;
}
inline void V0LayerParameter::clear_new_channels() {
  new_channels_ = 0;
  clear_has_new_channels();
}
inline ::google::protobuf::int32 V0LayerParameter::new_channels() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.new_channels)
  return new_channels_;
}
inline void V0LayerParameter::set_new_channels(::google::protobuf::int32 value) {
  set_has_new_channels();
  new_channels_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.new_channels)
}

// optional int32 new_height = 62 [default = 0];
inline bool V0LayerParameter::has_new_height() const {
  return (_has_bits_[1] & 0x00000002u) != 0;
}
inline void V0LayerParameter::set_has_new_height() {
  _has_bits_[1] |= 0x00000002u;
}
inline void V0LayerParameter::clear_has_new_height() {
  _has_bits_[1] &= ~0x00000002u;
}
inline void V0LayerParameter::clear_new_height() {
  new_height_ = 0;
  clear_has_new_height();
}
inline ::google::protobuf::int32 V0LayerParameter::new_height() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.new_height)
  return new_height_;
}
inline void V0LayerParameter::set_new_height(::google::protobuf::int32 value) {
  set_has_new_height();
  new_height_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.new_height)
}

// optional int32 new_width = 63 [default = 0];
inline bool V0LayerParameter::has_new_width() const {
  return (_has_bits_[1] & 0x00000004u) != 0;
}
inline void V0LayerParameter::set_has_new_width() {
  _has_bits_[1] |= 0x00000004u;
}
inline void V0LayerParameter::clear_has_new_width() {
  _has_bits_[1] &= ~0x00000004u;
}
inline void V0LayerParameter::clear_new_width() {
  new_width_ = 0;
  clear_has_new_width();
}
inline ::google::protobuf::int32 V0LayerParameter::new_width() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.new_width)
  return new_width_;
}
inline void V0LayerParameter::set_new_width(::google::protobuf::int32 value) {
  set_has_new_width();
  new_width_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.new_width)
}

// optional bool shuffle_images = 64 [default = false];
inline bool V0LayerParameter::has_shuffle_images() const {
  return (_has_bits_[1] & 0x00000008u) != 0;
}
inline void V0LayerParameter::set_has_shuffle_images() {
  _has_bits_[1] |= 0x00000008u;
}
inline void V0LayerParameter::clear_has_shuffle_images() {
  _has_bits_[1] &= ~0x00000008u;
}
inline void V0LayerParameter::clear_shuffle_images() {
  shuffle_images_ = false;
  clear_has_shuffle_images();
}
inline bool V0LayerParameter::shuffle_images() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.shuffle_images)
  return shuffle_images_;
}
inline void V0LayerParameter::set_shuffle_images(bool value) {
  set_has_shuffle_images();
  shuffle_images_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.shuffle_images)
}

// optional uint32 concat_dim = 65 [default = 1];
inline bool V0LayerParameter::has_concat_dim() const {
  return (_has_bits_[1] & 0x00000010u) != 0;
}
inline void V0LayerParameter::set_has_concat_dim() {
  _has_bits_[1] |= 0x00000010u;
}
inline void V0LayerParameter::clear_has_concat_dim() {
  _has_bits_[1] &= ~0x00000010u;
}
inline void V0LayerParameter::clear_concat_dim() {
  concat_dim_ = 1u;
  clear_has_concat_dim();
}
inline ::google::protobuf::uint32 V0LayerParameter::concat_dim() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.concat_dim)
  return concat_dim_;
}
inline void V0LayerParameter::set_concat_dim(::google::protobuf::uint32 value) {
  set_has_concat_dim();
  concat_dim_ = value;
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.concat_dim)
}

// optional .caffe.HDF5OutputParameter hdf5_output_param = 1001;
inline bool V0LayerParameter::has_hdf5_output_param() const {
  return (_has_bits_[1] & 0x00000020u) != 0;
}
inline void V0LayerParameter::set_has_hdf5_output_param() {
  _has_bits_[1] |= 0x00000020u;
}
inline void V0LayerParameter::clear_has_hdf5_output_param() {
  _has_bits_[1] &= ~0x00000020u;
}
inline void V0LayerParameter::clear_hdf5_output_param() {
  if (hdf5_output_param_ != NULL) hdf5_output_param_->::caffe::HDF5OutputParameter::Clear();
  clear_has_hdf5_output_param();
}
inline const ::caffe::HDF5OutputParameter& V0LayerParameter::hdf5_output_param() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.hdf5_output_param)
  return hdf5_output_param_ != NULL ? *hdf5_output_param_
                         : *::caffe::HDF5OutputParameter::internal_default_instance();
}
inline ::caffe::HDF5OutputParameter* V0LayerParameter::mutable_hdf5_output_param() {
  set_has_hdf5_output_param();
  if (hdf5_output_param_ == NULL) {
    hdf5_output_param_ = new ::caffe::HDF5OutputParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.V0LayerParameter.hdf5_output_param)
  return hdf5_output_param_;
}
inline ::caffe::HDF5OutputParameter* V0LayerParameter::release_hdf5_output_param() {
  // @@protoc_insertion_point(field_release:caffe.V0LayerParameter.hdf5_output_param)
  clear_has_hdf5_output_param();
  ::caffe::HDF5OutputParameter* temp = hdf5_output_param_;
  hdf5_output_param_ = NULL;
  return temp;
}
inline void V0LayerParameter::set_allocated_hdf5_output_param(::caffe::HDF5OutputParameter* hdf5_output_param) {
  delete hdf5_output_param_;
  hdf5_output_param_ = hdf5_output_param;
  if (hdf5_output_param) {
    set_has_hdf5_output_param();
  } else {
    clear_has_hdf5_output_param();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V0LayerParameter.hdf5_output_param)
}

inline const V0LayerParameter* V0LayerParameter::internal_default_instance() {
  return &V0LayerParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// PReLUParameter

// optional .caffe.FillerParameter filler = 1;
inline bool PReLUParameter::has_filler() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void PReLUParameter::set_has_filler() {
  _has_bits_[0] |= 0x00000001u;
}
inline void PReLUParameter::clear_has_filler() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void PReLUParameter::clear_filler() {
  if (filler_ != NULL) filler_->::caffe::FillerParameter::Clear();
  clear_has_filler();
}
inline const ::caffe::FillerParameter& PReLUParameter::filler() const {
  // @@protoc_insertion_point(field_get:caffe.PReLUParameter.filler)
  return filler_ != NULL ? *filler_
                         : *::caffe::FillerParameter::internal_default_instance();
}
inline ::caffe::FillerParameter* PReLUParameter::mutable_filler() {
  set_has_filler();
  if (filler_ == NULL) {
    filler_ = new ::caffe::FillerParameter;
  }
  // @@protoc_insertion_point(field_mutable:caffe.PReLUParameter.filler)
  return filler_;
}
inline ::caffe::FillerParameter* PReLUParameter::release_filler() {
  // @@protoc_insertion_point(field_release:caffe.PReLUParameter.filler)
  clear_has_filler();
  ::caffe::FillerParameter* temp = filler_;
  filler_ = NULL;
  return temp;
}
inline void PReLUParameter::set_allocated_filler(::caffe::FillerParameter* filler) {
  delete filler_;
  filler_ = filler;
  if (filler) {
    set_has_filler();
  } else {
    clear_has_filler();
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.PReLUParameter.filler)
}

// optional bool channel_shared = 2 [default = false];
inline bool PReLUParameter::has_channel_shared() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void PReLUParameter::set_has_channel_shared() {
  _has_bits_[0] |= 0x00000002u;
}
inline void PReLUParameter::clear_has_channel_shared() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void PReLUParameter::clear_channel_shared() {
  channel_shared_ = false;
  clear_has_channel_shared();
}
inline bool PReLUParameter::channel_shared() const {
  // @@protoc_insertion_point(field_get:caffe.PReLUParameter.channel_shared)
  return channel_shared_;
}
inline void PReLUParameter::set_channel_shared(bool value) {
  set_has_channel_shared();
  channel_shared_ = value;
  // @@protoc_insertion_point(field_set:caffe.PReLUParameter.channel_shared)
}

inline const PReLUParameter* PReLUParameter::internal_default_instance() {
  return &PReLUParameter_default_instance_.get();
}
// -------------------------------------------------------------------

// NormalizedBBox

// optional float xmin = 1;
inline bool NormalizedBBox::has_xmin() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void NormalizedBBox::set_has_xmin() {
  _has_bits_[0] |= 0x00000001u;
}
inline void NormalizedBBox::clear_has_xmin() {
  _has_bits_[0] &= ~0x00000001u;
}
inline void NormalizedBBox::clear_xmin() {
  xmin_ = 0;
  clear_has_xmin();
}
inline float NormalizedBBox::xmin() const {
  // @@protoc_insertion_point(field_get:caffe.NormalizedBBox.xmin)
  return xmin_;
}
inline void NormalizedBBox::set_xmin(float value) {
  set_has_xmin();
  xmin_ = value;
  // @@protoc_insertion_point(field_set:caffe.NormalizedBBox.xmin)
}

// optional float ymin = 2;
inline bool NormalizedBBox::has_ymin() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void NormalizedBBox::set_has_ymin() {
  _has_bits_[0] |= 0x00000002u;
}
inline void NormalizedBBox::clear_has_ymin() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void NormalizedBBox::clear_ymin() {
  ymin_ = 0;
  clear_has_ymin();
}
inline float NormalizedBBox::ymin() const {
  // @@protoc_insertion_point(field_get:caffe.NormalizedBBox.ymin)
  return ymin_;
}
inline void NormalizedBBox::set_ymin(float value) {
  set_has_ymin();
  ymin_ = value;
  // @@protoc_insertion_point(field_set:caffe.NormalizedBBox.ymin)
}

// optional float xmax = 3;
inline bool NormalizedBBox::has_xmax() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void NormalizedBBox::set_has_xmax() {
  _has_bits_[0] |= 0x00000004u;
}
inline void NormalizedBBox::clear_has_xmax() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void NormalizedBBox::clear_xmax() {
  xmax_ = 0;
  clear_has_xmax();
}
inline float NormalizedBBox::xmax() const {
  // @@protoc_insertion_point(field_get:caffe.NormalizedBBox.xmax)
  return xmax_;
}
inline void NormalizedBBox::set_xmax(float value) {
  set_has_xmax();
  xmax_ = value;
  // @@protoc_insertion_point(field_set:caffe.NormalizedBBox.xmax)
}

// optional float ymax = 4;
inline bool NormalizedBBox::has_ymax() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void NormalizedBBox::set_has_ymax() {
  _has_bits_[0] |= 0x00000008u;
}
inline void NormalizedBBox::clear_has_ymax() {
  _has_bits_[0] &= ~0x00000008u;
}
inline void NormalizedBBox::clear_ymax() {
  ymax_ = 0;
  clear_has_ymax();
}
inline float NormalizedBBox::ymax() const {
  // @@protoc_insertion_point(field_get:caffe.NormalizedBBox.ymax)
  return ymax_;
}
inline void NormalizedBBox::set_ymax(float value) {
  set_has_ymax();
  ymax_ = value;
  // @@protoc_insertion_point(field_set:caffe.NormalizedBBox.ymax)
}

// optional int32 label = 5;
inline bool NormalizedBBox::has_label() const {
  return (_has_bits_[0] & 0x00000010u) != 0;
}
inline void NormalizedBBox::set_has_label() {
  _has_bits_[0] |= 0x00000010u;
}
inline void NormalizedBBox::clear_has_label() {
  _has_bits_[0] &= ~0x00000010u;
}
inline void NormalizedBBox::clear_label() {
  label_ = 0;
  clear_has_label();
}
inline ::google::protobuf::int32 NormalizedBBox::label() const {
  // @@protoc_insertion_point(field_get:caffe.NormalizedBBox.label)
  return label_;
}
inline void NormalizedBBox::set_label(::google::protobuf::int32 value) {
  set_has_label();
  label_ = value;
  // @@protoc_insertion_point(field_set:caffe.NormalizedBBox.label)
}

// optional bool difficult = 6;
inline bool NormalizedBBox::has_difficult() const {
  return (_has_bits_[0] & 0x00000020u) != 0;
}
inline void NormalizedBBox::set_has_difficult() {
  _has_bits_[0] |= 0x00000020u;
}
inline void NormalizedBBox::clear_has_difficult() {
  _has_bits_[0] &= ~0x00000020u;
}
inline void NormalizedBBox::clear_difficult() {
  difficult_ = false;
  clear_has_difficult();
}
inline bool NormalizedBBox::difficult() const {
  // @@protoc_insertion_point(field_get:caffe.NormalizedBBox.difficult)
  return difficult_;
}
inline void NormalizedBBox::set_difficult(bool value) {
  set_has_difficult();
  difficult_ = value;
  // @@protoc_insertion_point(field_set:caffe.NormalizedBBox.difficult)
}

// optional float score = 7;
inline bool NormalizedBBox::has_score() const {
  return (_has_bits_[0] & 0x00000040u) != 0;
}
inline void NormalizedBBox::set_has_score() {
  _has_bits_[0] |= 0x00000040u;
}
inline void NormalizedBBox::clear_has_score() {
  _has_bits_[0] &= ~0x00000040u;
}
inline void NormalizedBBox::clear_score() {
  score_ = 0;
  clear_has_score();
}
inline float NormalizedBBox::score() const {
  // @@protoc_insertion_point(field_get:caffe.NormalizedBBox.score)
  return score_;
}
inline void NormalizedBBox::set_score(float value) {
  set_has_score();
  score_ = value;
  // @@protoc_insertion_point(field_set:caffe.NormalizedBBox.score)
}

// optional float size = 8;
inline bool NormalizedBBox::has_size() const {
  return (_has_bits_[0] & 0x00000080u) != 0;
}
inline void NormalizedBBox::set_has_size() {
  _has_bits_[0] |= 0x00000080u;
}
inline void NormalizedBBox::clear_has_size() {
  _has_bits_[0] &= ~0x00000080u;
}
inline void NormalizedBBox::clear_size() {
  size_ = 0;
  clear_has_size();
}
inline float NormalizedBBox::size() const {
  // @@protoc_insertion_point(field_get:caffe.NormalizedBBox.size)
  return size_;
}
inline void NormalizedBBox::set_size(float value) {
  set_has_size();
  size_ = value;
  // @@protoc_insertion_point(field_set:caffe.NormalizedBBox.size)
}

inline const NormalizedBBox* NormalizedBBox::internal_default_instance() {
  return &NormalizedBBox_default_instance_.get();
}
#endif  // !PROTOBUF_INLINE_NOT_IN_HEADERS
// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------


// @@protoc_insertion_point(namespace_scope)

}  // namespace caffe

#ifndef SWIG
namespace google {
namespace protobuf {

template <> struct is_proto_enum< ::caffe::PriorBoxParameter_CodeType> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::PriorBoxParameter_CodeType>() {
  return ::caffe::PriorBoxParameter_CodeType_descriptor();
}
template <> struct is_proto_enum< ::caffe::FillerParameter_VarianceNorm> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::FillerParameter_VarianceNorm>() {
  return ::caffe::FillerParameter_VarianceNorm_descriptor();
}
template <> struct is_proto_enum< ::caffe::SolverParameter_SolverMode> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::SolverParameter_SolverMode>() {
  return ::caffe::SolverParameter_SolverMode_descriptor();
}
template <> struct is_proto_enum< ::caffe::SolverParameter_SolverType> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::SolverParameter_SolverType>() {
  return ::caffe::SolverParameter_SolverType_descriptor();
}
template <> struct is_proto_enum< ::caffe::ParamSpec_DimCheckMode> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::ParamSpec_DimCheckMode>() {
  return ::caffe::ParamSpec_DimCheckMode_descriptor();
}
template <> struct is_proto_enum< ::caffe::ConvolutionParameter_Engine> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::ConvolutionParameter_Engine>() {
  return ::caffe::ConvolutionParameter_Engine_descriptor();
}
template <> struct is_proto_enum< ::caffe::DataParameter_DB> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::DataParameter_DB>() {
  return ::caffe::DataParameter_DB_descriptor();
}
template <> struct is_proto_enum< ::caffe::EltwiseParameter_EltwiseOp> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::EltwiseParameter_EltwiseOp>() {
  return ::caffe::EltwiseParameter_EltwiseOp_descriptor();
}
template <> struct is_proto_enum< ::caffe::HingeLossParameter_Norm> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::HingeLossParameter_Norm>() {
  return ::caffe::HingeLossParameter_Norm_descriptor();
}
template <> struct is_proto_enum< ::caffe::LRNParameter_NormRegion> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::LRNParameter_NormRegion>() {
  return ::caffe::LRNParameter_NormRegion_descriptor();
}
template <> struct is_proto_enum< ::caffe::PoolingParameter_PoolMethod> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::PoolingParameter_PoolMethod>() {
  return ::caffe::PoolingParameter_PoolMethod_descriptor();
}
template <> struct is_proto_enum< ::caffe::PoolingParameter_Engine> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::PoolingParameter_Engine>() {
  return ::caffe::PoolingParameter_Engine_descriptor();
}
template <> struct is_proto_enum< ::caffe::ReductionParameter_ReductionOp> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::ReductionParameter_ReductionOp>() {
  return ::caffe::ReductionParameter_ReductionOp_descriptor();
}
template <> struct is_proto_enum< ::caffe::ReLUParameter_Engine> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::ReLUParameter_Engine>() {
  return ::caffe::ReLUParameter_Engine_descriptor();
}
template <> struct is_proto_enum< ::caffe::SigmoidParameter_Engine> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::SigmoidParameter_Engine>() {
  return ::caffe::SigmoidParameter_Engine_descriptor();
}
template <> struct is_proto_enum< ::caffe::SoftmaxParameter_Engine> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::SoftmaxParameter_Engine>() {
  return ::caffe::SoftmaxParameter_Engine_descriptor();
}
template <> struct is_proto_enum< ::caffe::TanHParameter_Engine> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::TanHParameter_Engine>() {
  return ::caffe::TanHParameter_Engine_descriptor();
}
template <> struct is_proto_enum< ::caffe::SPPParameter_PoolMethod> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::SPPParameter_PoolMethod>() {
  return ::caffe::SPPParameter_PoolMethod_descriptor();
}
template <> struct is_proto_enum< ::caffe::SPPParameter_Engine> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::SPPParameter_Engine>() {
  return ::caffe::SPPParameter_Engine_descriptor();
}
template <> struct is_proto_enum< ::caffe::V1LayerParameter_LayerType> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::V1LayerParameter_LayerType>() {
  return ::caffe::V1LayerParameter_LayerType_descriptor();
}
template <> struct is_proto_enum< ::caffe::V1LayerParameter_DimCheckMode> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::V1LayerParameter_DimCheckMode>() {
  return ::caffe::V1LayerParameter_DimCheckMode_descriptor();
}
template <> struct is_proto_enum< ::caffe::V0LayerParameter_PoolMethod> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::V0LayerParameter_PoolMethod>() {
  return ::caffe::V0LayerParameter_PoolMethod_descriptor();
}
template <> struct is_proto_enum< ::caffe::Phase> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::caffe::Phase>() {
  return ::caffe::Phase_descriptor();
}

}  // namespace protobuf
}  // namespace google
#endif  // SWIG

// @@protoc_insertion_point(global_scope)

#endif  // PROTOBUF_caffe_2eproto__INCLUDED
