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

package caffe;

public final class Loadcaffe {
    private Loadcaffe() {}
    public static void registerAllExtensions(
            com.google.protobuf.ExtensionRegistry registry) {
    }
    /**
     * Protobuf enum {@code caffe.Phase}
     */
    public enum Phase
            implements com.google.protobuf.ProtocolMessageEnum {
        /**
         * <code>TRAIN = 0;</code>
         */
        TRAIN(0, 0),
        /**
         * <code>TEST = 1;</code>
         */
        TEST(1, 1),
        ;

        /**
         * <code>TRAIN = 0;</code>
         */
        public static final int TRAIN_VALUE = 0;
        /**
         * <code>TEST = 1;</code>
         */
        public static final int TEST_VALUE = 1;


        public final int getNumber() { return value; }

        public static Phase valueOf(int value) {
            switch (value) {
                case 0: return TRAIN;
                case 1: return TEST;
                default: return null;
            }
        }

        public static com.google.protobuf.Internal.EnumLiteMap<Phase>
        internalGetValueMap() {
            return internalValueMap;
        }
        private static com.google.protobuf.Internal.EnumLiteMap<Phase>
                internalValueMap =
                new com.google.protobuf.Internal.EnumLiteMap<Phase>() {
                    public Phase findValueByNumber(int number) {
                        return Phase.valueOf(number);
                    }
                };

        public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
            return getDescriptor().getValues().get(index);
        }
        public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
            return getDescriptor();
        }
        public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
            return caffe.Loadcaffe.getDescriptor().getEnumTypes().get(0);
        }

        private static final Phase[] VALUES = values();

        public static Phase valueOf(
                com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
            if (desc.getType() != getDescriptor()) {
                throw new java.lang.IllegalArgumentException(
                        "EnumValueDescriptor is not for this type.");
            }
            return VALUES[desc.getIndex()];
        }

        private final int index;
        private final int value;

        private Phase(int index, int value) {
            this.index = index;
            this.value = value;
        }

        // @@protoc_insertion_point(enum_scope:caffe.Phase)
    }

    public interface BlobShapeOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.BlobShape)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>repeated int64 dim = 1 [packed = true];</code>
         */
        java.util.List<java.lang.Long> getDimList();
        /**
         * <code>repeated int64 dim = 1 [packed = true];</code>
         */
        int getDimCount();
        /**
         * <code>repeated int64 dim = 1 [packed = true];</code>
         */
        long getDim(int index);
    }
    /**
     * Protobuf type {@code caffe.BlobShape}
     *
     * <pre>
     * Specifies the shape (dimensions) of a Blob.
     * </pre>
     */
    public static final class BlobShape extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.BlobShape)
            BlobShapeOrBuilder {
        // Use BlobShape.newBuilder() to construct.
        private BlobShape(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private BlobShape(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final BlobShape defaultInstance;
        public static BlobShape getDefaultInstance() {
            return defaultInstance;
        }

        public BlobShape getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private BlobShape(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                                dim_ = new java.util.ArrayList<java.lang.Long>();
                                mutable_bitField0_ |= 0x00000001;
                            }
                            dim_.add(input.readInt64());
                            break;
                        }
                        case 10: {
                            int length = input.readRawVarint32();
                            int limit = input.pushLimit(length);
                            if (!((mutable_bitField0_ & 0x00000001) == 0x00000001) && input.getBytesUntilLimit() > 0) {
                                dim_ = new java.util.ArrayList<java.lang.Long>();
                                mutable_bitField0_ |= 0x00000001;
                            }
                            while (input.getBytesUntilLimit() > 0) {
                                dim_.add(input.readInt64());
                            }
                            input.popLimit(limit);
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                    dim_ = java.util.Collections.unmodifiableList(dim_);
                }
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_BlobShape_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_BlobShape_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.BlobShape.class, caffe.Loadcaffe.BlobShape.Builder.class);
        }

        public static com.google.protobuf.Parser<BlobShape> PARSER =
                new com.google.protobuf.AbstractParser<BlobShape>() {
                    public BlobShape parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new BlobShape(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<BlobShape> getParserForType() {
            return PARSER;
        }

        public static final int DIM_FIELD_NUMBER = 1;
        private java.util.List<java.lang.Long> dim_;
        /**
         * <code>repeated int64 dim = 1 [packed = true];</code>
         */
        public java.util.List<java.lang.Long>
        getDimList() {
            return dim_;
        }
        /**
         * <code>repeated int64 dim = 1 [packed = true];</code>
         */
        public int getDimCount() {
            return dim_.size();
        }
        /**
         * <code>repeated int64 dim = 1 [packed = true];</code>
         */
        public long getDim(int index) {
            return dim_.get(index);
        }
        private int dimMemoizedSerializedSize = -1;

        private void initFields() {
            dim_ = java.util.Collections.emptyList();
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (getDimList().size() > 0) {
                output.writeRawVarint32(10);
                output.writeRawVarint32(dimMemoizedSerializedSize);
            }
            for (int i = 0; i < dim_.size(); i++) {
                output.writeInt64NoTag(dim_.get(i));
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            {
                int dataSize = 0;
                for (int i = 0; i < dim_.size(); i++) {
                    dataSize += com.google.protobuf.CodedOutputStream
                            .computeInt64SizeNoTag(dim_.get(i));
                }
                size += dataSize;
                if (!getDimList().isEmpty()) {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream
                            .computeInt32SizeNoTag(dataSize);
                }
                dimMemoizedSerializedSize = dataSize;
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.BlobShape parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.BlobShape parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.BlobShape parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.BlobShape parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.BlobShape parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.BlobShape parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.BlobShape parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.BlobShape parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.BlobShape parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.BlobShape parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.BlobShape prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.BlobShape}
         *
         * <pre>
         * Specifies the shape (dimensions) of a Blob.
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.BlobShape)
                caffe.Loadcaffe.BlobShapeOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_BlobShape_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_BlobShape_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.BlobShape.class, caffe.Loadcaffe.BlobShape.Builder.class);
            }

            // Construct using caffe.Loadcaffe.BlobShape.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                dim_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000001);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_BlobShape_descriptor;
            }

            public caffe.Loadcaffe.BlobShape getDefaultInstanceForType() {
                return caffe.Loadcaffe.BlobShape.getDefaultInstance();
            }

            public caffe.Loadcaffe.BlobShape build() {
                caffe.Loadcaffe.BlobShape result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.BlobShape buildPartial() {
                caffe.Loadcaffe.BlobShape result = new caffe.Loadcaffe.BlobShape(this);
                int from_bitField0_ = bitField0_;
                if (((bitField0_ & 0x00000001) == 0x00000001)) {
                    dim_ = java.util.Collections.unmodifiableList(dim_);
                    bitField0_ = (bitField0_ & ~0x00000001);
                }
                result.dim_ = dim_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.BlobShape) {
                    return mergeFrom((caffe.Loadcaffe.BlobShape)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.BlobShape other) {
                if (other == caffe.Loadcaffe.BlobShape.getDefaultInstance()) return this;
                if (!other.dim_.isEmpty()) {
                    if (dim_.isEmpty()) {
                        dim_ = other.dim_;
                        bitField0_ = (bitField0_ & ~0x00000001);
                    } else {
                        ensureDimIsMutable();
                        dim_.addAll(other.dim_);
                    }
                    onChanged();
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.BlobShape parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.BlobShape) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private java.util.List<java.lang.Long> dim_ = java.util.Collections.emptyList();
            private void ensureDimIsMutable() {
                if (!((bitField0_ & 0x00000001) == 0x00000001)) {
                    dim_ = new java.util.ArrayList<java.lang.Long>(dim_);
                    bitField0_ |= 0x00000001;
                }
            }
            /**
             * <code>repeated int64 dim = 1 [packed = true];</code>
             */
            public java.util.List<java.lang.Long>
            getDimList() {
                return java.util.Collections.unmodifiableList(dim_);
            }
            /**
             * <code>repeated int64 dim = 1 [packed = true];</code>
             */
            public int getDimCount() {
                return dim_.size();
            }
            /**
             * <code>repeated int64 dim = 1 [packed = true];</code>
             */
            public long getDim(int index) {
                return dim_.get(index);
            }
            /**
             * <code>repeated int64 dim = 1 [packed = true];</code>
             */
            public Builder setDim(
                    int index, long value) {
                ensureDimIsMutable();
                dim_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated int64 dim = 1 [packed = true];</code>
             */
            public Builder addDim(long value) {
                ensureDimIsMutable();
                dim_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated int64 dim = 1 [packed = true];</code>
             */
            public Builder addAllDim(
                    java.lang.Iterable<? extends java.lang.Long> values) {
                ensureDimIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, dim_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated int64 dim = 1 [packed = true];</code>
             */
            public Builder clearDim() {
                dim_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000001);
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.BlobShape)
        }

        static {
            defaultInstance = new BlobShape(true);
            defaultInstance.initFields();
        }

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

    public interface BlobProtoOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.BlobProto)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional .caffe.BlobShape shape = 7;</code>
         */
        boolean hasShape();
        /**
         * <code>optional .caffe.BlobShape shape = 7;</code>
         */
        caffe.Loadcaffe.BlobShape getShape();
        /**
         * <code>optional .caffe.BlobShape shape = 7;</code>
         */
        caffe.Loadcaffe.BlobShapeOrBuilder getShapeOrBuilder();

        /**
         * <code>repeated float data = 5 [packed = true];</code>
         */
        java.util.List<java.lang.Float> getDataList();
        /**
         * <code>repeated float data = 5 [packed = true];</code>
         */
        int getDataCount();
        /**
         * <code>repeated float data = 5 [packed = true];</code>
         */
        float getData(int index);

        /**
         * <code>repeated float diff = 6 [packed = true];</code>
         */
        java.util.List<java.lang.Float> getDiffList();
        /**
         * <code>repeated float diff = 6 [packed = true];</code>
         */
        int getDiffCount();
        /**
         * <code>repeated float diff = 6 [packed = true];</code>
         */
        float getDiff(int index);

        /**
         * <code>optional int32 num = 1 [default = 0];</code>
         *
         * <pre>
         * 4D dimensions -- deprecated.  Use "shape" instead.
         * </pre>
         */
        boolean hasNum();
        /**
         * <code>optional int32 num = 1 [default = 0];</code>
         *
         * <pre>
         * 4D dimensions -- deprecated.  Use "shape" instead.
         * </pre>
         */
        int getNum();

        /**
         * <code>optional int32 channels = 2 [default = 0];</code>
         */
        boolean hasChannels();
        /**
         * <code>optional int32 channels = 2 [default = 0];</code>
         */
        int getChannels();

        /**
         * <code>optional int32 height = 3 [default = 0];</code>
         */
        boolean hasHeight();
        /**
         * <code>optional int32 height = 3 [default = 0];</code>
         */
        int getHeight();

        /**
         * <code>optional int32 width = 4 [default = 0];</code>
         */
        boolean hasWidth();
        /**
         * <code>optional int32 width = 4 [default = 0];</code>
         */
        int getWidth();
    }
    /**
     * Protobuf type {@code caffe.BlobProto}
     */
    public static final class BlobProto extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.BlobProto)
            BlobProtoOrBuilder {
        // Use BlobProto.newBuilder() to construct.
        private BlobProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private BlobProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final BlobProto defaultInstance;
        public static BlobProto getDefaultInstance() {
            return defaultInstance;
        }

        public BlobProto getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private BlobProto(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            bitField0_ |= 0x00000002;
                            num_ = input.readInt32();
                            break;
                        }
                        case 16: {
                            bitField0_ |= 0x00000004;
                            channels_ = input.readInt32();
                            break;
                        }
                        case 24: {
                            bitField0_ |= 0x00000008;
                            height_ = input.readInt32();
                            break;
                        }
                        case 32: {
                            bitField0_ |= 0x00000010;
                            width_ = input.readInt32();
                            break;
                        }
                        case 45: {
                            if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                                data_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x00000002;
                            }
                            data_.add(input.readFloat());
                            break;
                        }
                        case 42: {
                            int length = input.readRawVarint32();
                            int limit = input.pushLimit(length);
                            if (!((mutable_bitField0_ & 0x00000002) == 0x00000002) && input.getBytesUntilLimit() > 0) {
                                data_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x00000002;
                            }
                            while (input.getBytesUntilLimit() > 0) {
                                data_.add(input.readFloat());
                            }
                            input.popLimit(limit);
                            break;
                        }
                        case 53: {
                            if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                                diff_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x00000004;
                            }
                            diff_.add(input.readFloat());
                            break;
                        }
                        case 50: {
                            int length = input.readRawVarint32();
                            int limit = input.pushLimit(length);
                            if (!((mutable_bitField0_ & 0x00000004) == 0x00000004) && input.getBytesUntilLimit() > 0) {
                                diff_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x00000004;
                            }
                            while (input.getBytesUntilLimit() > 0) {
                                diff_.add(input.readFloat());
                            }
                            input.popLimit(limit);
                            break;
                        }
                        case 58: {
                            caffe.Loadcaffe.BlobShape.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                                subBuilder = shape_.toBuilder();
                            }
                            shape_ = input.readMessage(caffe.Loadcaffe.BlobShape.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(shape_);
                                shape_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000001;
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                    data_ = java.util.Collections.unmodifiableList(data_);
                }
                if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                    diff_ = java.util.Collections.unmodifiableList(diff_);
                }
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_BlobProto_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_BlobProto_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.BlobProto.class, caffe.Loadcaffe.BlobProto.Builder.class);
        }

        public static com.google.protobuf.Parser<BlobProto> PARSER =
                new com.google.protobuf.AbstractParser<BlobProto>() {
                    public BlobProto parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new BlobProto(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<BlobProto> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int SHAPE_FIELD_NUMBER = 7;
        private caffe.Loadcaffe.BlobShape shape_;
        /**
         * <code>optional .caffe.BlobShape shape = 7;</code>
         */
        public boolean hasShape() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional .caffe.BlobShape shape = 7;</code>
         */
        public caffe.Loadcaffe.BlobShape getShape() {
            return shape_;
        }
        /**
         * <code>optional .caffe.BlobShape shape = 7;</code>
         */
        public caffe.Loadcaffe.BlobShapeOrBuilder getShapeOrBuilder() {
            return shape_;
        }

        public static final int DATA_FIELD_NUMBER = 5;
        private java.util.List<java.lang.Float> data_;
        /**
         * <code>repeated float data = 5 [packed = true];</code>
         */
        public java.util.List<java.lang.Float>
        getDataList() {
            return data_;
        }
        /**
         * <code>repeated float data = 5 [packed = true];</code>
         */
        public int getDataCount() {
            return data_.size();
        }
        /**
         * <code>repeated float data = 5 [packed = true];</code>
         */
        public float getData(int index) {
            return data_.get(index);
        }
        private int dataMemoizedSerializedSize = -1;

        public static final int DIFF_FIELD_NUMBER = 6;
        private java.util.List<java.lang.Float> diff_;
        /**
         * <code>repeated float diff = 6 [packed = true];</code>
         */
        public java.util.List<java.lang.Float>
        getDiffList() {
            return diff_;
        }
        /**
         * <code>repeated float diff = 6 [packed = true];</code>
         */
        public int getDiffCount() {
            return diff_.size();
        }
        /**
         * <code>repeated float diff = 6 [packed = true];</code>
         */
        public float getDiff(int index) {
            return diff_.get(index);
        }
        private int diffMemoizedSerializedSize = -1;

        public static final int NUM_FIELD_NUMBER = 1;
        private int num_;
        /**
         * <code>optional int32 num = 1 [default = 0];</code>
         *
         * <pre>
         * 4D dimensions -- deprecated.  Use "shape" instead.
         * </pre>
         */
        public boolean hasNum() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional int32 num = 1 [default = 0];</code>
         *
         * <pre>
         * 4D dimensions -- deprecated.  Use "shape" instead.
         * </pre>
         */
        public int getNum() {
            return num_;
        }

        public static final int CHANNELS_FIELD_NUMBER = 2;
        private int channels_;
        /**
         * <code>optional int32 channels = 2 [default = 0];</code>
         */
        public boolean hasChannels() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional int32 channels = 2 [default = 0];</code>
         */
        public int getChannels() {
            return channels_;
        }

        public static final int HEIGHT_FIELD_NUMBER = 3;
        private int height_;
        /**
         * <code>optional int32 height = 3 [default = 0];</code>
         */
        public boolean hasHeight() {
            return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional int32 height = 3 [default = 0];</code>
         */
        public int getHeight() {
            return height_;
        }

        public static final int WIDTH_FIELD_NUMBER = 4;
        private int width_;
        /**
         * <code>optional int32 width = 4 [default = 0];</code>
         */
        public boolean hasWidth() {
            return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>optional int32 width = 4 [default = 0];</code>
         */
        public int getWidth() {
            return width_;
        }

        private void initFields() {
            shape_ = caffe.Loadcaffe.BlobShape.getDefaultInstance();
            data_ = java.util.Collections.emptyList();
            diff_ = java.util.Collections.emptyList();
            num_ = 0;
            channels_ = 0;
            height_ = 0;
            width_ = 0;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeInt32(1, num_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeInt32(2, channels_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                output.writeInt32(3, height_);
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                output.writeInt32(4, width_);
            }
            if (getDataList().size() > 0) {
                output.writeRawVarint32(42);
                output.writeRawVarint32(dataMemoizedSerializedSize);
            }
            for (int i = 0; i < data_.size(); i++) {
                output.writeFloatNoTag(data_.get(i));
            }
            if (getDiffList().size() > 0) {
                output.writeRawVarint32(50);
                output.writeRawVarint32(diffMemoizedSerializedSize);
            }
            for (int i = 0; i < diff_.size(); i++) {
                output.writeFloatNoTag(diff_.get(i));
            }
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeMessage(7, shape_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(1, num_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(2, channels_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(3, height_);
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(4, width_);
            }
            {
                int dataSize = 0;
                dataSize = 4 * getDataList().size();
                size += dataSize;
                if (!getDataList().isEmpty()) {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream
                            .computeInt32SizeNoTag(dataSize);
                }
                dataMemoizedSerializedSize = dataSize;
            }
            {
                int dataSize = 0;
                dataSize = 4 * getDiffList().size();
                size += dataSize;
                if (!getDiffList().isEmpty()) {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream
                            .computeInt32SizeNoTag(dataSize);
                }
                diffMemoizedSerializedSize = dataSize;
            }
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(7, shape_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.BlobProto parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.BlobProto parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.BlobProto parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.BlobProto parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.BlobProto parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.BlobProto parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.BlobProto parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.BlobProto parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.BlobProto parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.BlobProto parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.BlobProto prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.BlobProto}
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.BlobProto)
                caffe.Loadcaffe.BlobProtoOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_BlobProto_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_BlobProto_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.BlobProto.class, caffe.Loadcaffe.BlobProto.Builder.class);
            }

            // Construct using caffe.Loadcaffe.BlobProto.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                    getShapeFieldBuilder();
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                if (shapeBuilder_ == null) {
                    shape_ = caffe.Loadcaffe.BlobShape.getDefaultInstance();
                } else {
                    shapeBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000001);
                data_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000002);
                diff_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000004);
                num_ = 0;
                bitField0_ = (bitField0_ & ~0x00000008);
                channels_ = 0;
                bitField0_ = (bitField0_ & ~0x00000010);
                height_ = 0;
                bitField0_ = (bitField0_ & ~0x00000020);
                width_ = 0;
                bitField0_ = (bitField0_ & ~0x00000040);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_BlobProto_descriptor;
            }

            public caffe.Loadcaffe.BlobProto getDefaultInstanceForType() {
                return caffe.Loadcaffe.BlobProto.getDefaultInstance();
            }

            public caffe.Loadcaffe.BlobProto build() {
                caffe.Loadcaffe.BlobProto result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.BlobProto buildPartial() {
                caffe.Loadcaffe.BlobProto result = new caffe.Loadcaffe.BlobProto(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                if (shapeBuilder_ == null) {
                    result.shape_ = shape_;
                } else {
                    result.shape_ = shapeBuilder_.build();
                }
                if (((bitField0_ & 0x00000002) == 0x00000002)) {
                    data_ = java.util.Collections.unmodifiableList(data_);
                    bitField0_ = (bitField0_ & ~0x00000002);
                }
                result.data_ = data_;
                if (((bitField0_ & 0x00000004) == 0x00000004)) {
                    diff_ = java.util.Collections.unmodifiableList(diff_);
                    bitField0_ = (bitField0_ & ~0x00000004);
                }
                result.diff_ = diff_;
                if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.num_ = num_;
                if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
                    to_bitField0_ |= 0x00000004;
                }
                result.channels_ = channels_;
                if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
                    to_bitField0_ |= 0x00000008;
                }
                result.height_ = height_;
                if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
                    to_bitField0_ |= 0x00000010;
                }
                result.width_ = width_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.BlobProto) {
                    return mergeFrom((caffe.Loadcaffe.BlobProto)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.BlobProto other) {
                if (other == caffe.Loadcaffe.BlobProto.getDefaultInstance()) return this;
                if (other.hasShape()) {
                    mergeShape(other.getShape());
                }
                if (!other.data_.isEmpty()) {
                    if (data_.isEmpty()) {
                        data_ = other.data_;
                        bitField0_ = (bitField0_ & ~0x00000002);
                    } else {
                        ensureDataIsMutable();
                        data_.addAll(other.data_);
                    }
                    onChanged();
                }
                if (!other.diff_.isEmpty()) {
                    if (diff_.isEmpty()) {
                        diff_ = other.diff_;
                        bitField0_ = (bitField0_ & ~0x00000004);
                    } else {
                        ensureDiffIsMutable();
                        diff_.addAll(other.diff_);
                    }
                    onChanged();
                }
                if (other.hasNum()) {
                    setNum(other.getNum());
                }
                if (other.hasChannels()) {
                    setChannels(other.getChannels());
                }
                if (other.hasHeight()) {
                    setHeight(other.getHeight());
                }
                if (other.hasWidth()) {
                    setWidth(other.getWidth());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.BlobProto parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.BlobProto) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private caffe.Loadcaffe.BlobShape shape_ = caffe.Loadcaffe.BlobShape.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.BlobShape, caffe.Loadcaffe.BlobShape.Builder, caffe.Loadcaffe.BlobShapeOrBuilder> shapeBuilder_;
            /**
             * <code>optional .caffe.BlobShape shape = 7;</code>
             */
            public boolean hasShape() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional .caffe.BlobShape shape = 7;</code>
             */
            public caffe.Loadcaffe.BlobShape getShape() {
                if (shapeBuilder_ == null) {
                    return shape_;
                } else {
                    return shapeBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.BlobShape shape = 7;</code>
             */
            public Builder setShape(caffe.Loadcaffe.BlobShape value) {
                if (shapeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    shape_ = value;
                    onChanged();
                } else {
                    shapeBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00000001;
                return this;
            }
            /**
             * <code>optional .caffe.BlobShape shape = 7;</code>
             */
            public Builder setShape(
                    caffe.Loadcaffe.BlobShape.Builder builderForValue) {
                if (shapeBuilder_ == null) {
                    shape_ = builderForValue.build();
                    onChanged();
                } else {
                    shapeBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00000001;
                return this;
            }
            /**
             * <code>optional .caffe.BlobShape shape = 7;</code>
             */
            public Builder mergeShape(caffe.Loadcaffe.BlobShape value) {
                if (shapeBuilder_ == null) {
                    if (((bitField0_ & 0x00000001) == 0x00000001) &&
                            shape_ != caffe.Loadcaffe.BlobShape.getDefaultInstance()) {
                        shape_ =
                                caffe.Loadcaffe.BlobShape.newBuilder(shape_).mergeFrom(value).buildPartial();
                    } else {
                        shape_ = value;
                    }
                    onChanged();
                } else {
                    shapeBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00000001;
                return this;
            }
            /**
             * <code>optional .caffe.BlobShape shape = 7;</code>
             */
            public Builder clearShape() {
                if (shapeBuilder_ == null) {
                    shape_ = caffe.Loadcaffe.BlobShape.getDefaultInstance();
                    onChanged();
                } else {
                    shapeBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000001);
                return this;
            }
            /**
             * <code>optional .caffe.BlobShape shape = 7;</code>
             */
            public caffe.Loadcaffe.BlobShape.Builder getShapeBuilder() {
                bitField0_ |= 0x00000001;
                onChanged();
                return getShapeFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.BlobShape shape = 7;</code>
             */
            public caffe.Loadcaffe.BlobShapeOrBuilder getShapeOrBuilder() {
                if (shapeBuilder_ != null) {
                    return shapeBuilder_.getMessageOrBuilder();
                } else {
                    return shape_;
                }
            }
            /**
             * <code>optional .caffe.BlobShape shape = 7;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.BlobShape, caffe.Loadcaffe.BlobShape.Builder, caffe.Loadcaffe.BlobShapeOrBuilder>
            getShapeFieldBuilder() {
                if (shapeBuilder_ == null) {
                    shapeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.BlobShape, caffe.Loadcaffe.BlobShape.Builder, caffe.Loadcaffe.BlobShapeOrBuilder>(
                            getShape(),
                            getParentForChildren(),
                            isClean());
                    shape_ = null;
                }
                return shapeBuilder_;
            }

            private java.util.List<java.lang.Float> data_ = java.util.Collections.emptyList();
            private void ensureDataIsMutable() {
                if (!((bitField0_ & 0x00000002) == 0x00000002)) {
                    data_ = new java.util.ArrayList<java.lang.Float>(data_);
                    bitField0_ |= 0x00000002;
                }
            }
            /**
             * <code>repeated float data = 5 [packed = true];</code>
             */
            public java.util.List<java.lang.Float>
            getDataList() {
                return java.util.Collections.unmodifiableList(data_);
            }
            /**
             * <code>repeated float data = 5 [packed = true];</code>
             */
            public int getDataCount() {
                return data_.size();
            }
            /**
             * <code>repeated float data = 5 [packed = true];</code>
             */
            public float getData(int index) {
                return data_.get(index);
            }
            /**
             * <code>repeated float data = 5 [packed = true];</code>
             */
            public Builder setData(
                    int index, float value) {
                ensureDataIsMutable();
                data_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float data = 5 [packed = true];</code>
             */
            public Builder addData(float value) {
                ensureDataIsMutable();
                data_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float data = 5 [packed = true];</code>
             */
            public Builder addAllData(
                    java.lang.Iterable<? extends java.lang.Float> values) {
                ensureDataIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, data_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float data = 5 [packed = true];</code>
             */
            public Builder clearData() {
                data_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000002);
                onChanged();
                return this;
            }

            private java.util.List<java.lang.Float> diff_ = java.util.Collections.emptyList();
            private void ensureDiffIsMutable() {
                if (!((bitField0_ & 0x00000004) == 0x00000004)) {
                    diff_ = new java.util.ArrayList<java.lang.Float>(diff_);
                    bitField0_ |= 0x00000004;
                }
            }
            /**
             * <code>repeated float diff = 6 [packed = true];</code>
             */
            public java.util.List<java.lang.Float>
            getDiffList() {
                return java.util.Collections.unmodifiableList(diff_);
            }
            /**
             * <code>repeated float diff = 6 [packed = true];</code>
             */
            public int getDiffCount() {
                return diff_.size();
            }
            /**
             * <code>repeated float diff = 6 [packed = true];</code>
             */
            public float getDiff(int index) {
                return diff_.get(index);
            }
            /**
             * <code>repeated float diff = 6 [packed = true];</code>
             */
            public Builder setDiff(
                    int index, float value) {
                ensureDiffIsMutable();
                diff_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float diff = 6 [packed = true];</code>
             */
            public Builder addDiff(float value) {
                ensureDiffIsMutable();
                diff_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float diff = 6 [packed = true];</code>
             */
            public Builder addAllDiff(
                    java.lang.Iterable<? extends java.lang.Float> values) {
                ensureDiffIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, diff_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float diff = 6 [packed = true];</code>
             */
            public Builder clearDiff() {
                diff_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000004);
                onChanged();
                return this;
            }

            private int num_ ;
            /**
             * <code>optional int32 num = 1 [default = 0];</code>
             *
             * <pre>
             * 4D dimensions -- deprecated.  Use "shape" instead.
             * </pre>
             */
            public boolean hasNum() {
                return ((bitField0_ & 0x00000008) == 0x00000008);
            }
            /**
             * <code>optional int32 num = 1 [default = 0];</code>
             *
             * <pre>
             * 4D dimensions -- deprecated.  Use "shape" instead.
             * </pre>
             */
            public int getNum() {
                return num_;
            }
            /**
             * <code>optional int32 num = 1 [default = 0];</code>
             *
             * <pre>
             * 4D dimensions -- deprecated.  Use "shape" instead.
             * </pre>
             */
            public Builder setNum(int value) {
                bitField0_ |= 0x00000008;
                num_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 num = 1 [default = 0];</code>
             *
             * <pre>
             * 4D dimensions -- deprecated.  Use "shape" instead.
             * </pre>
             */
            public Builder clearNum() {
                bitField0_ = (bitField0_ & ~0x00000008);
                num_ = 0;
                onChanged();
                return this;
            }

            private int channels_ ;
            /**
             * <code>optional int32 channels = 2 [default = 0];</code>
             */
            public boolean hasChannels() {
                return ((bitField0_ & 0x00000010) == 0x00000010);
            }
            /**
             * <code>optional int32 channels = 2 [default = 0];</code>
             */
            public int getChannels() {
                return channels_;
            }
            /**
             * <code>optional int32 channels = 2 [default = 0];</code>
             */
            public Builder setChannels(int value) {
                bitField0_ |= 0x00000010;
                channels_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 channels = 2 [default = 0];</code>
             */
            public Builder clearChannels() {
                bitField0_ = (bitField0_ & ~0x00000010);
                channels_ = 0;
                onChanged();
                return this;
            }

            private int height_ ;
            /**
             * <code>optional int32 height = 3 [default = 0];</code>
             */
            public boolean hasHeight() {
                return ((bitField0_ & 0x00000020) == 0x00000020);
            }
            /**
             * <code>optional int32 height = 3 [default = 0];</code>
             */
            public int getHeight() {
                return height_;
            }
            /**
             * <code>optional int32 height = 3 [default = 0];</code>
             */
            public Builder setHeight(int value) {
                bitField0_ |= 0x00000020;
                height_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 height = 3 [default = 0];</code>
             */
            public Builder clearHeight() {
                bitField0_ = (bitField0_ & ~0x00000020);
                height_ = 0;
                onChanged();
                return this;
            }

            private int width_ ;
            /**
             * <code>optional int32 width = 4 [default = 0];</code>
             */
            public boolean hasWidth() {
                return ((bitField0_ & 0x00000040) == 0x00000040);
            }
            /**
             * <code>optional int32 width = 4 [default = 0];</code>
             */
            public int getWidth() {
                return width_;
            }
            /**
             * <code>optional int32 width = 4 [default = 0];</code>
             */
            public Builder setWidth(int value) {
                bitField0_ |= 0x00000040;
                width_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 width = 4 [default = 0];</code>
             */
            public Builder clearWidth() {
                bitField0_ = (bitField0_ & ~0x00000040);
                width_ = 0;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.BlobProto)
        }

        static {
            defaultInstance = new BlobProto(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.BlobProto)
    }

    public interface BlobProtoVectorOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.BlobProtoVector)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>repeated .caffe.BlobProto blobs = 1;</code>
         */
        java.util.List<caffe.Loadcaffe.BlobProto>
        getBlobsList();
        /**
         * <code>repeated .caffe.BlobProto blobs = 1;</code>
         */
        caffe.Loadcaffe.BlobProto getBlobs(int index);
        /**
         * <code>repeated .caffe.BlobProto blobs = 1;</code>
         */
        int getBlobsCount();
        /**
         * <code>repeated .caffe.BlobProto blobs = 1;</code>
         */
        java.util.List<? extends caffe.Loadcaffe.BlobProtoOrBuilder>
        getBlobsOrBuilderList();
        /**
         * <code>repeated .caffe.BlobProto blobs = 1;</code>
         */
        caffe.Loadcaffe.BlobProtoOrBuilder getBlobsOrBuilder(
                int index);
    }
    /**
     * Protobuf type {@code caffe.BlobProtoVector}
     *
     * <pre>
     * The BlobProtoVector is simply a way to pass multiple blobproto instances
     * around.
     * </pre>
     */
    public static final class BlobProtoVector extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.BlobProtoVector)
            BlobProtoVectorOrBuilder {
        // Use BlobProtoVector.newBuilder() to construct.
        private BlobProtoVector(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private BlobProtoVector(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final BlobProtoVector defaultInstance;
        public static BlobProtoVector getDefaultInstance() {
            return defaultInstance;
        }

        public BlobProtoVector getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private BlobProtoVector(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 10: {
                            if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                                blobs_ = new java.util.ArrayList<caffe.Loadcaffe.BlobProto>();
                                mutable_bitField0_ |= 0x00000001;
                            }
                            blobs_.add(input.readMessage(caffe.Loadcaffe.BlobProto.PARSER, extensionRegistry));
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                    blobs_ = java.util.Collections.unmodifiableList(blobs_);
                }
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_BlobProtoVector_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_BlobProtoVector_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.BlobProtoVector.class, caffe.Loadcaffe.BlobProtoVector.Builder.class);
        }

        public static com.google.protobuf.Parser<BlobProtoVector> PARSER =
                new com.google.protobuf.AbstractParser<BlobProtoVector>() {
                    public BlobProtoVector parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new BlobProtoVector(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<BlobProtoVector> getParserForType() {
            return PARSER;
        }

        public static final int BLOBS_FIELD_NUMBER = 1;
        private java.util.List<caffe.Loadcaffe.BlobProto> blobs_;
        /**
         * <code>repeated .caffe.BlobProto blobs = 1;</code>
         */
        public java.util.List<caffe.Loadcaffe.BlobProto> getBlobsList() {
            return blobs_;
        }
        /**
         * <code>repeated .caffe.BlobProto blobs = 1;</code>
         */
        public java.util.List<? extends caffe.Loadcaffe.BlobProtoOrBuilder>
        getBlobsOrBuilderList() {
            return blobs_;
        }
        /**
         * <code>repeated .caffe.BlobProto blobs = 1;</code>
         */
        public int getBlobsCount() {
            return blobs_.size();
        }
        /**
         * <code>repeated .caffe.BlobProto blobs = 1;</code>
         */
        public caffe.Loadcaffe.BlobProto getBlobs(int index) {
            return blobs_.get(index);
        }
        /**
         * <code>repeated .caffe.BlobProto blobs = 1;</code>
         */
        public caffe.Loadcaffe.BlobProtoOrBuilder getBlobsOrBuilder(
                int index) {
            return blobs_.get(index);
        }

        private void initFields() {
            blobs_ = java.util.Collections.emptyList();
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            for (int i = 0; i < blobs_.size(); i++) {
                output.writeMessage(1, blobs_.get(i));
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            for (int i = 0; i < blobs_.size(); i++) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(1, blobs_.get(i));
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.BlobProtoVector parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.BlobProtoVector parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.BlobProtoVector parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.BlobProtoVector parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.BlobProtoVector parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.BlobProtoVector parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.BlobProtoVector parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.BlobProtoVector parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.BlobProtoVector parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.BlobProtoVector parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.BlobProtoVector prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.BlobProtoVector}
         *
         * <pre>
         * The BlobProtoVector is simply a way to pass multiple blobproto instances
         * around.
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.BlobProtoVector)
                caffe.Loadcaffe.BlobProtoVectorOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_BlobProtoVector_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_BlobProtoVector_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.BlobProtoVector.class, caffe.Loadcaffe.BlobProtoVector.Builder.class);
            }

            // Construct using caffe.Loadcaffe.BlobProtoVector.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                    getBlobsFieldBuilder();
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                if (blobsBuilder_ == null) {
                    blobs_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000001);
                } else {
                    blobsBuilder_.clear();
                }
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_BlobProtoVector_descriptor;
            }

            public caffe.Loadcaffe.BlobProtoVector getDefaultInstanceForType() {
                return caffe.Loadcaffe.BlobProtoVector.getDefaultInstance();
            }

            public caffe.Loadcaffe.BlobProtoVector build() {
                caffe.Loadcaffe.BlobProtoVector result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.BlobProtoVector buildPartial() {
                caffe.Loadcaffe.BlobProtoVector result = new caffe.Loadcaffe.BlobProtoVector(this);
                int from_bitField0_ = bitField0_;
                if (blobsBuilder_ == null) {
                    if (((bitField0_ & 0x00000001) == 0x00000001)) {
                        blobs_ = java.util.Collections.unmodifiableList(blobs_);
                        bitField0_ = (bitField0_ & ~0x00000001);
                    }
                    result.blobs_ = blobs_;
                } else {
                    result.blobs_ = blobsBuilder_.build();
                }
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.BlobProtoVector) {
                    return mergeFrom((caffe.Loadcaffe.BlobProtoVector)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.BlobProtoVector other) {
                if (other == caffe.Loadcaffe.BlobProtoVector.getDefaultInstance()) return this;
                if (blobsBuilder_ == null) {
                    if (!other.blobs_.isEmpty()) {
                        if (blobs_.isEmpty()) {
                            blobs_ = other.blobs_;
                            bitField0_ = (bitField0_ & ~0x00000001);
                        } else {
                            ensureBlobsIsMutable();
                            blobs_.addAll(other.blobs_);
                        }
                        onChanged();
                    }
                } else {
                    if (!other.blobs_.isEmpty()) {
                        if (blobsBuilder_.isEmpty()) {
                            blobsBuilder_.dispose();
                            blobsBuilder_ = null;
                            blobs_ = other.blobs_;
                            bitField0_ = (bitField0_ & ~0x00000001);
                            blobsBuilder_ =
                                    com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                                            getBlobsFieldBuilder() : null;
                        } else {
                            blobsBuilder_.addAllMessages(other.blobs_);
                        }
                    }
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.BlobProtoVector parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.BlobProtoVector) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private java.util.List<caffe.Loadcaffe.BlobProto> blobs_ =
                    java.util.Collections.emptyList();
            private void ensureBlobsIsMutable() {
                if (!((bitField0_ & 0x00000001) == 0x00000001)) {
                    blobs_ = new java.util.ArrayList<caffe.Loadcaffe.BlobProto>(blobs_);
                    bitField0_ |= 0x00000001;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.BlobProto, caffe.Loadcaffe.BlobProto.Builder, caffe.Loadcaffe.BlobProtoOrBuilder> blobsBuilder_;

            /**
             * <code>repeated .caffe.BlobProto blobs = 1;</code>
             */
            public java.util.List<caffe.Loadcaffe.BlobProto> getBlobsList() {
                if (blobsBuilder_ == null) {
                    return java.util.Collections.unmodifiableList(blobs_);
                } else {
                    return blobsBuilder_.getMessageList();
                }
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 1;</code>
             */
            public int getBlobsCount() {
                if (blobsBuilder_ == null) {
                    return blobs_.size();
                } else {
                    return blobsBuilder_.getCount();
                }
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 1;</code>
             */
            public caffe.Loadcaffe.BlobProto getBlobs(int index) {
                if (blobsBuilder_ == null) {
                    return blobs_.get(index);
                } else {
                    return blobsBuilder_.getMessage(index);
                }
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 1;</code>
             */
            public Builder setBlobs(
                    int index, caffe.Loadcaffe.BlobProto value) {
                if (blobsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureBlobsIsMutable();
                    blobs_.set(index, value);
                    onChanged();
                } else {
                    blobsBuilder_.setMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 1;</code>
             */
            public Builder setBlobs(
                    int index, caffe.Loadcaffe.BlobProto.Builder builderForValue) {
                if (blobsBuilder_ == null) {
                    ensureBlobsIsMutable();
                    blobs_.set(index, builderForValue.build());
                    onChanged();
                } else {
                    blobsBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 1;</code>
             */
            public Builder addBlobs(caffe.Loadcaffe.BlobProto value) {
                if (blobsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureBlobsIsMutable();
                    blobs_.add(value);
                    onChanged();
                } else {
                    blobsBuilder_.addMessage(value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 1;</code>
             */
            public Builder addBlobs(
                    int index, caffe.Loadcaffe.BlobProto value) {
                if (blobsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureBlobsIsMutable();
                    blobs_.add(index, value);
                    onChanged();
                } else {
                    blobsBuilder_.addMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 1;</code>
             */
            public Builder addBlobs(
                    caffe.Loadcaffe.BlobProto.Builder builderForValue) {
                if (blobsBuilder_ == null) {
                    ensureBlobsIsMutable();
                    blobs_.add(builderForValue.build());
                    onChanged();
                } else {
                    blobsBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 1;</code>
             */
            public Builder addBlobs(
                    int index, caffe.Loadcaffe.BlobProto.Builder builderForValue) {
                if (blobsBuilder_ == null) {
                    ensureBlobsIsMutable();
                    blobs_.add(index, builderForValue.build());
                    onChanged();
                } else {
                    blobsBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 1;</code>
             */
            public Builder addAllBlobs(
                    java.lang.Iterable<? extends caffe.Loadcaffe.BlobProto> values) {
                if (blobsBuilder_ == null) {
                    ensureBlobsIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(
                            values, blobs_);
                    onChanged();
                } else {
                    blobsBuilder_.addAllMessages(values);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 1;</code>
             */
            public Builder clearBlobs() {
                if (blobsBuilder_ == null) {
                    blobs_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000001);
                    onChanged();
                } else {
                    blobsBuilder_.clear();
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 1;</code>
             */
            public Builder removeBlobs(int index) {
                if (blobsBuilder_ == null) {
                    ensureBlobsIsMutable();
                    blobs_.remove(index);
                    onChanged();
                } else {
                    blobsBuilder_.remove(index);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 1;</code>
             */
            public caffe.Loadcaffe.BlobProto.Builder getBlobsBuilder(
                    int index) {
                return getBlobsFieldBuilder().getBuilder(index);
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 1;</code>
             */
            public caffe.Loadcaffe.BlobProtoOrBuilder getBlobsOrBuilder(
                    int index) {
                if (blobsBuilder_ == null) {
                    return blobs_.get(index);  } else {
                    return blobsBuilder_.getMessageOrBuilder(index);
                }
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 1;</code>
             */
            public java.util.List<? extends caffe.Loadcaffe.BlobProtoOrBuilder>
            getBlobsOrBuilderList() {
                if (blobsBuilder_ != null) {
                    return blobsBuilder_.getMessageOrBuilderList();
                } else {
                    return java.util.Collections.unmodifiableList(blobs_);
                }
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 1;</code>
             */
            public caffe.Loadcaffe.BlobProto.Builder addBlobsBuilder() {
                return getBlobsFieldBuilder().addBuilder(
                        caffe.Loadcaffe.BlobProto.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 1;</code>
             */
            public caffe.Loadcaffe.BlobProto.Builder addBlobsBuilder(
                    int index) {
                return getBlobsFieldBuilder().addBuilder(
                        index, caffe.Loadcaffe.BlobProto.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 1;</code>
             */
            public java.util.List<caffe.Loadcaffe.BlobProto.Builder>
            getBlobsBuilderList() {
                return getBlobsFieldBuilder().getBuilderList();
            }
            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.BlobProto, caffe.Loadcaffe.BlobProto.Builder, caffe.Loadcaffe.BlobProtoOrBuilder>
            getBlobsFieldBuilder() {
                if (blobsBuilder_ == null) {
                    blobsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            caffe.Loadcaffe.BlobProto, caffe.Loadcaffe.BlobProto.Builder, caffe.Loadcaffe.BlobProtoOrBuilder>(
                            blobs_,
                            ((bitField0_ & 0x00000001) == 0x00000001),
                            getParentForChildren(),
                            isClean());
                    blobs_ = null;
                }
                return blobsBuilder_;
            }

            // @@protoc_insertion_point(builder_scope:caffe.BlobProtoVector)
        }

        static {
            defaultInstance = new BlobProtoVector(true);
            defaultInstance.initFields();
        }

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

    public interface DatumOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.Datum)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional int32 channels = 1;</code>
         */
        boolean hasChannels();
        /**
         * <code>optional int32 channels = 1;</code>
         */
        int getChannels();

        /**
         * <code>optional int32 height = 2;</code>
         */
        boolean hasHeight();
        /**
         * <code>optional int32 height = 2;</code>
         */
        int getHeight();

        /**
         * <code>optional int32 width = 3;</code>
         */
        boolean hasWidth();
        /**
         * <code>optional int32 width = 3;</code>
         */
        int getWidth();

        /**
         * <code>optional bytes data = 4;</code>
         *
         * <pre>
         * the actual image data, in bytes
         * </pre>
         */
        boolean hasData();
        /**
         * <code>optional bytes data = 4;</code>
         *
         * <pre>
         * the actual image data, in bytes
         * </pre>
         */
        com.google.protobuf.ByteString getData();

        /**
         * <code>optional int32 label = 5;</code>
         */
        boolean hasLabel();
        /**
         * <code>optional int32 label = 5;</code>
         */
        int getLabel();

        /**
         * <code>repeated float float_data = 6;</code>
         *
         * <pre>
         * Optionally, the datum could also hold float data.
         * </pre>
         */
        java.util.List<java.lang.Float> getFloatDataList();
        /**
         * <code>repeated float float_data = 6;</code>
         *
         * <pre>
         * Optionally, the datum could also hold float data.
         * </pre>
         */
        int getFloatDataCount();
        /**
         * <code>repeated float float_data = 6;</code>
         *
         * <pre>
         * Optionally, the datum could also hold float data.
         * </pre>
         */
        float getFloatData(int index);

        /**
         * <code>optional bool encoded = 7 [default = false];</code>
         *
         * <pre>
         * If true data contains an encoded image that need to be decoded
         * </pre>
         */
        boolean hasEncoded();
        /**
         * <code>optional bool encoded = 7 [default = false];</code>
         *
         * <pre>
         * If true data contains an encoded image that need to be decoded
         * </pre>
         */
        boolean getEncoded();
    }
    /**
     * Protobuf type {@code caffe.Datum}
     */
    public static final class Datum extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.Datum)
            DatumOrBuilder {
        // Use Datum.newBuilder() to construct.
        private Datum(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private Datum(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final Datum defaultInstance;
        public static Datum getDefaultInstance() {
            return defaultInstance;
        }

        public Datum getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private Datum(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            bitField0_ |= 0x00000001;
                            channels_ = input.readInt32();
                            break;
                        }
                        case 16: {
                            bitField0_ |= 0x00000002;
                            height_ = input.readInt32();
                            break;
                        }
                        case 24: {
                            bitField0_ |= 0x00000004;
                            width_ = input.readInt32();
                            break;
                        }
                        case 34: {
                            bitField0_ |= 0x00000008;
                            data_ = input.readBytes();
                            break;
                        }
                        case 40: {
                            bitField0_ |= 0x00000010;
                            label_ = input.readInt32();
                            break;
                        }
                        case 53: {
                            if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                                floatData_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x00000020;
                            }
                            floatData_.add(input.readFloat());
                            break;
                        }
                        case 50: {
                            int length = input.readRawVarint32();
                            int limit = input.pushLimit(length);
                            if (!((mutable_bitField0_ & 0x00000020) == 0x00000020) && input.getBytesUntilLimit() > 0) {
                                floatData_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x00000020;
                            }
                            while (input.getBytesUntilLimit() > 0) {
                                floatData_.add(input.readFloat());
                            }
                            input.popLimit(limit);
                            break;
                        }
                        case 56: {
                            bitField0_ |= 0x00000020;
                            encoded_ = input.readBool();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                    floatData_ = java.util.Collections.unmodifiableList(floatData_);
                }
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_Datum_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_Datum_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.Datum.class, caffe.Loadcaffe.Datum.Builder.class);
        }

        public static com.google.protobuf.Parser<Datum> PARSER =
                new com.google.protobuf.AbstractParser<Datum>() {
                    public Datum parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new Datum(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<Datum> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int CHANNELS_FIELD_NUMBER = 1;
        private int channels_;
        /**
         * <code>optional int32 channels = 1;</code>
         */
        public boolean hasChannels() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional int32 channels = 1;</code>
         */
        public int getChannels() {
            return channels_;
        }

        public static final int HEIGHT_FIELD_NUMBER = 2;
        private int height_;
        /**
         * <code>optional int32 height = 2;</code>
         */
        public boolean hasHeight() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional int32 height = 2;</code>
         */
        public int getHeight() {
            return height_;
        }

        public static final int WIDTH_FIELD_NUMBER = 3;
        private int width_;
        /**
         * <code>optional int32 width = 3;</code>
         */
        public boolean hasWidth() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional int32 width = 3;</code>
         */
        public int getWidth() {
            return width_;
        }

        public static final int DATA_FIELD_NUMBER = 4;
        private com.google.protobuf.ByteString data_;
        /**
         * <code>optional bytes data = 4;</code>
         *
         * <pre>
         * the actual image data, in bytes
         * </pre>
         */
        public boolean hasData() {
            return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional bytes data = 4;</code>
         *
         * <pre>
         * the actual image data, in bytes
         * </pre>
         */
        public com.google.protobuf.ByteString getData() {
            return data_;
        }

        public static final int LABEL_FIELD_NUMBER = 5;
        private int label_;
        /**
         * <code>optional int32 label = 5;</code>
         */
        public boolean hasLabel() {
            return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>optional int32 label = 5;</code>
         */
        public int getLabel() {
            return label_;
        }

        public static final int FLOAT_DATA_FIELD_NUMBER = 6;
        private java.util.List<java.lang.Float> floatData_;
        /**
         * <code>repeated float float_data = 6;</code>
         *
         * <pre>
         * Optionally, the datum could also hold float data.
         * </pre>
         */
        public java.util.List<java.lang.Float>
        getFloatDataList() {
            return floatData_;
        }
        /**
         * <code>repeated float float_data = 6;</code>
         *
         * <pre>
         * Optionally, the datum could also hold float data.
         * </pre>
         */
        public int getFloatDataCount() {
            return floatData_.size();
        }
        /**
         * <code>repeated float float_data = 6;</code>
         *
         * <pre>
         * Optionally, the datum could also hold float data.
         * </pre>
         */
        public float getFloatData(int index) {
            return floatData_.get(index);
        }

        public static final int ENCODED_FIELD_NUMBER = 7;
        private boolean encoded_;
        /**
         * <code>optional bool encoded = 7 [default = false];</code>
         *
         * <pre>
         * If true data contains an encoded image that need to be decoded
         * </pre>
         */
        public boolean hasEncoded() {
            return ((bitField0_ & 0x00000020) == 0x00000020);
        }
        /**
         * <code>optional bool encoded = 7 [default = false];</code>
         *
         * <pre>
         * If true data contains an encoded image that need to be decoded
         * </pre>
         */
        public boolean getEncoded() {
            return encoded_;
        }

        private void initFields() {
            channels_ = 0;
            height_ = 0;
            width_ = 0;
            data_ = com.google.protobuf.ByteString.EMPTY;
            label_ = 0;
            floatData_ = java.util.Collections.emptyList();
            encoded_ = false;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeInt32(1, channels_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeInt32(2, height_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeInt32(3, width_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                output.writeBytes(4, data_);
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                output.writeInt32(5, label_);
            }
            for (int i = 0; i < floatData_.size(); i++) {
                output.writeFloat(6, floatData_.get(i));
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                output.writeBool(7, encoded_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(1, channels_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(2, height_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(3, width_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(4, data_);
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(5, label_);
            }
            {
                int dataSize = 0;
                dataSize = 4 * getFloatDataList().size();
                size += dataSize;
                size += 1 * getFloatDataList().size();
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(7, encoded_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.Datum parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.Datum parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.Datum parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.Datum parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.Datum parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.Datum parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.Datum parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.Datum parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.Datum parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.Datum parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.Datum prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.Datum}
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.Datum)
                caffe.Loadcaffe.DatumOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_Datum_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_Datum_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.Datum.class, caffe.Loadcaffe.Datum.Builder.class);
            }

            // Construct using caffe.Loadcaffe.Datum.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                channels_ = 0;
                bitField0_ = (bitField0_ & ~0x00000001);
                height_ = 0;
                bitField0_ = (bitField0_ & ~0x00000002);
                width_ = 0;
                bitField0_ = (bitField0_ & ~0x00000004);
                data_ = com.google.protobuf.ByteString.EMPTY;
                bitField0_ = (bitField0_ & ~0x00000008);
                label_ = 0;
                bitField0_ = (bitField0_ & ~0x00000010);
                floatData_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000020);
                encoded_ = false;
                bitField0_ = (bitField0_ & ~0x00000040);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_Datum_descriptor;
            }

            public caffe.Loadcaffe.Datum getDefaultInstanceForType() {
                return caffe.Loadcaffe.Datum.getDefaultInstance();
            }

            public caffe.Loadcaffe.Datum build() {
                caffe.Loadcaffe.Datum result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.Datum buildPartial() {
                caffe.Loadcaffe.Datum result = new caffe.Loadcaffe.Datum(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.channels_ = channels_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.height_ = height_;
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000004;
                }
                result.width_ = width_;
                if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
                    to_bitField0_ |= 0x00000008;
                }
                result.data_ = data_;
                if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
                    to_bitField0_ |= 0x00000010;
                }
                result.label_ = label_;
                if (((bitField0_ & 0x00000020) == 0x00000020)) {
                    floatData_ = java.util.Collections.unmodifiableList(floatData_);
                    bitField0_ = (bitField0_ & ~0x00000020);
                }
                result.floatData_ = floatData_;
                if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
                    to_bitField0_ |= 0x00000020;
                }
                result.encoded_ = encoded_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.Datum) {
                    return mergeFrom((caffe.Loadcaffe.Datum)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.Datum other) {
                if (other == caffe.Loadcaffe.Datum.getDefaultInstance()) return this;
                if (other.hasChannels()) {
                    setChannels(other.getChannels());
                }
                if (other.hasHeight()) {
                    setHeight(other.getHeight());
                }
                if (other.hasWidth()) {
                    setWidth(other.getWidth());
                }
                if (other.hasData()) {
                    setData(other.getData());
                }
                if (other.hasLabel()) {
                    setLabel(other.getLabel());
                }
                if (!other.floatData_.isEmpty()) {
                    if (floatData_.isEmpty()) {
                        floatData_ = other.floatData_;
                        bitField0_ = (bitField0_ & ~0x00000020);
                    } else {
                        ensureFloatDataIsMutable();
                        floatData_.addAll(other.floatData_);
                    }
                    onChanged();
                }
                if (other.hasEncoded()) {
                    setEncoded(other.getEncoded());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.Datum parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.Datum) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private int channels_ ;
            /**
             * <code>optional int32 channels = 1;</code>
             */
            public boolean hasChannels() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional int32 channels = 1;</code>
             */
            public int getChannels() {
                return channels_;
            }
            /**
             * <code>optional int32 channels = 1;</code>
             */
            public Builder setChannels(int value) {
                bitField0_ |= 0x00000001;
                channels_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 channels = 1;</code>
             */
            public Builder clearChannels() {
                bitField0_ = (bitField0_ & ~0x00000001);
                channels_ = 0;
                onChanged();
                return this;
            }

            private int height_ ;
            /**
             * <code>optional int32 height = 2;</code>
             */
            public boolean hasHeight() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional int32 height = 2;</code>
             */
            public int getHeight() {
                return height_;
            }
            /**
             * <code>optional int32 height = 2;</code>
             */
            public Builder setHeight(int value) {
                bitField0_ |= 0x00000002;
                height_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 height = 2;</code>
             */
            public Builder clearHeight() {
                bitField0_ = (bitField0_ & ~0x00000002);
                height_ = 0;
                onChanged();
                return this;
            }

            private int width_ ;
            /**
             * <code>optional int32 width = 3;</code>
             */
            public boolean hasWidth() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional int32 width = 3;</code>
             */
            public int getWidth() {
                return width_;
            }
            /**
             * <code>optional int32 width = 3;</code>
             */
            public Builder setWidth(int value) {
                bitField0_ |= 0x00000004;
                width_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 width = 3;</code>
             */
            public Builder clearWidth() {
                bitField0_ = (bitField0_ & ~0x00000004);
                width_ = 0;
                onChanged();
                return this;
            }

            private com.google.protobuf.ByteString data_ = com.google.protobuf.ByteString.EMPTY;
            /**
             * <code>optional bytes data = 4;</code>
             *
             * <pre>
             * the actual image data, in bytes
             * </pre>
             */
            public boolean hasData() {
                return ((bitField0_ & 0x00000008) == 0x00000008);
            }
            /**
             * <code>optional bytes data = 4;</code>
             *
             * <pre>
             * the actual image data, in bytes
             * </pre>
             */
            public com.google.protobuf.ByteString getData() {
                return data_;
            }
            /**
             * <code>optional bytes data = 4;</code>
             *
             * <pre>
             * the actual image data, in bytes
             * </pre>
             */
            public Builder setData(com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000008;
                data_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bytes data = 4;</code>
             *
             * <pre>
             * the actual image data, in bytes
             * </pre>
             */
            public Builder clearData() {
                bitField0_ = (bitField0_ & ~0x00000008);
                data_ = getDefaultInstance().getData();
                onChanged();
                return this;
            }

            private int label_ ;
            /**
             * <code>optional int32 label = 5;</code>
             */
            public boolean hasLabel() {
                return ((bitField0_ & 0x00000010) == 0x00000010);
            }
            /**
             * <code>optional int32 label = 5;</code>
             */
            public int getLabel() {
                return label_;
            }
            /**
             * <code>optional int32 label = 5;</code>
             */
            public Builder setLabel(int value) {
                bitField0_ |= 0x00000010;
                label_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 label = 5;</code>
             */
            public Builder clearLabel() {
                bitField0_ = (bitField0_ & ~0x00000010);
                label_ = 0;
                onChanged();
                return this;
            }

            private java.util.List<java.lang.Float> floatData_ = java.util.Collections.emptyList();
            private void ensureFloatDataIsMutable() {
                if (!((bitField0_ & 0x00000020) == 0x00000020)) {
                    floatData_ = new java.util.ArrayList<java.lang.Float>(floatData_);
                    bitField0_ |= 0x00000020;
                }
            }
            /**
             * <code>repeated float float_data = 6;</code>
             *
             * <pre>
             * Optionally, the datum could also hold float data.
             * </pre>
             */
            public java.util.List<java.lang.Float>
            getFloatDataList() {
                return java.util.Collections.unmodifiableList(floatData_);
            }
            /**
             * <code>repeated float float_data = 6;</code>
             *
             * <pre>
             * Optionally, the datum could also hold float data.
             * </pre>
             */
            public int getFloatDataCount() {
                return floatData_.size();
            }
            /**
             * <code>repeated float float_data = 6;</code>
             *
             * <pre>
             * Optionally, the datum could also hold float data.
             * </pre>
             */
            public float getFloatData(int index) {
                return floatData_.get(index);
            }
            /**
             * <code>repeated float float_data = 6;</code>
             *
             * <pre>
             * Optionally, the datum could also hold float data.
             * </pre>
             */
            public Builder setFloatData(
                    int index, float value) {
                ensureFloatDataIsMutable();
                floatData_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float float_data = 6;</code>
             *
             * <pre>
             * Optionally, the datum could also hold float data.
             * </pre>
             */
            public Builder addFloatData(float value) {
                ensureFloatDataIsMutable();
                floatData_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float float_data = 6;</code>
             *
             * <pre>
             * Optionally, the datum could also hold float data.
             * </pre>
             */
            public Builder addAllFloatData(
                    java.lang.Iterable<? extends java.lang.Float> values) {
                ensureFloatDataIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, floatData_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float float_data = 6;</code>
             *
             * <pre>
             * Optionally, the datum could also hold float data.
             * </pre>
             */
            public Builder clearFloatData() {
                floatData_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000020);
                onChanged();
                return this;
            }

            private boolean encoded_ ;
            /**
             * <code>optional bool encoded = 7 [default = false];</code>
             *
             * <pre>
             * If true data contains an encoded image that need to be decoded
             * </pre>
             */
            public boolean hasEncoded() {
                return ((bitField0_ & 0x00000040) == 0x00000040);
            }
            /**
             * <code>optional bool encoded = 7 [default = false];</code>
             *
             * <pre>
             * If true data contains an encoded image that need to be decoded
             * </pre>
             */
            public boolean getEncoded() {
                return encoded_;
            }
            /**
             * <code>optional bool encoded = 7 [default = false];</code>
             *
             * <pre>
             * If true data contains an encoded image that need to be decoded
             * </pre>
             */
            public Builder setEncoded(boolean value) {
                bitField0_ |= 0x00000040;
                encoded_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool encoded = 7 [default = false];</code>
             *
             * <pre>
             * If true data contains an encoded image that need to be decoded
             * </pre>
             */
            public Builder clearEncoded() {
                bitField0_ = (bitField0_ & ~0x00000040);
                encoded_ = false;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.Datum)
        }

        static {
            defaultInstance = new Datum(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.Datum)
    }

    public interface FillerParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.FillerParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional string type = 1 [default = "constant"];</code>
         *
         * <pre>
         * The filler type.
         * </pre>
         */
        boolean hasType();
        /**
         * <code>optional string type = 1 [default = "constant"];</code>
         *
         * <pre>
         * The filler type.
         * </pre>
         */
        java.lang.String getType();
        /**
         * <code>optional string type = 1 [default = "constant"];</code>
         *
         * <pre>
         * The filler type.
         * </pre>
         */
        com.google.protobuf.ByteString
        getTypeBytes();

        /**
         * <code>optional float value = 2 [default = 0];</code>
         *
         * <pre>
         * the value in constant filler
         * </pre>
         */
        boolean hasValue();
        /**
         * <code>optional float value = 2 [default = 0];</code>
         *
         * <pre>
         * the value in constant filler
         * </pre>
         */
        float getValue();

        /**
         * <code>optional float min = 3 [default = 0];</code>
         *
         * <pre>
         * the min value in uniform filler
         * </pre>
         */
        boolean hasMin();
        /**
         * <code>optional float min = 3 [default = 0];</code>
         *
         * <pre>
         * the min value in uniform filler
         * </pre>
         */
        float getMin();

        /**
         * <code>optional float max = 4 [default = 1];</code>
         *
         * <pre>
         * the max value in uniform filler
         * </pre>
         */
        boolean hasMax();
        /**
         * <code>optional float max = 4 [default = 1];</code>
         *
         * <pre>
         * the max value in uniform filler
         * </pre>
         */
        float getMax();

        /**
         * <code>optional float mean = 5 [default = 0];</code>
         *
         * <pre>
         * the mean value in Gaussian filler
         * </pre>
         */
        boolean hasMean();
        /**
         * <code>optional float mean = 5 [default = 0];</code>
         *
         * <pre>
         * the mean value in Gaussian filler
         * </pre>
         */
        float getMean();

        /**
         * <code>optional float std = 6 [default = 1];</code>
         *
         * <pre>
         * the std value in Gaussian filler
         * </pre>
         */
        boolean hasStd();
        /**
         * <code>optional float std = 6 [default = 1];</code>
         *
         * <pre>
         * the std value in Gaussian filler
         * </pre>
         */
        float getStd();

        /**
         * <code>optional int32 sparse = 7 [default = -1];</code>
         *
         * <pre>
         * The expected number of non-zero output weights for a given input in
         * Gaussian filler -- the default -1 means don't perform sparsification.
         * </pre>
         */
        boolean hasSparse();
        /**
         * <code>optional int32 sparse = 7 [default = -1];</code>
         *
         * <pre>
         * The expected number of non-zero output weights for a given input in
         * Gaussian filler -- the default -1 means don't perform sparsification.
         * </pre>
         */
        int getSparse();
    }
    /**
     * Protobuf type {@code caffe.FillerParameter}
     */
    public static final class FillerParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.FillerParameter)
            FillerParameterOrBuilder {
        // Use FillerParameter.newBuilder() to construct.
        private FillerParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private FillerParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final FillerParameter defaultInstance;
        public static FillerParameter getDefaultInstance() {
            return defaultInstance;
        }

        public FillerParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private FillerParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 10: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000001;
                            type_ = bs;
                            break;
                        }
                        case 21: {
                            bitField0_ |= 0x00000002;
                            value_ = input.readFloat();
                            break;
                        }
                        case 29: {
                            bitField0_ |= 0x00000004;
                            min_ = input.readFloat();
                            break;
                        }
                        case 37: {
                            bitField0_ |= 0x00000008;
                            max_ = input.readFloat();
                            break;
                        }
                        case 45: {
                            bitField0_ |= 0x00000010;
                            mean_ = input.readFloat();
                            break;
                        }
                        case 53: {
                            bitField0_ |= 0x00000020;
                            std_ = input.readFloat();
                            break;
                        }
                        case 56: {
                            bitField0_ |= 0x00000040;
                            sparse_ = input.readInt32();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_FillerParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_FillerParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.FillerParameter.class, caffe.Loadcaffe.FillerParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<FillerParameter> PARSER =
                new com.google.protobuf.AbstractParser<FillerParameter>() {
                    public FillerParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new FillerParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<FillerParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int TYPE_FIELD_NUMBER = 1;
        private java.lang.Object type_;
        /**
         * <code>optional string type = 1 [default = "constant"];</code>
         *
         * <pre>
         * The filler type.
         * </pre>
         */
        public boolean hasType() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string type = 1 [default = "constant"];</code>
         *
         * <pre>
         * The filler type.
         * </pre>
         */
        public java.lang.String getType() {
            java.lang.Object ref = type_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    type_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string type = 1 [default = "constant"];</code>
         *
         * <pre>
         * The filler type.
         * </pre>
         */
        public com.google.protobuf.ByteString
        getTypeBytes() {
            java.lang.Object ref = type_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                type_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int VALUE_FIELD_NUMBER = 2;
        private float value_;
        /**
         * <code>optional float value = 2 [default = 0];</code>
         *
         * <pre>
         * the value in constant filler
         * </pre>
         */
        public boolean hasValue() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional float value = 2 [default = 0];</code>
         *
         * <pre>
         * the value in constant filler
         * </pre>
         */
        public float getValue() {
            return value_;
        }

        public static final int MIN_FIELD_NUMBER = 3;
        private float min_;
        /**
         * <code>optional float min = 3 [default = 0];</code>
         *
         * <pre>
         * the min value in uniform filler
         * </pre>
         */
        public boolean hasMin() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional float min = 3 [default = 0];</code>
         *
         * <pre>
         * the min value in uniform filler
         * </pre>
         */
        public float getMin() {
            return min_;
        }

        public static final int MAX_FIELD_NUMBER = 4;
        private float max_;
        /**
         * <code>optional float max = 4 [default = 1];</code>
         *
         * <pre>
         * the max value in uniform filler
         * </pre>
         */
        public boolean hasMax() {
            return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional float max = 4 [default = 1];</code>
         *
         * <pre>
         * the max value in uniform filler
         * </pre>
         */
        public float getMax() {
            return max_;
        }

        public static final int MEAN_FIELD_NUMBER = 5;
        private float mean_;
        /**
         * <code>optional float mean = 5 [default = 0];</code>
         *
         * <pre>
         * the mean value in Gaussian filler
         * </pre>
         */
        public boolean hasMean() {
            return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>optional float mean = 5 [default = 0];</code>
         *
         * <pre>
         * the mean value in Gaussian filler
         * </pre>
         */
        public float getMean() {
            return mean_;
        }

        public static final int STD_FIELD_NUMBER = 6;
        private float std_;
        /**
         * <code>optional float std = 6 [default = 1];</code>
         *
         * <pre>
         * the std value in Gaussian filler
         * </pre>
         */
        public boolean hasStd() {
            return ((bitField0_ & 0x00000020) == 0x00000020);
        }
        /**
         * <code>optional float std = 6 [default = 1];</code>
         *
         * <pre>
         * the std value in Gaussian filler
         * </pre>
         */
        public float getStd() {
            return std_;
        }

        public static final int SPARSE_FIELD_NUMBER = 7;
        private int sparse_;
        /**
         * <code>optional int32 sparse = 7 [default = -1];</code>
         *
         * <pre>
         * The expected number of non-zero output weights for a given input in
         * Gaussian filler -- the default -1 means don't perform sparsification.
         * </pre>
         */
        public boolean hasSparse() {
            return ((bitField0_ & 0x00000040) == 0x00000040);
        }
        /**
         * <code>optional int32 sparse = 7 [default = -1];</code>
         *
         * <pre>
         * The expected number of non-zero output weights for a given input in
         * Gaussian filler -- the default -1 means don't perform sparsification.
         * </pre>
         */
        public int getSparse() {
            return sparse_;
        }

        private void initFields() {
            type_ = "constant";
            value_ = 0F;
            min_ = 0F;
            max_ = 1F;
            mean_ = 0F;
            std_ = 1F;
            sparse_ = -1;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeBytes(1, getTypeBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeFloat(2, value_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeFloat(3, min_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                output.writeFloat(4, max_);
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                output.writeFloat(5, mean_);
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                output.writeFloat(6, std_);
            }
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                output.writeInt32(7, sparse_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(1, getTypeBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(2, value_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(3, min_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(4, max_);
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(5, mean_);
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(6, std_);
            }
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(7, sparse_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.FillerParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.FillerParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.FillerParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.FillerParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.FillerParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.FillerParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.FillerParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.FillerParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.FillerParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.FillerParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.FillerParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.FillerParameter}
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.FillerParameter)
                caffe.Loadcaffe.FillerParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_FillerParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_FillerParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.FillerParameter.class, caffe.Loadcaffe.FillerParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.FillerParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                type_ = "constant";
                bitField0_ = (bitField0_ & ~0x00000001);
                value_ = 0F;
                bitField0_ = (bitField0_ & ~0x00000002);
                min_ = 0F;
                bitField0_ = (bitField0_ & ~0x00000004);
                max_ = 1F;
                bitField0_ = (bitField0_ & ~0x00000008);
                mean_ = 0F;
                bitField0_ = (bitField0_ & ~0x00000010);
                std_ = 1F;
                bitField0_ = (bitField0_ & ~0x00000020);
                sparse_ = -1;
                bitField0_ = (bitField0_ & ~0x00000040);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_FillerParameter_descriptor;
            }

            public caffe.Loadcaffe.FillerParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.FillerParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.FillerParameter build() {
                caffe.Loadcaffe.FillerParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.FillerParameter buildPartial() {
                caffe.Loadcaffe.FillerParameter result = new caffe.Loadcaffe.FillerParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.type_ = type_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.value_ = value_;
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000004;
                }
                result.min_ = min_;
                if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
                    to_bitField0_ |= 0x00000008;
                }
                result.max_ = max_;
                if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
                    to_bitField0_ |= 0x00000010;
                }
                result.mean_ = mean_;
                if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
                    to_bitField0_ |= 0x00000020;
                }
                result.std_ = std_;
                if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
                    to_bitField0_ |= 0x00000040;
                }
                result.sparse_ = sparse_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.FillerParameter) {
                    return mergeFrom((caffe.Loadcaffe.FillerParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.FillerParameter other) {
                if (other == caffe.Loadcaffe.FillerParameter.getDefaultInstance()) return this;
                if (other.hasType()) {
                    bitField0_ |= 0x00000001;
                    type_ = other.type_;
                    onChanged();
                }
                if (other.hasValue()) {
                    setValue(other.getValue());
                }
                if (other.hasMin()) {
                    setMin(other.getMin());
                }
                if (other.hasMax()) {
                    setMax(other.getMax());
                }
                if (other.hasMean()) {
                    setMean(other.getMean());
                }
                if (other.hasStd()) {
                    setStd(other.getStd());
                }
                if (other.hasSparse()) {
                    setSparse(other.getSparse());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.FillerParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.FillerParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private java.lang.Object type_ = "constant";
            /**
             * <code>optional string type = 1 [default = "constant"];</code>
             *
             * <pre>
             * The filler type.
             * </pre>
             */
            public boolean hasType() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional string type = 1 [default = "constant"];</code>
             *
             * <pre>
             * The filler type.
             * </pre>
             */
            public java.lang.String getType() {
                java.lang.Object ref = type_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        type_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string type = 1 [default = "constant"];</code>
             *
             * <pre>
             * The filler type.
             * </pre>
             */
            public com.google.protobuf.ByteString
            getTypeBytes() {
                java.lang.Object ref = type_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    type_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string type = 1 [default = "constant"];</code>
             *
             * <pre>
             * The filler type.
             * </pre>
             */
            public Builder setType(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                type_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string type = 1 [default = "constant"];</code>
             *
             * <pre>
             * The filler type.
             * </pre>
             */
            public Builder clearType() {
                bitField0_ = (bitField0_ & ~0x00000001);
                type_ = getDefaultInstance().getType();
                onChanged();
                return this;
            }
            /**
             * <code>optional string type = 1 [default = "constant"];</code>
             *
             * <pre>
             * The filler type.
             * </pre>
             */
            public Builder setTypeBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                type_ = value;
                onChanged();
                return this;
            }

            private float value_ ;
            /**
             * <code>optional float value = 2 [default = 0];</code>
             *
             * <pre>
             * the value in constant filler
             * </pre>
             */
            public boolean hasValue() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional float value = 2 [default = 0];</code>
             *
             * <pre>
             * the value in constant filler
             * </pre>
             */
            public float getValue() {
                return value_;
            }
            /**
             * <code>optional float value = 2 [default = 0];</code>
             *
             * <pre>
             * the value in constant filler
             * </pre>
             */
            public Builder setValue(float value) {
                bitField0_ |= 0x00000002;
                value_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float value = 2 [default = 0];</code>
             *
             * <pre>
             * the value in constant filler
             * </pre>
             */
            public Builder clearValue() {
                bitField0_ = (bitField0_ & ~0x00000002);
                value_ = 0F;
                onChanged();
                return this;
            }

            private float min_ ;
            /**
             * <code>optional float min = 3 [default = 0];</code>
             *
             * <pre>
             * the min value in uniform filler
             * </pre>
             */
            public boolean hasMin() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional float min = 3 [default = 0];</code>
             *
             * <pre>
             * the min value in uniform filler
             * </pre>
             */
            public float getMin() {
                return min_;
            }
            /**
             * <code>optional float min = 3 [default = 0];</code>
             *
             * <pre>
             * the min value in uniform filler
             * </pre>
             */
            public Builder setMin(float value) {
                bitField0_ |= 0x00000004;
                min_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float min = 3 [default = 0];</code>
             *
             * <pre>
             * the min value in uniform filler
             * </pre>
             */
            public Builder clearMin() {
                bitField0_ = (bitField0_ & ~0x00000004);
                min_ = 0F;
                onChanged();
                return this;
            }

            private float max_ = 1F;
            /**
             * <code>optional float max = 4 [default = 1];</code>
             *
             * <pre>
             * the max value in uniform filler
             * </pre>
             */
            public boolean hasMax() {
                return ((bitField0_ & 0x00000008) == 0x00000008);
            }
            /**
             * <code>optional float max = 4 [default = 1];</code>
             *
             * <pre>
             * the max value in uniform filler
             * </pre>
             */
            public float getMax() {
                return max_;
            }
            /**
             * <code>optional float max = 4 [default = 1];</code>
             *
             * <pre>
             * the max value in uniform filler
             * </pre>
             */
            public Builder setMax(float value) {
                bitField0_ |= 0x00000008;
                max_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float max = 4 [default = 1];</code>
             *
             * <pre>
             * the max value in uniform filler
             * </pre>
             */
            public Builder clearMax() {
                bitField0_ = (bitField0_ & ~0x00000008);
                max_ = 1F;
                onChanged();
                return this;
            }

            private float mean_ ;
            /**
             * <code>optional float mean = 5 [default = 0];</code>
             *
             * <pre>
             * the mean value in Gaussian filler
             * </pre>
             */
            public boolean hasMean() {
                return ((bitField0_ & 0x00000010) == 0x00000010);
            }
            /**
             * <code>optional float mean = 5 [default = 0];</code>
             *
             * <pre>
             * the mean value in Gaussian filler
             * </pre>
             */
            public float getMean() {
                return mean_;
            }
            /**
             * <code>optional float mean = 5 [default = 0];</code>
             *
             * <pre>
             * the mean value in Gaussian filler
             * </pre>
             */
            public Builder setMean(float value) {
                bitField0_ |= 0x00000010;
                mean_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float mean = 5 [default = 0];</code>
             *
             * <pre>
             * the mean value in Gaussian filler
             * </pre>
             */
            public Builder clearMean() {
                bitField0_ = (bitField0_ & ~0x00000010);
                mean_ = 0F;
                onChanged();
                return this;
            }

            private float std_ = 1F;
            /**
             * <code>optional float std = 6 [default = 1];</code>
             *
             * <pre>
             * the std value in Gaussian filler
             * </pre>
             */
            public boolean hasStd() {
                return ((bitField0_ & 0x00000020) == 0x00000020);
            }
            /**
             * <code>optional float std = 6 [default = 1];</code>
             *
             * <pre>
             * the std value in Gaussian filler
             * </pre>
             */
            public float getStd() {
                return std_;
            }
            /**
             * <code>optional float std = 6 [default = 1];</code>
             *
             * <pre>
             * the std value in Gaussian filler
             * </pre>
             */
            public Builder setStd(float value) {
                bitField0_ |= 0x00000020;
                std_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float std = 6 [default = 1];</code>
             *
             * <pre>
             * the std value in Gaussian filler
             * </pre>
             */
            public Builder clearStd() {
                bitField0_ = (bitField0_ & ~0x00000020);
                std_ = 1F;
                onChanged();
                return this;
            }

            private int sparse_ = -1;
            /**
             * <code>optional int32 sparse = 7 [default = -1];</code>
             *
             * <pre>
             * The expected number of non-zero output weights for a given input in
             * Gaussian filler -- the default -1 means don't perform sparsification.
             * </pre>
             */
            public boolean hasSparse() {
                return ((bitField0_ & 0x00000040) == 0x00000040);
            }
            /**
             * <code>optional int32 sparse = 7 [default = -1];</code>
             *
             * <pre>
             * The expected number of non-zero output weights for a given input in
             * Gaussian filler -- the default -1 means don't perform sparsification.
             * </pre>
             */
            public int getSparse() {
                return sparse_;
            }
            /**
             * <code>optional int32 sparse = 7 [default = -1];</code>
             *
             * <pre>
             * The expected number of non-zero output weights for a given input in
             * Gaussian filler -- the default -1 means don't perform sparsification.
             * </pre>
             */
            public Builder setSparse(int value) {
                bitField0_ |= 0x00000040;
                sparse_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 sparse = 7 [default = -1];</code>
             *
             * <pre>
             * The expected number of non-zero output weights for a given input in
             * Gaussian filler -- the default -1 means don't perform sparsification.
             * </pre>
             */
            public Builder clearSparse() {
                bitField0_ = (bitField0_ & ~0x00000040);
                sparse_ = -1;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.FillerParameter)
        }

        static {
            defaultInstance = new FillerParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.FillerParameter)
    }

    public interface NetParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.NetParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * consider giving the network a name
         * </pre>
         */
        boolean hasName();
        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * consider giving the network a name
         * </pre>
         */
        java.lang.String getName();
        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * consider giving the network a name
         * </pre>
         */
        com.google.protobuf.ByteString
        getNameBytes();

        /**
         * <code>repeated string input = 3;</code>
         *
         * <pre>
         * The input blobs to the network.
         * </pre>
         */
        com.google.protobuf.ProtocolStringList
        getInputList();
        /**
         * <code>repeated string input = 3;</code>
         *
         * <pre>
         * The input blobs to the network.
         * </pre>
         */
        int getInputCount();
        /**
         * <code>repeated string input = 3;</code>
         *
         * <pre>
         * The input blobs to the network.
         * </pre>
         */
        java.lang.String getInput(int index);
        /**
         * <code>repeated string input = 3;</code>
         *
         * <pre>
         * The input blobs to the network.
         * </pre>
         */
        com.google.protobuf.ByteString
        getInputBytes(int index);

        /**
         * <code>repeated .caffe.BlobShape input_shape = 8;</code>
         *
         * <pre>
         * The shape of the input blobs.
         * </pre>
         */
        java.util.List<caffe.Loadcaffe.BlobShape>
        getInputShapeList();
        /**
         * <code>repeated .caffe.BlobShape input_shape = 8;</code>
         *
         * <pre>
         * The shape of the input blobs.
         * </pre>
         */
        caffe.Loadcaffe.BlobShape getInputShape(int index);
        /**
         * <code>repeated .caffe.BlobShape input_shape = 8;</code>
         *
         * <pre>
         * The shape of the input blobs.
         * </pre>
         */
        int getInputShapeCount();
        /**
         * <code>repeated .caffe.BlobShape input_shape = 8;</code>
         *
         * <pre>
         * The shape of the input blobs.
         * </pre>
         */
        java.util.List<? extends caffe.Loadcaffe.BlobShapeOrBuilder>
        getInputShapeOrBuilderList();
        /**
         * <code>repeated .caffe.BlobShape input_shape = 8;</code>
         *
         * <pre>
         * The shape of the input blobs.
         * </pre>
         */
        caffe.Loadcaffe.BlobShapeOrBuilder getInputShapeOrBuilder(
                int index);

        /**
         * <code>repeated int32 input_dim = 4;</code>
         *
         * <pre>
         * 4D input dimensions -- deprecated.  Use "shape" instead.
         * If specified, for each input blob there should be four
         * values specifying the num, channels, height and width of the input blob.
         * Thus, there should be a total of (4 * #input) numbers.
         * </pre>
         */
        java.util.List<java.lang.Integer> getInputDimList();
        /**
         * <code>repeated int32 input_dim = 4;</code>
         *
         * <pre>
         * 4D input dimensions -- deprecated.  Use "shape" instead.
         * If specified, for each input blob there should be four
         * values specifying the num, channels, height and width of the input blob.
         * Thus, there should be a total of (4 * #input) numbers.
         * </pre>
         */
        int getInputDimCount();
        /**
         * <code>repeated int32 input_dim = 4;</code>
         *
         * <pre>
         * 4D input dimensions -- deprecated.  Use "shape" instead.
         * If specified, for each input blob there should be four
         * values specifying the num, channels, height and width of the input blob.
         * Thus, there should be a total of (4 * #input) numbers.
         * </pre>
         */
        int getInputDim(int index);

        /**
         * <code>optional bool force_backward = 5 [default = false];</code>
         *
         * <pre>
         * Whether the network will force every layer to carry out backward operation.
         * If set False, then whether to carry out backward is determined
         * automatically according to the net structure and learning rates.
         * </pre>
         */
        boolean hasForceBackward();
        /**
         * <code>optional bool force_backward = 5 [default = false];</code>
         *
         * <pre>
         * Whether the network will force every layer to carry out backward operation.
         * If set False, then whether to carry out backward is determined
         * automatically according to the net structure and learning rates.
         * </pre>
         */
        boolean getForceBackward();

        /**
         * <code>optional .caffe.NetState state = 6;</code>
         *
         * <pre>
         * The current "state" of the network, including the phase, level, and stage.
         * Some layers may be included/excluded depending on this state and the states
         * specified in the layers' include and exclude fields.
         * </pre>
         */
        boolean hasState();
        /**
         * <code>optional .caffe.NetState state = 6;</code>
         *
         * <pre>
         * The current "state" of the network, including the phase, level, and stage.
         * Some layers may be included/excluded depending on this state and the states
         * specified in the layers' include and exclude fields.
         * </pre>
         */
        caffe.Loadcaffe.NetState getState();
        /**
         * <code>optional .caffe.NetState state = 6;</code>
         *
         * <pre>
         * The current "state" of the network, including the phase, level, and stage.
         * Some layers may be included/excluded depending on this state and the states
         * specified in the layers' include and exclude fields.
         * </pre>
         */
        caffe.Loadcaffe.NetStateOrBuilder getStateOrBuilder();

        /**
         * <code>optional bool debug_info = 7 [default = false];</code>
         *
         * <pre>
         * Print debugging information about results while running Net::Forward,
         * Net::Backward, and Net::Update.
         * </pre>
         */
        boolean hasDebugInfo();
        /**
         * <code>optional bool debug_info = 7 [default = false];</code>
         *
         * <pre>
         * Print debugging information about results while running Net::Forward,
         * Net::Backward, and Net::Update.
         * </pre>
         */
        boolean getDebugInfo();

        /**
         * <code>repeated .caffe.LayerParameter layer = 100;</code>
         *
         * <pre>
         * The layers that make up the net.  Each of their configurations, including
         * connectivity and behavior, is specified as a LayerParameter.
         * </pre>
         */
        java.util.List<caffe.Loadcaffe.LayerParameter>
        getLayerList();
        /**
         * <code>repeated .caffe.LayerParameter layer = 100;</code>
         *
         * <pre>
         * The layers that make up the net.  Each of their configurations, including
         * connectivity and behavior, is specified as a LayerParameter.
         * </pre>
         */
        caffe.Loadcaffe.LayerParameter getLayer(int index);
        /**
         * <code>repeated .caffe.LayerParameter layer = 100;</code>
         *
         * <pre>
         * The layers that make up the net.  Each of their configurations, including
         * connectivity and behavior, is specified as a LayerParameter.
         * </pre>
         */
        int getLayerCount();
        /**
         * <code>repeated .caffe.LayerParameter layer = 100;</code>
         *
         * <pre>
         * The layers that make up the net.  Each of their configurations, including
         * connectivity and behavior, is specified as a LayerParameter.
         * </pre>
         */
        java.util.List<? extends caffe.Loadcaffe.LayerParameterOrBuilder>
        getLayerOrBuilderList();
        /**
         * <code>repeated .caffe.LayerParameter layer = 100;</code>
         *
         * <pre>
         * The layers that make up the net.  Each of their configurations, including
         * connectivity and behavior, is specified as a LayerParameter.
         * </pre>
         */
        caffe.Loadcaffe.LayerParameterOrBuilder getLayerOrBuilder(
                int index);

        /**
         * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
         *
         * <pre>
         * DEPRECATED: use 'layer' instead.
         * </pre>
         */
        java.util.List<caffe.Loadcaffe.V1LayerParameter>
        getLayersList();
        /**
         * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
         *
         * <pre>
         * DEPRECATED: use 'layer' instead.
         * </pre>
         */
        caffe.Loadcaffe.V1LayerParameter getLayers(int index);
        /**
         * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
         *
         * <pre>
         * DEPRECATED: use 'layer' instead.
         * </pre>
         */
        int getLayersCount();
        /**
         * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
         *
         * <pre>
         * DEPRECATED: use 'layer' instead.
         * </pre>
         */
        java.util.List<? extends caffe.Loadcaffe.V1LayerParameterOrBuilder>
        getLayersOrBuilderList();
        /**
         * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
         *
         * <pre>
         * DEPRECATED: use 'layer' instead.
         * </pre>
         */
        caffe.Loadcaffe.V1LayerParameterOrBuilder getLayersOrBuilder(
                int index);
    }
    /**
     * Protobuf type {@code caffe.NetParameter}
     */
    public static final class NetParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.NetParameter)
            NetParameterOrBuilder {
        // Use NetParameter.newBuilder() to construct.
        private NetParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private NetParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final NetParameter defaultInstance;
        public static NetParameter getDefaultInstance() {
            return defaultInstance;
        }

        public NetParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private NetParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 10: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000001;
                            name_ = bs;
                            break;
                        }
                        case 18: {
                            if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                                layers_ = new java.util.ArrayList<caffe.Loadcaffe.V1LayerParameter>();
                                mutable_bitField0_ |= 0x00000100;
                            }
                            layers_.add(input.readMessage(caffe.Loadcaffe.V1LayerParameter.PARSER, extensionRegistry));
                            break;
                        }
                        case 26: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                                input_ = new com.google.protobuf.LazyStringArrayList();
                                mutable_bitField0_ |= 0x00000002;
                            }
                            input_.add(bs);
                            break;
                        }
                        case 32: {
                            if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                                inputDim_ = new java.util.ArrayList<java.lang.Integer>();
                                mutable_bitField0_ |= 0x00000008;
                            }
                            inputDim_.add(input.readInt32());
                            break;
                        }
                        case 34: {
                            int length = input.readRawVarint32();
                            int limit = input.pushLimit(length);
                            if (!((mutable_bitField0_ & 0x00000008) == 0x00000008) && input.getBytesUntilLimit() > 0) {
                                inputDim_ = new java.util.ArrayList<java.lang.Integer>();
                                mutable_bitField0_ |= 0x00000008;
                            }
                            while (input.getBytesUntilLimit() > 0) {
                                inputDim_.add(input.readInt32());
                            }
                            input.popLimit(limit);
                            break;
                        }
                        case 40: {
                            bitField0_ |= 0x00000002;
                            forceBackward_ = input.readBool();
                            break;
                        }
                        case 50: {
                            caffe.Loadcaffe.NetState.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                                subBuilder = state_.toBuilder();
                            }
                            state_ = input.readMessage(caffe.Loadcaffe.NetState.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(state_);
                                state_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000004;
                            break;
                        }
                        case 56: {
                            bitField0_ |= 0x00000008;
                            debugInfo_ = input.readBool();
                            break;
                        }
                        case 66: {
                            if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                                inputShape_ = new java.util.ArrayList<caffe.Loadcaffe.BlobShape>();
                                mutable_bitField0_ |= 0x00000004;
                            }
                            inputShape_.add(input.readMessage(caffe.Loadcaffe.BlobShape.PARSER, extensionRegistry));
                            break;
                        }
                        case 802: {
                            if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                                layer_ = new java.util.ArrayList<caffe.Loadcaffe.LayerParameter>();
                                mutable_bitField0_ |= 0x00000080;
                            }
                            layer_.add(input.readMessage(caffe.Loadcaffe.LayerParameter.PARSER, extensionRegistry));
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                    layers_ = java.util.Collections.unmodifiableList(layers_);
                }
                if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                    input_ = input_.getUnmodifiableView();
                }
                if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                    inputDim_ = java.util.Collections.unmodifiableList(inputDim_);
                }
                if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                    inputShape_ = java.util.Collections.unmodifiableList(inputShape_);
                }
                if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                    layer_ = java.util.Collections.unmodifiableList(layer_);
                }
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_NetParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_NetParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.NetParameter.class, caffe.Loadcaffe.NetParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<NetParameter> PARSER =
                new com.google.protobuf.AbstractParser<NetParameter>() {
                    public NetParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new NetParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<NetParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int NAME_FIELD_NUMBER = 1;
        private java.lang.Object name_;
        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * consider giving the network a name
         * </pre>
         */
        public boolean hasName() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * consider giving the network a name
         * </pre>
         */
        public java.lang.String getName() {
            java.lang.Object ref = name_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    name_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * consider giving the network a name
         * </pre>
         */
        public com.google.protobuf.ByteString
        getNameBytes() {
            java.lang.Object ref = name_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                name_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int INPUT_FIELD_NUMBER = 3;
        private com.google.protobuf.LazyStringList input_;
        /**
         * <code>repeated string input = 3;</code>
         *
         * <pre>
         * The input blobs to the network.
         * </pre>
         */
        public com.google.protobuf.ProtocolStringList
        getInputList() {
            return input_;
        }
        /**
         * <code>repeated string input = 3;</code>
         *
         * <pre>
         * The input blobs to the network.
         * </pre>
         */
        public int getInputCount() {
            return input_.size();
        }
        /**
         * <code>repeated string input = 3;</code>
         *
         * <pre>
         * The input blobs to the network.
         * </pre>
         */
        public java.lang.String getInput(int index) {
            return input_.get(index);
        }
        /**
         * <code>repeated string input = 3;</code>
         *
         * <pre>
         * The input blobs to the network.
         * </pre>
         */
        public com.google.protobuf.ByteString
        getInputBytes(int index) {
            return input_.getByteString(index);
        }

        public static final int INPUT_SHAPE_FIELD_NUMBER = 8;
        private java.util.List<caffe.Loadcaffe.BlobShape> inputShape_;
        /**
         * <code>repeated .caffe.BlobShape input_shape = 8;</code>
         *
         * <pre>
         * The shape of the input blobs.
         * </pre>
         */
        public java.util.List<caffe.Loadcaffe.BlobShape> getInputShapeList() {
            return inputShape_;
        }
        /**
         * <code>repeated .caffe.BlobShape input_shape = 8;</code>
         *
         * <pre>
         * The shape of the input blobs.
         * </pre>
         */
        public java.util.List<? extends caffe.Loadcaffe.BlobShapeOrBuilder>
        getInputShapeOrBuilderList() {
            return inputShape_;
        }
        /**
         * <code>repeated .caffe.BlobShape input_shape = 8;</code>
         *
         * <pre>
         * The shape of the input blobs.
         * </pre>
         */
        public int getInputShapeCount() {
            return inputShape_.size();
        }
        /**
         * <code>repeated .caffe.BlobShape input_shape = 8;</code>
         *
         * <pre>
         * The shape of the input blobs.
         * </pre>
         */
        public caffe.Loadcaffe.BlobShape getInputShape(int index) {
            return inputShape_.get(index);
        }
        /**
         * <code>repeated .caffe.BlobShape input_shape = 8;</code>
         *
         * <pre>
         * The shape of the input blobs.
         * </pre>
         */
        public caffe.Loadcaffe.BlobShapeOrBuilder getInputShapeOrBuilder(
                int index) {
            return inputShape_.get(index);
        }

        public static final int INPUT_DIM_FIELD_NUMBER = 4;
        private java.util.List<java.lang.Integer> inputDim_;
        /**
         * <code>repeated int32 input_dim = 4;</code>
         *
         * <pre>
         * 4D input dimensions -- deprecated.  Use "shape" instead.
         * If specified, for each input blob there should be four
         * values specifying the num, channels, height and width of the input blob.
         * Thus, there should be a total of (4 * #input) numbers.
         * </pre>
         */
        public java.util.List<java.lang.Integer>
        getInputDimList() {
            return inputDim_;
        }
        /**
         * <code>repeated int32 input_dim = 4;</code>
         *
         * <pre>
         * 4D input dimensions -- deprecated.  Use "shape" instead.
         * If specified, for each input blob there should be four
         * values specifying the num, channels, height and width of the input blob.
         * Thus, there should be a total of (4 * #input) numbers.
         * </pre>
         */
        public int getInputDimCount() {
            return inputDim_.size();
        }
        /**
         * <code>repeated int32 input_dim = 4;</code>
         *
         * <pre>
         * 4D input dimensions -- deprecated.  Use "shape" instead.
         * If specified, for each input blob there should be four
         * values specifying the num, channels, height and width of the input blob.
         * Thus, there should be a total of (4 * #input) numbers.
         * </pre>
         */
        public int getInputDim(int index) {
            return inputDim_.get(index);
        }

        public static final int FORCE_BACKWARD_FIELD_NUMBER = 5;
        private boolean forceBackward_;
        /**
         * <code>optional bool force_backward = 5 [default = false];</code>
         *
         * <pre>
         * Whether the network will force every layer to carry out backward operation.
         * If set False, then whether to carry out backward is determined
         * automatically according to the net structure and learning rates.
         * </pre>
         */
        public boolean hasForceBackward() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional bool force_backward = 5 [default = false];</code>
         *
         * <pre>
         * Whether the network will force every layer to carry out backward operation.
         * If set False, then whether to carry out backward is determined
         * automatically according to the net structure and learning rates.
         * </pre>
         */
        public boolean getForceBackward() {
            return forceBackward_;
        }

        public static final int STATE_FIELD_NUMBER = 6;
        private caffe.Loadcaffe.NetState state_;
        /**
         * <code>optional .caffe.NetState state = 6;</code>
         *
         * <pre>
         * The current "state" of the network, including the phase, level, and stage.
         * Some layers may be included/excluded depending on this state and the states
         * specified in the layers' include and exclude fields.
         * </pre>
         */
        public boolean hasState() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional .caffe.NetState state = 6;</code>
         *
         * <pre>
         * The current "state" of the network, including the phase, level, and stage.
         * Some layers may be included/excluded depending on this state and the states
         * specified in the layers' include and exclude fields.
         * </pre>
         */
        public caffe.Loadcaffe.NetState getState() {
            return state_;
        }
        /**
         * <code>optional .caffe.NetState state = 6;</code>
         *
         * <pre>
         * The current "state" of the network, including the phase, level, and stage.
         * Some layers may be included/excluded depending on this state and the states
         * specified in the layers' include and exclude fields.
         * </pre>
         */
        public caffe.Loadcaffe.NetStateOrBuilder getStateOrBuilder() {
            return state_;
        }

        public static final int DEBUG_INFO_FIELD_NUMBER = 7;
        private boolean debugInfo_;
        /**
         * <code>optional bool debug_info = 7 [default = false];</code>
         *
         * <pre>
         * Print debugging information about results while running Net::Forward,
         * Net::Backward, and Net::Update.
         * </pre>
         */
        public boolean hasDebugInfo() {
            return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional bool debug_info = 7 [default = false];</code>
         *
         * <pre>
         * Print debugging information about results while running Net::Forward,
         * Net::Backward, and Net::Update.
         * </pre>
         */
        public boolean getDebugInfo() {
            return debugInfo_;
        }

        public static final int LAYER_FIELD_NUMBER = 100;
        private java.util.List<caffe.Loadcaffe.LayerParameter> layer_;
        /**
         * <code>repeated .caffe.LayerParameter layer = 100;</code>
         *
         * <pre>
         * The layers that make up the net.  Each of their configurations, including
         * connectivity and behavior, is specified as a LayerParameter.
         * </pre>
         */
        public java.util.List<caffe.Loadcaffe.LayerParameter> getLayerList() {
            return layer_;
        }
        /**
         * <code>repeated .caffe.LayerParameter layer = 100;</code>
         *
         * <pre>
         * The layers that make up the net.  Each of their configurations, including
         * connectivity and behavior, is specified as a LayerParameter.
         * </pre>
         */
        public java.util.List<? extends caffe.Loadcaffe.LayerParameterOrBuilder>
        getLayerOrBuilderList() {
            return layer_;
        }
        /**
         * <code>repeated .caffe.LayerParameter layer = 100;</code>
         *
         * <pre>
         * The layers that make up the net.  Each of their configurations, including
         * connectivity and behavior, is specified as a LayerParameter.
         * </pre>
         */
        public int getLayerCount() {
            return layer_.size();
        }
        /**
         * <code>repeated .caffe.LayerParameter layer = 100;</code>
         *
         * <pre>
         * The layers that make up the net.  Each of their configurations, including
         * connectivity and behavior, is specified as a LayerParameter.
         * </pre>
         */
        public caffe.Loadcaffe.LayerParameter getLayer(int index) {
            return layer_.get(index);
        }
        /**
         * <code>repeated .caffe.LayerParameter layer = 100;</code>
         *
         * <pre>
         * The layers that make up the net.  Each of their configurations, including
         * connectivity and behavior, is specified as a LayerParameter.
         * </pre>
         */
        public caffe.Loadcaffe.LayerParameterOrBuilder getLayerOrBuilder(
                int index) {
            return layer_.get(index);
        }

        public static final int LAYERS_FIELD_NUMBER = 2;
        private java.util.List<caffe.Loadcaffe.V1LayerParameter> layers_;
        /**
         * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
         *
         * <pre>
         * DEPRECATED: use 'layer' instead.
         * </pre>
         */
        public java.util.List<caffe.Loadcaffe.V1LayerParameter> getLayersList() {
            return layers_;
        }
        /**
         * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
         *
         * <pre>
         * DEPRECATED: use 'layer' instead.
         * </pre>
         */
        public java.util.List<? extends caffe.Loadcaffe.V1LayerParameterOrBuilder>
        getLayersOrBuilderList() {
            return layers_;
        }
        /**
         * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
         *
         * <pre>
         * DEPRECATED: use 'layer' instead.
         * </pre>
         */
        public int getLayersCount() {
            return layers_.size();
        }
        /**
         * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
         *
         * <pre>
         * DEPRECATED: use 'layer' instead.
         * </pre>
         */
        public caffe.Loadcaffe.V1LayerParameter getLayers(int index) {
            return layers_.get(index);
        }
        /**
         * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
         *
         * <pre>
         * DEPRECATED: use 'layer' instead.
         * </pre>
         */
        public caffe.Loadcaffe.V1LayerParameterOrBuilder getLayersOrBuilder(
                int index) {
            return layers_.get(index);
        }

        private void initFields() {
            name_ = "";
            input_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            inputShape_ = java.util.Collections.emptyList();
            inputDim_ = java.util.Collections.emptyList();
            forceBackward_ = false;
            state_ = caffe.Loadcaffe.NetState.getDefaultInstance();
            debugInfo_ = false;
            layer_ = java.util.Collections.emptyList();
            layers_ = java.util.Collections.emptyList();
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeBytes(1, getNameBytes());
            }
            for (int i = 0; i < layers_.size(); i++) {
                output.writeMessage(2, layers_.get(i));
            }
            for (int i = 0; i < input_.size(); i++) {
                output.writeBytes(3, input_.getByteString(i));
            }
            for (int i = 0; i < inputDim_.size(); i++) {
                output.writeInt32(4, inputDim_.get(i));
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeBool(5, forceBackward_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeMessage(6, state_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                output.writeBool(7, debugInfo_);
            }
            for (int i = 0; i < inputShape_.size(); i++) {
                output.writeMessage(8, inputShape_.get(i));
            }
            for (int i = 0; i < layer_.size(); i++) {
                output.writeMessage(100, layer_.get(i));
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(1, getNameBytes());
            }
            for (int i = 0; i < layers_.size(); i++) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(2, layers_.get(i));
            }
            {
                int dataSize = 0;
                for (int i = 0; i < input_.size(); i++) {
                    dataSize += com.google.protobuf.CodedOutputStream
                            .computeBytesSizeNoTag(input_.getByteString(i));
                }
                size += dataSize;
                size += 1 * getInputList().size();
            }
            {
                int dataSize = 0;
                for (int i = 0; i < inputDim_.size(); i++) {
                    dataSize += com.google.protobuf.CodedOutputStream
                            .computeInt32SizeNoTag(inputDim_.get(i));
                }
                size += dataSize;
                size += 1 * getInputDimList().size();
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(5, forceBackward_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(6, state_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(7, debugInfo_);
            }
            for (int i = 0; i < inputShape_.size(); i++) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(8, inputShape_.get(i));
            }
            for (int i = 0; i < layer_.size(); i++) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(100, layer_.get(i));
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.NetParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.NetParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.NetParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.NetParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.NetParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.NetParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.NetParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.NetParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.NetParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.NetParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.NetParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.NetParameter}
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.NetParameter)
                caffe.Loadcaffe.NetParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_NetParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_NetParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.NetParameter.class, caffe.Loadcaffe.NetParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.NetParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                    getInputShapeFieldBuilder();
                    getStateFieldBuilder();
                    getLayerFieldBuilder();
                    getLayersFieldBuilder();
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                name_ = "";
                bitField0_ = (bitField0_ & ~0x00000001);
                input_ = com.google.protobuf.LazyStringArrayList.EMPTY;
                bitField0_ = (bitField0_ & ~0x00000002);
                if (inputShapeBuilder_ == null) {
                    inputShape_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000004);
                } else {
                    inputShapeBuilder_.clear();
                }
                inputDim_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000008);
                forceBackward_ = false;
                bitField0_ = (bitField0_ & ~0x00000010);
                if (stateBuilder_ == null) {
                    state_ = caffe.Loadcaffe.NetState.getDefaultInstance();
                } else {
                    stateBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000020);
                debugInfo_ = false;
                bitField0_ = (bitField0_ & ~0x00000040);
                if (layerBuilder_ == null) {
                    layer_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000080);
                } else {
                    layerBuilder_.clear();
                }
                if (layersBuilder_ == null) {
                    layers_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000100);
                } else {
                    layersBuilder_.clear();
                }
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_NetParameter_descriptor;
            }

            public caffe.Loadcaffe.NetParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.NetParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.NetParameter build() {
                caffe.Loadcaffe.NetParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.NetParameter buildPartial() {
                caffe.Loadcaffe.NetParameter result = new caffe.Loadcaffe.NetParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.name_ = name_;
                if (((bitField0_ & 0x00000002) == 0x00000002)) {
                    input_ = input_.getUnmodifiableView();
                    bitField0_ = (bitField0_ & ~0x00000002);
                }
                result.input_ = input_;
                if (inputShapeBuilder_ == null) {
                    if (((bitField0_ & 0x00000004) == 0x00000004)) {
                        inputShape_ = java.util.Collections.unmodifiableList(inputShape_);
                        bitField0_ = (bitField0_ & ~0x00000004);
                    }
                    result.inputShape_ = inputShape_;
                } else {
                    result.inputShape_ = inputShapeBuilder_.build();
                }
                if (((bitField0_ & 0x00000008) == 0x00000008)) {
                    inputDim_ = java.util.Collections.unmodifiableList(inputDim_);
                    bitField0_ = (bitField0_ & ~0x00000008);
                }
                result.inputDim_ = inputDim_;
                if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.forceBackward_ = forceBackward_;
                if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
                    to_bitField0_ |= 0x00000004;
                }
                if (stateBuilder_ == null) {
                    result.state_ = state_;
                } else {
                    result.state_ = stateBuilder_.build();
                }
                if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
                    to_bitField0_ |= 0x00000008;
                }
                result.debugInfo_ = debugInfo_;
                if (layerBuilder_ == null) {
                    if (((bitField0_ & 0x00000080) == 0x00000080)) {
                        layer_ = java.util.Collections.unmodifiableList(layer_);
                        bitField0_ = (bitField0_ & ~0x00000080);
                    }
                    result.layer_ = layer_;
                } else {
                    result.layer_ = layerBuilder_.build();
                }
                if (layersBuilder_ == null) {
                    if (((bitField0_ & 0x00000100) == 0x00000100)) {
                        layers_ = java.util.Collections.unmodifiableList(layers_);
                        bitField0_ = (bitField0_ & ~0x00000100);
                    }
                    result.layers_ = layers_;
                } else {
                    result.layers_ = layersBuilder_.build();
                }
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.NetParameter) {
                    return mergeFrom((caffe.Loadcaffe.NetParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.NetParameter other) {
                if (other == caffe.Loadcaffe.NetParameter.getDefaultInstance()) return this;
                if (other.hasName()) {
                    bitField0_ |= 0x00000001;
                    name_ = other.name_;
                    onChanged();
                }
                if (!other.input_.isEmpty()) {
                    if (input_.isEmpty()) {
                        input_ = other.input_;
                        bitField0_ = (bitField0_ & ~0x00000002);
                    } else {
                        ensureInputIsMutable();
                        input_.addAll(other.input_);
                    }
                    onChanged();
                }
                if (inputShapeBuilder_ == null) {
                    if (!other.inputShape_.isEmpty()) {
                        if (inputShape_.isEmpty()) {
                            inputShape_ = other.inputShape_;
                            bitField0_ = (bitField0_ & ~0x00000004);
                        } else {
                            ensureInputShapeIsMutable();
                            inputShape_.addAll(other.inputShape_);
                        }
                        onChanged();
                    }
                } else {
                    if (!other.inputShape_.isEmpty()) {
                        if (inputShapeBuilder_.isEmpty()) {
                            inputShapeBuilder_.dispose();
                            inputShapeBuilder_ = null;
                            inputShape_ = other.inputShape_;
                            bitField0_ = (bitField0_ & ~0x00000004);
                            inputShapeBuilder_ =
                                    com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                                            getInputShapeFieldBuilder() : null;
                        } else {
                            inputShapeBuilder_.addAllMessages(other.inputShape_);
                        }
                    }
                }
                if (!other.inputDim_.isEmpty()) {
                    if (inputDim_.isEmpty()) {
                        inputDim_ = other.inputDim_;
                        bitField0_ = (bitField0_ & ~0x00000008);
                    } else {
                        ensureInputDimIsMutable();
                        inputDim_.addAll(other.inputDim_);
                    }
                    onChanged();
                }
                if (other.hasForceBackward()) {
                    setForceBackward(other.getForceBackward());
                }
                if (other.hasState()) {
                    mergeState(other.getState());
                }
                if (other.hasDebugInfo()) {
                    setDebugInfo(other.getDebugInfo());
                }
                if (layerBuilder_ == null) {
                    if (!other.layer_.isEmpty()) {
                        if (layer_.isEmpty()) {
                            layer_ = other.layer_;
                            bitField0_ = (bitField0_ & ~0x00000080);
                        } else {
                            ensureLayerIsMutable();
                            layer_.addAll(other.layer_);
                        }
                        onChanged();
                    }
                } else {
                    if (!other.layer_.isEmpty()) {
                        if (layerBuilder_.isEmpty()) {
                            layerBuilder_.dispose();
                            layerBuilder_ = null;
                            layer_ = other.layer_;
                            bitField0_ = (bitField0_ & ~0x00000080);
                            layerBuilder_ =
                                    com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                                            getLayerFieldBuilder() : null;
                        } else {
                            layerBuilder_.addAllMessages(other.layer_);
                        }
                    }
                }
                if (layersBuilder_ == null) {
                    if (!other.layers_.isEmpty()) {
                        if (layers_.isEmpty()) {
                            layers_ = other.layers_;
                            bitField0_ = (bitField0_ & ~0x00000100);
                        } else {
                            ensureLayersIsMutable();
                            layers_.addAll(other.layers_);
                        }
                        onChanged();
                    }
                } else {
                    if (!other.layers_.isEmpty()) {
                        if (layersBuilder_.isEmpty()) {
                            layersBuilder_.dispose();
                            layersBuilder_ = null;
                            layers_ = other.layers_;
                            bitField0_ = (bitField0_ & ~0x00000100);
                            layersBuilder_ =
                                    com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                                            getLayersFieldBuilder() : null;
                        } else {
                            layersBuilder_.addAllMessages(other.layers_);
                        }
                    }
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.NetParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.NetParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private java.lang.Object name_ = "";
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * consider giving the network a name
             * </pre>
             */
            public boolean hasName() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * consider giving the network a name
             * </pre>
             */
            public java.lang.String getName() {
                java.lang.Object ref = name_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        name_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * consider giving the network a name
             * </pre>
             */
            public com.google.protobuf.ByteString
            getNameBytes() {
                java.lang.Object ref = name_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    name_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * consider giving the network a name
             * </pre>
             */
            public Builder setName(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                name_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * consider giving the network a name
             * </pre>
             */
            public Builder clearName() {
                bitField0_ = (bitField0_ & ~0x00000001);
                name_ = getDefaultInstance().getName();
                onChanged();
                return this;
            }
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * consider giving the network a name
             * </pre>
             */
            public Builder setNameBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                name_ = value;
                onChanged();
                return this;
            }

            private com.google.protobuf.LazyStringList input_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            private void ensureInputIsMutable() {
                if (!((bitField0_ & 0x00000002) == 0x00000002)) {
                    input_ = new com.google.protobuf.LazyStringArrayList(input_);
                    bitField0_ |= 0x00000002;
                }
            }
            /**
             * <code>repeated string input = 3;</code>
             *
             * <pre>
             * The input blobs to the network.
             * </pre>
             */
            public com.google.protobuf.ProtocolStringList
            getInputList() {
                return input_.getUnmodifiableView();
            }
            /**
             * <code>repeated string input = 3;</code>
             *
             * <pre>
             * The input blobs to the network.
             * </pre>
             */
            public int getInputCount() {
                return input_.size();
            }
            /**
             * <code>repeated string input = 3;</code>
             *
             * <pre>
             * The input blobs to the network.
             * </pre>
             */
            public java.lang.String getInput(int index) {
                return input_.get(index);
            }
            /**
             * <code>repeated string input = 3;</code>
             *
             * <pre>
             * The input blobs to the network.
             * </pre>
             */
            public com.google.protobuf.ByteString
            getInputBytes(int index) {
                return input_.getByteString(index);
            }
            /**
             * <code>repeated string input = 3;</code>
             *
             * <pre>
             * The input blobs to the network.
             * </pre>
             */
            public Builder setInput(
                    int index, java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureInputIsMutable();
                input_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string input = 3;</code>
             *
             * <pre>
             * The input blobs to the network.
             * </pre>
             */
            public Builder addInput(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureInputIsMutable();
                input_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string input = 3;</code>
             *
             * <pre>
             * The input blobs to the network.
             * </pre>
             */
            public Builder addAllInput(
                    java.lang.Iterable<java.lang.String> values) {
                ensureInputIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, input_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string input = 3;</code>
             *
             * <pre>
             * The input blobs to the network.
             * </pre>
             */
            public Builder clearInput() {
                input_ = com.google.protobuf.LazyStringArrayList.EMPTY;
                bitField0_ = (bitField0_ & ~0x00000002);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string input = 3;</code>
             *
             * <pre>
             * The input blobs to the network.
             * </pre>
             */
            public Builder addInputBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureInputIsMutable();
                input_.add(value);
                onChanged();
                return this;
            }

            private java.util.List<caffe.Loadcaffe.BlobShape> inputShape_ =
                    java.util.Collections.emptyList();
            private void ensureInputShapeIsMutable() {
                if (!((bitField0_ & 0x00000004) == 0x00000004)) {
                    inputShape_ = new java.util.ArrayList<caffe.Loadcaffe.BlobShape>(inputShape_);
                    bitField0_ |= 0x00000004;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.BlobShape, caffe.Loadcaffe.BlobShape.Builder, caffe.Loadcaffe.BlobShapeOrBuilder> inputShapeBuilder_;

            /**
             * <code>repeated .caffe.BlobShape input_shape = 8;</code>
             *
             * <pre>
             * The shape of the input blobs.
             * </pre>
             */
            public java.util.List<caffe.Loadcaffe.BlobShape> getInputShapeList() {
                if (inputShapeBuilder_ == null) {
                    return java.util.Collections.unmodifiableList(inputShape_);
                } else {
                    return inputShapeBuilder_.getMessageList();
                }
            }
            /**
             * <code>repeated .caffe.BlobShape input_shape = 8;</code>
             *
             * <pre>
             * The shape of the input blobs.
             * </pre>
             */
            public int getInputShapeCount() {
                if (inputShapeBuilder_ == null) {
                    return inputShape_.size();
                } else {
                    return inputShapeBuilder_.getCount();
                }
            }
            /**
             * <code>repeated .caffe.BlobShape input_shape = 8;</code>
             *
             * <pre>
             * The shape of the input blobs.
             * </pre>
             */
            public caffe.Loadcaffe.BlobShape getInputShape(int index) {
                if (inputShapeBuilder_ == null) {
                    return inputShape_.get(index);
                } else {
                    return inputShapeBuilder_.getMessage(index);
                }
            }
            /**
             * <code>repeated .caffe.BlobShape input_shape = 8;</code>
             *
             * <pre>
             * The shape of the input blobs.
             * </pre>
             */
            public Builder setInputShape(
                    int index, caffe.Loadcaffe.BlobShape value) {
                if (inputShapeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureInputShapeIsMutable();
                    inputShape_.set(index, value);
                    onChanged();
                } else {
                    inputShapeBuilder_.setMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobShape input_shape = 8;</code>
             *
             * <pre>
             * The shape of the input blobs.
             * </pre>
             */
            public Builder setInputShape(
                    int index, caffe.Loadcaffe.BlobShape.Builder builderForValue) {
                if (inputShapeBuilder_ == null) {
                    ensureInputShapeIsMutable();
                    inputShape_.set(index, builderForValue.build());
                    onChanged();
                } else {
                    inputShapeBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobShape input_shape = 8;</code>
             *
             * <pre>
             * The shape of the input blobs.
             * </pre>
             */
            public Builder addInputShape(caffe.Loadcaffe.BlobShape value) {
                if (inputShapeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureInputShapeIsMutable();
                    inputShape_.add(value);
                    onChanged();
                } else {
                    inputShapeBuilder_.addMessage(value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobShape input_shape = 8;</code>
             *
             * <pre>
             * The shape of the input blobs.
             * </pre>
             */
            public Builder addInputShape(
                    int index, caffe.Loadcaffe.BlobShape value) {
                if (inputShapeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureInputShapeIsMutable();
                    inputShape_.add(index, value);
                    onChanged();
                } else {
                    inputShapeBuilder_.addMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobShape input_shape = 8;</code>
             *
             * <pre>
             * The shape of the input blobs.
             * </pre>
             */
            public Builder addInputShape(
                    caffe.Loadcaffe.BlobShape.Builder builderForValue) {
                if (inputShapeBuilder_ == null) {
                    ensureInputShapeIsMutable();
                    inputShape_.add(builderForValue.build());
                    onChanged();
                } else {
                    inputShapeBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobShape input_shape = 8;</code>
             *
             * <pre>
             * The shape of the input blobs.
             * </pre>
             */
            public Builder addInputShape(
                    int index, caffe.Loadcaffe.BlobShape.Builder builderForValue) {
                if (inputShapeBuilder_ == null) {
                    ensureInputShapeIsMutable();
                    inputShape_.add(index, builderForValue.build());
                    onChanged();
                } else {
                    inputShapeBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobShape input_shape = 8;</code>
             *
             * <pre>
             * The shape of the input blobs.
             * </pre>
             */
            public Builder addAllInputShape(
                    java.lang.Iterable<? extends caffe.Loadcaffe.BlobShape> values) {
                if (inputShapeBuilder_ == null) {
                    ensureInputShapeIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(
                            values, inputShape_);
                    onChanged();
                } else {
                    inputShapeBuilder_.addAllMessages(values);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobShape input_shape = 8;</code>
             *
             * <pre>
             * The shape of the input blobs.
             * </pre>
             */
            public Builder clearInputShape() {
                if (inputShapeBuilder_ == null) {
                    inputShape_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000004);
                    onChanged();
                } else {
                    inputShapeBuilder_.clear();
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobShape input_shape = 8;</code>
             *
             * <pre>
             * The shape of the input blobs.
             * </pre>
             */
            public Builder removeInputShape(int index) {
                if (inputShapeBuilder_ == null) {
                    ensureInputShapeIsMutable();
                    inputShape_.remove(index);
                    onChanged();
                } else {
                    inputShapeBuilder_.remove(index);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobShape input_shape = 8;</code>
             *
             * <pre>
             * The shape of the input blobs.
             * </pre>
             */
            public caffe.Loadcaffe.BlobShape.Builder getInputShapeBuilder(
                    int index) {
                return getInputShapeFieldBuilder().getBuilder(index);
            }
            /**
             * <code>repeated .caffe.BlobShape input_shape = 8;</code>
             *
             * <pre>
             * The shape of the input blobs.
             * </pre>
             */
            public caffe.Loadcaffe.BlobShapeOrBuilder getInputShapeOrBuilder(
                    int index) {
                if (inputShapeBuilder_ == null) {
                    return inputShape_.get(index);  } else {
                    return inputShapeBuilder_.getMessageOrBuilder(index);
                }
            }
            /**
             * <code>repeated .caffe.BlobShape input_shape = 8;</code>
             *
             * <pre>
             * The shape of the input blobs.
             * </pre>
             */
            public java.util.List<? extends caffe.Loadcaffe.BlobShapeOrBuilder>
            getInputShapeOrBuilderList() {
                if (inputShapeBuilder_ != null) {
                    return inputShapeBuilder_.getMessageOrBuilderList();
                } else {
                    return java.util.Collections.unmodifiableList(inputShape_);
                }
            }
            /**
             * <code>repeated .caffe.BlobShape input_shape = 8;</code>
             *
             * <pre>
             * The shape of the input blobs.
             * </pre>
             */
            public caffe.Loadcaffe.BlobShape.Builder addInputShapeBuilder() {
                return getInputShapeFieldBuilder().addBuilder(
                        caffe.Loadcaffe.BlobShape.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.BlobShape input_shape = 8;</code>
             *
             * <pre>
             * The shape of the input blobs.
             * </pre>
             */
            public caffe.Loadcaffe.BlobShape.Builder addInputShapeBuilder(
                    int index) {
                return getInputShapeFieldBuilder().addBuilder(
                        index, caffe.Loadcaffe.BlobShape.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.BlobShape input_shape = 8;</code>
             *
             * <pre>
             * The shape of the input blobs.
             * </pre>
             */
            public java.util.List<caffe.Loadcaffe.BlobShape.Builder>
            getInputShapeBuilderList() {
                return getInputShapeFieldBuilder().getBuilderList();
            }
            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.BlobShape, caffe.Loadcaffe.BlobShape.Builder, caffe.Loadcaffe.BlobShapeOrBuilder>
            getInputShapeFieldBuilder() {
                if (inputShapeBuilder_ == null) {
                    inputShapeBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            caffe.Loadcaffe.BlobShape, caffe.Loadcaffe.BlobShape.Builder, caffe.Loadcaffe.BlobShapeOrBuilder>(
                            inputShape_,
                            ((bitField0_ & 0x00000004) == 0x00000004),
                            getParentForChildren(),
                            isClean());
                    inputShape_ = null;
                }
                return inputShapeBuilder_;
            }

            private java.util.List<java.lang.Integer> inputDim_ = java.util.Collections.emptyList();
            private void ensureInputDimIsMutable() {
                if (!((bitField0_ & 0x00000008) == 0x00000008)) {
                    inputDim_ = new java.util.ArrayList<java.lang.Integer>(inputDim_);
                    bitField0_ |= 0x00000008;
                }
            }
            /**
             * <code>repeated int32 input_dim = 4;</code>
             *
             * <pre>
             * 4D input dimensions -- deprecated.  Use "shape" instead.
             * If specified, for each input blob there should be four
             * values specifying the num, channels, height and width of the input blob.
             * Thus, there should be a total of (4 * #input) numbers.
             * </pre>
             */
            public java.util.List<java.lang.Integer>
            getInputDimList() {
                return java.util.Collections.unmodifiableList(inputDim_);
            }
            /**
             * <code>repeated int32 input_dim = 4;</code>
             *
             * <pre>
             * 4D input dimensions -- deprecated.  Use "shape" instead.
             * If specified, for each input blob there should be four
             * values specifying the num, channels, height and width of the input blob.
             * Thus, there should be a total of (4 * #input) numbers.
             * </pre>
             */
            public int getInputDimCount() {
                return inputDim_.size();
            }
            /**
             * <code>repeated int32 input_dim = 4;</code>
             *
             * <pre>
             * 4D input dimensions -- deprecated.  Use "shape" instead.
             * If specified, for each input blob there should be four
             * values specifying the num, channels, height and width of the input blob.
             * Thus, there should be a total of (4 * #input) numbers.
             * </pre>
             */
            public int getInputDim(int index) {
                return inputDim_.get(index);
            }
            /**
             * <code>repeated int32 input_dim = 4;</code>
             *
             * <pre>
             * 4D input dimensions -- deprecated.  Use "shape" instead.
             * If specified, for each input blob there should be four
             * values specifying the num, channels, height and width of the input blob.
             * Thus, there should be a total of (4 * #input) numbers.
             * </pre>
             */
            public Builder setInputDim(
                    int index, int value) {
                ensureInputDimIsMutable();
                inputDim_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated int32 input_dim = 4;</code>
             *
             * <pre>
             * 4D input dimensions -- deprecated.  Use "shape" instead.
             * If specified, for each input blob there should be four
             * values specifying the num, channels, height and width of the input blob.
             * Thus, there should be a total of (4 * #input) numbers.
             * </pre>
             */
            public Builder addInputDim(int value) {
                ensureInputDimIsMutable();
                inputDim_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated int32 input_dim = 4;</code>
             *
             * <pre>
             * 4D input dimensions -- deprecated.  Use "shape" instead.
             * If specified, for each input blob there should be four
             * values specifying the num, channels, height and width of the input blob.
             * Thus, there should be a total of (4 * #input) numbers.
             * </pre>
             */
            public Builder addAllInputDim(
                    java.lang.Iterable<? extends java.lang.Integer> values) {
                ensureInputDimIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, inputDim_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated int32 input_dim = 4;</code>
             *
             * <pre>
             * 4D input dimensions -- deprecated.  Use "shape" instead.
             * If specified, for each input blob there should be four
             * values specifying the num, channels, height and width of the input blob.
             * Thus, there should be a total of (4 * #input) numbers.
             * </pre>
             */
            public Builder clearInputDim() {
                inputDim_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000008);
                onChanged();
                return this;
            }

            private boolean forceBackward_ ;
            /**
             * <code>optional bool force_backward = 5 [default = false];</code>
             *
             * <pre>
             * Whether the network will force every layer to carry out backward operation.
             * If set False, then whether to carry out backward is determined
             * automatically according to the net structure and learning rates.
             * </pre>
             */
            public boolean hasForceBackward() {
                return ((bitField0_ & 0x00000010) == 0x00000010);
            }
            /**
             * <code>optional bool force_backward = 5 [default = false];</code>
             *
             * <pre>
             * Whether the network will force every layer to carry out backward operation.
             * If set False, then whether to carry out backward is determined
             * automatically according to the net structure and learning rates.
             * </pre>
             */
            public boolean getForceBackward() {
                return forceBackward_;
            }
            /**
             * <code>optional bool force_backward = 5 [default = false];</code>
             *
             * <pre>
             * Whether the network will force every layer to carry out backward operation.
             * If set False, then whether to carry out backward is determined
             * automatically according to the net structure and learning rates.
             * </pre>
             */
            public Builder setForceBackward(boolean value) {
                bitField0_ |= 0x00000010;
                forceBackward_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool force_backward = 5 [default = false];</code>
             *
             * <pre>
             * Whether the network will force every layer to carry out backward operation.
             * If set False, then whether to carry out backward is determined
             * automatically according to the net structure and learning rates.
             * </pre>
             */
            public Builder clearForceBackward() {
                bitField0_ = (bitField0_ & ~0x00000010);
                forceBackward_ = false;
                onChanged();
                return this;
            }

            private caffe.Loadcaffe.NetState state_ = caffe.Loadcaffe.NetState.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.NetState, caffe.Loadcaffe.NetState.Builder, caffe.Loadcaffe.NetStateOrBuilder> stateBuilder_;
            /**
             * <code>optional .caffe.NetState state = 6;</code>
             *
             * <pre>
             * The current "state" of the network, including the phase, level, and stage.
             * Some layers may be included/excluded depending on this state and the states
             * specified in the layers' include and exclude fields.
             * </pre>
             */
            public boolean hasState() {
                return ((bitField0_ & 0x00000020) == 0x00000020);
            }
            /**
             * <code>optional .caffe.NetState state = 6;</code>
             *
             * <pre>
             * The current "state" of the network, including the phase, level, and stage.
             * Some layers may be included/excluded depending on this state and the states
             * specified in the layers' include and exclude fields.
             * </pre>
             */
            public caffe.Loadcaffe.NetState getState() {
                if (stateBuilder_ == null) {
                    return state_;
                } else {
                    return stateBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.NetState state = 6;</code>
             *
             * <pre>
             * The current "state" of the network, including the phase, level, and stage.
             * Some layers may be included/excluded depending on this state and the states
             * specified in the layers' include and exclude fields.
             * </pre>
             */
            public Builder setState(caffe.Loadcaffe.NetState value) {
                if (stateBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    state_ = value;
                    onChanged();
                } else {
                    stateBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00000020;
                return this;
            }
            /**
             * <code>optional .caffe.NetState state = 6;</code>
             *
             * <pre>
             * The current "state" of the network, including the phase, level, and stage.
             * Some layers may be included/excluded depending on this state and the states
             * specified in the layers' include and exclude fields.
             * </pre>
             */
            public Builder setState(
                    caffe.Loadcaffe.NetState.Builder builderForValue) {
                if (stateBuilder_ == null) {
                    state_ = builderForValue.build();
                    onChanged();
                } else {
                    stateBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00000020;
                return this;
            }
            /**
             * <code>optional .caffe.NetState state = 6;</code>
             *
             * <pre>
             * The current "state" of the network, including the phase, level, and stage.
             * Some layers may be included/excluded depending on this state and the states
             * specified in the layers' include and exclude fields.
             * </pre>
             */
            public Builder mergeState(caffe.Loadcaffe.NetState value) {
                if (stateBuilder_ == null) {
                    if (((bitField0_ & 0x00000020) == 0x00000020) &&
                            state_ != caffe.Loadcaffe.NetState.getDefaultInstance()) {
                        state_ =
                                caffe.Loadcaffe.NetState.newBuilder(state_).mergeFrom(value).buildPartial();
                    } else {
                        state_ = value;
                    }
                    onChanged();
                } else {
                    stateBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00000020;
                return this;
            }
            /**
             * <code>optional .caffe.NetState state = 6;</code>
             *
             * <pre>
             * The current "state" of the network, including the phase, level, and stage.
             * Some layers may be included/excluded depending on this state and the states
             * specified in the layers' include and exclude fields.
             * </pre>
             */
            public Builder clearState() {
                if (stateBuilder_ == null) {
                    state_ = caffe.Loadcaffe.NetState.getDefaultInstance();
                    onChanged();
                } else {
                    stateBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000020);
                return this;
            }
            /**
             * <code>optional .caffe.NetState state = 6;</code>
             *
             * <pre>
             * The current "state" of the network, including the phase, level, and stage.
             * Some layers may be included/excluded depending on this state and the states
             * specified in the layers' include and exclude fields.
             * </pre>
             */
            public caffe.Loadcaffe.NetState.Builder getStateBuilder() {
                bitField0_ |= 0x00000020;
                onChanged();
                return getStateFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.NetState state = 6;</code>
             *
             * <pre>
             * The current "state" of the network, including the phase, level, and stage.
             * Some layers may be included/excluded depending on this state and the states
             * specified in the layers' include and exclude fields.
             * </pre>
             */
            public caffe.Loadcaffe.NetStateOrBuilder getStateOrBuilder() {
                if (stateBuilder_ != null) {
                    return stateBuilder_.getMessageOrBuilder();
                } else {
                    return state_;
                }
            }
            /**
             * <code>optional .caffe.NetState state = 6;</code>
             *
             * <pre>
             * The current "state" of the network, including the phase, level, and stage.
             * Some layers may be included/excluded depending on this state and the states
             * specified in the layers' include and exclude fields.
             * </pre>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.NetState, caffe.Loadcaffe.NetState.Builder, caffe.Loadcaffe.NetStateOrBuilder>
            getStateFieldBuilder() {
                if (stateBuilder_ == null) {
                    stateBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.NetState, caffe.Loadcaffe.NetState.Builder, caffe.Loadcaffe.NetStateOrBuilder>(
                            getState(),
                            getParentForChildren(),
                            isClean());
                    state_ = null;
                }
                return stateBuilder_;
            }

            private boolean debugInfo_ ;
            /**
             * <code>optional bool debug_info = 7 [default = false];</code>
             *
             * <pre>
             * Print debugging information about results while running Net::Forward,
             * Net::Backward, and Net::Update.
             * </pre>
             */
            public boolean hasDebugInfo() {
                return ((bitField0_ & 0x00000040) == 0x00000040);
            }
            /**
             * <code>optional bool debug_info = 7 [default = false];</code>
             *
             * <pre>
             * Print debugging information about results while running Net::Forward,
             * Net::Backward, and Net::Update.
             * </pre>
             */
            public boolean getDebugInfo() {
                return debugInfo_;
            }
            /**
             * <code>optional bool debug_info = 7 [default = false];</code>
             *
             * <pre>
             * Print debugging information about results while running Net::Forward,
             * Net::Backward, and Net::Update.
             * </pre>
             */
            public Builder setDebugInfo(boolean value) {
                bitField0_ |= 0x00000040;
                debugInfo_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool debug_info = 7 [default = false];</code>
             *
             * <pre>
             * Print debugging information about results while running Net::Forward,
             * Net::Backward, and Net::Update.
             * </pre>
             */
            public Builder clearDebugInfo() {
                bitField0_ = (bitField0_ & ~0x00000040);
                debugInfo_ = false;
                onChanged();
                return this;
            }

            private java.util.List<caffe.Loadcaffe.LayerParameter> layer_ =
                    java.util.Collections.emptyList();
            private void ensureLayerIsMutable() {
                if (!((bitField0_ & 0x00000080) == 0x00000080)) {
                    layer_ = new java.util.ArrayList<caffe.Loadcaffe.LayerParameter>(layer_);
                    bitField0_ |= 0x00000080;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.LayerParameter, caffe.Loadcaffe.LayerParameter.Builder, caffe.Loadcaffe.LayerParameterOrBuilder> layerBuilder_;

            /**
             * <code>repeated .caffe.LayerParameter layer = 100;</code>
             *
             * <pre>
             * The layers that make up the net.  Each of their configurations, including
             * connectivity and behavior, is specified as a LayerParameter.
             * </pre>
             */
            public java.util.List<caffe.Loadcaffe.LayerParameter> getLayerList() {
                if (layerBuilder_ == null) {
                    return java.util.Collections.unmodifiableList(layer_);
                } else {
                    return layerBuilder_.getMessageList();
                }
            }
            /**
             * <code>repeated .caffe.LayerParameter layer = 100;</code>
             *
             * <pre>
             * The layers that make up the net.  Each of their configurations, including
             * connectivity and behavior, is specified as a LayerParameter.
             * </pre>
             */
            public int getLayerCount() {
                if (layerBuilder_ == null) {
                    return layer_.size();
                } else {
                    return layerBuilder_.getCount();
                }
            }
            /**
             * <code>repeated .caffe.LayerParameter layer = 100;</code>
             *
             * <pre>
             * The layers that make up the net.  Each of their configurations, including
             * connectivity and behavior, is specified as a LayerParameter.
             * </pre>
             */
            public caffe.Loadcaffe.LayerParameter getLayer(int index) {
                if (layerBuilder_ == null) {
                    return layer_.get(index);
                } else {
                    return layerBuilder_.getMessage(index);
                }
            }
            /**
             * <code>repeated .caffe.LayerParameter layer = 100;</code>
             *
             * <pre>
             * The layers that make up the net.  Each of their configurations, including
             * connectivity and behavior, is specified as a LayerParameter.
             * </pre>
             */
            public Builder setLayer(
                    int index, caffe.Loadcaffe.LayerParameter value) {
                if (layerBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureLayerIsMutable();
                    layer_.set(index, value);
                    onChanged();
                } else {
                    layerBuilder_.setMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.LayerParameter layer = 100;</code>
             *
             * <pre>
             * The layers that make up the net.  Each of their configurations, including
             * connectivity and behavior, is specified as a LayerParameter.
             * </pre>
             */
            public Builder setLayer(
                    int index, caffe.Loadcaffe.LayerParameter.Builder builderForValue) {
                if (layerBuilder_ == null) {
                    ensureLayerIsMutable();
                    layer_.set(index, builderForValue.build());
                    onChanged();
                } else {
                    layerBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.LayerParameter layer = 100;</code>
             *
             * <pre>
             * The layers that make up the net.  Each of their configurations, including
             * connectivity and behavior, is specified as a LayerParameter.
             * </pre>
             */
            public Builder addLayer(caffe.Loadcaffe.LayerParameter value) {
                if (layerBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureLayerIsMutable();
                    layer_.add(value);
                    onChanged();
                } else {
                    layerBuilder_.addMessage(value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.LayerParameter layer = 100;</code>
             *
             * <pre>
             * The layers that make up the net.  Each of their configurations, including
             * connectivity and behavior, is specified as a LayerParameter.
             * </pre>
             */
            public Builder addLayer(
                    int index, caffe.Loadcaffe.LayerParameter value) {
                if (layerBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureLayerIsMutable();
                    layer_.add(index, value);
                    onChanged();
                } else {
                    layerBuilder_.addMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.LayerParameter layer = 100;</code>
             *
             * <pre>
             * The layers that make up the net.  Each of their configurations, including
             * connectivity and behavior, is specified as a LayerParameter.
             * </pre>
             */
            public Builder addLayer(
                    caffe.Loadcaffe.LayerParameter.Builder builderForValue) {
                if (layerBuilder_ == null) {
                    ensureLayerIsMutable();
                    layer_.add(builderForValue.build());
                    onChanged();
                } else {
                    layerBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.LayerParameter layer = 100;</code>
             *
             * <pre>
             * The layers that make up the net.  Each of their configurations, including
             * connectivity and behavior, is specified as a LayerParameter.
             * </pre>
             */
            public Builder addLayer(
                    int index, caffe.Loadcaffe.LayerParameter.Builder builderForValue) {
                if (layerBuilder_ == null) {
                    ensureLayerIsMutable();
                    layer_.add(index, builderForValue.build());
                    onChanged();
                } else {
                    layerBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.LayerParameter layer = 100;</code>
             *
             * <pre>
             * The layers that make up the net.  Each of their configurations, including
             * connectivity and behavior, is specified as a LayerParameter.
             * </pre>
             */
            public Builder addAllLayer(
                    java.lang.Iterable<? extends caffe.Loadcaffe.LayerParameter> values) {
                if (layerBuilder_ == null) {
                    ensureLayerIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(
                            values, layer_);
                    onChanged();
                } else {
                    layerBuilder_.addAllMessages(values);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.LayerParameter layer = 100;</code>
             *
             * <pre>
             * The layers that make up the net.  Each of their configurations, including
             * connectivity and behavior, is specified as a LayerParameter.
             * </pre>
             */
            public Builder clearLayer() {
                if (layerBuilder_ == null) {
                    layer_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000080);
                    onChanged();
                } else {
                    layerBuilder_.clear();
                }
                return this;
            }
            /**
             * <code>repeated .caffe.LayerParameter layer = 100;</code>
             *
             * <pre>
             * The layers that make up the net.  Each of their configurations, including
             * connectivity and behavior, is specified as a LayerParameter.
             * </pre>
             */
            public Builder removeLayer(int index) {
                if (layerBuilder_ == null) {
                    ensureLayerIsMutable();
                    layer_.remove(index);
                    onChanged();
                } else {
                    layerBuilder_.remove(index);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.LayerParameter layer = 100;</code>
             *
             * <pre>
             * The layers that make up the net.  Each of their configurations, including
             * connectivity and behavior, is specified as a LayerParameter.
             * </pre>
             */
            public caffe.Loadcaffe.LayerParameter.Builder getLayerBuilder(
                    int index) {
                return getLayerFieldBuilder().getBuilder(index);
            }
            /**
             * <code>repeated .caffe.LayerParameter layer = 100;</code>
             *
             * <pre>
             * The layers that make up the net.  Each of their configurations, including
             * connectivity and behavior, is specified as a LayerParameter.
             * </pre>
             */
            public caffe.Loadcaffe.LayerParameterOrBuilder getLayerOrBuilder(
                    int index) {
                if (layerBuilder_ == null) {
                    return layer_.get(index);  } else {
                    return layerBuilder_.getMessageOrBuilder(index);
                }
            }
            /**
             * <code>repeated .caffe.LayerParameter layer = 100;</code>
             *
             * <pre>
             * The layers that make up the net.  Each of their configurations, including
             * connectivity and behavior, is specified as a LayerParameter.
             * </pre>
             */
            public java.util.List<? extends caffe.Loadcaffe.LayerParameterOrBuilder>
            getLayerOrBuilderList() {
                if (layerBuilder_ != null) {
                    return layerBuilder_.getMessageOrBuilderList();
                } else {
                    return java.util.Collections.unmodifiableList(layer_);
                }
            }
            /**
             * <code>repeated .caffe.LayerParameter layer = 100;</code>
             *
             * <pre>
             * The layers that make up the net.  Each of their configurations, including
             * connectivity and behavior, is specified as a LayerParameter.
             * </pre>
             */
            public caffe.Loadcaffe.LayerParameter.Builder addLayerBuilder() {
                return getLayerFieldBuilder().addBuilder(
                        caffe.Loadcaffe.LayerParameter.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.LayerParameter layer = 100;</code>
             *
             * <pre>
             * The layers that make up the net.  Each of their configurations, including
             * connectivity and behavior, is specified as a LayerParameter.
             * </pre>
             */
            public caffe.Loadcaffe.LayerParameter.Builder addLayerBuilder(
                    int index) {
                return getLayerFieldBuilder().addBuilder(
                        index, caffe.Loadcaffe.LayerParameter.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.LayerParameter layer = 100;</code>
             *
             * <pre>
             * The layers that make up the net.  Each of their configurations, including
             * connectivity and behavior, is specified as a LayerParameter.
             * </pre>
             */
            public java.util.List<caffe.Loadcaffe.LayerParameter.Builder>
            getLayerBuilderList() {
                return getLayerFieldBuilder().getBuilderList();
            }
            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.LayerParameter, caffe.Loadcaffe.LayerParameter.Builder, caffe.Loadcaffe.LayerParameterOrBuilder>
            getLayerFieldBuilder() {
                if (layerBuilder_ == null) {
                    layerBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            caffe.Loadcaffe.LayerParameter, caffe.Loadcaffe.LayerParameter.Builder, caffe.Loadcaffe.LayerParameterOrBuilder>(
                            layer_,
                            ((bitField0_ & 0x00000080) == 0x00000080),
                            getParentForChildren(),
                            isClean());
                    layer_ = null;
                }
                return layerBuilder_;
            }

            private java.util.List<caffe.Loadcaffe.V1LayerParameter> layers_ =
                    java.util.Collections.emptyList();
            private void ensureLayersIsMutable() {
                if (!((bitField0_ & 0x00000100) == 0x00000100)) {
                    layers_ = new java.util.ArrayList<caffe.Loadcaffe.V1LayerParameter>(layers_);
                    bitField0_ |= 0x00000100;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.V1LayerParameter, caffe.Loadcaffe.V1LayerParameter.Builder, caffe.Loadcaffe.V1LayerParameterOrBuilder> layersBuilder_;

            /**
             * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
             *
             * <pre>
             * DEPRECATED: use 'layer' instead.
             * </pre>
             */
            public java.util.List<caffe.Loadcaffe.V1LayerParameter> getLayersList() {
                if (layersBuilder_ == null) {
                    return java.util.Collections.unmodifiableList(layers_);
                } else {
                    return layersBuilder_.getMessageList();
                }
            }
            /**
             * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
             *
             * <pre>
             * DEPRECATED: use 'layer' instead.
             * </pre>
             */
            public int getLayersCount() {
                if (layersBuilder_ == null) {
                    return layers_.size();
                } else {
                    return layersBuilder_.getCount();
                }
            }
            /**
             * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
             *
             * <pre>
             * DEPRECATED: use 'layer' instead.
             * </pre>
             */
            public caffe.Loadcaffe.V1LayerParameter getLayers(int index) {
                if (layersBuilder_ == null) {
                    return layers_.get(index);
                } else {
                    return layersBuilder_.getMessage(index);
                }
            }
            /**
             * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
             *
             * <pre>
             * DEPRECATED: use 'layer' instead.
             * </pre>
             */
            public Builder setLayers(
                    int index, caffe.Loadcaffe.V1LayerParameter value) {
                if (layersBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureLayersIsMutable();
                    layers_.set(index, value);
                    onChanged();
                } else {
                    layersBuilder_.setMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
             *
             * <pre>
             * DEPRECATED: use 'layer' instead.
             * </pre>
             */
            public Builder setLayers(
                    int index, caffe.Loadcaffe.V1LayerParameter.Builder builderForValue) {
                if (layersBuilder_ == null) {
                    ensureLayersIsMutable();
                    layers_.set(index, builderForValue.build());
                    onChanged();
                } else {
                    layersBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
             *
             * <pre>
             * DEPRECATED: use 'layer' instead.
             * </pre>
             */
            public Builder addLayers(caffe.Loadcaffe.V1LayerParameter value) {
                if (layersBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureLayersIsMutable();
                    layers_.add(value);
                    onChanged();
                } else {
                    layersBuilder_.addMessage(value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
             *
             * <pre>
             * DEPRECATED: use 'layer' instead.
             * </pre>
             */
            public Builder addLayers(
                    int index, caffe.Loadcaffe.V1LayerParameter value) {
                if (layersBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureLayersIsMutable();
                    layers_.add(index, value);
                    onChanged();
                } else {
                    layersBuilder_.addMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
             *
             * <pre>
             * DEPRECATED: use 'layer' instead.
             * </pre>
             */
            public Builder addLayers(
                    caffe.Loadcaffe.V1LayerParameter.Builder builderForValue) {
                if (layersBuilder_ == null) {
                    ensureLayersIsMutable();
                    layers_.add(builderForValue.build());
                    onChanged();
                } else {
                    layersBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
             *
             * <pre>
             * DEPRECATED: use 'layer' instead.
             * </pre>
             */
            public Builder addLayers(
                    int index, caffe.Loadcaffe.V1LayerParameter.Builder builderForValue) {
                if (layersBuilder_ == null) {
                    ensureLayersIsMutable();
                    layers_.add(index, builderForValue.build());
                    onChanged();
                } else {
                    layersBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
             *
             * <pre>
             * DEPRECATED: use 'layer' instead.
             * </pre>
             */
            public Builder addAllLayers(
                    java.lang.Iterable<? extends caffe.Loadcaffe.V1LayerParameter> values) {
                if (layersBuilder_ == null) {
                    ensureLayersIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(
                            values, layers_);
                    onChanged();
                } else {
                    layersBuilder_.addAllMessages(values);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
             *
             * <pre>
             * DEPRECATED: use 'layer' instead.
             * </pre>
             */
            public Builder clearLayers() {
                if (layersBuilder_ == null) {
                    layers_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000100);
                    onChanged();
                } else {
                    layersBuilder_.clear();
                }
                return this;
            }
            /**
             * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
             *
             * <pre>
             * DEPRECATED: use 'layer' instead.
             * </pre>
             */
            public Builder removeLayers(int index) {
                if (layersBuilder_ == null) {
                    ensureLayersIsMutable();
                    layers_.remove(index);
                    onChanged();
                } else {
                    layersBuilder_.remove(index);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
             *
             * <pre>
             * DEPRECATED: use 'layer' instead.
             * </pre>
             */
            public caffe.Loadcaffe.V1LayerParameter.Builder getLayersBuilder(
                    int index) {
                return getLayersFieldBuilder().getBuilder(index);
            }
            /**
             * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
             *
             * <pre>
             * DEPRECATED: use 'layer' instead.
             * </pre>
             */
            public caffe.Loadcaffe.V1LayerParameterOrBuilder getLayersOrBuilder(
                    int index) {
                if (layersBuilder_ == null) {
                    return layers_.get(index);  } else {
                    return layersBuilder_.getMessageOrBuilder(index);
                }
            }
            /**
             * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
             *
             * <pre>
             * DEPRECATED: use 'layer' instead.
             * </pre>
             */
            public java.util.List<? extends caffe.Loadcaffe.V1LayerParameterOrBuilder>
            getLayersOrBuilderList() {
                if (layersBuilder_ != null) {
                    return layersBuilder_.getMessageOrBuilderList();
                } else {
                    return java.util.Collections.unmodifiableList(layers_);
                }
            }
            /**
             * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
             *
             * <pre>
             * DEPRECATED: use 'layer' instead.
             * </pre>
             */
            public caffe.Loadcaffe.V1LayerParameter.Builder addLayersBuilder() {
                return getLayersFieldBuilder().addBuilder(
                        caffe.Loadcaffe.V1LayerParameter.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
             *
             * <pre>
             * DEPRECATED: use 'layer' instead.
             * </pre>
             */
            public caffe.Loadcaffe.V1LayerParameter.Builder addLayersBuilder(
                    int index) {
                return getLayersFieldBuilder().addBuilder(
                        index, caffe.Loadcaffe.V1LayerParameter.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.V1LayerParameter layers = 2;</code>
             *
             * <pre>
             * DEPRECATED: use 'layer' instead.
             * </pre>
             */
            public java.util.List<caffe.Loadcaffe.V1LayerParameter.Builder>
            getLayersBuilderList() {
                return getLayersFieldBuilder().getBuilderList();
            }
            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.V1LayerParameter, caffe.Loadcaffe.V1LayerParameter.Builder, caffe.Loadcaffe.V1LayerParameterOrBuilder>
            getLayersFieldBuilder() {
                if (layersBuilder_ == null) {
                    layersBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            caffe.Loadcaffe.V1LayerParameter, caffe.Loadcaffe.V1LayerParameter.Builder, caffe.Loadcaffe.V1LayerParameterOrBuilder>(
                            layers_,
                            ((bitField0_ & 0x00000100) == 0x00000100),
                            getParentForChildren(),
                            isClean());
                    layers_ = null;
                }
                return layersBuilder_;
            }

            // @@protoc_insertion_point(builder_scope:caffe.NetParameter)
        }

        static {
            defaultInstance = new NetParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.NetParameter)
    }

    public interface SolverParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.SolverParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional string net = 24;</code>
         *
         * <pre>
         * Proto filename for the train net, possibly combined with one or more
         * test nets.
         * </pre>
         */
        boolean hasNet();
        /**
         * <code>optional string net = 24;</code>
         *
         * <pre>
         * Proto filename for the train net, possibly combined with one or more
         * test nets.
         * </pre>
         */
        java.lang.String getNet();
        /**
         * <code>optional string net = 24;</code>
         *
         * <pre>
         * Proto filename for the train net, possibly combined with one or more
         * test nets.
         * </pre>
         */
        com.google.protobuf.ByteString
        getNetBytes();

        /**
         * <code>optional .caffe.NetParameter net_param = 25;</code>
         *
         * <pre>
         * Inline train net param, possibly combined with one or more test nets.
         * </pre>
         */
        boolean hasNetParam();
        /**
         * <code>optional .caffe.NetParameter net_param = 25;</code>
         *
         * <pre>
         * Inline train net param, possibly combined with one or more test nets.
         * </pre>
         */
        caffe.Loadcaffe.NetParameter getNetParam();
        /**
         * <code>optional .caffe.NetParameter net_param = 25;</code>
         *
         * <pre>
         * Inline train net param, possibly combined with one or more test nets.
         * </pre>
         */
        caffe.Loadcaffe.NetParameterOrBuilder getNetParamOrBuilder();

        /**
         * <code>optional string train_net = 1;</code>
         *
         * <pre>
         * Proto filename for the train net.
         * </pre>
         */
        boolean hasTrainNet();
        /**
         * <code>optional string train_net = 1;</code>
         *
         * <pre>
         * Proto filename for the train net.
         * </pre>
         */
        java.lang.String getTrainNet();
        /**
         * <code>optional string train_net = 1;</code>
         *
         * <pre>
         * Proto filename for the train net.
         * </pre>
         */
        com.google.protobuf.ByteString
        getTrainNetBytes();

        /**
         * <code>repeated string test_net = 2;</code>
         *
         * <pre>
         * Proto filenames for the test nets.
         * </pre>
         */
        com.google.protobuf.ProtocolStringList
        getTestNetList();
        /**
         * <code>repeated string test_net = 2;</code>
         *
         * <pre>
         * Proto filenames for the test nets.
         * </pre>
         */
        int getTestNetCount();
        /**
         * <code>repeated string test_net = 2;</code>
         *
         * <pre>
         * Proto filenames for the test nets.
         * </pre>
         */
        java.lang.String getTestNet(int index);
        /**
         * <code>repeated string test_net = 2;</code>
         *
         * <pre>
         * Proto filenames for the test nets.
         * </pre>
         */
        com.google.protobuf.ByteString
        getTestNetBytes(int index);

        /**
         * <code>optional .caffe.NetParameter train_net_param = 21;</code>
         *
         * <pre>
         * Inline train net params.
         * </pre>
         */
        boolean hasTrainNetParam();
        /**
         * <code>optional .caffe.NetParameter train_net_param = 21;</code>
         *
         * <pre>
         * Inline train net params.
         * </pre>
         */
        caffe.Loadcaffe.NetParameter getTrainNetParam();
        /**
         * <code>optional .caffe.NetParameter train_net_param = 21;</code>
         *
         * <pre>
         * Inline train net params.
         * </pre>
         */
        caffe.Loadcaffe.NetParameterOrBuilder getTrainNetParamOrBuilder();

        /**
         * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
         *
         * <pre>
         * Inline test net params.
         * </pre>
         */
        java.util.List<caffe.Loadcaffe.NetParameter>
        getTestNetParamList();
        /**
         * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
         *
         * <pre>
         * Inline test net params.
         * </pre>
         */
        caffe.Loadcaffe.NetParameter getTestNetParam(int index);
        /**
         * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
         *
         * <pre>
         * Inline test net params.
         * </pre>
         */
        int getTestNetParamCount();
        /**
         * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
         *
         * <pre>
         * Inline test net params.
         * </pre>
         */
        java.util.List<? extends caffe.Loadcaffe.NetParameterOrBuilder>
        getTestNetParamOrBuilderList();
        /**
         * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
         *
         * <pre>
         * Inline test net params.
         * </pre>
         */
        caffe.Loadcaffe.NetParameterOrBuilder getTestNetParamOrBuilder(
                int index);

        /**
         * <code>optional .caffe.NetState train_state = 26;</code>
         *
         * <pre>
         * The states for the train/test nets. Must be unspecified or
         * specified once per net.
         * By default, all states will have solver = true;
         * train_state will have phase = TRAIN,
         * and all test_state's will have phase = TEST.
         * Other defaults are set according to the NetState defaults.
         * </pre>
         */
        boolean hasTrainState();
        /**
         * <code>optional .caffe.NetState train_state = 26;</code>
         *
         * <pre>
         * The states for the train/test nets. Must be unspecified or
         * specified once per net.
         * By default, all states will have solver = true;
         * train_state will have phase = TRAIN,
         * and all test_state's will have phase = TEST.
         * Other defaults are set according to the NetState defaults.
         * </pre>
         */
        caffe.Loadcaffe.NetState getTrainState();
        /**
         * <code>optional .caffe.NetState train_state = 26;</code>
         *
         * <pre>
         * The states for the train/test nets. Must be unspecified or
         * specified once per net.
         * By default, all states will have solver = true;
         * train_state will have phase = TRAIN,
         * and all test_state's will have phase = TEST.
         * Other defaults are set according to the NetState defaults.
         * </pre>
         */
        caffe.Loadcaffe.NetStateOrBuilder getTrainStateOrBuilder();

        /**
         * <code>repeated .caffe.NetState test_state = 27;</code>
         */
        java.util.List<caffe.Loadcaffe.NetState>
        getTestStateList();
        /**
         * <code>repeated .caffe.NetState test_state = 27;</code>
         */
        caffe.Loadcaffe.NetState getTestState(int index);
        /**
         * <code>repeated .caffe.NetState test_state = 27;</code>
         */
        int getTestStateCount();
        /**
         * <code>repeated .caffe.NetState test_state = 27;</code>
         */
        java.util.List<? extends caffe.Loadcaffe.NetStateOrBuilder>
        getTestStateOrBuilderList();
        /**
         * <code>repeated .caffe.NetState test_state = 27;</code>
         */
        caffe.Loadcaffe.NetStateOrBuilder getTestStateOrBuilder(
                int index);

        /**
         * <code>repeated int32 test_iter = 3;</code>
         *
         * <pre>
         * The number of iterations for each test net.
         * </pre>
         */
        java.util.List<java.lang.Integer> getTestIterList();
        /**
         * <code>repeated int32 test_iter = 3;</code>
         *
         * <pre>
         * The number of iterations for each test net.
         * </pre>
         */
        int getTestIterCount();
        /**
         * <code>repeated int32 test_iter = 3;</code>
         *
         * <pre>
         * The number of iterations for each test net.
         * </pre>
         */
        int getTestIter(int index);

        /**
         * <code>optional int32 test_interval = 4 [default = 0];</code>
         *
         * <pre>
         * The number of iterations between two testing phases.
         * </pre>
         */
        boolean hasTestInterval();
        /**
         * <code>optional int32 test_interval = 4 [default = 0];</code>
         *
         * <pre>
         * The number of iterations between two testing phases.
         * </pre>
         */
        int getTestInterval();

        /**
         * <code>optional bool test_compute_loss = 19 [default = false];</code>
         */
        boolean hasTestComputeLoss();
        /**
         * <code>optional bool test_compute_loss = 19 [default = false];</code>
         */
        boolean getTestComputeLoss();

        /**
         * <code>optional bool test_initialization = 32 [default = true];</code>
         *
         * <pre>
         * If true, run an initial test pass before the first iteration,
         * ensuring memory availability and printing the starting value of the loss.
         * </pre>
         */
        boolean hasTestInitialization();
        /**
         * <code>optional bool test_initialization = 32 [default = true];</code>
         *
         * <pre>
         * If true, run an initial test pass before the first iteration,
         * ensuring memory availability and printing the starting value of the loss.
         * </pre>
         */
        boolean getTestInitialization();

        /**
         * <code>optional float base_lr = 5;</code>
         *
         * <pre>
         * The base learning rate
         * </pre>
         */
        boolean hasBaseLr();
        /**
         * <code>optional float base_lr = 5;</code>
         *
         * <pre>
         * The base learning rate
         * </pre>
         */
        float getBaseLr();

        /**
         * <code>optional int32 display = 6;</code>
         *
         * <pre>
         * the number of iterations between displaying info. If display = 0, no info
         * will be displayed.
         * </pre>
         */
        boolean hasDisplay();
        /**
         * <code>optional int32 display = 6;</code>
         *
         * <pre>
         * the number of iterations between displaying info. If display = 0, no info
         * will be displayed.
         * </pre>
         */
        int getDisplay();

        /**
         * <code>optional int32 average_loss = 33 [default = 1];</code>
         *
         * <pre>
         * Display the loss averaged over the last average_loss iterations
         * </pre>
         */
        boolean hasAverageLoss();
        /**
         * <code>optional int32 average_loss = 33 [default = 1];</code>
         *
         * <pre>
         * Display the loss averaged over the last average_loss iterations
         * </pre>
         */
        int getAverageLoss();

        /**
         * <code>optional int32 max_iter = 7;</code>
         *
         * <pre>
         * the maximum number of iterations
         * </pre>
         */
        boolean hasMaxIter();
        /**
         * <code>optional int32 max_iter = 7;</code>
         *
         * <pre>
         * the maximum number of iterations
         * </pre>
         */
        int getMaxIter();

        /**
         * <code>optional string lr_policy = 8;</code>
         *
         * <pre>
         * The learning rate decay policy.
         * </pre>
         */
        boolean hasLrPolicy();
        /**
         * <code>optional string lr_policy = 8;</code>
         *
         * <pre>
         * The learning rate decay policy.
         * </pre>
         */
        java.lang.String getLrPolicy();
        /**
         * <code>optional string lr_policy = 8;</code>
         *
         * <pre>
         * The learning rate decay policy.
         * </pre>
         */
        com.google.protobuf.ByteString
        getLrPolicyBytes();

        /**
         * <code>optional float gamma = 9;</code>
         *
         * <pre>
         * The parameter to compute the learning rate.
         * </pre>
         */
        boolean hasGamma();
        /**
         * <code>optional float gamma = 9;</code>
         *
         * <pre>
         * The parameter to compute the learning rate.
         * </pre>
         */
        float getGamma();

        /**
         * <code>optional float power = 10;</code>
         *
         * <pre>
         * The parameter to compute the learning rate.
         * </pre>
         */
        boolean hasPower();
        /**
         * <code>optional float power = 10;</code>
         *
         * <pre>
         * The parameter to compute the learning rate.
         * </pre>
         */
        float getPower();

        /**
         * <code>optional float momentum = 11;</code>
         *
         * <pre>
         * The momentum value.
         * </pre>
         */
        boolean hasMomentum();
        /**
         * <code>optional float momentum = 11;</code>
         *
         * <pre>
         * The momentum value.
         * </pre>
         */
        float getMomentum();

        /**
         * <code>optional float weight_decay = 12;</code>
         *
         * <pre>
         * The weight decay.
         * </pre>
         */
        boolean hasWeightDecay();
        /**
         * <code>optional float weight_decay = 12;</code>
         *
         * <pre>
         * The weight decay.
         * </pre>
         */
        float getWeightDecay();

        /**
         * <code>optional string regularization_type = 29 [default = "L2"];</code>
         *
         * <pre>
         * regularization types supported: L1 and L2
         * controlled by weight_decay
         * </pre>
         */
        boolean hasRegularizationType();
        /**
         * <code>optional string regularization_type = 29 [default = "L2"];</code>
         *
         * <pre>
         * regularization types supported: L1 and L2
         * controlled by weight_decay
         * </pre>
         */
        java.lang.String getRegularizationType();
        /**
         * <code>optional string regularization_type = 29 [default = "L2"];</code>
         *
         * <pre>
         * regularization types supported: L1 and L2
         * controlled by weight_decay
         * </pre>
         */
        com.google.protobuf.ByteString
        getRegularizationTypeBytes();

        /**
         * <code>optional int32 stepsize = 13;</code>
         *
         * <pre>
         * the stepsize for learning rate policy "step"
         * </pre>
         */
        boolean hasStepsize();
        /**
         * <code>optional int32 stepsize = 13;</code>
         *
         * <pre>
         * the stepsize for learning rate policy "step"
         * </pre>
         */
        int getStepsize();

        /**
         * <code>repeated int32 stepvalue = 34;</code>
         *
         * <pre>
         * the stepsize for learning rate policy "multistep"
         * </pre>
         */
        java.util.List<java.lang.Integer> getStepvalueList();
        /**
         * <code>repeated int32 stepvalue = 34;</code>
         *
         * <pre>
         * the stepsize for learning rate policy "multistep"
         * </pre>
         */
        int getStepvalueCount();
        /**
         * <code>repeated int32 stepvalue = 34;</code>
         *
         * <pre>
         * the stepsize for learning rate policy "multistep"
         * </pre>
         */
        int getStepvalue(int index);

        /**
         * <code>optional float clip_gradients = 35 [default = -1];</code>
         *
         * <pre>
         * Set clip_gradients to &gt;= 0 to clip parameter gradients to that L2 norm,
         * whenever their actual L2 norm is larger.
         * </pre>
         */
        boolean hasClipGradients();
        /**
         * <code>optional float clip_gradients = 35 [default = -1];</code>
         *
         * <pre>
         * Set clip_gradients to &gt;= 0 to clip parameter gradients to that L2 norm,
         * whenever their actual L2 norm is larger.
         * </pre>
         */
        float getClipGradients();

        /**
         * <code>optional int32 snapshot = 14 [default = 0];</code>
         *
         * <pre>
         * The snapshot interval
         * </pre>
         */
        boolean hasSnapshot();
        /**
         * <code>optional int32 snapshot = 14 [default = 0];</code>
         *
         * <pre>
         * The snapshot interval
         * </pre>
         */
        int getSnapshot();

        /**
         * <code>optional string snapshot_prefix = 15;</code>
         *
         * <pre>
         * The prefix for the snapshot.
         * </pre>
         */
        boolean hasSnapshotPrefix();
        /**
         * <code>optional string snapshot_prefix = 15;</code>
         *
         * <pre>
         * The prefix for the snapshot.
         * </pre>
         */
        java.lang.String getSnapshotPrefix();
        /**
         * <code>optional string snapshot_prefix = 15;</code>
         *
         * <pre>
         * The prefix for the snapshot.
         * </pre>
         */
        com.google.protobuf.ByteString
        getSnapshotPrefixBytes();

        /**
         * <code>optional bool snapshot_diff = 16 [default = false];</code>
         *
         * <pre>
         * whether to snapshot diff in the results or not. Snapshotting diff will help
         * debugging but the final protocol buffer size will be much larger.
         * </pre>
         */
        boolean hasSnapshotDiff();
        /**
         * <code>optional bool snapshot_diff = 16 [default = false];</code>
         *
         * <pre>
         * whether to snapshot diff in the results or not. Snapshotting diff will help
         * debugging but the final protocol buffer size will be much larger.
         * </pre>
         */
        boolean getSnapshotDiff();

        /**
         * <code>optional .caffe.SolverParameter.SolverMode solver_mode = 17 [default = GPU];</code>
         */
        boolean hasSolverMode();
        /**
         * <code>optional .caffe.SolverParameter.SolverMode solver_mode = 17 [default = GPU];</code>
         */
        caffe.Loadcaffe.SolverParameter.SolverMode getSolverMode();

        /**
         * <code>optional int32 device_id = 18 [default = 0];</code>
         *
         * <pre>
         * the device_id will that be used in GPU mode. Use device_id = 0 in default.
         * </pre>
         */
        boolean hasDeviceId();
        /**
         * <code>optional int32 device_id = 18 [default = 0];</code>
         *
         * <pre>
         * the device_id will that be used in GPU mode. Use device_id = 0 in default.
         * </pre>
         */
        int getDeviceId();

        /**
         * <code>optional int64 random_seed = 20 [default = -1];</code>
         *
         * <pre>
         * If non-negative, the seed with which the Solver will initialize the Caffe
         * random number generator -- useful for reproducible results. Otherwise,
         * (and by default) initialize using a seed derived from the system clock.
         * </pre>
         */
        boolean hasRandomSeed();
        /**
         * <code>optional int64 random_seed = 20 [default = -1];</code>
         *
         * <pre>
         * If non-negative, the seed with which the Solver will initialize the Caffe
         * random number generator -- useful for reproducible results. Otherwise,
         * (and by default) initialize using a seed derived from the system clock.
         * </pre>
         */
        long getRandomSeed();

        /**
         * <code>optional .caffe.SolverParameter.SolverType solver_type = 30 [default = SGD];</code>
         */
        boolean hasSolverType();
        /**
         * <code>optional .caffe.SolverParameter.SolverType solver_type = 30 [default = SGD];</code>
         */
        caffe.Loadcaffe.SolverParameter.SolverType getSolverType();

        /**
         * <code>optional float delta = 31 [default = 1e-08];</code>
         *
         * <pre>
         * numerical stability for AdaGrad
         * </pre>
         */
        boolean hasDelta();
        /**
         * <code>optional float delta = 31 [default = 1e-08];</code>
         *
         * <pre>
         * numerical stability for AdaGrad
         * </pre>
         */
        float getDelta();

        /**
         * <code>optional bool debug_info = 23 [default = false];</code>
         *
         * <pre>
         * If true, print information about the state of the net that may help with
         * debugging learning problems.
         * </pre>
         */
        boolean hasDebugInfo();
        /**
         * <code>optional bool debug_info = 23 [default = false];</code>
         *
         * <pre>
         * If true, print information about the state of the net that may help with
         * debugging learning problems.
         * </pre>
         */
        boolean getDebugInfo();

        /**
         * <code>optional bool snapshot_after_train = 28 [default = true];</code>
         *
         * <pre>
         * If false, don't save a snapshot after training finishes.
         * </pre>
         */
        boolean hasSnapshotAfterTrain();
        /**
         * <code>optional bool snapshot_after_train = 28 [default = true];</code>
         *
         * <pre>
         * If false, don't save a snapshot after training finishes.
         * </pre>
         */
        boolean getSnapshotAfterTrain();
    }
    /**
     * Protobuf type {@code caffe.SolverParameter}
     *
     * <pre>
     * NOTE
     * Update the next available ID when you add a new SolverParameter field.
     * SolverParameter next available ID: 36 (last added: clip_gradients)
     * </pre>
     */
    public static final class SolverParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.SolverParameter)
            SolverParameterOrBuilder {
        // Use SolverParameter.newBuilder() to construct.
        private SolverParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private SolverParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final SolverParameter defaultInstance;
        public static SolverParameter getDefaultInstance() {
            return defaultInstance;
        }

        public SolverParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private SolverParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            int mutable_bitField1_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 10: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000004;
                            trainNet_ = bs;
                            break;
                        }
                        case 18: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                                testNet_ = new com.google.protobuf.LazyStringArrayList();
                                mutable_bitField0_ |= 0x00000008;
                            }
                            testNet_.add(bs);
                            break;
                        }
                        case 24: {
                            if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                                testIter_ = new java.util.ArrayList<java.lang.Integer>();
                                mutable_bitField0_ |= 0x00000100;
                            }
                            testIter_.add(input.readInt32());
                            break;
                        }
                        case 26: {
                            int length = input.readRawVarint32();
                            int limit = input.pushLimit(length);
                            if (!((mutable_bitField0_ & 0x00000100) == 0x00000100) && input.getBytesUntilLimit() > 0) {
                                testIter_ = new java.util.ArrayList<java.lang.Integer>();
                                mutable_bitField0_ |= 0x00000100;
                            }
                            while (input.getBytesUntilLimit() > 0) {
                                testIter_.add(input.readInt32());
                            }
                            input.popLimit(limit);
                            break;
                        }
                        case 32: {
                            bitField0_ |= 0x00000020;
                            testInterval_ = input.readInt32();
                            break;
                        }
                        case 45: {
                            bitField0_ |= 0x00000100;
                            baseLr_ = input.readFloat();
                            break;
                        }
                        case 48: {
                            bitField0_ |= 0x00000200;
                            display_ = input.readInt32();
                            break;
                        }
                        case 56: {
                            bitField0_ |= 0x00000800;
                            maxIter_ = input.readInt32();
                            break;
                        }
                        case 66: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00001000;
                            lrPolicy_ = bs;
                            break;
                        }
                        case 77: {
                            bitField0_ |= 0x00002000;
                            gamma_ = input.readFloat();
                            break;
                        }
                        case 85: {
                            bitField0_ |= 0x00004000;
                            power_ = input.readFloat();
                            break;
                        }
                        case 93: {
                            bitField0_ |= 0x00008000;
                            momentum_ = input.readFloat();
                            break;
                        }
                        case 101: {
                            bitField0_ |= 0x00010000;
                            weightDecay_ = input.readFloat();
                            break;
                        }
                        case 104: {
                            bitField0_ |= 0x00040000;
                            stepsize_ = input.readInt32();
                            break;
                        }
                        case 112: {
                            bitField0_ |= 0x00100000;
                            snapshot_ = input.readInt32();
                            break;
                        }
                        case 122: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00200000;
                            snapshotPrefix_ = bs;
                            break;
                        }
                        case 128: {
                            bitField0_ |= 0x00400000;
                            snapshotDiff_ = input.readBool();
                            break;
                        }
                        case 136: {
                            int rawValue = input.readEnum();
                            caffe.Loadcaffe.SolverParameter.SolverMode value = caffe.Loadcaffe.SolverParameter.SolverMode.valueOf(rawValue);
                            if (value == null) {
                                unknownFields.mergeVarintField(17, rawValue);
                            } else {
                                bitField0_ |= 0x00800000;
                                solverMode_ = value;
                            }
                            break;
                        }
                        case 144: {
                            bitField0_ |= 0x01000000;
                            deviceId_ = input.readInt32();
                            break;
                        }
                        case 152: {
                            bitField0_ |= 0x00000040;
                            testComputeLoss_ = input.readBool();
                            break;
                        }
                        case 160: {
                            bitField0_ |= 0x02000000;
                            randomSeed_ = input.readInt64();
                            break;
                        }
                        case 170: {
                            caffe.Loadcaffe.NetParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                                subBuilder = trainNetParam_.toBuilder();
                            }
                            trainNetParam_ = input.readMessage(caffe.Loadcaffe.NetParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(trainNetParam_);
                                trainNetParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000008;
                            break;
                        }
                        case 178: {
                            if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                                testNetParam_ = new java.util.ArrayList<caffe.Loadcaffe.NetParameter>();
                                mutable_bitField0_ |= 0x00000020;
                            }
                            testNetParam_.add(input.readMessage(caffe.Loadcaffe.NetParameter.PARSER, extensionRegistry));
                            break;
                        }
                        case 184: {
                            bitField0_ |= 0x10000000;
                            debugInfo_ = input.readBool();
                            break;
                        }
                        case 194: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000001;
                            net_ = bs;
                            break;
                        }
                        case 202: {
                            caffe.Loadcaffe.NetParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                                subBuilder = netParam_.toBuilder();
                            }
                            netParam_ = input.readMessage(caffe.Loadcaffe.NetParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(netParam_);
                                netParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000002;
                            break;
                        }
                        case 210: {
                            caffe.Loadcaffe.NetState.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                                subBuilder = trainState_.toBuilder();
                            }
                            trainState_ = input.readMessage(caffe.Loadcaffe.NetState.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(trainState_);
                                trainState_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000010;
                            break;
                        }
                        case 218: {
                            if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                                testState_ = new java.util.ArrayList<caffe.Loadcaffe.NetState>();
                                mutable_bitField0_ |= 0x00000080;
                            }
                            testState_.add(input.readMessage(caffe.Loadcaffe.NetState.PARSER, extensionRegistry));
                            break;
                        }
                        case 224: {
                            bitField0_ |= 0x20000000;
                            snapshotAfterTrain_ = input.readBool();
                            break;
                        }
                        case 234: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00020000;
                            regularizationType_ = bs;
                            break;
                        }
                        case 240: {
                            int rawValue = input.readEnum();
                            caffe.Loadcaffe.SolverParameter.SolverType value = caffe.Loadcaffe.SolverParameter.SolverType.valueOf(rawValue);
                            if (value == null) {
                                unknownFields.mergeVarintField(30, rawValue);
                            } else {
                                bitField0_ |= 0x04000000;
                                solverType_ = value;
                            }
                            break;
                        }
                        case 253: {
                            bitField0_ |= 0x08000000;
                            delta_ = input.readFloat();
                            break;
                        }
                        case 256: {
                            bitField0_ |= 0x00000080;
                            testInitialization_ = input.readBool();
                            break;
                        }
                        case 264: {
                            bitField0_ |= 0x00000400;
                            averageLoss_ = input.readInt32();
                            break;
                        }
                        case 272: {
                            if (!((mutable_bitField0_ & 0x00800000) == 0x00800000)) {
                                stepvalue_ = new java.util.ArrayList<java.lang.Integer>();
                                mutable_bitField0_ |= 0x00800000;
                            }
                            stepvalue_.add(input.readInt32());
                            break;
                        }
                        case 274: {
                            int length = input.readRawVarint32();
                            int limit = input.pushLimit(length);
                            if (!((mutable_bitField0_ & 0x00800000) == 0x00800000) && input.getBytesUntilLimit() > 0) {
                                stepvalue_ = new java.util.ArrayList<java.lang.Integer>();
                                mutable_bitField0_ |= 0x00800000;
                            }
                            while (input.getBytesUntilLimit() > 0) {
                                stepvalue_.add(input.readInt32());
                            }
                            input.popLimit(limit);
                            break;
                        }
                        case 285: {
                            bitField0_ |= 0x00080000;
                            clipGradients_ = input.readFloat();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                    testNet_ = testNet_.getUnmodifiableView();
                }
                if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                    testIter_ = java.util.Collections.unmodifiableList(testIter_);
                }
                if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                    testNetParam_ = java.util.Collections.unmodifiableList(testNetParam_);
                }
                if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                    testState_ = java.util.Collections.unmodifiableList(testState_);
                }
                if (((mutable_bitField0_ & 0x00800000) == 0x00800000)) {
                    stepvalue_ = java.util.Collections.unmodifiableList(stepvalue_);
                }
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_SolverParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_SolverParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.SolverParameter.class, caffe.Loadcaffe.SolverParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<SolverParameter> PARSER =
                new com.google.protobuf.AbstractParser<SolverParameter>() {
                    public SolverParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new SolverParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<SolverParameter> getParserForType() {
            return PARSER;
        }

        /**
         * Protobuf enum {@code caffe.SolverParameter.SolverMode}
         *
         * <pre>
         * the mode solver will use: 0 for CPU and 1 for GPU. Use GPU in default.
         * </pre>
         */
        public enum SolverMode
                implements com.google.protobuf.ProtocolMessageEnum {
            /**
             * <code>CPU = 0;</code>
             */
            CPU(0, 0),
            /**
             * <code>GPU = 1;</code>
             */
            GPU(1, 1),
            ;

            /**
             * <code>CPU = 0;</code>
             */
            public static final int CPU_VALUE = 0;
            /**
             * <code>GPU = 1;</code>
             */
            public static final int GPU_VALUE = 1;


            public final int getNumber() { return value; }

            public static SolverMode valueOf(int value) {
                switch (value) {
                    case 0: return CPU;
                    case 1: return GPU;
                    default: return null;
                }
            }

            public static com.google.protobuf.Internal.EnumLiteMap<SolverMode>
            internalGetValueMap() {
                return internalValueMap;
            }
            private static com.google.protobuf.Internal.EnumLiteMap<SolverMode>
                    internalValueMap =
                    new com.google.protobuf.Internal.EnumLiteMap<SolverMode>() {
                        public SolverMode findValueByNumber(int number) {
                            return SolverMode.valueOf(number);
                        }
                    };

            public final com.google.protobuf.Descriptors.EnumValueDescriptor
            getValueDescriptor() {
                return getDescriptor().getValues().get(index);
            }
            public final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptorForType() {
                return getDescriptor();
            }
            public static final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptor() {
                return caffe.Loadcaffe.SolverParameter.getDescriptor().getEnumTypes().get(0);
            }

            private static final SolverMode[] VALUES = values();

            public static SolverMode valueOf(
                    com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new java.lang.IllegalArgumentException(
                            "EnumValueDescriptor is not for this type.");
                }
                return VALUES[desc.getIndex()];
            }

            private final int index;
            private final int value;

            private SolverMode(int index, int value) {
                this.index = index;
                this.value = value;
            }

            // @@protoc_insertion_point(enum_scope:caffe.SolverParameter.SolverMode)
        }

        /**
         * Protobuf enum {@code caffe.SolverParameter.SolverType}
         *
         * <pre>
         * Solver type
         * </pre>
         */
        public enum SolverType
                implements com.google.protobuf.ProtocolMessageEnum {
            /**
             * <code>SGD = 0;</code>
             */
            SGD(0, 0),
            /**
             * <code>NESTEROV = 1;</code>
             */
            NESTEROV(1, 1),
            /**
             * <code>ADAGRAD = 2;</code>
             */
            ADAGRAD(2, 2),
            ;

            /**
             * <code>SGD = 0;</code>
             */
            public static final int SGD_VALUE = 0;
            /**
             * <code>NESTEROV = 1;</code>
             */
            public static final int NESTEROV_VALUE = 1;
            /**
             * <code>ADAGRAD = 2;</code>
             */
            public static final int ADAGRAD_VALUE = 2;


            public final int getNumber() { return value; }

            public static SolverType valueOf(int value) {
                switch (value) {
                    case 0: return SGD;
                    case 1: return NESTEROV;
                    case 2: return ADAGRAD;
                    default: return null;
                }
            }

            public static com.google.protobuf.Internal.EnumLiteMap<SolverType>
            internalGetValueMap() {
                return internalValueMap;
            }
            private static com.google.protobuf.Internal.EnumLiteMap<SolverType>
                    internalValueMap =
                    new com.google.protobuf.Internal.EnumLiteMap<SolverType>() {
                        public SolverType findValueByNumber(int number) {
                            return SolverType.valueOf(number);
                        }
                    };

            public final com.google.protobuf.Descriptors.EnumValueDescriptor
            getValueDescriptor() {
                return getDescriptor().getValues().get(index);
            }
            public final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptorForType() {
                return getDescriptor();
            }
            public static final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptor() {
                return caffe.Loadcaffe.SolverParameter.getDescriptor().getEnumTypes().get(1);
            }

            private static final SolverType[] VALUES = values();

            public static SolverType valueOf(
                    com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new java.lang.IllegalArgumentException(
                            "EnumValueDescriptor is not for this type.");
                }
                return VALUES[desc.getIndex()];
            }

            private final int index;
            private final int value;

            private SolverType(int index, int value) {
                this.index = index;
                this.value = value;
            }

            // @@protoc_insertion_point(enum_scope:caffe.SolverParameter.SolverType)
        }

        private int bitField0_;
        public static final int NET_FIELD_NUMBER = 24;
        private java.lang.Object net_;
        /**
         * <code>optional string net = 24;</code>
         *
         * <pre>
         * Proto filename for the train net, possibly combined with one or more
         * test nets.
         * </pre>
         */
        public boolean hasNet() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string net = 24;</code>
         *
         * <pre>
         * Proto filename for the train net, possibly combined with one or more
         * test nets.
         * </pre>
         */
        public java.lang.String getNet() {
            java.lang.Object ref = net_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    net_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string net = 24;</code>
         *
         * <pre>
         * Proto filename for the train net, possibly combined with one or more
         * test nets.
         * </pre>
         */
        public com.google.protobuf.ByteString
        getNetBytes() {
            java.lang.Object ref = net_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                net_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int NET_PARAM_FIELD_NUMBER = 25;
        private caffe.Loadcaffe.NetParameter netParam_;
        /**
         * <code>optional .caffe.NetParameter net_param = 25;</code>
         *
         * <pre>
         * Inline train net param, possibly combined with one or more test nets.
         * </pre>
         */
        public boolean hasNetParam() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional .caffe.NetParameter net_param = 25;</code>
         *
         * <pre>
         * Inline train net param, possibly combined with one or more test nets.
         * </pre>
         */
        public caffe.Loadcaffe.NetParameter getNetParam() {
            return netParam_;
        }
        /**
         * <code>optional .caffe.NetParameter net_param = 25;</code>
         *
         * <pre>
         * Inline train net param, possibly combined with one or more test nets.
         * </pre>
         */
        public caffe.Loadcaffe.NetParameterOrBuilder getNetParamOrBuilder() {
            return netParam_;
        }

        public static final int TRAIN_NET_FIELD_NUMBER = 1;
        private java.lang.Object trainNet_;
        /**
         * <code>optional string train_net = 1;</code>
         *
         * <pre>
         * Proto filename for the train net.
         * </pre>
         */
        public boolean hasTrainNet() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional string train_net = 1;</code>
         *
         * <pre>
         * Proto filename for the train net.
         * </pre>
         */
        public java.lang.String getTrainNet() {
            java.lang.Object ref = trainNet_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    trainNet_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string train_net = 1;</code>
         *
         * <pre>
         * Proto filename for the train net.
         * </pre>
         */
        public com.google.protobuf.ByteString
        getTrainNetBytes() {
            java.lang.Object ref = trainNet_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                trainNet_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int TEST_NET_FIELD_NUMBER = 2;
        private com.google.protobuf.LazyStringList testNet_;
        /**
         * <code>repeated string test_net = 2;</code>
         *
         * <pre>
         * Proto filenames for the test nets.
         * </pre>
         */
        public com.google.protobuf.ProtocolStringList
        getTestNetList() {
            return testNet_;
        }
        /**
         * <code>repeated string test_net = 2;</code>
         *
         * <pre>
         * Proto filenames for the test nets.
         * </pre>
         */
        public int getTestNetCount() {
            return testNet_.size();
        }
        /**
         * <code>repeated string test_net = 2;</code>
         *
         * <pre>
         * Proto filenames for the test nets.
         * </pre>
         */
        public java.lang.String getTestNet(int index) {
            return testNet_.get(index);
        }
        /**
         * <code>repeated string test_net = 2;</code>
         *
         * <pre>
         * Proto filenames for the test nets.
         * </pre>
         */
        public com.google.protobuf.ByteString
        getTestNetBytes(int index) {
            return testNet_.getByteString(index);
        }

        public static final int TRAIN_NET_PARAM_FIELD_NUMBER = 21;
        private caffe.Loadcaffe.NetParameter trainNetParam_;
        /**
         * <code>optional .caffe.NetParameter train_net_param = 21;</code>
         *
         * <pre>
         * Inline train net params.
         * </pre>
         */
        public boolean hasTrainNetParam() {
            return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional .caffe.NetParameter train_net_param = 21;</code>
         *
         * <pre>
         * Inline train net params.
         * </pre>
         */
        public caffe.Loadcaffe.NetParameter getTrainNetParam() {
            return trainNetParam_;
        }
        /**
         * <code>optional .caffe.NetParameter train_net_param = 21;</code>
         *
         * <pre>
         * Inline train net params.
         * </pre>
         */
        public caffe.Loadcaffe.NetParameterOrBuilder getTrainNetParamOrBuilder() {
            return trainNetParam_;
        }

        public static final int TEST_NET_PARAM_FIELD_NUMBER = 22;
        private java.util.List<caffe.Loadcaffe.NetParameter> testNetParam_;
        /**
         * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
         *
         * <pre>
         * Inline test net params.
         * </pre>
         */
        public java.util.List<caffe.Loadcaffe.NetParameter> getTestNetParamList() {
            return testNetParam_;
        }
        /**
         * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
         *
         * <pre>
         * Inline test net params.
         * </pre>
         */
        public java.util.List<? extends caffe.Loadcaffe.NetParameterOrBuilder>
        getTestNetParamOrBuilderList() {
            return testNetParam_;
        }
        /**
         * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
         *
         * <pre>
         * Inline test net params.
         * </pre>
         */
        public int getTestNetParamCount() {
            return testNetParam_.size();
        }
        /**
         * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
         *
         * <pre>
         * Inline test net params.
         * </pre>
         */
        public caffe.Loadcaffe.NetParameter getTestNetParam(int index) {
            return testNetParam_.get(index);
        }
        /**
         * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
         *
         * <pre>
         * Inline test net params.
         * </pre>
         */
        public caffe.Loadcaffe.NetParameterOrBuilder getTestNetParamOrBuilder(
                int index) {
            return testNetParam_.get(index);
        }

        public static final int TRAIN_STATE_FIELD_NUMBER = 26;
        private caffe.Loadcaffe.NetState trainState_;
        /**
         * <code>optional .caffe.NetState train_state = 26;</code>
         *
         * <pre>
         * The states for the train/test nets. Must be unspecified or
         * specified once per net.
         * By default, all states will have solver = true;
         * train_state will have phase = TRAIN,
         * and all test_state's will have phase = TEST.
         * Other defaults are set according to the NetState defaults.
         * </pre>
         */
        public boolean hasTrainState() {
            return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>optional .caffe.NetState train_state = 26;</code>
         *
         * <pre>
         * The states for the train/test nets. Must be unspecified or
         * specified once per net.
         * By default, all states will have solver = true;
         * train_state will have phase = TRAIN,
         * and all test_state's will have phase = TEST.
         * Other defaults are set according to the NetState defaults.
         * </pre>
         */
        public caffe.Loadcaffe.NetState getTrainState() {
            return trainState_;
        }
        /**
         * <code>optional .caffe.NetState train_state = 26;</code>
         *
         * <pre>
         * The states for the train/test nets. Must be unspecified or
         * specified once per net.
         * By default, all states will have solver = true;
         * train_state will have phase = TRAIN,
         * and all test_state's will have phase = TEST.
         * Other defaults are set according to the NetState defaults.
         * </pre>
         */
        public caffe.Loadcaffe.NetStateOrBuilder getTrainStateOrBuilder() {
            return trainState_;
        }

        public static final int TEST_STATE_FIELD_NUMBER = 27;
        private java.util.List<caffe.Loadcaffe.NetState> testState_;
        /**
         * <code>repeated .caffe.NetState test_state = 27;</code>
         */
        public java.util.List<caffe.Loadcaffe.NetState> getTestStateList() {
            return testState_;
        }
        /**
         * <code>repeated .caffe.NetState test_state = 27;</code>
         */
        public java.util.List<? extends caffe.Loadcaffe.NetStateOrBuilder>
        getTestStateOrBuilderList() {
            return testState_;
        }
        /**
         * <code>repeated .caffe.NetState test_state = 27;</code>
         */
        public int getTestStateCount() {
            return testState_.size();
        }
        /**
         * <code>repeated .caffe.NetState test_state = 27;</code>
         */
        public caffe.Loadcaffe.NetState getTestState(int index) {
            return testState_.get(index);
        }
        /**
         * <code>repeated .caffe.NetState test_state = 27;</code>
         */
        public caffe.Loadcaffe.NetStateOrBuilder getTestStateOrBuilder(
                int index) {
            return testState_.get(index);
        }

        public static final int TEST_ITER_FIELD_NUMBER = 3;
        private java.util.List<java.lang.Integer> testIter_;
        /**
         * <code>repeated int32 test_iter = 3;</code>
         *
         * <pre>
         * The number of iterations for each test net.
         * </pre>
         */
        public java.util.List<java.lang.Integer>
        getTestIterList() {
            return testIter_;
        }
        /**
         * <code>repeated int32 test_iter = 3;</code>
         *
         * <pre>
         * The number of iterations for each test net.
         * </pre>
         */
        public int getTestIterCount() {
            return testIter_.size();
        }
        /**
         * <code>repeated int32 test_iter = 3;</code>
         *
         * <pre>
         * The number of iterations for each test net.
         * </pre>
         */
        public int getTestIter(int index) {
            return testIter_.get(index);
        }

        public static final int TEST_INTERVAL_FIELD_NUMBER = 4;
        private int testInterval_;
        /**
         * <code>optional int32 test_interval = 4 [default = 0];</code>
         *
         * <pre>
         * The number of iterations between two testing phases.
         * </pre>
         */
        public boolean hasTestInterval() {
            return ((bitField0_ & 0x00000020) == 0x00000020);
        }
        /**
         * <code>optional int32 test_interval = 4 [default = 0];</code>
         *
         * <pre>
         * The number of iterations between two testing phases.
         * </pre>
         */
        public int getTestInterval() {
            return testInterval_;
        }

        public static final int TEST_COMPUTE_LOSS_FIELD_NUMBER = 19;
        private boolean testComputeLoss_;
        /**
         * <code>optional bool test_compute_loss = 19 [default = false];</code>
         */
        public boolean hasTestComputeLoss() {
            return ((bitField0_ & 0x00000040) == 0x00000040);
        }
        /**
         * <code>optional bool test_compute_loss = 19 [default = false];</code>
         */
        public boolean getTestComputeLoss() {
            return testComputeLoss_;
        }

        public static final int TEST_INITIALIZATION_FIELD_NUMBER = 32;
        private boolean testInitialization_;
        /**
         * <code>optional bool test_initialization = 32 [default = true];</code>
         *
         * <pre>
         * If true, run an initial test pass before the first iteration,
         * ensuring memory availability and printing the starting value of the loss.
         * </pre>
         */
        public boolean hasTestInitialization() {
            return ((bitField0_ & 0x00000080) == 0x00000080);
        }
        /**
         * <code>optional bool test_initialization = 32 [default = true];</code>
         *
         * <pre>
         * If true, run an initial test pass before the first iteration,
         * ensuring memory availability and printing the starting value of the loss.
         * </pre>
         */
        public boolean getTestInitialization() {
            return testInitialization_;
        }

        public static final int BASE_LR_FIELD_NUMBER = 5;
        private float baseLr_;
        /**
         * <code>optional float base_lr = 5;</code>
         *
         * <pre>
         * The base learning rate
         * </pre>
         */
        public boolean hasBaseLr() {
            return ((bitField0_ & 0x00000100) == 0x00000100);
        }
        /**
         * <code>optional float base_lr = 5;</code>
         *
         * <pre>
         * The base learning rate
         * </pre>
         */
        public float getBaseLr() {
            return baseLr_;
        }

        public static final int DISPLAY_FIELD_NUMBER = 6;
        private int display_;
        /**
         * <code>optional int32 display = 6;</code>
         *
         * <pre>
         * the number of iterations between displaying info. If display = 0, no info
         * will be displayed.
         * </pre>
         */
        public boolean hasDisplay() {
            return ((bitField0_ & 0x00000200) == 0x00000200);
        }
        /**
         * <code>optional int32 display = 6;</code>
         *
         * <pre>
         * the number of iterations between displaying info. If display = 0, no info
         * will be displayed.
         * </pre>
         */
        public int getDisplay() {
            return display_;
        }

        public static final int AVERAGE_LOSS_FIELD_NUMBER = 33;
        private int averageLoss_;
        /**
         * <code>optional int32 average_loss = 33 [default = 1];</code>
         *
         * <pre>
         * Display the loss averaged over the last average_loss iterations
         * </pre>
         */
        public boolean hasAverageLoss() {
            return ((bitField0_ & 0x00000400) == 0x00000400);
        }
        /**
         * <code>optional int32 average_loss = 33 [default = 1];</code>
         *
         * <pre>
         * Display the loss averaged over the last average_loss iterations
         * </pre>
         */
        public int getAverageLoss() {
            return averageLoss_;
        }

        public static final int MAX_ITER_FIELD_NUMBER = 7;
        private int maxIter_;
        /**
         * <code>optional int32 max_iter = 7;</code>
         *
         * <pre>
         * the maximum number of iterations
         * </pre>
         */
        public boolean hasMaxIter() {
            return ((bitField0_ & 0x00000800) == 0x00000800);
        }
        /**
         * <code>optional int32 max_iter = 7;</code>
         *
         * <pre>
         * the maximum number of iterations
         * </pre>
         */
        public int getMaxIter() {
            return maxIter_;
        }

        public static final int LR_POLICY_FIELD_NUMBER = 8;
        private java.lang.Object lrPolicy_;
        /**
         * <code>optional string lr_policy = 8;</code>
         *
         * <pre>
         * The learning rate decay policy.
         * </pre>
         */
        public boolean hasLrPolicy() {
            return ((bitField0_ & 0x00001000) == 0x00001000);
        }
        /**
         * <code>optional string lr_policy = 8;</code>
         *
         * <pre>
         * The learning rate decay policy.
         * </pre>
         */
        public java.lang.String getLrPolicy() {
            java.lang.Object ref = lrPolicy_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    lrPolicy_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string lr_policy = 8;</code>
         *
         * <pre>
         * The learning rate decay policy.
         * </pre>
         */
        public com.google.protobuf.ByteString
        getLrPolicyBytes() {
            java.lang.Object ref = lrPolicy_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                lrPolicy_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int GAMMA_FIELD_NUMBER = 9;
        private float gamma_;
        /**
         * <code>optional float gamma = 9;</code>
         *
         * <pre>
         * The parameter to compute the learning rate.
         * </pre>
         */
        public boolean hasGamma() {
            return ((bitField0_ & 0x00002000) == 0x00002000);
        }
        /**
         * <code>optional float gamma = 9;</code>
         *
         * <pre>
         * The parameter to compute the learning rate.
         * </pre>
         */
        public float getGamma() {
            return gamma_;
        }

        public static final int POWER_FIELD_NUMBER = 10;
        private float power_;
        /**
         * <code>optional float power = 10;</code>
         *
         * <pre>
         * The parameter to compute the learning rate.
         * </pre>
         */
        public boolean hasPower() {
            return ((bitField0_ & 0x00004000) == 0x00004000);
        }
        /**
         * <code>optional float power = 10;</code>
         *
         * <pre>
         * The parameter to compute the learning rate.
         * </pre>
         */
        public float getPower() {
            return power_;
        }

        public static final int MOMENTUM_FIELD_NUMBER = 11;
        private float momentum_;
        /**
         * <code>optional float momentum = 11;</code>
         *
         * <pre>
         * The momentum value.
         * </pre>
         */
        public boolean hasMomentum() {
            return ((bitField0_ & 0x00008000) == 0x00008000);
        }
        /**
         * <code>optional float momentum = 11;</code>
         *
         * <pre>
         * The momentum value.
         * </pre>
         */
        public float getMomentum() {
            return momentum_;
        }

        public static final int WEIGHT_DECAY_FIELD_NUMBER = 12;
        private float weightDecay_;
        /**
         * <code>optional float weight_decay = 12;</code>
         *
         * <pre>
         * The weight decay.
         * </pre>
         */
        public boolean hasWeightDecay() {
            return ((bitField0_ & 0x00010000) == 0x00010000);
        }
        /**
         * <code>optional float weight_decay = 12;</code>
         *
         * <pre>
         * The weight decay.
         * </pre>
         */
        public float getWeightDecay() {
            return weightDecay_;
        }

        public static final int REGULARIZATION_TYPE_FIELD_NUMBER = 29;
        private java.lang.Object regularizationType_;
        /**
         * <code>optional string regularization_type = 29 [default = "L2"];</code>
         *
         * <pre>
         * regularization types supported: L1 and L2
         * controlled by weight_decay
         * </pre>
         */
        public boolean hasRegularizationType() {
            return ((bitField0_ & 0x00020000) == 0x00020000);
        }
        /**
         * <code>optional string regularization_type = 29 [default = "L2"];</code>
         *
         * <pre>
         * regularization types supported: L1 and L2
         * controlled by weight_decay
         * </pre>
         */
        public java.lang.String getRegularizationType() {
            java.lang.Object ref = regularizationType_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    regularizationType_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string regularization_type = 29 [default = "L2"];</code>
         *
         * <pre>
         * regularization types supported: L1 and L2
         * controlled by weight_decay
         * </pre>
         */
        public com.google.protobuf.ByteString
        getRegularizationTypeBytes() {
            java.lang.Object ref = regularizationType_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                regularizationType_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int STEPSIZE_FIELD_NUMBER = 13;
        private int stepsize_;
        /**
         * <code>optional int32 stepsize = 13;</code>
         *
         * <pre>
         * the stepsize for learning rate policy "step"
         * </pre>
         */
        public boolean hasStepsize() {
            return ((bitField0_ & 0x00040000) == 0x00040000);
        }
        /**
         * <code>optional int32 stepsize = 13;</code>
         *
         * <pre>
         * the stepsize for learning rate policy "step"
         * </pre>
         */
        public int getStepsize() {
            return stepsize_;
        }

        public static final int STEPVALUE_FIELD_NUMBER = 34;
        private java.util.List<java.lang.Integer> stepvalue_;
        /**
         * <code>repeated int32 stepvalue = 34;</code>
         *
         * <pre>
         * the stepsize for learning rate policy "multistep"
         * </pre>
         */
        public java.util.List<java.lang.Integer>
        getStepvalueList() {
            return stepvalue_;
        }
        /**
         * <code>repeated int32 stepvalue = 34;</code>
         *
         * <pre>
         * the stepsize for learning rate policy "multistep"
         * </pre>
         */
        public int getStepvalueCount() {
            return stepvalue_.size();
        }
        /**
         * <code>repeated int32 stepvalue = 34;</code>
         *
         * <pre>
         * the stepsize for learning rate policy "multistep"
         * </pre>
         */
        public int getStepvalue(int index) {
            return stepvalue_.get(index);
        }

        public static final int CLIP_GRADIENTS_FIELD_NUMBER = 35;
        private float clipGradients_;
        /**
         * <code>optional float clip_gradients = 35 [default = -1];</code>
         *
         * <pre>
         * Set clip_gradients to &gt;= 0 to clip parameter gradients to that L2 norm,
         * whenever their actual L2 norm is larger.
         * </pre>
         */
        public boolean hasClipGradients() {
            return ((bitField0_ & 0x00080000) == 0x00080000);
        }
        /**
         * <code>optional float clip_gradients = 35 [default = -1];</code>
         *
         * <pre>
         * Set clip_gradients to &gt;= 0 to clip parameter gradients to that L2 norm,
         * whenever their actual L2 norm is larger.
         * </pre>
         */
        public float getClipGradients() {
            return clipGradients_;
        }

        public static final int SNAPSHOT_FIELD_NUMBER = 14;
        private int snapshot_;
        /**
         * <code>optional int32 snapshot = 14 [default = 0];</code>
         *
         * <pre>
         * The snapshot interval
         * </pre>
         */
        public boolean hasSnapshot() {
            return ((bitField0_ & 0x00100000) == 0x00100000);
        }
        /**
         * <code>optional int32 snapshot = 14 [default = 0];</code>
         *
         * <pre>
         * The snapshot interval
         * </pre>
         */
        public int getSnapshot() {
            return snapshot_;
        }

        public static final int SNAPSHOT_PREFIX_FIELD_NUMBER = 15;
        private java.lang.Object snapshotPrefix_;
        /**
         * <code>optional string snapshot_prefix = 15;</code>
         *
         * <pre>
         * The prefix for the snapshot.
         * </pre>
         */
        public boolean hasSnapshotPrefix() {
            return ((bitField0_ & 0x00200000) == 0x00200000);
        }
        /**
         * <code>optional string snapshot_prefix = 15;</code>
         *
         * <pre>
         * The prefix for the snapshot.
         * </pre>
         */
        public java.lang.String getSnapshotPrefix() {
            java.lang.Object ref = snapshotPrefix_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    snapshotPrefix_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string snapshot_prefix = 15;</code>
         *
         * <pre>
         * The prefix for the snapshot.
         * </pre>
         */
        public com.google.protobuf.ByteString
        getSnapshotPrefixBytes() {
            java.lang.Object ref = snapshotPrefix_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                snapshotPrefix_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int SNAPSHOT_DIFF_FIELD_NUMBER = 16;
        private boolean snapshotDiff_;
        /**
         * <code>optional bool snapshot_diff = 16 [default = false];</code>
         *
         * <pre>
         * whether to snapshot diff in the results or not. Snapshotting diff will help
         * debugging but the final protocol buffer size will be much larger.
         * </pre>
         */
        public boolean hasSnapshotDiff() {
            return ((bitField0_ & 0x00400000) == 0x00400000);
        }
        /**
         * <code>optional bool snapshot_diff = 16 [default = false];</code>
         *
         * <pre>
         * whether to snapshot diff in the results or not. Snapshotting diff will help
         * debugging but the final protocol buffer size will be much larger.
         * </pre>
         */
        public boolean getSnapshotDiff() {
            return snapshotDiff_;
        }

        public static final int SOLVER_MODE_FIELD_NUMBER = 17;
        private caffe.Loadcaffe.SolverParameter.SolverMode solverMode_;
        /**
         * <code>optional .caffe.SolverParameter.SolverMode solver_mode = 17 [default = GPU];</code>
         */
        public boolean hasSolverMode() {
            return ((bitField0_ & 0x00800000) == 0x00800000);
        }
        /**
         * <code>optional .caffe.SolverParameter.SolverMode solver_mode = 17 [default = GPU];</code>
         */
        public caffe.Loadcaffe.SolverParameter.SolverMode getSolverMode() {
            return solverMode_;
        }

        public static final int DEVICE_ID_FIELD_NUMBER = 18;
        private int deviceId_;
        /**
         * <code>optional int32 device_id = 18 [default = 0];</code>
         *
         * <pre>
         * the device_id will that be used in GPU mode. Use device_id = 0 in default.
         * </pre>
         */
        public boolean hasDeviceId() {
            return ((bitField0_ & 0x01000000) == 0x01000000);
        }
        /**
         * <code>optional int32 device_id = 18 [default = 0];</code>
         *
         * <pre>
         * the device_id will that be used in GPU mode. Use device_id = 0 in default.
         * </pre>
         */
        public int getDeviceId() {
            return deviceId_;
        }

        public static final int RANDOM_SEED_FIELD_NUMBER = 20;
        private long randomSeed_;
        /**
         * <code>optional int64 random_seed = 20 [default = -1];</code>
         *
         * <pre>
         * If non-negative, the seed with which the Solver will initialize the Caffe
         * random number generator -- useful for reproducible results. Otherwise,
         * (and by default) initialize using a seed derived from the system clock.
         * </pre>
         */
        public boolean hasRandomSeed() {
            return ((bitField0_ & 0x02000000) == 0x02000000);
        }
        /**
         * <code>optional int64 random_seed = 20 [default = -1];</code>
         *
         * <pre>
         * If non-negative, the seed with which the Solver will initialize the Caffe
         * random number generator -- useful for reproducible results. Otherwise,
         * (and by default) initialize using a seed derived from the system clock.
         * </pre>
         */
        public long getRandomSeed() {
            return randomSeed_;
        }

        public static final int SOLVER_TYPE_FIELD_NUMBER = 30;
        private caffe.Loadcaffe.SolverParameter.SolverType solverType_;
        /**
         * <code>optional .caffe.SolverParameter.SolverType solver_type = 30 [default = SGD];</code>
         */
        public boolean hasSolverType() {
            return ((bitField0_ & 0x04000000) == 0x04000000);
        }
        /**
         * <code>optional .caffe.SolverParameter.SolverType solver_type = 30 [default = SGD];</code>
         */
        public caffe.Loadcaffe.SolverParameter.SolverType getSolverType() {
            return solverType_;
        }

        public static final int DELTA_FIELD_NUMBER = 31;
        private float delta_;
        /**
         * <code>optional float delta = 31 [default = 1e-08];</code>
         *
         * <pre>
         * numerical stability for AdaGrad
         * </pre>
         */
        public boolean hasDelta() {
            return ((bitField0_ & 0x08000000) == 0x08000000);
        }
        /**
         * <code>optional float delta = 31 [default = 1e-08];</code>
         *
         * <pre>
         * numerical stability for AdaGrad
         * </pre>
         */
        public float getDelta() {
            return delta_;
        }

        public static final int DEBUG_INFO_FIELD_NUMBER = 23;
        private boolean debugInfo_;
        /**
         * <code>optional bool debug_info = 23 [default = false];</code>
         *
         * <pre>
         * If true, print information about the state of the net that may help with
         * debugging learning problems.
         * </pre>
         */
        public boolean hasDebugInfo() {
            return ((bitField0_ & 0x10000000) == 0x10000000);
        }
        /**
         * <code>optional bool debug_info = 23 [default = false];</code>
         *
         * <pre>
         * If true, print information about the state of the net that may help with
         * debugging learning problems.
         * </pre>
         */
        public boolean getDebugInfo() {
            return debugInfo_;
        }

        public static final int SNAPSHOT_AFTER_TRAIN_FIELD_NUMBER = 28;
        private boolean snapshotAfterTrain_;
        /**
         * <code>optional bool snapshot_after_train = 28 [default = true];</code>
         *
         * <pre>
         * If false, don't save a snapshot after training finishes.
         * </pre>
         */
        public boolean hasSnapshotAfterTrain() {
            return ((bitField0_ & 0x20000000) == 0x20000000);
        }
        /**
         * <code>optional bool snapshot_after_train = 28 [default = true];</code>
         *
         * <pre>
         * If false, don't save a snapshot after training finishes.
         * </pre>
         */
        public boolean getSnapshotAfterTrain() {
            return snapshotAfterTrain_;
        }

        private void initFields() {
            net_ = "";
            netParam_ = caffe.Loadcaffe.NetParameter.getDefaultInstance();
            trainNet_ = "";
            testNet_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            trainNetParam_ = caffe.Loadcaffe.NetParameter.getDefaultInstance();
            testNetParam_ = java.util.Collections.emptyList();
            trainState_ = caffe.Loadcaffe.NetState.getDefaultInstance();
            testState_ = java.util.Collections.emptyList();
            testIter_ = java.util.Collections.emptyList();
            testInterval_ = 0;
            testComputeLoss_ = false;
            testInitialization_ = true;
            baseLr_ = 0F;
            display_ = 0;
            averageLoss_ = 1;
            maxIter_ = 0;
            lrPolicy_ = "";
            gamma_ = 0F;
            power_ = 0F;
            momentum_ = 0F;
            weightDecay_ = 0F;
            regularizationType_ = "L2";
            stepsize_ = 0;
            stepvalue_ = java.util.Collections.emptyList();
            clipGradients_ = -1F;
            snapshot_ = 0;
            snapshotPrefix_ = "";
            snapshotDiff_ = false;
            solverMode_ = caffe.Loadcaffe.SolverParameter.SolverMode.GPU;
            deviceId_ = 0;
            randomSeed_ = -1L;
            solverType_ = caffe.Loadcaffe.SolverParameter.SolverType.SGD;
            delta_ = 1e-08F;
            debugInfo_ = false;
            snapshotAfterTrain_ = true;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeBytes(1, getTrainNetBytes());
            }
            for (int i = 0; i < testNet_.size(); i++) {
                output.writeBytes(2, testNet_.getByteString(i));
            }
            for (int i = 0; i < testIter_.size(); i++) {
                output.writeInt32(3, testIter_.get(i));
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                output.writeInt32(4, testInterval_);
            }
            if (((bitField0_ & 0x00000100) == 0x00000100)) {
                output.writeFloat(5, baseLr_);
            }
            if (((bitField0_ & 0x00000200) == 0x00000200)) {
                output.writeInt32(6, display_);
            }
            if (((bitField0_ & 0x00000800) == 0x00000800)) {
                output.writeInt32(7, maxIter_);
            }
            if (((bitField0_ & 0x00001000) == 0x00001000)) {
                output.writeBytes(8, getLrPolicyBytes());
            }
            if (((bitField0_ & 0x00002000) == 0x00002000)) {
                output.writeFloat(9, gamma_);
            }
            if (((bitField0_ & 0x00004000) == 0x00004000)) {
                output.writeFloat(10, power_);
            }
            if (((bitField0_ & 0x00008000) == 0x00008000)) {
                output.writeFloat(11, momentum_);
            }
            if (((bitField0_ & 0x00010000) == 0x00010000)) {
                output.writeFloat(12, weightDecay_);
            }
            if (((bitField0_ & 0x00040000) == 0x00040000)) {
                output.writeInt32(13, stepsize_);
            }
            if (((bitField0_ & 0x00100000) == 0x00100000)) {
                output.writeInt32(14, snapshot_);
            }
            if (((bitField0_ & 0x00200000) == 0x00200000)) {
                output.writeBytes(15, getSnapshotPrefixBytes());
            }
            if (((bitField0_ & 0x00400000) == 0x00400000)) {
                output.writeBool(16, snapshotDiff_);
            }
            if (((bitField0_ & 0x00800000) == 0x00800000)) {
                output.writeEnum(17, solverMode_.getNumber());
            }
            if (((bitField0_ & 0x01000000) == 0x01000000)) {
                output.writeInt32(18, deviceId_);
            }
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                output.writeBool(19, testComputeLoss_);
            }
            if (((bitField0_ & 0x02000000) == 0x02000000)) {
                output.writeInt64(20, randomSeed_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                output.writeMessage(21, trainNetParam_);
            }
            for (int i = 0; i < testNetParam_.size(); i++) {
                output.writeMessage(22, testNetParam_.get(i));
            }
            if (((bitField0_ & 0x10000000) == 0x10000000)) {
                output.writeBool(23, debugInfo_);
            }
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeBytes(24, getNetBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeMessage(25, netParam_);
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                output.writeMessage(26, trainState_);
            }
            for (int i = 0; i < testState_.size(); i++) {
                output.writeMessage(27, testState_.get(i));
            }
            if (((bitField0_ & 0x20000000) == 0x20000000)) {
                output.writeBool(28, snapshotAfterTrain_);
            }
            if (((bitField0_ & 0x00020000) == 0x00020000)) {
                output.writeBytes(29, getRegularizationTypeBytes());
            }
            if (((bitField0_ & 0x04000000) == 0x04000000)) {
                output.writeEnum(30, solverType_.getNumber());
            }
            if (((bitField0_ & 0x08000000) == 0x08000000)) {
                output.writeFloat(31, delta_);
            }
            if (((bitField0_ & 0x00000080) == 0x00000080)) {
                output.writeBool(32, testInitialization_);
            }
            if (((bitField0_ & 0x00000400) == 0x00000400)) {
                output.writeInt32(33, averageLoss_);
            }
            for (int i = 0; i < stepvalue_.size(); i++) {
                output.writeInt32(34, stepvalue_.get(i));
            }
            if (((bitField0_ & 0x00080000) == 0x00080000)) {
                output.writeFloat(35, clipGradients_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(1, getTrainNetBytes());
            }
            {
                int dataSize = 0;
                for (int i = 0; i < testNet_.size(); i++) {
                    dataSize += com.google.protobuf.CodedOutputStream
                            .computeBytesSizeNoTag(testNet_.getByteString(i));
                }
                size += dataSize;
                size += 1 * getTestNetList().size();
            }
            {
                int dataSize = 0;
                for (int i = 0; i < testIter_.size(); i++) {
                    dataSize += com.google.protobuf.CodedOutputStream
                            .computeInt32SizeNoTag(testIter_.get(i));
                }
                size += dataSize;
                size += 1 * getTestIterList().size();
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(4, testInterval_);
            }
            if (((bitField0_ & 0x00000100) == 0x00000100)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(5, baseLr_);
            }
            if (((bitField0_ & 0x00000200) == 0x00000200)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(6, display_);
            }
            if (((bitField0_ & 0x00000800) == 0x00000800)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(7, maxIter_);
            }
            if (((bitField0_ & 0x00001000) == 0x00001000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(8, getLrPolicyBytes());
            }
            if (((bitField0_ & 0x00002000) == 0x00002000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(9, gamma_);
            }
            if (((bitField0_ & 0x00004000) == 0x00004000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(10, power_);
            }
            if (((bitField0_ & 0x00008000) == 0x00008000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(11, momentum_);
            }
            if (((bitField0_ & 0x00010000) == 0x00010000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(12, weightDecay_);
            }
            if (((bitField0_ & 0x00040000) == 0x00040000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(13, stepsize_);
            }
            if (((bitField0_ & 0x00100000) == 0x00100000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(14, snapshot_);
            }
            if (((bitField0_ & 0x00200000) == 0x00200000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(15, getSnapshotPrefixBytes());
            }
            if (((bitField0_ & 0x00400000) == 0x00400000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(16, snapshotDiff_);
            }
            if (((bitField0_ & 0x00800000) == 0x00800000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeEnumSize(17, solverMode_.getNumber());
            }
            if (((bitField0_ & 0x01000000) == 0x01000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(18, deviceId_);
            }
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(19, testComputeLoss_);
            }
            if (((bitField0_ & 0x02000000) == 0x02000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt64Size(20, randomSeed_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(21, trainNetParam_);
            }
            for (int i = 0; i < testNetParam_.size(); i++) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(22, testNetParam_.get(i));
            }
            if (((bitField0_ & 0x10000000) == 0x10000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(23, debugInfo_);
            }
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(24, getNetBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(25, netParam_);
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(26, trainState_);
            }
            for (int i = 0; i < testState_.size(); i++) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(27, testState_.get(i));
            }
            if (((bitField0_ & 0x20000000) == 0x20000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(28, snapshotAfterTrain_);
            }
            if (((bitField0_ & 0x00020000) == 0x00020000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(29, getRegularizationTypeBytes());
            }
            if (((bitField0_ & 0x04000000) == 0x04000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeEnumSize(30, solverType_.getNumber());
            }
            if (((bitField0_ & 0x08000000) == 0x08000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(31, delta_);
            }
            if (((bitField0_ & 0x00000080) == 0x00000080)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(32, testInitialization_);
            }
            if (((bitField0_ & 0x00000400) == 0x00000400)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(33, averageLoss_);
            }
            {
                int dataSize = 0;
                for (int i = 0; i < stepvalue_.size(); i++) {
                    dataSize += com.google.protobuf.CodedOutputStream
                            .computeInt32SizeNoTag(stepvalue_.get(i));
                }
                size += dataSize;
                size += 2 * getStepvalueList().size();
            }
            if (((bitField0_ & 0x00080000) == 0x00080000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(35, clipGradients_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.SolverParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.SolverParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.SolverParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.SolverParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.SolverParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.SolverParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.SolverParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.SolverParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.SolverParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.SolverParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.SolverParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.SolverParameter}
         *
         * <pre>
         * NOTE
         * Update the next available ID when you add a new SolverParameter field.
         * SolverParameter next available ID: 36 (last added: clip_gradients)
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.SolverParameter)
                caffe.Loadcaffe.SolverParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_SolverParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_SolverParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.SolverParameter.class, caffe.Loadcaffe.SolverParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.SolverParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                    getNetParamFieldBuilder();
                    getTrainNetParamFieldBuilder();
                    getTestNetParamFieldBuilder();
                    getTrainStateFieldBuilder();
                    getTestStateFieldBuilder();
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                net_ = "";
                bitField0_ = (bitField0_ & ~0x00000001);
                if (netParamBuilder_ == null) {
                    netParam_ = caffe.Loadcaffe.NetParameter.getDefaultInstance();
                } else {
                    netParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000002);
                trainNet_ = "";
                bitField0_ = (bitField0_ & ~0x00000004);
                testNet_ = com.google.protobuf.LazyStringArrayList.EMPTY;
                bitField0_ = (bitField0_ & ~0x00000008);
                if (trainNetParamBuilder_ == null) {
                    trainNetParam_ = caffe.Loadcaffe.NetParameter.getDefaultInstance();
                } else {
                    trainNetParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000010);
                if (testNetParamBuilder_ == null) {
                    testNetParam_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000020);
                } else {
                    testNetParamBuilder_.clear();
                }
                if (trainStateBuilder_ == null) {
                    trainState_ = caffe.Loadcaffe.NetState.getDefaultInstance();
                } else {
                    trainStateBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000040);
                if (testStateBuilder_ == null) {
                    testState_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000080);
                } else {
                    testStateBuilder_.clear();
                }
                testIter_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000100);
                testInterval_ = 0;
                bitField0_ = (bitField0_ & ~0x00000200);
                testComputeLoss_ = false;
                bitField0_ = (bitField0_ & ~0x00000400);
                testInitialization_ = true;
                bitField0_ = (bitField0_ & ~0x00000800);
                baseLr_ = 0F;
                bitField0_ = (bitField0_ & ~0x00001000);
                display_ = 0;
                bitField0_ = (bitField0_ & ~0x00002000);
                averageLoss_ = 1;
                bitField0_ = (bitField0_ & ~0x00004000);
                maxIter_ = 0;
                bitField0_ = (bitField0_ & ~0x00008000);
                lrPolicy_ = "";
                bitField0_ = (bitField0_ & ~0x00010000);
                gamma_ = 0F;
                bitField0_ = (bitField0_ & ~0x00020000);
                power_ = 0F;
                bitField0_ = (bitField0_ & ~0x00040000);
                momentum_ = 0F;
                bitField0_ = (bitField0_ & ~0x00080000);
                weightDecay_ = 0F;
                bitField0_ = (bitField0_ & ~0x00100000);
                regularizationType_ = "L2";
                bitField0_ = (bitField0_ & ~0x00200000);
                stepsize_ = 0;
                bitField0_ = (bitField0_ & ~0x00400000);
                stepvalue_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00800000);
                clipGradients_ = -1F;
                bitField0_ = (bitField0_ & ~0x01000000);
                snapshot_ = 0;
                bitField0_ = (bitField0_ & ~0x02000000);
                snapshotPrefix_ = "";
                bitField0_ = (bitField0_ & ~0x04000000);
                snapshotDiff_ = false;
                bitField0_ = (bitField0_ & ~0x08000000);
                solverMode_ = caffe.Loadcaffe.SolverParameter.SolverMode.GPU;
                bitField0_ = (bitField0_ & ~0x10000000);
                deviceId_ = 0;
                bitField0_ = (bitField0_ & ~0x20000000);
                randomSeed_ = -1L;
                bitField0_ = (bitField0_ & ~0x40000000);
                solverType_ = caffe.Loadcaffe.SolverParameter.SolverType.SGD;
                bitField0_ = (bitField0_ & ~0x80000000);
                delta_ = 1e-08F;
                bitField1_ = (bitField1_ & ~0x00000001);
                debugInfo_ = false;
                bitField1_ = (bitField1_ & ~0x00000002);
                snapshotAfterTrain_ = true;
                bitField1_ = (bitField1_ & ~0x00000004);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_SolverParameter_descriptor;
            }

            public caffe.Loadcaffe.SolverParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.SolverParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.SolverParameter build() {
                caffe.Loadcaffe.SolverParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.SolverParameter buildPartial() {
                caffe.Loadcaffe.SolverParameter result = new caffe.Loadcaffe.SolverParameter(this);
                int from_bitField0_ = bitField0_;
                int from_bitField1_ = bitField1_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.net_ = net_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                if (netParamBuilder_ == null) {
                    result.netParam_ = netParam_;
                } else {
                    result.netParam_ = netParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000004;
                }
                result.trainNet_ = trainNet_;
                if (((bitField0_ & 0x00000008) == 0x00000008)) {
                    testNet_ = testNet_.getUnmodifiableView();
                    bitField0_ = (bitField0_ & ~0x00000008);
                }
                result.testNet_ = testNet_;
                if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
                    to_bitField0_ |= 0x00000008;
                }
                if (trainNetParamBuilder_ == null) {
                    result.trainNetParam_ = trainNetParam_;
                } else {
                    result.trainNetParam_ = trainNetParamBuilder_.build();
                }
                if (testNetParamBuilder_ == null) {
                    if (((bitField0_ & 0x00000020) == 0x00000020)) {
                        testNetParam_ = java.util.Collections.unmodifiableList(testNetParam_);
                        bitField0_ = (bitField0_ & ~0x00000020);
                    }
                    result.testNetParam_ = testNetParam_;
                } else {
                    result.testNetParam_ = testNetParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
                    to_bitField0_ |= 0x00000010;
                }
                if (trainStateBuilder_ == null) {
                    result.trainState_ = trainState_;
                } else {
                    result.trainState_ = trainStateBuilder_.build();
                }
                if (testStateBuilder_ == null) {
                    if (((bitField0_ & 0x00000080) == 0x00000080)) {
                        testState_ = java.util.Collections.unmodifiableList(testState_);
                        bitField0_ = (bitField0_ & ~0x00000080);
                    }
                    result.testState_ = testState_;
                } else {
                    result.testState_ = testStateBuilder_.build();
                }
                if (((bitField0_ & 0x00000100) == 0x00000100)) {
                    testIter_ = java.util.Collections.unmodifiableList(testIter_);
                    bitField0_ = (bitField0_ & ~0x00000100);
                }
                result.testIter_ = testIter_;
                if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
                    to_bitField0_ |= 0x00000020;
                }
                result.testInterval_ = testInterval_;
                if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
                    to_bitField0_ |= 0x00000040;
                }
                result.testComputeLoss_ = testComputeLoss_;
                if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
                    to_bitField0_ |= 0x00000080;
                }
                result.testInitialization_ = testInitialization_;
                if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
                    to_bitField0_ |= 0x00000100;
                }
                result.baseLr_ = baseLr_;
                if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
                    to_bitField0_ |= 0x00000200;
                }
                result.display_ = display_;
                if (((from_bitField0_ & 0x00004000) == 0x00004000)) {
                    to_bitField0_ |= 0x00000400;
                }
                result.averageLoss_ = averageLoss_;
                if (((from_bitField0_ & 0x00008000) == 0x00008000)) {
                    to_bitField0_ |= 0x00000800;
                }
                result.maxIter_ = maxIter_;
                if (((from_bitField0_ & 0x00010000) == 0x00010000)) {
                    to_bitField0_ |= 0x00001000;
                }
                result.lrPolicy_ = lrPolicy_;
                if (((from_bitField0_ & 0x00020000) == 0x00020000)) {
                    to_bitField0_ |= 0x00002000;
                }
                result.gamma_ = gamma_;
                if (((from_bitField0_ & 0x00040000) == 0x00040000)) {
                    to_bitField0_ |= 0x00004000;
                }
                result.power_ = power_;
                if (((from_bitField0_ & 0x00080000) == 0x00080000)) {
                    to_bitField0_ |= 0x00008000;
                }
                result.momentum_ = momentum_;
                if (((from_bitField0_ & 0x00100000) == 0x00100000)) {
                    to_bitField0_ |= 0x00010000;
                }
                result.weightDecay_ = weightDecay_;
                if (((from_bitField0_ & 0x00200000) == 0x00200000)) {
                    to_bitField0_ |= 0x00020000;
                }
                result.regularizationType_ = regularizationType_;
                if (((from_bitField0_ & 0x00400000) == 0x00400000)) {
                    to_bitField0_ |= 0x00040000;
                }
                result.stepsize_ = stepsize_;
                if (((bitField0_ & 0x00800000) == 0x00800000)) {
                    stepvalue_ = java.util.Collections.unmodifiableList(stepvalue_);
                    bitField0_ = (bitField0_ & ~0x00800000);
                }
                result.stepvalue_ = stepvalue_;
                if (((from_bitField0_ & 0x01000000) == 0x01000000)) {
                    to_bitField0_ |= 0x00080000;
                }
                result.clipGradients_ = clipGradients_;
                if (((from_bitField0_ & 0x02000000) == 0x02000000)) {
                    to_bitField0_ |= 0x00100000;
                }
                result.snapshot_ = snapshot_;
                if (((from_bitField0_ & 0x04000000) == 0x04000000)) {
                    to_bitField0_ |= 0x00200000;
                }
                result.snapshotPrefix_ = snapshotPrefix_;
                if (((from_bitField0_ & 0x08000000) == 0x08000000)) {
                    to_bitField0_ |= 0x00400000;
                }
                result.snapshotDiff_ = snapshotDiff_;
                if (((from_bitField0_ & 0x10000000) == 0x10000000)) {
                    to_bitField0_ |= 0x00800000;
                }
                result.solverMode_ = solverMode_;
                if (((from_bitField0_ & 0x20000000) == 0x20000000)) {
                    to_bitField0_ |= 0x01000000;
                }
                result.deviceId_ = deviceId_;
                if (((from_bitField0_ & 0x40000000) == 0x40000000)) {
                    to_bitField0_ |= 0x02000000;
                }
                result.randomSeed_ = randomSeed_;
                if (((from_bitField0_ & 0x80000000) == 0x80000000)) {
                    to_bitField0_ |= 0x04000000;
                }
                result.solverType_ = solverType_;
                if (((from_bitField1_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x08000000;
                }
                result.delta_ = delta_;
                if (((from_bitField1_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x10000000;
                }
                result.debugInfo_ = debugInfo_;
                if (((from_bitField1_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x20000000;
                }
                result.snapshotAfterTrain_ = snapshotAfterTrain_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.SolverParameter) {
                    return mergeFrom((caffe.Loadcaffe.SolverParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.SolverParameter other) {
                if (other == caffe.Loadcaffe.SolverParameter.getDefaultInstance()) return this;
                if (other.hasNet()) {
                    bitField0_ |= 0x00000001;
                    net_ = other.net_;
                    onChanged();
                }
                if (other.hasNetParam()) {
                    mergeNetParam(other.getNetParam());
                }
                if (other.hasTrainNet()) {
                    bitField0_ |= 0x00000004;
                    trainNet_ = other.trainNet_;
                    onChanged();
                }
                if (!other.testNet_.isEmpty()) {
                    if (testNet_.isEmpty()) {
                        testNet_ = other.testNet_;
                        bitField0_ = (bitField0_ & ~0x00000008);
                    } else {
                        ensureTestNetIsMutable();
                        testNet_.addAll(other.testNet_);
                    }
                    onChanged();
                }
                if (other.hasTrainNetParam()) {
                    mergeTrainNetParam(other.getTrainNetParam());
                }
                if (testNetParamBuilder_ == null) {
                    if (!other.testNetParam_.isEmpty()) {
                        if (testNetParam_.isEmpty()) {
                            testNetParam_ = other.testNetParam_;
                            bitField0_ = (bitField0_ & ~0x00000020);
                        } else {
                            ensureTestNetParamIsMutable();
                            testNetParam_.addAll(other.testNetParam_);
                        }
                        onChanged();
                    }
                } else {
                    if (!other.testNetParam_.isEmpty()) {
                        if (testNetParamBuilder_.isEmpty()) {
                            testNetParamBuilder_.dispose();
                            testNetParamBuilder_ = null;
                            testNetParam_ = other.testNetParam_;
                            bitField0_ = (bitField0_ & ~0x00000020);
                            testNetParamBuilder_ =
                                    com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                                            getTestNetParamFieldBuilder() : null;
                        } else {
                            testNetParamBuilder_.addAllMessages(other.testNetParam_);
                        }
                    }
                }
                if (other.hasTrainState()) {
                    mergeTrainState(other.getTrainState());
                }
                if (testStateBuilder_ == null) {
                    if (!other.testState_.isEmpty()) {
                        if (testState_.isEmpty()) {
                            testState_ = other.testState_;
                            bitField0_ = (bitField0_ & ~0x00000080);
                        } else {
                            ensureTestStateIsMutable();
                            testState_.addAll(other.testState_);
                        }
                        onChanged();
                    }
                } else {
                    if (!other.testState_.isEmpty()) {
                        if (testStateBuilder_.isEmpty()) {
                            testStateBuilder_.dispose();
                            testStateBuilder_ = null;
                            testState_ = other.testState_;
                            bitField0_ = (bitField0_ & ~0x00000080);
                            testStateBuilder_ =
                                    com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                                            getTestStateFieldBuilder() : null;
                        } else {
                            testStateBuilder_.addAllMessages(other.testState_);
                        }
                    }
                }
                if (!other.testIter_.isEmpty()) {
                    if (testIter_.isEmpty()) {
                        testIter_ = other.testIter_;
                        bitField0_ = (bitField0_ & ~0x00000100);
                    } else {
                        ensureTestIterIsMutable();
                        testIter_.addAll(other.testIter_);
                    }
                    onChanged();
                }
                if (other.hasTestInterval()) {
                    setTestInterval(other.getTestInterval());
                }
                if (other.hasTestComputeLoss()) {
                    setTestComputeLoss(other.getTestComputeLoss());
                }
                if (other.hasTestInitialization()) {
                    setTestInitialization(other.getTestInitialization());
                }
                if (other.hasBaseLr()) {
                    setBaseLr(other.getBaseLr());
                }
                if (other.hasDisplay()) {
                    setDisplay(other.getDisplay());
                }
                if (other.hasAverageLoss()) {
                    setAverageLoss(other.getAverageLoss());
                }
                if (other.hasMaxIter()) {
                    setMaxIter(other.getMaxIter());
                }
                if (other.hasLrPolicy()) {
                    bitField0_ |= 0x00010000;
                    lrPolicy_ = other.lrPolicy_;
                    onChanged();
                }
                if (other.hasGamma()) {
                    setGamma(other.getGamma());
                }
                if (other.hasPower()) {
                    setPower(other.getPower());
                }
                if (other.hasMomentum()) {
                    setMomentum(other.getMomentum());
                }
                if (other.hasWeightDecay()) {
                    setWeightDecay(other.getWeightDecay());
                }
                if (other.hasRegularizationType()) {
                    bitField0_ |= 0x00200000;
                    regularizationType_ = other.regularizationType_;
                    onChanged();
                }
                if (other.hasStepsize()) {
                    setStepsize(other.getStepsize());
                }
                if (!other.stepvalue_.isEmpty()) {
                    if (stepvalue_.isEmpty()) {
                        stepvalue_ = other.stepvalue_;
                        bitField0_ = (bitField0_ & ~0x00800000);
                    } else {
                        ensureStepvalueIsMutable();
                        stepvalue_.addAll(other.stepvalue_);
                    }
                    onChanged();
                }
                if (other.hasClipGradients()) {
                    setClipGradients(other.getClipGradients());
                }
                if (other.hasSnapshot()) {
                    setSnapshot(other.getSnapshot());
                }
                if (other.hasSnapshotPrefix()) {
                    bitField0_ |= 0x04000000;
                    snapshotPrefix_ = other.snapshotPrefix_;
                    onChanged();
                }
                if (other.hasSnapshotDiff()) {
                    setSnapshotDiff(other.getSnapshotDiff());
                }
                if (other.hasSolverMode()) {
                    setSolverMode(other.getSolverMode());
                }
                if (other.hasDeviceId()) {
                    setDeviceId(other.getDeviceId());
                }
                if (other.hasRandomSeed()) {
                    setRandomSeed(other.getRandomSeed());
                }
                if (other.hasSolverType()) {
                    setSolverType(other.getSolverType());
                }
                if (other.hasDelta()) {
                    setDelta(other.getDelta());
                }
                if (other.hasDebugInfo()) {
                    setDebugInfo(other.getDebugInfo());
                }
                if (other.hasSnapshotAfterTrain()) {
                    setSnapshotAfterTrain(other.getSnapshotAfterTrain());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.SolverParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.SolverParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;
            private int bitField1_;

            private java.lang.Object net_ = "";
            /**
             * <code>optional string net = 24;</code>
             *
             * <pre>
             * Proto filename for the train net, possibly combined with one or more
             * test nets.
             * </pre>
             */
            public boolean hasNet() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional string net = 24;</code>
             *
             * <pre>
             * Proto filename for the train net, possibly combined with one or more
             * test nets.
             * </pre>
             */
            public java.lang.String getNet() {
                java.lang.Object ref = net_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        net_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string net = 24;</code>
             *
             * <pre>
             * Proto filename for the train net, possibly combined with one or more
             * test nets.
             * </pre>
             */
            public com.google.protobuf.ByteString
            getNetBytes() {
                java.lang.Object ref = net_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    net_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string net = 24;</code>
             *
             * <pre>
             * Proto filename for the train net, possibly combined with one or more
             * test nets.
             * </pre>
             */
            public Builder setNet(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                net_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string net = 24;</code>
             *
             * <pre>
             * Proto filename for the train net, possibly combined with one or more
             * test nets.
             * </pre>
             */
            public Builder clearNet() {
                bitField0_ = (bitField0_ & ~0x00000001);
                net_ = getDefaultInstance().getNet();
                onChanged();
                return this;
            }
            /**
             * <code>optional string net = 24;</code>
             *
             * <pre>
             * Proto filename for the train net, possibly combined with one or more
             * test nets.
             * </pre>
             */
            public Builder setNetBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                net_ = value;
                onChanged();
                return this;
            }

            private caffe.Loadcaffe.NetParameter netParam_ = caffe.Loadcaffe.NetParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.NetParameter, caffe.Loadcaffe.NetParameter.Builder, caffe.Loadcaffe.NetParameterOrBuilder> netParamBuilder_;
            /**
             * <code>optional .caffe.NetParameter net_param = 25;</code>
             *
             * <pre>
             * Inline train net param, possibly combined with one or more test nets.
             * </pre>
             */
            public boolean hasNetParam() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional .caffe.NetParameter net_param = 25;</code>
             *
             * <pre>
             * Inline train net param, possibly combined with one or more test nets.
             * </pre>
             */
            public caffe.Loadcaffe.NetParameter getNetParam() {
                if (netParamBuilder_ == null) {
                    return netParam_;
                } else {
                    return netParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.NetParameter net_param = 25;</code>
             *
             * <pre>
             * Inline train net param, possibly combined with one or more test nets.
             * </pre>
             */
            public Builder setNetParam(caffe.Loadcaffe.NetParameter value) {
                if (netParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    netParam_ = value;
                    onChanged();
                } else {
                    netParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00000002;
                return this;
            }
            /**
             * <code>optional .caffe.NetParameter net_param = 25;</code>
             *
             * <pre>
             * Inline train net param, possibly combined with one or more test nets.
             * </pre>
             */
            public Builder setNetParam(
                    caffe.Loadcaffe.NetParameter.Builder builderForValue) {
                if (netParamBuilder_ == null) {
                    netParam_ = builderForValue.build();
                    onChanged();
                } else {
                    netParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00000002;
                return this;
            }
            /**
             * <code>optional .caffe.NetParameter net_param = 25;</code>
             *
             * <pre>
             * Inline train net param, possibly combined with one or more test nets.
             * </pre>
             */
            public Builder mergeNetParam(caffe.Loadcaffe.NetParameter value) {
                if (netParamBuilder_ == null) {
                    if (((bitField0_ & 0x00000002) == 0x00000002) &&
                            netParam_ != caffe.Loadcaffe.NetParameter.getDefaultInstance()) {
                        netParam_ =
                                caffe.Loadcaffe.NetParameter.newBuilder(netParam_).mergeFrom(value).buildPartial();
                    } else {
                        netParam_ = value;
                    }
                    onChanged();
                } else {
                    netParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00000002;
                return this;
            }
            /**
             * <code>optional .caffe.NetParameter net_param = 25;</code>
             *
             * <pre>
             * Inline train net param, possibly combined with one or more test nets.
             * </pre>
             */
            public Builder clearNetParam() {
                if (netParamBuilder_ == null) {
                    netParam_ = caffe.Loadcaffe.NetParameter.getDefaultInstance();
                    onChanged();
                } else {
                    netParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000002);
                return this;
            }
            /**
             * <code>optional .caffe.NetParameter net_param = 25;</code>
             *
             * <pre>
             * Inline train net param, possibly combined with one or more test nets.
             * </pre>
             */
            public caffe.Loadcaffe.NetParameter.Builder getNetParamBuilder() {
                bitField0_ |= 0x00000002;
                onChanged();
                return getNetParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.NetParameter net_param = 25;</code>
             *
             * <pre>
             * Inline train net param, possibly combined with one or more test nets.
             * </pre>
             */
            public caffe.Loadcaffe.NetParameterOrBuilder getNetParamOrBuilder() {
                if (netParamBuilder_ != null) {
                    return netParamBuilder_.getMessageOrBuilder();
                } else {
                    return netParam_;
                }
            }
            /**
             * <code>optional .caffe.NetParameter net_param = 25;</code>
             *
             * <pre>
             * Inline train net param, possibly combined with one or more test nets.
             * </pre>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.NetParameter, caffe.Loadcaffe.NetParameter.Builder, caffe.Loadcaffe.NetParameterOrBuilder>
            getNetParamFieldBuilder() {
                if (netParamBuilder_ == null) {
                    netParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.NetParameter, caffe.Loadcaffe.NetParameter.Builder, caffe.Loadcaffe.NetParameterOrBuilder>(
                            getNetParam(),
                            getParentForChildren(),
                            isClean());
                    netParam_ = null;
                }
                return netParamBuilder_;
            }

            private java.lang.Object trainNet_ = "";
            /**
             * <code>optional string train_net = 1;</code>
             *
             * <pre>
             * Proto filename for the train net.
             * </pre>
             */
            public boolean hasTrainNet() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional string train_net = 1;</code>
             *
             * <pre>
             * Proto filename for the train net.
             * </pre>
             */
            public java.lang.String getTrainNet() {
                java.lang.Object ref = trainNet_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        trainNet_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string train_net = 1;</code>
             *
             * <pre>
             * Proto filename for the train net.
             * </pre>
             */
            public com.google.protobuf.ByteString
            getTrainNetBytes() {
                java.lang.Object ref = trainNet_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    trainNet_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string train_net = 1;</code>
             *
             * <pre>
             * Proto filename for the train net.
             * </pre>
             */
            public Builder setTrainNet(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000004;
                trainNet_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string train_net = 1;</code>
             *
             * <pre>
             * Proto filename for the train net.
             * </pre>
             */
            public Builder clearTrainNet() {
                bitField0_ = (bitField0_ & ~0x00000004);
                trainNet_ = getDefaultInstance().getTrainNet();
                onChanged();
                return this;
            }
            /**
             * <code>optional string train_net = 1;</code>
             *
             * <pre>
             * Proto filename for the train net.
             * </pre>
             */
            public Builder setTrainNetBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000004;
                trainNet_ = value;
                onChanged();
                return this;
            }

            private com.google.protobuf.LazyStringList testNet_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            private void ensureTestNetIsMutable() {
                if (!((bitField0_ & 0x00000008) == 0x00000008)) {
                    testNet_ = new com.google.protobuf.LazyStringArrayList(testNet_);
                    bitField0_ |= 0x00000008;
                }
            }
            /**
             * <code>repeated string test_net = 2;</code>
             *
             * <pre>
             * Proto filenames for the test nets.
             * </pre>
             */
            public com.google.protobuf.ProtocolStringList
            getTestNetList() {
                return testNet_.getUnmodifiableView();
            }
            /**
             * <code>repeated string test_net = 2;</code>
             *
             * <pre>
             * Proto filenames for the test nets.
             * </pre>
             */
            public int getTestNetCount() {
                return testNet_.size();
            }
            /**
             * <code>repeated string test_net = 2;</code>
             *
             * <pre>
             * Proto filenames for the test nets.
             * </pre>
             */
            public java.lang.String getTestNet(int index) {
                return testNet_.get(index);
            }
            /**
             * <code>repeated string test_net = 2;</code>
             *
             * <pre>
             * Proto filenames for the test nets.
             * </pre>
             */
            public com.google.protobuf.ByteString
            getTestNetBytes(int index) {
                return testNet_.getByteString(index);
            }
            /**
             * <code>repeated string test_net = 2;</code>
             *
             * <pre>
             * Proto filenames for the test nets.
             * </pre>
             */
            public Builder setTestNet(
                    int index, java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureTestNetIsMutable();
                testNet_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string test_net = 2;</code>
             *
             * <pre>
             * Proto filenames for the test nets.
             * </pre>
             */
            public Builder addTestNet(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureTestNetIsMutable();
                testNet_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string test_net = 2;</code>
             *
             * <pre>
             * Proto filenames for the test nets.
             * </pre>
             */
            public Builder addAllTestNet(
                    java.lang.Iterable<java.lang.String> values) {
                ensureTestNetIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, testNet_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string test_net = 2;</code>
             *
             * <pre>
             * Proto filenames for the test nets.
             * </pre>
             */
            public Builder clearTestNet() {
                testNet_ = com.google.protobuf.LazyStringArrayList.EMPTY;
                bitField0_ = (bitField0_ & ~0x00000008);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string test_net = 2;</code>
             *
             * <pre>
             * Proto filenames for the test nets.
             * </pre>
             */
            public Builder addTestNetBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureTestNetIsMutable();
                testNet_.add(value);
                onChanged();
                return this;
            }

            private caffe.Loadcaffe.NetParameter trainNetParam_ = caffe.Loadcaffe.NetParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.NetParameter, caffe.Loadcaffe.NetParameter.Builder, caffe.Loadcaffe.NetParameterOrBuilder> trainNetParamBuilder_;
            /**
             * <code>optional .caffe.NetParameter train_net_param = 21;</code>
             *
             * <pre>
             * Inline train net params.
             * </pre>
             */
            public boolean hasTrainNetParam() {
                return ((bitField0_ & 0x00000010) == 0x00000010);
            }
            /**
             * <code>optional .caffe.NetParameter train_net_param = 21;</code>
             *
             * <pre>
             * Inline train net params.
             * </pre>
             */
            public caffe.Loadcaffe.NetParameter getTrainNetParam() {
                if (trainNetParamBuilder_ == null) {
                    return trainNetParam_;
                } else {
                    return trainNetParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.NetParameter train_net_param = 21;</code>
             *
             * <pre>
             * Inline train net params.
             * </pre>
             */
            public Builder setTrainNetParam(caffe.Loadcaffe.NetParameter value) {
                if (trainNetParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    trainNetParam_ = value;
                    onChanged();
                } else {
                    trainNetParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00000010;
                return this;
            }
            /**
             * <code>optional .caffe.NetParameter train_net_param = 21;</code>
             *
             * <pre>
             * Inline train net params.
             * </pre>
             */
            public Builder setTrainNetParam(
                    caffe.Loadcaffe.NetParameter.Builder builderForValue) {
                if (trainNetParamBuilder_ == null) {
                    trainNetParam_ = builderForValue.build();
                    onChanged();
                } else {
                    trainNetParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00000010;
                return this;
            }
            /**
             * <code>optional .caffe.NetParameter train_net_param = 21;</code>
             *
             * <pre>
             * Inline train net params.
             * </pre>
             */
            public Builder mergeTrainNetParam(caffe.Loadcaffe.NetParameter value) {
                if (trainNetParamBuilder_ == null) {
                    if (((bitField0_ & 0x00000010) == 0x00000010) &&
                            trainNetParam_ != caffe.Loadcaffe.NetParameter.getDefaultInstance()) {
                        trainNetParam_ =
                                caffe.Loadcaffe.NetParameter.newBuilder(trainNetParam_).mergeFrom(value).buildPartial();
                    } else {
                        trainNetParam_ = value;
                    }
                    onChanged();
                } else {
                    trainNetParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00000010;
                return this;
            }
            /**
             * <code>optional .caffe.NetParameter train_net_param = 21;</code>
             *
             * <pre>
             * Inline train net params.
             * </pre>
             */
            public Builder clearTrainNetParam() {
                if (trainNetParamBuilder_ == null) {
                    trainNetParam_ = caffe.Loadcaffe.NetParameter.getDefaultInstance();
                    onChanged();
                } else {
                    trainNetParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000010);
                return this;
            }
            /**
             * <code>optional .caffe.NetParameter train_net_param = 21;</code>
             *
             * <pre>
             * Inline train net params.
             * </pre>
             */
            public caffe.Loadcaffe.NetParameter.Builder getTrainNetParamBuilder() {
                bitField0_ |= 0x00000010;
                onChanged();
                return getTrainNetParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.NetParameter train_net_param = 21;</code>
             *
             * <pre>
             * Inline train net params.
             * </pre>
             */
            public caffe.Loadcaffe.NetParameterOrBuilder getTrainNetParamOrBuilder() {
                if (trainNetParamBuilder_ != null) {
                    return trainNetParamBuilder_.getMessageOrBuilder();
                } else {
                    return trainNetParam_;
                }
            }
            /**
             * <code>optional .caffe.NetParameter train_net_param = 21;</code>
             *
             * <pre>
             * Inline train net params.
             * </pre>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.NetParameter, caffe.Loadcaffe.NetParameter.Builder, caffe.Loadcaffe.NetParameterOrBuilder>
            getTrainNetParamFieldBuilder() {
                if (trainNetParamBuilder_ == null) {
                    trainNetParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.NetParameter, caffe.Loadcaffe.NetParameter.Builder, caffe.Loadcaffe.NetParameterOrBuilder>(
                            getTrainNetParam(),
                            getParentForChildren(),
                            isClean());
                    trainNetParam_ = null;
                }
                return trainNetParamBuilder_;
            }

            private java.util.List<caffe.Loadcaffe.NetParameter> testNetParam_ =
                    java.util.Collections.emptyList();
            private void ensureTestNetParamIsMutable() {
                if (!((bitField0_ & 0x00000020) == 0x00000020)) {
                    testNetParam_ = new java.util.ArrayList<caffe.Loadcaffe.NetParameter>(testNetParam_);
                    bitField0_ |= 0x00000020;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.NetParameter, caffe.Loadcaffe.NetParameter.Builder, caffe.Loadcaffe.NetParameterOrBuilder> testNetParamBuilder_;

            /**
             * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
             *
             * <pre>
             * Inline test net params.
             * </pre>
             */
            public java.util.List<caffe.Loadcaffe.NetParameter> getTestNetParamList() {
                if (testNetParamBuilder_ == null) {
                    return java.util.Collections.unmodifiableList(testNetParam_);
                } else {
                    return testNetParamBuilder_.getMessageList();
                }
            }
            /**
             * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
             *
             * <pre>
             * Inline test net params.
             * </pre>
             */
            public int getTestNetParamCount() {
                if (testNetParamBuilder_ == null) {
                    return testNetParam_.size();
                } else {
                    return testNetParamBuilder_.getCount();
                }
            }
            /**
             * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
             *
             * <pre>
             * Inline test net params.
             * </pre>
             */
            public caffe.Loadcaffe.NetParameter getTestNetParam(int index) {
                if (testNetParamBuilder_ == null) {
                    return testNetParam_.get(index);
                } else {
                    return testNetParamBuilder_.getMessage(index);
                }
            }
            /**
             * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
             *
             * <pre>
             * Inline test net params.
             * </pre>
             */
            public Builder setTestNetParam(
                    int index, caffe.Loadcaffe.NetParameter value) {
                if (testNetParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureTestNetParamIsMutable();
                    testNetParam_.set(index, value);
                    onChanged();
                } else {
                    testNetParamBuilder_.setMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
             *
             * <pre>
             * Inline test net params.
             * </pre>
             */
            public Builder setTestNetParam(
                    int index, caffe.Loadcaffe.NetParameter.Builder builderForValue) {
                if (testNetParamBuilder_ == null) {
                    ensureTestNetParamIsMutable();
                    testNetParam_.set(index, builderForValue.build());
                    onChanged();
                } else {
                    testNetParamBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
             *
             * <pre>
             * Inline test net params.
             * </pre>
             */
            public Builder addTestNetParam(caffe.Loadcaffe.NetParameter value) {
                if (testNetParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureTestNetParamIsMutable();
                    testNetParam_.add(value);
                    onChanged();
                } else {
                    testNetParamBuilder_.addMessage(value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
             *
             * <pre>
             * Inline test net params.
             * </pre>
             */
            public Builder addTestNetParam(
                    int index, caffe.Loadcaffe.NetParameter value) {
                if (testNetParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureTestNetParamIsMutable();
                    testNetParam_.add(index, value);
                    onChanged();
                } else {
                    testNetParamBuilder_.addMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
             *
             * <pre>
             * Inline test net params.
             * </pre>
             */
            public Builder addTestNetParam(
                    caffe.Loadcaffe.NetParameter.Builder builderForValue) {
                if (testNetParamBuilder_ == null) {
                    ensureTestNetParamIsMutable();
                    testNetParam_.add(builderForValue.build());
                    onChanged();
                } else {
                    testNetParamBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
             *
             * <pre>
             * Inline test net params.
             * </pre>
             */
            public Builder addTestNetParam(
                    int index, caffe.Loadcaffe.NetParameter.Builder builderForValue) {
                if (testNetParamBuilder_ == null) {
                    ensureTestNetParamIsMutable();
                    testNetParam_.add(index, builderForValue.build());
                    onChanged();
                } else {
                    testNetParamBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
             *
             * <pre>
             * Inline test net params.
             * </pre>
             */
            public Builder addAllTestNetParam(
                    java.lang.Iterable<? extends caffe.Loadcaffe.NetParameter> values) {
                if (testNetParamBuilder_ == null) {
                    ensureTestNetParamIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(
                            values, testNetParam_);
                    onChanged();
                } else {
                    testNetParamBuilder_.addAllMessages(values);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
             *
             * <pre>
             * Inline test net params.
             * </pre>
             */
            public Builder clearTestNetParam() {
                if (testNetParamBuilder_ == null) {
                    testNetParam_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000020);
                    onChanged();
                } else {
                    testNetParamBuilder_.clear();
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
             *
             * <pre>
             * Inline test net params.
             * </pre>
             */
            public Builder removeTestNetParam(int index) {
                if (testNetParamBuilder_ == null) {
                    ensureTestNetParamIsMutable();
                    testNetParam_.remove(index);
                    onChanged();
                } else {
                    testNetParamBuilder_.remove(index);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
             *
             * <pre>
             * Inline test net params.
             * </pre>
             */
            public caffe.Loadcaffe.NetParameter.Builder getTestNetParamBuilder(
                    int index) {
                return getTestNetParamFieldBuilder().getBuilder(index);
            }
            /**
             * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
             *
             * <pre>
             * Inline test net params.
             * </pre>
             */
            public caffe.Loadcaffe.NetParameterOrBuilder getTestNetParamOrBuilder(
                    int index) {
                if (testNetParamBuilder_ == null) {
                    return testNetParam_.get(index);  } else {
                    return testNetParamBuilder_.getMessageOrBuilder(index);
                }
            }
            /**
             * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
             *
             * <pre>
             * Inline test net params.
             * </pre>
             */
            public java.util.List<? extends caffe.Loadcaffe.NetParameterOrBuilder>
            getTestNetParamOrBuilderList() {
                if (testNetParamBuilder_ != null) {
                    return testNetParamBuilder_.getMessageOrBuilderList();
                } else {
                    return java.util.Collections.unmodifiableList(testNetParam_);
                }
            }
            /**
             * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
             *
             * <pre>
             * Inline test net params.
             * </pre>
             */
            public caffe.Loadcaffe.NetParameter.Builder addTestNetParamBuilder() {
                return getTestNetParamFieldBuilder().addBuilder(
                        caffe.Loadcaffe.NetParameter.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
             *
             * <pre>
             * Inline test net params.
             * </pre>
             */
            public caffe.Loadcaffe.NetParameter.Builder addTestNetParamBuilder(
                    int index) {
                return getTestNetParamFieldBuilder().addBuilder(
                        index, caffe.Loadcaffe.NetParameter.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.NetParameter test_net_param = 22;</code>
             *
             * <pre>
             * Inline test net params.
             * </pre>
             */
            public java.util.List<caffe.Loadcaffe.NetParameter.Builder>
            getTestNetParamBuilderList() {
                return getTestNetParamFieldBuilder().getBuilderList();
            }
            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.NetParameter, caffe.Loadcaffe.NetParameter.Builder, caffe.Loadcaffe.NetParameterOrBuilder>
            getTestNetParamFieldBuilder() {
                if (testNetParamBuilder_ == null) {
                    testNetParamBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            caffe.Loadcaffe.NetParameter, caffe.Loadcaffe.NetParameter.Builder, caffe.Loadcaffe.NetParameterOrBuilder>(
                            testNetParam_,
                            ((bitField0_ & 0x00000020) == 0x00000020),
                            getParentForChildren(),
                            isClean());
                    testNetParam_ = null;
                }
                return testNetParamBuilder_;
            }

            private caffe.Loadcaffe.NetState trainState_ = caffe.Loadcaffe.NetState.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.NetState, caffe.Loadcaffe.NetState.Builder, caffe.Loadcaffe.NetStateOrBuilder> trainStateBuilder_;
            /**
             * <code>optional .caffe.NetState train_state = 26;</code>
             *
             * <pre>
             * The states for the train/test nets. Must be unspecified or
             * specified once per net.
             * By default, all states will have solver = true;
             * train_state will have phase = TRAIN,
             * and all test_state's will have phase = TEST.
             * Other defaults are set according to the NetState defaults.
             * </pre>
             */
            public boolean hasTrainState() {
                return ((bitField0_ & 0x00000040) == 0x00000040);
            }
            /**
             * <code>optional .caffe.NetState train_state = 26;</code>
             *
             * <pre>
             * The states for the train/test nets. Must be unspecified or
             * specified once per net.
             * By default, all states will have solver = true;
             * train_state will have phase = TRAIN,
             * and all test_state's will have phase = TEST.
             * Other defaults are set according to the NetState defaults.
             * </pre>
             */
            public caffe.Loadcaffe.NetState getTrainState() {
                if (trainStateBuilder_ == null) {
                    return trainState_;
                } else {
                    return trainStateBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.NetState train_state = 26;</code>
             *
             * <pre>
             * The states for the train/test nets. Must be unspecified or
             * specified once per net.
             * By default, all states will have solver = true;
             * train_state will have phase = TRAIN,
             * and all test_state's will have phase = TEST.
             * Other defaults are set according to the NetState defaults.
             * </pre>
             */
            public Builder setTrainState(caffe.Loadcaffe.NetState value) {
                if (trainStateBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    trainState_ = value;
                    onChanged();
                } else {
                    trainStateBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00000040;
                return this;
            }
            /**
             * <code>optional .caffe.NetState train_state = 26;</code>
             *
             * <pre>
             * The states for the train/test nets. Must be unspecified or
             * specified once per net.
             * By default, all states will have solver = true;
             * train_state will have phase = TRAIN,
             * and all test_state's will have phase = TEST.
             * Other defaults are set according to the NetState defaults.
             * </pre>
             */
            public Builder setTrainState(
                    caffe.Loadcaffe.NetState.Builder builderForValue) {
                if (trainStateBuilder_ == null) {
                    trainState_ = builderForValue.build();
                    onChanged();
                } else {
                    trainStateBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00000040;
                return this;
            }
            /**
             * <code>optional .caffe.NetState train_state = 26;</code>
             *
             * <pre>
             * The states for the train/test nets. Must be unspecified or
             * specified once per net.
             * By default, all states will have solver = true;
             * train_state will have phase = TRAIN,
             * and all test_state's will have phase = TEST.
             * Other defaults are set according to the NetState defaults.
             * </pre>
             */
            public Builder mergeTrainState(caffe.Loadcaffe.NetState value) {
                if (trainStateBuilder_ == null) {
                    if (((bitField0_ & 0x00000040) == 0x00000040) &&
                            trainState_ != caffe.Loadcaffe.NetState.getDefaultInstance()) {
                        trainState_ =
                                caffe.Loadcaffe.NetState.newBuilder(trainState_).mergeFrom(value).buildPartial();
                    } else {
                        trainState_ = value;
                    }
                    onChanged();
                } else {
                    trainStateBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00000040;
                return this;
            }
            /**
             * <code>optional .caffe.NetState train_state = 26;</code>
             *
             * <pre>
             * The states for the train/test nets. Must be unspecified or
             * specified once per net.
             * By default, all states will have solver = true;
             * train_state will have phase = TRAIN,
             * and all test_state's will have phase = TEST.
             * Other defaults are set according to the NetState defaults.
             * </pre>
             */
            public Builder clearTrainState() {
                if (trainStateBuilder_ == null) {
                    trainState_ = caffe.Loadcaffe.NetState.getDefaultInstance();
                    onChanged();
                } else {
                    trainStateBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000040);
                return this;
            }
            /**
             * <code>optional .caffe.NetState train_state = 26;</code>
             *
             * <pre>
             * The states for the train/test nets. Must be unspecified or
             * specified once per net.
             * By default, all states will have solver = true;
             * train_state will have phase = TRAIN,
             * and all test_state's will have phase = TEST.
             * Other defaults are set according to the NetState defaults.
             * </pre>
             */
            public caffe.Loadcaffe.NetState.Builder getTrainStateBuilder() {
                bitField0_ |= 0x00000040;
                onChanged();
                return getTrainStateFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.NetState train_state = 26;</code>
             *
             * <pre>
             * The states for the train/test nets. Must be unspecified or
             * specified once per net.
             * By default, all states will have solver = true;
             * train_state will have phase = TRAIN,
             * and all test_state's will have phase = TEST.
             * Other defaults are set according to the NetState defaults.
             * </pre>
             */
            public caffe.Loadcaffe.NetStateOrBuilder getTrainStateOrBuilder() {
                if (trainStateBuilder_ != null) {
                    return trainStateBuilder_.getMessageOrBuilder();
                } else {
                    return trainState_;
                }
            }
            /**
             * <code>optional .caffe.NetState train_state = 26;</code>
             *
             * <pre>
             * The states for the train/test nets. Must be unspecified or
             * specified once per net.
             * By default, all states will have solver = true;
             * train_state will have phase = TRAIN,
             * and all test_state's will have phase = TEST.
             * Other defaults are set according to the NetState defaults.
             * </pre>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.NetState, caffe.Loadcaffe.NetState.Builder, caffe.Loadcaffe.NetStateOrBuilder>
            getTrainStateFieldBuilder() {
                if (trainStateBuilder_ == null) {
                    trainStateBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.NetState, caffe.Loadcaffe.NetState.Builder, caffe.Loadcaffe.NetStateOrBuilder>(
                            getTrainState(),
                            getParentForChildren(),
                            isClean());
                    trainState_ = null;
                }
                return trainStateBuilder_;
            }

            private java.util.List<caffe.Loadcaffe.NetState> testState_ =
                    java.util.Collections.emptyList();
            private void ensureTestStateIsMutable() {
                if (!((bitField0_ & 0x00000080) == 0x00000080)) {
                    testState_ = new java.util.ArrayList<caffe.Loadcaffe.NetState>(testState_);
                    bitField0_ |= 0x00000080;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.NetState, caffe.Loadcaffe.NetState.Builder, caffe.Loadcaffe.NetStateOrBuilder> testStateBuilder_;

            /**
             * <code>repeated .caffe.NetState test_state = 27;</code>
             */
            public java.util.List<caffe.Loadcaffe.NetState> getTestStateList() {
                if (testStateBuilder_ == null) {
                    return java.util.Collections.unmodifiableList(testState_);
                } else {
                    return testStateBuilder_.getMessageList();
                }
            }
            /**
             * <code>repeated .caffe.NetState test_state = 27;</code>
             */
            public int getTestStateCount() {
                if (testStateBuilder_ == null) {
                    return testState_.size();
                } else {
                    return testStateBuilder_.getCount();
                }
            }
            /**
             * <code>repeated .caffe.NetState test_state = 27;</code>
             */
            public caffe.Loadcaffe.NetState getTestState(int index) {
                if (testStateBuilder_ == null) {
                    return testState_.get(index);
                } else {
                    return testStateBuilder_.getMessage(index);
                }
            }
            /**
             * <code>repeated .caffe.NetState test_state = 27;</code>
             */
            public Builder setTestState(
                    int index, caffe.Loadcaffe.NetState value) {
                if (testStateBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureTestStateIsMutable();
                    testState_.set(index, value);
                    onChanged();
                } else {
                    testStateBuilder_.setMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetState test_state = 27;</code>
             */
            public Builder setTestState(
                    int index, caffe.Loadcaffe.NetState.Builder builderForValue) {
                if (testStateBuilder_ == null) {
                    ensureTestStateIsMutable();
                    testState_.set(index, builderForValue.build());
                    onChanged();
                } else {
                    testStateBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetState test_state = 27;</code>
             */
            public Builder addTestState(caffe.Loadcaffe.NetState value) {
                if (testStateBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureTestStateIsMutable();
                    testState_.add(value);
                    onChanged();
                } else {
                    testStateBuilder_.addMessage(value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetState test_state = 27;</code>
             */
            public Builder addTestState(
                    int index, caffe.Loadcaffe.NetState value) {
                if (testStateBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureTestStateIsMutable();
                    testState_.add(index, value);
                    onChanged();
                } else {
                    testStateBuilder_.addMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetState test_state = 27;</code>
             */
            public Builder addTestState(
                    caffe.Loadcaffe.NetState.Builder builderForValue) {
                if (testStateBuilder_ == null) {
                    ensureTestStateIsMutable();
                    testState_.add(builderForValue.build());
                    onChanged();
                } else {
                    testStateBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetState test_state = 27;</code>
             */
            public Builder addTestState(
                    int index, caffe.Loadcaffe.NetState.Builder builderForValue) {
                if (testStateBuilder_ == null) {
                    ensureTestStateIsMutable();
                    testState_.add(index, builderForValue.build());
                    onChanged();
                } else {
                    testStateBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetState test_state = 27;</code>
             */
            public Builder addAllTestState(
                    java.lang.Iterable<? extends caffe.Loadcaffe.NetState> values) {
                if (testStateBuilder_ == null) {
                    ensureTestStateIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(
                            values, testState_);
                    onChanged();
                } else {
                    testStateBuilder_.addAllMessages(values);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetState test_state = 27;</code>
             */
            public Builder clearTestState() {
                if (testStateBuilder_ == null) {
                    testState_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000080);
                    onChanged();
                } else {
                    testStateBuilder_.clear();
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetState test_state = 27;</code>
             */
            public Builder removeTestState(int index) {
                if (testStateBuilder_ == null) {
                    ensureTestStateIsMutable();
                    testState_.remove(index);
                    onChanged();
                } else {
                    testStateBuilder_.remove(index);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetState test_state = 27;</code>
             */
            public caffe.Loadcaffe.NetState.Builder getTestStateBuilder(
                    int index) {
                return getTestStateFieldBuilder().getBuilder(index);
            }
            /**
             * <code>repeated .caffe.NetState test_state = 27;</code>
             */
            public caffe.Loadcaffe.NetStateOrBuilder getTestStateOrBuilder(
                    int index) {
                if (testStateBuilder_ == null) {
                    return testState_.get(index);  } else {
                    return testStateBuilder_.getMessageOrBuilder(index);
                }
            }
            /**
             * <code>repeated .caffe.NetState test_state = 27;</code>
             */
            public java.util.List<? extends caffe.Loadcaffe.NetStateOrBuilder>
            getTestStateOrBuilderList() {
                if (testStateBuilder_ != null) {
                    return testStateBuilder_.getMessageOrBuilderList();
                } else {
                    return java.util.Collections.unmodifiableList(testState_);
                }
            }
            /**
             * <code>repeated .caffe.NetState test_state = 27;</code>
             */
            public caffe.Loadcaffe.NetState.Builder addTestStateBuilder() {
                return getTestStateFieldBuilder().addBuilder(
                        caffe.Loadcaffe.NetState.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.NetState test_state = 27;</code>
             */
            public caffe.Loadcaffe.NetState.Builder addTestStateBuilder(
                    int index) {
                return getTestStateFieldBuilder().addBuilder(
                        index, caffe.Loadcaffe.NetState.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.NetState test_state = 27;</code>
             */
            public java.util.List<caffe.Loadcaffe.NetState.Builder>
            getTestStateBuilderList() {
                return getTestStateFieldBuilder().getBuilderList();
            }
            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.NetState, caffe.Loadcaffe.NetState.Builder, caffe.Loadcaffe.NetStateOrBuilder>
            getTestStateFieldBuilder() {
                if (testStateBuilder_ == null) {
                    testStateBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            caffe.Loadcaffe.NetState, caffe.Loadcaffe.NetState.Builder, caffe.Loadcaffe.NetStateOrBuilder>(
                            testState_,
                            ((bitField0_ & 0x00000080) == 0x00000080),
                            getParentForChildren(),
                            isClean());
                    testState_ = null;
                }
                return testStateBuilder_;
            }

            private java.util.List<java.lang.Integer> testIter_ = java.util.Collections.emptyList();
            private void ensureTestIterIsMutable() {
                if (!((bitField0_ & 0x00000100) == 0x00000100)) {
                    testIter_ = new java.util.ArrayList<java.lang.Integer>(testIter_);
                    bitField0_ |= 0x00000100;
                }
            }
            /**
             * <code>repeated int32 test_iter = 3;</code>
             *
             * <pre>
             * The number of iterations for each test net.
             * </pre>
             */
            public java.util.List<java.lang.Integer>
            getTestIterList() {
                return java.util.Collections.unmodifiableList(testIter_);
            }
            /**
             * <code>repeated int32 test_iter = 3;</code>
             *
             * <pre>
             * The number of iterations for each test net.
             * </pre>
             */
            public int getTestIterCount() {
                return testIter_.size();
            }
            /**
             * <code>repeated int32 test_iter = 3;</code>
             *
             * <pre>
             * The number of iterations for each test net.
             * </pre>
             */
            public int getTestIter(int index) {
                return testIter_.get(index);
            }
            /**
             * <code>repeated int32 test_iter = 3;</code>
             *
             * <pre>
             * The number of iterations for each test net.
             * </pre>
             */
            public Builder setTestIter(
                    int index, int value) {
                ensureTestIterIsMutable();
                testIter_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated int32 test_iter = 3;</code>
             *
             * <pre>
             * The number of iterations for each test net.
             * </pre>
             */
            public Builder addTestIter(int value) {
                ensureTestIterIsMutable();
                testIter_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated int32 test_iter = 3;</code>
             *
             * <pre>
             * The number of iterations for each test net.
             * </pre>
             */
            public Builder addAllTestIter(
                    java.lang.Iterable<? extends java.lang.Integer> values) {
                ensureTestIterIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, testIter_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated int32 test_iter = 3;</code>
             *
             * <pre>
             * The number of iterations for each test net.
             * </pre>
             */
            public Builder clearTestIter() {
                testIter_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000100);
                onChanged();
                return this;
            }

            private int testInterval_ ;
            /**
             * <code>optional int32 test_interval = 4 [default = 0];</code>
             *
             * <pre>
             * The number of iterations between two testing phases.
             * </pre>
             */
            public boolean hasTestInterval() {
                return ((bitField0_ & 0x00000200) == 0x00000200);
            }
            /**
             * <code>optional int32 test_interval = 4 [default = 0];</code>
             *
             * <pre>
             * The number of iterations between two testing phases.
             * </pre>
             */
            public int getTestInterval() {
                return testInterval_;
            }
            /**
             * <code>optional int32 test_interval = 4 [default = 0];</code>
             *
             * <pre>
             * The number of iterations between two testing phases.
             * </pre>
             */
            public Builder setTestInterval(int value) {
                bitField0_ |= 0x00000200;
                testInterval_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 test_interval = 4 [default = 0];</code>
             *
             * <pre>
             * The number of iterations between two testing phases.
             * </pre>
             */
            public Builder clearTestInterval() {
                bitField0_ = (bitField0_ & ~0x00000200);
                testInterval_ = 0;
                onChanged();
                return this;
            }

            private boolean testComputeLoss_ ;
            /**
             * <code>optional bool test_compute_loss = 19 [default = false];</code>
             */
            public boolean hasTestComputeLoss() {
                return ((bitField0_ & 0x00000400) == 0x00000400);
            }
            /**
             * <code>optional bool test_compute_loss = 19 [default = false];</code>
             */
            public boolean getTestComputeLoss() {
                return testComputeLoss_;
            }
            /**
             * <code>optional bool test_compute_loss = 19 [default = false];</code>
             */
            public Builder setTestComputeLoss(boolean value) {
                bitField0_ |= 0x00000400;
                testComputeLoss_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool test_compute_loss = 19 [default = false];</code>
             */
            public Builder clearTestComputeLoss() {
                bitField0_ = (bitField0_ & ~0x00000400);
                testComputeLoss_ = false;
                onChanged();
                return this;
            }

            private boolean testInitialization_ = true;
            /**
             * <code>optional bool test_initialization = 32 [default = true];</code>
             *
             * <pre>
             * If true, run an initial test pass before the first iteration,
             * ensuring memory availability and printing the starting value of the loss.
             * </pre>
             */
            public boolean hasTestInitialization() {
                return ((bitField0_ & 0x00000800) == 0x00000800);
            }
            /**
             * <code>optional bool test_initialization = 32 [default = true];</code>
             *
             * <pre>
             * If true, run an initial test pass before the first iteration,
             * ensuring memory availability and printing the starting value of the loss.
             * </pre>
             */
            public boolean getTestInitialization() {
                return testInitialization_;
            }
            /**
             * <code>optional bool test_initialization = 32 [default = true];</code>
             *
             * <pre>
             * If true, run an initial test pass before the first iteration,
             * ensuring memory availability and printing the starting value of the loss.
             * </pre>
             */
            public Builder setTestInitialization(boolean value) {
                bitField0_ |= 0x00000800;
                testInitialization_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool test_initialization = 32 [default = true];</code>
             *
             * <pre>
             * If true, run an initial test pass before the first iteration,
             * ensuring memory availability and printing the starting value of the loss.
             * </pre>
             */
            public Builder clearTestInitialization() {
                bitField0_ = (bitField0_ & ~0x00000800);
                testInitialization_ = true;
                onChanged();
                return this;
            }

            private float baseLr_ ;
            /**
             * <code>optional float base_lr = 5;</code>
             *
             * <pre>
             * The base learning rate
             * </pre>
             */
            public boolean hasBaseLr() {
                return ((bitField0_ & 0x00001000) == 0x00001000);
            }
            /**
             * <code>optional float base_lr = 5;</code>
             *
             * <pre>
             * The base learning rate
             * </pre>
             */
            public float getBaseLr() {
                return baseLr_;
            }
            /**
             * <code>optional float base_lr = 5;</code>
             *
             * <pre>
             * The base learning rate
             * </pre>
             */
            public Builder setBaseLr(float value) {
                bitField0_ |= 0x00001000;
                baseLr_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float base_lr = 5;</code>
             *
             * <pre>
             * The base learning rate
             * </pre>
             */
            public Builder clearBaseLr() {
                bitField0_ = (bitField0_ & ~0x00001000);
                baseLr_ = 0F;
                onChanged();
                return this;
            }

            private int display_ ;
            /**
             * <code>optional int32 display = 6;</code>
             *
             * <pre>
             * the number of iterations between displaying info. If display = 0, no info
             * will be displayed.
             * </pre>
             */
            public boolean hasDisplay() {
                return ((bitField0_ & 0x00002000) == 0x00002000);
            }
            /**
             * <code>optional int32 display = 6;</code>
             *
             * <pre>
             * the number of iterations between displaying info. If display = 0, no info
             * will be displayed.
             * </pre>
             */
            public int getDisplay() {
                return display_;
            }
            /**
             * <code>optional int32 display = 6;</code>
             *
             * <pre>
             * the number of iterations between displaying info. If display = 0, no info
             * will be displayed.
             * </pre>
             */
            public Builder setDisplay(int value) {
                bitField0_ |= 0x00002000;
                display_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 display = 6;</code>
             *
             * <pre>
             * the number of iterations between displaying info. If display = 0, no info
             * will be displayed.
             * </pre>
             */
            public Builder clearDisplay() {
                bitField0_ = (bitField0_ & ~0x00002000);
                display_ = 0;
                onChanged();
                return this;
            }

            private int averageLoss_ = 1;
            /**
             * <code>optional int32 average_loss = 33 [default = 1];</code>
             *
             * <pre>
             * Display the loss averaged over the last average_loss iterations
             * </pre>
             */
            public boolean hasAverageLoss() {
                return ((bitField0_ & 0x00004000) == 0x00004000);
            }
            /**
             * <code>optional int32 average_loss = 33 [default = 1];</code>
             *
             * <pre>
             * Display the loss averaged over the last average_loss iterations
             * </pre>
             */
            public int getAverageLoss() {
                return averageLoss_;
            }
            /**
             * <code>optional int32 average_loss = 33 [default = 1];</code>
             *
             * <pre>
             * Display the loss averaged over the last average_loss iterations
             * </pre>
             */
            public Builder setAverageLoss(int value) {
                bitField0_ |= 0x00004000;
                averageLoss_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 average_loss = 33 [default = 1];</code>
             *
             * <pre>
             * Display the loss averaged over the last average_loss iterations
             * </pre>
             */
            public Builder clearAverageLoss() {
                bitField0_ = (bitField0_ & ~0x00004000);
                averageLoss_ = 1;
                onChanged();
                return this;
            }

            private int maxIter_ ;
            /**
             * <code>optional int32 max_iter = 7;</code>
             *
             * <pre>
             * the maximum number of iterations
             * </pre>
             */
            public boolean hasMaxIter() {
                return ((bitField0_ & 0x00008000) == 0x00008000);
            }
            /**
             * <code>optional int32 max_iter = 7;</code>
             *
             * <pre>
             * the maximum number of iterations
             * </pre>
             */
            public int getMaxIter() {
                return maxIter_;
            }
            /**
             * <code>optional int32 max_iter = 7;</code>
             *
             * <pre>
             * the maximum number of iterations
             * </pre>
             */
            public Builder setMaxIter(int value) {
                bitField0_ |= 0x00008000;
                maxIter_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 max_iter = 7;</code>
             *
             * <pre>
             * the maximum number of iterations
             * </pre>
             */
            public Builder clearMaxIter() {
                bitField0_ = (bitField0_ & ~0x00008000);
                maxIter_ = 0;
                onChanged();
                return this;
            }

            private java.lang.Object lrPolicy_ = "";
            /**
             * <code>optional string lr_policy = 8;</code>
             *
             * <pre>
             * The learning rate decay policy.
             * </pre>
             */
            public boolean hasLrPolicy() {
                return ((bitField0_ & 0x00010000) == 0x00010000);
            }
            /**
             * <code>optional string lr_policy = 8;</code>
             *
             * <pre>
             * The learning rate decay policy.
             * </pre>
             */
            public java.lang.String getLrPolicy() {
                java.lang.Object ref = lrPolicy_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        lrPolicy_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string lr_policy = 8;</code>
             *
             * <pre>
             * The learning rate decay policy.
             * </pre>
             */
            public com.google.protobuf.ByteString
            getLrPolicyBytes() {
                java.lang.Object ref = lrPolicy_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    lrPolicy_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string lr_policy = 8;</code>
             *
             * <pre>
             * The learning rate decay policy.
             * </pre>
             */
            public Builder setLrPolicy(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00010000;
                lrPolicy_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string lr_policy = 8;</code>
             *
             * <pre>
             * The learning rate decay policy.
             * </pre>
             */
            public Builder clearLrPolicy() {
                bitField0_ = (bitField0_ & ~0x00010000);
                lrPolicy_ = getDefaultInstance().getLrPolicy();
                onChanged();
                return this;
            }
            /**
             * <code>optional string lr_policy = 8;</code>
             *
             * <pre>
             * The learning rate decay policy.
             * </pre>
             */
            public Builder setLrPolicyBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00010000;
                lrPolicy_ = value;
                onChanged();
                return this;
            }

            private float gamma_ ;
            /**
             * <code>optional float gamma = 9;</code>
             *
             * <pre>
             * The parameter to compute the learning rate.
             * </pre>
             */
            public boolean hasGamma() {
                return ((bitField0_ & 0x00020000) == 0x00020000);
            }
            /**
             * <code>optional float gamma = 9;</code>
             *
             * <pre>
             * The parameter to compute the learning rate.
             * </pre>
             */
            public float getGamma() {
                return gamma_;
            }
            /**
             * <code>optional float gamma = 9;</code>
             *
             * <pre>
             * The parameter to compute the learning rate.
             * </pre>
             */
            public Builder setGamma(float value) {
                bitField0_ |= 0x00020000;
                gamma_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float gamma = 9;</code>
             *
             * <pre>
             * The parameter to compute the learning rate.
             * </pre>
             */
            public Builder clearGamma() {
                bitField0_ = (bitField0_ & ~0x00020000);
                gamma_ = 0F;
                onChanged();
                return this;
            }

            private float power_ ;
            /**
             * <code>optional float power = 10;</code>
             *
             * <pre>
             * The parameter to compute the learning rate.
             * </pre>
             */
            public boolean hasPower() {
                return ((bitField0_ & 0x00040000) == 0x00040000);
            }
            /**
             * <code>optional float power = 10;</code>
             *
             * <pre>
             * The parameter to compute the learning rate.
             * </pre>
             */
            public float getPower() {
                return power_;
            }
            /**
             * <code>optional float power = 10;</code>
             *
             * <pre>
             * The parameter to compute the learning rate.
             * </pre>
             */
            public Builder setPower(float value) {
                bitField0_ |= 0x00040000;
                power_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float power = 10;</code>
             *
             * <pre>
             * The parameter to compute the learning rate.
             * </pre>
             */
            public Builder clearPower() {
                bitField0_ = (bitField0_ & ~0x00040000);
                power_ = 0F;
                onChanged();
                return this;
            }

            private float momentum_ ;
            /**
             * <code>optional float momentum = 11;</code>
             *
             * <pre>
             * The momentum value.
             * </pre>
             */
            public boolean hasMomentum() {
                return ((bitField0_ & 0x00080000) == 0x00080000);
            }
            /**
             * <code>optional float momentum = 11;</code>
             *
             * <pre>
             * The momentum value.
             * </pre>
             */
            public float getMomentum() {
                return momentum_;
            }
            /**
             * <code>optional float momentum = 11;</code>
             *
             * <pre>
             * The momentum value.
             * </pre>
             */
            public Builder setMomentum(float value) {
                bitField0_ |= 0x00080000;
                momentum_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float momentum = 11;</code>
             *
             * <pre>
             * The momentum value.
             * </pre>
             */
            public Builder clearMomentum() {
                bitField0_ = (bitField0_ & ~0x00080000);
                momentum_ = 0F;
                onChanged();
                return this;
            }

            private float weightDecay_ ;
            /**
             * <code>optional float weight_decay = 12;</code>
             *
             * <pre>
             * The weight decay.
             * </pre>
             */
            public boolean hasWeightDecay() {
                return ((bitField0_ & 0x00100000) == 0x00100000);
            }
            /**
             * <code>optional float weight_decay = 12;</code>
             *
             * <pre>
             * The weight decay.
             * </pre>
             */
            public float getWeightDecay() {
                return weightDecay_;
            }
            /**
             * <code>optional float weight_decay = 12;</code>
             *
             * <pre>
             * The weight decay.
             * </pre>
             */
            public Builder setWeightDecay(float value) {
                bitField0_ |= 0x00100000;
                weightDecay_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float weight_decay = 12;</code>
             *
             * <pre>
             * The weight decay.
             * </pre>
             */
            public Builder clearWeightDecay() {
                bitField0_ = (bitField0_ & ~0x00100000);
                weightDecay_ = 0F;
                onChanged();
                return this;
            }

            private java.lang.Object regularizationType_ = "L2";
            /**
             * <code>optional string regularization_type = 29 [default = "L2"];</code>
             *
             * <pre>
             * regularization types supported: L1 and L2
             * controlled by weight_decay
             * </pre>
             */
            public boolean hasRegularizationType() {
                return ((bitField0_ & 0x00200000) == 0x00200000);
            }
            /**
             * <code>optional string regularization_type = 29 [default = "L2"];</code>
             *
             * <pre>
             * regularization types supported: L1 and L2
             * controlled by weight_decay
             * </pre>
             */
            public java.lang.String getRegularizationType() {
                java.lang.Object ref = regularizationType_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        regularizationType_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string regularization_type = 29 [default = "L2"];</code>
             *
             * <pre>
             * regularization types supported: L1 and L2
             * controlled by weight_decay
             * </pre>
             */
            public com.google.protobuf.ByteString
            getRegularizationTypeBytes() {
                java.lang.Object ref = regularizationType_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    regularizationType_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string regularization_type = 29 [default = "L2"];</code>
             *
             * <pre>
             * regularization types supported: L1 and L2
             * controlled by weight_decay
             * </pre>
             */
            public Builder setRegularizationType(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00200000;
                regularizationType_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string regularization_type = 29 [default = "L2"];</code>
             *
             * <pre>
             * regularization types supported: L1 and L2
             * controlled by weight_decay
             * </pre>
             */
            public Builder clearRegularizationType() {
                bitField0_ = (bitField0_ & ~0x00200000);
                regularizationType_ = getDefaultInstance().getRegularizationType();
                onChanged();
                return this;
            }
            /**
             * <code>optional string regularization_type = 29 [default = "L2"];</code>
             *
             * <pre>
             * regularization types supported: L1 and L2
             * controlled by weight_decay
             * </pre>
             */
            public Builder setRegularizationTypeBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00200000;
                regularizationType_ = value;
                onChanged();
                return this;
            }

            private int stepsize_ ;
            /**
             * <code>optional int32 stepsize = 13;</code>
             *
             * <pre>
             * the stepsize for learning rate policy "step"
             * </pre>
             */
            public boolean hasStepsize() {
                return ((bitField0_ & 0x00400000) == 0x00400000);
            }
            /**
             * <code>optional int32 stepsize = 13;</code>
             *
             * <pre>
             * the stepsize for learning rate policy "step"
             * </pre>
             */
            public int getStepsize() {
                return stepsize_;
            }
            /**
             * <code>optional int32 stepsize = 13;</code>
             *
             * <pre>
             * the stepsize for learning rate policy "step"
             * </pre>
             */
            public Builder setStepsize(int value) {
                bitField0_ |= 0x00400000;
                stepsize_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 stepsize = 13;</code>
             *
             * <pre>
             * the stepsize for learning rate policy "step"
             * </pre>
             */
            public Builder clearStepsize() {
                bitField0_ = (bitField0_ & ~0x00400000);
                stepsize_ = 0;
                onChanged();
                return this;
            }

            private java.util.List<java.lang.Integer> stepvalue_ = java.util.Collections.emptyList();
            private void ensureStepvalueIsMutable() {
                if (!((bitField0_ & 0x00800000) == 0x00800000)) {
                    stepvalue_ = new java.util.ArrayList<java.lang.Integer>(stepvalue_);
                    bitField0_ |= 0x00800000;
                }
            }
            /**
             * <code>repeated int32 stepvalue = 34;</code>
             *
             * <pre>
             * the stepsize for learning rate policy "multistep"
             * </pre>
             */
            public java.util.List<java.lang.Integer>
            getStepvalueList() {
                return java.util.Collections.unmodifiableList(stepvalue_);
            }
            /**
             * <code>repeated int32 stepvalue = 34;</code>
             *
             * <pre>
             * the stepsize for learning rate policy "multistep"
             * </pre>
             */
            public int getStepvalueCount() {
                return stepvalue_.size();
            }
            /**
             * <code>repeated int32 stepvalue = 34;</code>
             *
             * <pre>
             * the stepsize for learning rate policy "multistep"
             * </pre>
             */
            public int getStepvalue(int index) {
                return stepvalue_.get(index);
            }
            /**
             * <code>repeated int32 stepvalue = 34;</code>
             *
             * <pre>
             * the stepsize for learning rate policy "multistep"
             * </pre>
             */
            public Builder setStepvalue(
                    int index, int value) {
                ensureStepvalueIsMutable();
                stepvalue_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated int32 stepvalue = 34;</code>
             *
             * <pre>
             * the stepsize for learning rate policy "multistep"
             * </pre>
             */
            public Builder addStepvalue(int value) {
                ensureStepvalueIsMutable();
                stepvalue_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated int32 stepvalue = 34;</code>
             *
             * <pre>
             * the stepsize for learning rate policy "multistep"
             * </pre>
             */
            public Builder addAllStepvalue(
                    java.lang.Iterable<? extends java.lang.Integer> values) {
                ensureStepvalueIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, stepvalue_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated int32 stepvalue = 34;</code>
             *
             * <pre>
             * the stepsize for learning rate policy "multistep"
             * </pre>
             */
            public Builder clearStepvalue() {
                stepvalue_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00800000);
                onChanged();
                return this;
            }

            private float clipGradients_ = -1F;
            /**
             * <code>optional float clip_gradients = 35 [default = -1];</code>
             *
             * <pre>
             * Set clip_gradients to &gt;= 0 to clip parameter gradients to that L2 norm,
             * whenever their actual L2 norm is larger.
             * </pre>
             */
            public boolean hasClipGradients() {
                return ((bitField0_ & 0x01000000) == 0x01000000);
            }
            /**
             * <code>optional float clip_gradients = 35 [default = -1];</code>
             *
             * <pre>
             * Set clip_gradients to &gt;= 0 to clip parameter gradients to that L2 norm,
             * whenever their actual L2 norm is larger.
             * </pre>
             */
            public float getClipGradients() {
                return clipGradients_;
            }
            /**
             * <code>optional float clip_gradients = 35 [default = -1];</code>
             *
             * <pre>
             * Set clip_gradients to &gt;= 0 to clip parameter gradients to that L2 norm,
             * whenever their actual L2 norm is larger.
             * </pre>
             */
            public Builder setClipGradients(float value) {
                bitField0_ |= 0x01000000;
                clipGradients_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float clip_gradients = 35 [default = -1];</code>
             *
             * <pre>
             * Set clip_gradients to &gt;= 0 to clip parameter gradients to that L2 norm,
             * whenever their actual L2 norm is larger.
             * </pre>
             */
            public Builder clearClipGradients() {
                bitField0_ = (bitField0_ & ~0x01000000);
                clipGradients_ = -1F;
                onChanged();
                return this;
            }

            private int snapshot_ ;
            /**
             * <code>optional int32 snapshot = 14 [default = 0];</code>
             *
             * <pre>
             * The snapshot interval
             * </pre>
             */
            public boolean hasSnapshot() {
                return ((bitField0_ & 0x02000000) == 0x02000000);
            }
            /**
             * <code>optional int32 snapshot = 14 [default = 0];</code>
             *
             * <pre>
             * The snapshot interval
             * </pre>
             */
            public int getSnapshot() {
                return snapshot_;
            }
            /**
             * <code>optional int32 snapshot = 14 [default = 0];</code>
             *
             * <pre>
             * The snapshot interval
             * </pre>
             */
            public Builder setSnapshot(int value) {
                bitField0_ |= 0x02000000;
                snapshot_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 snapshot = 14 [default = 0];</code>
             *
             * <pre>
             * The snapshot interval
             * </pre>
             */
            public Builder clearSnapshot() {
                bitField0_ = (bitField0_ & ~0x02000000);
                snapshot_ = 0;
                onChanged();
                return this;
            }

            private java.lang.Object snapshotPrefix_ = "";
            /**
             * <code>optional string snapshot_prefix = 15;</code>
             *
             * <pre>
             * The prefix for the snapshot.
             * </pre>
             */
            public boolean hasSnapshotPrefix() {
                return ((bitField0_ & 0x04000000) == 0x04000000);
            }
            /**
             * <code>optional string snapshot_prefix = 15;</code>
             *
             * <pre>
             * The prefix for the snapshot.
             * </pre>
             */
            public java.lang.String getSnapshotPrefix() {
                java.lang.Object ref = snapshotPrefix_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        snapshotPrefix_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string snapshot_prefix = 15;</code>
             *
             * <pre>
             * The prefix for the snapshot.
             * </pre>
             */
            public com.google.protobuf.ByteString
            getSnapshotPrefixBytes() {
                java.lang.Object ref = snapshotPrefix_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    snapshotPrefix_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string snapshot_prefix = 15;</code>
             *
             * <pre>
             * The prefix for the snapshot.
             * </pre>
             */
            public Builder setSnapshotPrefix(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x04000000;
                snapshotPrefix_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string snapshot_prefix = 15;</code>
             *
             * <pre>
             * The prefix for the snapshot.
             * </pre>
             */
            public Builder clearSnapshotPrefix() {
                bitField0_ = (bitField0_ & ~0x04000000);
                snapshotPrefix_ = getDefaultInstance().getSnapshotPrefix();
                onChanged();
                return this;
            }
            /**
             * <code>optional string snapshot_prefix = 15;</code>
             *
             * <pre>
             * The prefix for the snapshot.
             * </pre>
             */
            public Builder setSnapshotPrefixBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x04000000;
                snapshotPrefix_ = value;
                onChanged();
                return this;
            }

            private boolean snapshotDiff_ ;
            /**
             * <code>optional bool snapshot_diff = 16 [default = false];</code>
             *
             * <pre>
             * whether to snapshot diff in the results or not. Snapshotting diff will help
             * debugging but the final protocol buffer size will be much larger.
             * </pre>
             */
            public boolean hasSnapshotDiff() {
                return ((bitField0_ & 0x08000000) == 0x08000000);
            }
            /**
             * <code>optional bool snapshot_diff = 16 [default = false];</code>
             *
             * <pre>
             * whether to snapshot diff in the results or not. Snapshotting diff will help
             * debugging but the final protocol buffer size will be much larger.
             * </pre>
             */
            public boolean getSnapshotDiff() {
                return snapshotDiff_;
            }
            /**
             * <code>optional bool snapshot_diff = 16 [default = false];</code>
             *
             * <pre>
             * whether to snapshot diff in the results or not. Snapshotting diff will help
             * debugging but the final protocol buffer size will be much larger.
             * </pre>
             */
            public Builder setSnapshotDiff(boolean value) {
                bitField0_ |= 0x08000000;
                snapshotDiff_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool snapshot_diff = 16 [default = false];</code>
             *
             * <pre>
             * whether to snapshot diff in the results or not. Snapshotting diff will help
             * debugging but the final protocol buffer size will be much larger.
             * </pre>
             */
            public Builder clearSnapshotDiff() {
                bitField0_ = (bitField0_ & ~0x08000000);
                snapshotDiff_ = false;
                onChanged();
                return this;
            }

            private caffe.Loadcaffe.SolverParameter.SolverMode solverMode_ = caffe.Loadcaffe.SolverParameter.SolverMode.GPU;
            /**
             * <code>optional .caffe.SolverParameter.SolverMode solver_mode = 17 [default = GPU];</code>
             */
            public boolean hasSolverMode() {
                return ((bitField0_ & 0x10000000) == 0x10000000);
            }
            /**
             * <code>optional .caffe.SolverParameter.SolverMode solver_mode = 17 [default = GPU];</code>
             */
            public caffe.Loadcaffe.SolverParameter.SolverMode getSolverMode() {
                return solverMode_;
            }
            /**
             * <code>optional .caffe.SolverParameter.SolverMode solver_mode = 17 [default = GPU];</code>
             */
            public Builder setSolverMode(caffe.Loadcaffe.SolverParameter.SolverMode value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x10000000;
                solverMode_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional .caffe.SolverParameter.SolverMode solver_mode = 17 [default = GPU];</code>
             */
            public Builder clearSolverMode() {
                bitField0_ = (bitField0_ & ~0x10000000);
                solverMode_ = caffe.Loadcaffe.SolverParameter.SolverMode.GPU;
                onChanged();
                return this;
            }

            private int deviceId_ ;
            /**
             * <code>optional int32 device_id = 18 [default = 0];</code>
             *
             * <pre>
             * the device_id will that be used in GPU mode. Use device_id = 0 in default.
             * </pre>
             */
            public boolean hasDeviceId() {
                return ((bitField0_ & 0x20000000) == 0x20000000);
            }
            /**
             * <code>optional int32 device_id = 18 [default = 0];</code>
             *
             * <pre>
             * the device_id will that be used in GPU mode. Use device_id = 0 in default.
             * </pre>
             */
            public int getDeviceId() {
                return deviceId_;
            }
            /**
             * <code>optional int32 device_id = 18 [default = 0];</code>
             *
             * <pre>
             * the device_id will that be used in GPU mode. Use device_id = 0 in default.
             * </pre>
             */
            public Builder setDeviceId(int value) {
                bitField0_ |= 0x20000000;
                deviceId_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 device_id = 18 [default = 0];</code>
             *
             * <pre>
             * the device_id will that be used in GPU mode. Use device_id = 0 in default.
             * </pre>
             */
            public Builder clearDeviceId() {
                bitField0_ = (bitField0_ & ~0x20000000);
                deviceId_ = 0;
                onChanged();
                return this;
            }

            private long randomSeed_ = -1L;
            /**
             * <code>optional int64 random_seed = 20 [default = -1];</code>
             *
             * <pre>
             * If non-negative, the seed with which the Solver will initialize the Caffe
             * random number generator -- useful for reproducible results. Otherwise,
             * (and by default) initialize using a seed derived from the system clock.
             * </pre>
             */
            public boolean hasRandomSeed() {
                return ((bitField0_ & 0x40000000) == 0x40000000);
            }
            /**
             * <code>optional int64 random_seed = 20 [default = -1];</code>
             *
             * <pre>
             * If non-negative, the seed with which the Solver will initialize the Caffe
             * random number generator -- useful for reproducible results. Otherwise,
             * (and by default) initialize using a seed derived from the system clock.
             * </pre>
             */
            public long getRandomSeed() {
                return randomSeed_;
            }
            /**
             * <code>optional int64 random_seed = 20 [default = -1];</code>
             *
             * <pre>
             * If non-negative, the seed with which the Solver will initialize the Caffe
             * random number generator -- useful for reproducible results. Otherwise,
             * (and by default) initialize using a seed derived from the system clock.
             * </pre>
             */
            public Builder setRandomSeed(long value) {
                bitField0_ |= 0x40000000;
                randomSeed_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int64 random_seed = 20 [default = -1];</code>
             *
             * <pre>
             * If non-negative, the seed with which the Solver will initialize the Caffe
             * random number generator -- useful for reproducible results. Otherwise,
             * (and by default) initialize using a seed derived from the system clock.
             * </pre>
             */
            public Builder clearRandomSeed() {
                bitField0_ = (bitField0_ & ~0x40000000);
                randomSeed_ = -1L;
                onChanged();
                return this;
            }

            private caffe.Loadcaffe.SolverParameter.SolverType solverType_ = caffe.Loadcaffe.SolverParameter.SolverType.SGD;
            /**
             * <code>optional .caffe.SolverParameter.SolverType solver_type = 30 [default = SGD];</code>
             */
            public boolean hasSolverType() {
                return ((bitField0_ & 0x80000000) == 0x80000000);
            }
            /**
             * <code>optional .caffe.SolverParameter.SolverType solver_type = 30 [default = SGD];</code>
             */
            public caffe.Loadcaffe.SolverParameter.SolverType getSolverType() {
                return solverType_;
            }
            /**
             * <code>optional .caffe.SolverParameter.SolverType solver_type = 30 [default = SGD];</code>
             */
            public Builder setSolverType(caffe.Loadcaffe.SolverParameter.SolverType value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x80000000;
                solverType_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional .caffe.SolverParameter.SolverType solver_type = 30 [default = SGD];</code>
             */
            public Builder clearSolverType() {
                bitField0_ = (bitField0_ & ~0x80000000);
                solverType_ = caffe.Loadcaffe.SolverParameter.SolverType.SGD;
                onChanged();
                return this;
            }

            private float delta_ = 1e-08F;
            /**
             * <code>optional float delta = 31 [default = 1e-08];</code>
             *
             * <pre>
             * numerical stability for AdaGrad
             * </pre>
             */
            public boolean hasDelta() {
                return ((bitField1_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional float delta = 31 [default = 1e-08];</code>
             *
             * <pre>
             * numerical stability for AdaGrad
             * </pre>
             */
            public float getDelta() {
                return delta_;
            }
            /**
             * <code>optional float delta = 31 [default = 1e-08];</code>
             *
             * <pre>
             * numerical stability for AdaGrad
             * </pre>
             */
            public Builder setDelta(float value) {
                bitField1_ |= 0x00000001;
                delta_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float delta = 31 [default = 1e-08];</code>
             *
             * <pre>
             * numerical stability for AdaGrad
             * </pre>
             */
            public Builder clearDelta() {
                bitField1_ = (bitField1_ & ~0x00000001);
                delta_ = 1e-08F;
                onChanged();
                return this;
            }

            private boolean debugInfo_ ;
            /**
             * <code>optional bool debug_info = 23 [default = false];</code>
             *
             * <pre>
             * If true, print information about the state of the net that may help with
             * debugging learning problems.
             * </pre>
             */
            public boolean hasDebugInfo() {
                return ((bitField1_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional bool debug_info = 23 [default = false];</code>
             *
             * <pre>
             * If true, print information about the state of the net that may help with
             * debugging learning problems.
             * </pre>
             */
            public boolean getDebugInfo() {
                return debugInfo_;
            }
            /**
             * <code>optional bool debug_info = 23 [default = false];</code>
             *
             * <pre>
             * If true, print information about the state of the net that may help with
             * debugging learning problems.
             * </pre>
             */
            public Builder setDebugInfo(boolean value) {
                bitField1_ |= 0x00000002;
                debugInfo_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool debug_info = 23 [default = false];</code>
             *
             * <pre>
             * If true, print information about the state of the net that may help with
             * debugging learning problems.
             * </pre>
             */
            public Builder clearDebugInfo() {
                bitField1_ = (bitField1_ & ~0x00000002);
                debugInfo_ = false;
                onChanged();
                return this;
            }

            private boolean snapshotAfterTrain_ = true;
            /**
             * <code>optional bool snapshot_after_train = 28 [default = true];</code>
             *
             * <pre>
             * If false, don't save a snapshot after training finishes.
             * </pre>
             */
            public boolean hasSnapshotAfterTrain() {
                return ((bitField1_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional bool snapshot_after_train = 28 [default = true];</code>
             *
             * <pre>
             * If false, don't save a snapshot after training finishes.
             * </pre>
             */
            public boolean getSnapshotAfterTrain() {
                return snapshotAfterTrain_;
            }
            /**
             * <code>optional bool snapshot_after_train = 28 [default = true];</code>
             *
             * <pre>
             * If false, don't save a snapshot after training finishes.
             * </pre>
             */
            public Builder setSnapshotAfterTrain(boolean value) {
                bitField1_ |= 0x00000004;
                snapshotAfterTrain_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool snapshot_after_train = 28 [default = true];</code>
             *
             * <pre>
             * If false, don't save a snapshot after training finishes.
             * </pre>
             */
            public Builder clearSnapshotAfterTrain() {
                bitField1_ = (bitField1_ & ~0x00000004);
                snapshotAfterTrain_ = true;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.SolverParameter)
        }

        static {
            defaultInstance = new SolverParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.SolverParameter)
    }

    public interface SolverStateOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.SolverState)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional int32 iter = 1;</code>
         *
         * <pre>
         * The current iteration
         * </pre>
         */
        boolean hasIter();
        /**
         * <code>optional int32 iter = 1;</code>
         *
         * <pre>
         * The current iteration
         * </pre>
         */
        int getIter();

        /**
         * <code>optional string learned_net = 2;</code>
         *
         * <pre>
         * The file that stores the learned net.
         * </pre>
         */
        boolean hasLearnedNet();
        /**
         * <code>optional string learned_net = 2;</code>
         *
         * <pre>
         * The file that stores the learned net.
         * </pre>
         */
        java.lang.String getLearnedNet();
        /**
         * <code>optional string learned_net = 2;</code>
         *
         * <pre>
         * The file that stores the learned net.
         * </pre>
         */
        com.google.protobuf.ByteString
        getLearnedNetBytes();

        /**
         * <code>repeated .caffe.BlobProto history = 3;</code>
         *
         * <pre>
         * The history for sgd solvers
         * </pre>
         */
        java.util.List<caffe.Loadcaffe.BlobProto>
        getHistoryList();
        /**
         * <code>repeated .caffe.BlobProto history = 3;</code>
         *
         * <pre>
         * The history for sgd solvers
         * </pre>
         */
        caffe.Loadcaffe.BlobProto getHistory(int index);
        /**
         * <code>repeated .caffe.BlobProto history = 3;</code>
         *
         * <pre>
         * The history for sgd solvers
         * </pre>
         */
        int getHistoryCount();
        /**
         * <code>repeated .caffe.BlobProto history = 3;</code>
         *
         * <pre>
         * The history for sgd solvers
         * </pre>
         */
        java.util.List<? extends caffe.Loadcaffe.BlobProtoOrBuilder>
        getHistoryOrBuilderList();
        /**
         * <code>repeated .caffe.BlobProto history = 3;</code>
         *
         * <pre>
         * The history for sgd solvers
         * </pre>
         */
        caffe.Loadcaffe.BlobProtoOrBuilder getHistoryOrBuilder(
                int index);

        /**
         * <code>optional int32 current_step = 4 [default = 0];</code>
         *
         * <pre>
         * The current step for learning rate
         * </pre>
         */
        boolean hasCurrentStep();
        /**
         * <code>optional int32 current_step = 4 [default = 0];</code>
         *
         * <pre>
         * The current step for learning rate
         * </pre>
         */
        int getCurrentStep();
    }
    /**
     * Protobuf type {@code caffe.SolverState}
     *
     * <pre>
     * A message that stores the solver snapshots
     * </pre>
     */
    public static final class SolverState extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.SolverState)
            SolverStateOrBuilder {
        // Use SolverState.newBuilder() to construct.
        private SolverState(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private SolverState(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final SolverState defaultInstance;
        public static SolverState getDefaultInstance() {
            return defaultInstance;
        }

        public SolverState getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private SolverState(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            bitField0_ |= 0x00000001;
                            iter_ = input.readInt32();
                            break;
                        }
                        case 18: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000002;
                            learnedNet_ = bs;
                            break;
                        }
                        case 26: {
                            if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                                history_ = new java.util.ArrayList<caffe.Loadcaffe.BlobProto>();
                                mutable_bitField0_ |= 0x00000004;
                            }
                            history_.add(input.readMessage(caffe.Loadcaffe.BlobProto.PARSER, extensionRegistry));
                            break;
                        }
                        case 32: {
                            bitField0_ |= 0x00000004;
                            currentStep_ = input.readInt32();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                    history_ = java.util.Collections.unmodifiableList(history_);
                }
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_SolverState_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_SolverState_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.SolverState.class, caffe.Loadcaffe.SolverState.Builder.class);
        }

        public static com.google.protobuf.Parser<SolverState> PARSER =
                new com.google.protobuf.AbstractParser<SolverState>() {
                    public SolverState parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new SolverState(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<SolverState> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int ITER_FIELD_NUMBER = 1;
        private int iter_;
        /**
         * <code>optional int32 iter = 1;</code>
         *
         * <pre>
         * The current iteration
         * </pre>
         */
        public boolean hasIter() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional int32 iter = 1;</code>
         *
         * <pre>
         * The current iteration
         * </pre>
         */
        public int getIter() {
            return iter_;
        }

        public static final int LEARNED_NET_FIELD_NUMBER = 2;
        private java.lang.Object learnedNet_;
        /**
         * <code>optional string learned_net = 2;</code>
         *
         * <pre>
         * The file that stores the learned net.
         * </pre>
         */
        public boolean hasLearnedNet() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional string learned_net = 2;</code>
         *
         * <pre>
         * The file that stores the learned net.
         * </pre>
         */
        public java.lang.String getLearnedNet() {
            java.lang.Object ref = learnedNet_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    learnedNet_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string learned_net = 2;</code>
         *
         * <pre>
         * The file that stores the learned net.
         * </pre>
         */
        public com.google.protobuf.ByteString
        getLearnedNetBytes() {
            java.lang.Object ref = learnedNet_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                learnedNet_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int HISTORY_FIELD_NUMBER = 3;
        private java.util.List<caffe.Loadcaffe.BlobProto> history_;
        /**
         * <code>repeated .caffe.BlobProto history = 3;</code>
         *
         * <pre>
         * The history for sgd solvers
         * </pre>
         */
        public java.util.List<caffe.Loadcaffe.BlobProto> getHistoryList() {
            return history_;
        }
        /**
         * <code>repeated .caffe.BlobProto history = 3;</code>
         *
         * <pre>
         * The history for sgd solvers
         * </pre>
         */
        public java.util.List<? extends caffe.Loadcaffe.BlobProtoOrBuilder>
        getHistoryOrBuilderList() {
            return history_;
        }
        /**
         * <code>repeated .caffe.BlobProto history = 3;</code>
         *
         * <pre>
         * The history for sgd solvers
         * </pre>
         */
        public int getHistoryCount() {
            return history_.size();
        }
        /**
         * <code>repeated .caffe.BlobProto history = 3;</code>
         *
         * <pre>
         * The history for sgd solvers
         * </pre>
         */
        public caffe.Loadcaffe.BlobProto getHistory(int index) {
            return history_.get(index);
        }
        /**
         * <code>repeated .caffe.BlobProto history = 3;</code>
         *
         * <pre>
         * The history for sgd solvers
         * </pre>
         */
        public caffe.Loadcaffe.BlobProtoOrBuilder getHistoryOrBuilder(
                int index) {
            return history_.get(index);
        }

        public static final int CURRENT_STEP_FIELD_NUMBER = 4;
        private int currentStep_;
        /**
         * <code>optional int32 current_step = 4 [default = 0];</code>
         *
         * <pre>
         * The current step for learning rate
         * </pre>
         */
        public boolean hasCurrentStep() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional int32 current_step = 4 [default = 0];</code>
         *
         * <pre>
         * The current step for learning rate
         * </pre>
         */
        public int getCurrentStep() {
            return currentStep_;
        }

        private void initFields() {
            iter_ = 0;
            learnedNet_ = "";
            history_ = java.util.Collections.emptyList();
            currentStep_ = 0;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeInt32(1, iter_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeBytes(2, getLearnedNetBytes());
            }
            for (int i = 0; i < history_.size(); i++) {
                output.writeMessage(3, history_.get(i));
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeInt32(4, currentStep_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(1, iter_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(2, getLearnedNetBytes());
            }
            for (int i = 0; i < history_.size(); i++) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(3, history_.get(i));
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(4, currentStep_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.SolverState parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.SolverState parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.SolverState parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.SolverState parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.SolverState parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.SolverState parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.SolverState parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.SolverState parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.SolverState parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.SolverState parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.SolverState prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.SolverState}
         *
         * <pre>
         * A message that stores the solver snapshots
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.SolverState)
                caffe.Loadcaffe.SolverStateOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_SolverState_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_SolverState_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.SolverState.class, caffe.Loadcaffe.SolverState.Builder.class);
            }

            // Construct using caffe.Loadcaffe.SolverState.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                    getHistoryFieldBuilder();
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                iter_ = 0;
                bitField0_ = (bitField0_ & ~0x00000001);
                learnedNet_ = "";
                bitField0_ = (bitField0_ & ~0x00000002);
                if (historyBuilder_ == null) {
                    history_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000004);
                } else {
                    historyBuilder_.clear();
                }
                currentStep_ = 0;
                bitField0_ = (bitField0_ & ~0x00000008);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_SolverState_descriptor;
            }

            public caffe.Loadcaffe.SolverState getDefaultInstanceForType() {
                return caffe.Loadcaffe.SolverState.getDefaultInstance();
            }

            public caffe.Loadcaffe.SolverState build() {
                caffe.Loadcaffe.SolverState result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.SolverState buildPartial() {
                caffe.Loadcaffe.SolverState result = new caffe.Loadcaffe.SolverState(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.iter_ = iter_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.learnedNet_ = learnedNet_;
                if (historyBuilder_ == null) {
                    if (((bitField0_ & 0x00000004) == 0x00000004)) {
                        history_ = java.util.Collections.unmodifiableList(history_);
                        bitField0_ = (bitField0_ & ~0x00000004);
                    }
                    result.history_ = history_;
                } else {
                    result.history_ = historyBuilder_.build();
                }
                if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
                    to_bitField0_ |= 0x00000004;
                }
                result.currentStep_ = currentStep_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.SolverState) {
                    return mergeFrom((caffe.Loadcaffe.SolverState)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.SolverState other) {
                if (other == caffe.Loadcaffe.SolverState.getDefaultInstance()) return this;
                if (other.hasIter()) {
                    setIter(other.getIter());
                }
                if (other.hasLearnedNet()) {
                    bitField0_ |= 0x00000002;
                    learnedNet_ = other.learnedNet_;
                    onChanged();
                }
                if (historyBuilder_ == null) {
                    if (!other.history_.isEmpty()) {
                        if (history_.isEmpty()) {
                            history_ = other.history_;
                            bitField0_ = (bitField0_ & ~0x00000004);
                        } else {
                            ensureHistoryIsMutable();
                            history_.addAll(other.history_);
                        }
                        onChanged();
                    }
                } else {
                    if (!other.history_.isEmpty()) {
                        if (historyBuilder_.isEmpty()) {
                            historyBuilder_.dispose();
                            historyBuilder_ = null;
                            history_ = other.history_;
                            bitField0_ = (bitField0_ & ~0x00000004);
                            historyBuilder_ =
                                    com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                                            getHistoryFieldBuilder() : null;
                        } else {
                            historyBuilder_.addAllMessages(other.history_);
                        }
                    }
                }
                if (other.hasCurrentStep()) {
                    setCurrentStep(other.getCurrentStep());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.SolverState parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.SolverState) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private int iter_ ;
            /**
             * <code>optional int32 iter = 1;</code>
             *
             * <pre>
             * The current iteration
             * </pre>
             */
            public boolean hasIter() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional int32 iter = 1;</code>
             *
             * <pre>
             * The current iteration
             * </pre>
             */
            public int getIter() {
                return iter_;
            }
            /**
             * <code>optional int32 iter = 1;</code>
             *
             * <pre>
             * The current iteration
             * </pre>
             */
            public Builder setIter(int value) {
                bitField0_ |= 0x00000001;
                iter_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 iter = 1;</code>
             *
             * <pre>
             * The current iteration
             * </pre>
             */
            public Builder clearIter() {
                bitField0_ = (bitField0_ & ~0x00000001);
                iter_ = 0;
                onChanged();
                return this;
            }

            private java.lang.Object learnedNet_ = "";
            /**
             * <code>optional string learned_net = 2;</code>
             *
             * <pre>
             * The file that stores the learned net.
             * </pre>
             */
            public boolean hasLearnedNet() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional string learned_net = 2;</code>
             *
             * <pre>
             * The file that stores the learned net.
             * </pre>
             */
            public java.lang.String getLearnedNet() {
                java.lang.Object ref = learnedNet_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        learnedNet_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string learned_net = 2;</code>
             *
             * <pre>
             * The file that stores the learned net.
             * </pre>
             */
            public com.google.protobuf.ByteString
            getLearnedNetBytes() {
                java.lang.Object ref = learnedNet_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    learnedNet_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string learned_net = 2;</code>
             *
             * <pre>
             * The file that stores the learned net.
             * </pre>
             */
            public Builder setLearnedNet(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000002;
                learnedNet_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string learned_net = 2;</code>
             *
             * <pre>
             * The file that stores the learned net.
             * </pre>
             */
            public Builder clearLearnedNet() {
                bitField0_ = (bitField0_ & ~0x00000002);
                learnedNet_ = getDefaultInstance().getLearnedNet();
                onChanged();
                return this;
            }
            /**
             * <code>optional string learned_net = 2;</code>
             *
             * <pre>
             * The file that stores the learned net.
             * </pre>
             */
            public Builder setLearnedNetBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000002;
                learnedNet_ = value;
                onChanged();
                return this;
            }

            private java.util.List<caffe.Loadcaffe.BlobProto> history_ =
                    java.util.Collections.emptyList();
            private void ensureHistoryIsMutable() {
                if (!((bitField0_ & 0x00000004) == 0x00000004)) {
                    history_ = new java.util.ArrayList<caffe.Loadcaffe.BlobProto>(history_);
                    bitField0_ |= 0x00000004;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.BlobProto, caffe.Loadcaffe.BlobProto.Builder, caffe.Loadcaffe.BlobProtoOrBuilder> historyBuilder_;

            /**
             * <code>repeated .caffe.BlobProto history = 3;</code>
             *
             * <pre>
             * The history for sgd solvers
             * </pre>
             */
            public java.util.List<caffe.Loadcaffe.BlobProto> getHistoryList() {
                if (historyBuilder_ == null) {
                    return java.util.Collections.unmodifiableList(history_);
                } else {
                    return historyBuilder_.getMessageList();
                }
            }
            /**
             * <code>repeated .caffe.BlobProto history = 3;</code>
             *
             * <pre>
             * The history for sgd solvers
             * </pre>
             */
            public int getHistoryCount() {
                if (historyBuilder_ == null) {
                    return history_.size();
                } else {
                    return historyBuilder_.getCount();
                }
            }
            /**
             * <code>repeated .caffe.BlobProto history = 3;</code>
             *
             * <pre>
             * The history for sgd solvers
             * </pre>
             */
            public caffe.Loadcaffe.BlobProto getHistory(int index) {
                if (historyBuilder_ == null) {
                    return history_.get(index);
                } else {
                    return historyBuilder_.getMessage(index);
                }
            }
            /**
             * <code>repeated .caffe.BlobProto history = 3;</code>
             *
             * <pre>
             * The history for sgd solvers
             * </pre>
             */
            public Builder setHistory(
                    int index, caffe.Loadcaffe.BlobProto value) {
                if (historyBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureHistoryIsMutable();
                    history_.set(index, value);
                    onChanged();
                } else {
                    historyBuilder_.setMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto history = 3;</code>
             *
             * <pre>
             * The history for sgd solvers
             * </pre>
             */
            public Builder setHistory(
                    int index, caffe.Loadcaffe.BlobProto.Builder builderForValue) {
                if (historyBuilder_ == null) {
                    ensureHistoryIsMutable();
                    history_.set(index, builderForValue.build());
                    onChanged();
                } else {
                    historyBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto history = 3;</code>
             *
             * <pre>
             * The history for sgd solvers
             * </pre>
             */
            public Builder addHistory(caffe.Loadcaffe.BlobProto value) {
                if (historyBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureHistoryIsMutable();
                    history_.add(value);
                    onChanged();
                } else {
                    historyBuilder_.addMessage(value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto history = 3;</code>
             *
             * <pre>
             * The history for sgd solvers
             * </pre>
             */
            public Builder addHistory(
                    int index, caffe.Loadcaffe.BlobProto value) {
                if (historyBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureHistoryIsMutable();
                    history_.add(index, value);
                    onChanged();
                } else {
                    historyBuilder_.addMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto history = 3;</code>
             *
             * <pre>
             * The history for sgd solvers
             * </pre>
             */
            public Builder addHistory(
                    caffe.Loadcaffe.BlobProto.Builder builderForValue) {
                if (historyBuilder_ == null) {
                    ensureHistoryIsMutable();
                    history_.add(builderForValue.build());
                    onChanged();
                } else {
                    historyBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto history = 3;</code>
             *
             * <pre>
             * The history for sgd solvers
             * </pre>
             */
            public Builder addHistory(
                    int index, caffe.Loadcaffe.BlobProto.Builder builderForValue) {
                if (historyBuilder_ == null) {
                    ensureHistoryIsMutable();
                    history_.add(index, builderForValue.build());
                    onChanged();
                } else {
                    historyBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto history = 3;</code>
             *
             * <pre>
             * The history for sgd solvers
             * </pre>
             */
            public Builder addAllHistory(
                    java.lang.Iterable<? extends caffe.Loadcaffe.BlobProto> values) {
                if (historyBuilder_ == null) {
                    ensureHistoryIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(
                            values, history_);
                    onChanged();
                } else {
                    historyBuilder_.addAllMessages(values);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto history = 3;</code>
             *
             * <pre>
             * The history for sgd solvers
             * </pre>
             */
            public Builder clearHistory() {
                if (historyBuilder_ == null) {
                    history_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000004);
                    onChanged();
                } else {
                    historyBuilder_.clear();
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto history = 3;</code>
             *
             * <pre>
             * The history for sgd solvers
             * </pre>
             */
            public Builder removeHistory(int index) {
                if (historyBuilder_ == null) {
                    ensureHistoryIsMutable();
                    history_.remove(index);
                    onChanged();
                } else {
                    historyBuilder_.remove(index);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto history = 3;</code>
             *
             * <pre>
             * The history for sgd solvers
             * </pre>
             */
            public caffe.Loadcaffe.BlobProto.Builder getHistoryBuilder(
                    int index) {
                return getHistoryFieldBuilder().getBuilder(index);
            }
            /**
             * <code>repeated .caffe.BlobProto history = 3;</code>
             *
             * <pre>
             * The history for sgd solvers
             * </pre>
             */
            public caffe.Loadcaffe.BlobProtoOrBuilder getHistoryOrBuilder(
                    int index) {
                if (historyBuilder_ == null) {
                    return history_.get(index);  } else {
                    return historyBuilder_.getMessageOrBuilder(index);
                }
            }
            /**
             * <code>repeated .caffe.BlobProto history = 3;</code>
             *
             * <pre>
             * The history for sgd solvers
             * </pre>
             */
            public java.util.List<? extends caffe.Loadcaffe.BlobProtoOrBuilder>
            getHistoryOrBuilderList() {
                if (historyBuilder_ != null) {
                    return historyBuilder_.getMessageOrBuilderList();
                } else {
                    return java.util.Collections.unmodifiableList(history_);
                }
            }
            /**
             * <code>repeated .caffe.BlobProto history = 3;</code>
             *
             * <pre>
             * The history for sgd solvers
             * </pre>
             */
            public caffe.Loadcaffe.BlobProto.Builder addHistoryBuilder() {
                return getHistoryFieldBuilder().addBuilder(
                        caffe.Loadcaffe.BlobProto.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.BlobProto history = 3;</code>
             *
             * <pre>
             * The history for sgd solvers
             * </pre>
             */
            public caffe.Loadcaffe.BlobProto.Builder addHistoryBuilder(
                    int index) {
                return getHistoryFieldBuilder().addBuilder(
                        index, caffe.Loadcaffe.BlobProto.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.BlobProto history = 3;</code>
             *
             * <pre>
             * The history for sgd solvers
             * </pre>
             */
            public java.util.List<caffe.Loadcaffe.BlobProto.Builder>
            getHistoryBuilderList() {
                return getHistoryFieldBuilder().getBuilderList();
            }
            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.BlobProto, caffe.Loadcaffe.BlobProto.Builder, caffe.Loadcaffe.BlobProtoOrBuilder>
            getHistoryFieldBuilder() {
                if (historyBuilder_ == null) {
                    historyBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            caffe.Loadcaffe.BlobProto, caffe.Loadcaffe.BlobProto.Builder, caffe.Loadcaffe.BlobProtoOrBuilder>(
                            history_,
                            ((bitField0_ & 0x00000004) == 0x00000004),
                            getParentForChildren(),
                            isClean());
                    history_ = null;
                }
                return historyBuilder_;
            }

            private int currentStep_ ;
            /**
             * <code>optional int32 current_step = 4 [default = 0];</code>
             *
             * <pre>
             * The current step for learning rate
             * </pre>
             */
            public boolean hasCurrentStep() {
                return ((bitField0_ & 0x00000008) == 0x00000008);
            }
            /**
             * <code>optional int32 current_step = 4 [default = 0];</code>
             *
             * <pre>
             * The current step for learning rate
             * </pre>
             */
            public int getCurrentStep() {
                return currentStep_;
            }
            /**
             * <code>optional int32 current_step = 4 [default = 0];</code>
             *
             * <pre>
             * The current step for learning rate
             * </pre>
             */
            public Builder setCurrentStep(int value) {
                bitField0_ |= 0x00000008;
                currentStep_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 current_step = 4 [default = 0];</code>
             *
             * <pre>
             * The current step for learning rate
             * </pre>
             */
            public Builder clearCurrentStep() {
                bitField0_ = (bitField0_ & ~0x00000008);
                currentStep_ = 0;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.SolverState)
        }

        static {
            defaultInstance = new SolverState(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.SolverState)
    }

    public interface NetStateOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.NetState)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional .caffe.Phase phase = 1 [default = TEST];</code>
         */
        boolean hasPhase();
        /**
         * <code>optional .caffe.Phase phase = 1 [default = TEST];</code>
         */
        caffe.Loadcaffe.Phase getPhase();

        /**
         * <code>optional int32 level = 2 [default = 0];</code>
         */
        boolean hasLevel();
        /**
         * <code>optional int32 level = 2 [default = 0];</code>
         */
        int getLevel();

        /**
         * <code>repeated string stage = 3;</code>
         */
        com.google.protobuf.ProtocolStringList
        getStageList();
        /**
         * <code>repeated string stage = 3;</code>
         */
        int getStageCount();
        /**
         * <code>repeated string stage = 3;</code>
         */
        java.lang.String getStage(int index);
        /**
         * <code>repeated string stage = 3;</code>
         */
        com.google.protobuf.ByteString
        getStageBytes(int index);
    }
    /**
     * Protobuf type {@code caffe.NetState}
     */
    public static final class NetState extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.NetState)
            NetStateOrBuilder {
        // Use NetState.newBuilder() to construct.
        private NetState(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private NetState(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final NetState defaultInstance;
        public static NetState getDefaultInstance() {
            return defaultInstance;
        }

        public NetState getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private NetState(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            int rawValue = input.readEnum();
                            caffe.Loadcaffe.Phase value = caffe.Loadcaffe.Phase.valueOf(rawValue);
                            if (value == null) {
                                unknownFields.mergeVarintField(1, rawValue);
                            } else {
                                bitField0_ |= 0x00000001;
                                phase_ = value;
                            }
                            break;
                        }
                        case 16: {
                            bitField0_ |= 0x00000002;
                            level_ = input.readInt32();
                            break;
                        }
                        case 26: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                                stage_ = new com.google.protobuf.LazyStringArrayList();
                                mutable_bitField0_ |= 0x00000004;
                            }
                            stage_.add(bs);
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                    stage_ = stage_.getUnmodifiableView();
                }
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_NetState_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_NetState_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.NetState.class, caffe.Loadcaffe.NetState.Builder.class);
        }

        public static com.google.protobuf.Parser<NetState> PARSER =
                new com.google.protobuf.AbstractParser<NetState>() {
                    public NetState parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new NetState(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<NetState> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int PHASE_FIELD_NUMBER = 1;
        private caffe.Loadcaffe.Phase phase_;
        /**
         * <code>optional .caffe.Phase phase = 1 [default = TEST];</code>
         */
        public boolean hasPhase() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional .caffe.Phase phase = 1 [default = TEST];</code>
         */
        public caffe.Loadcaffe.Phase getPhase() {
            return phase_;
        }

        public static final int LEVEL_FIELD_NUMBER = 2;
        private int level_;
        /**
         * <code>optional int32 level = 2 [default = 0];</code>
         */
        public boolean hasLevel() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional int32 level = 2 [default = 0];</code>
         */
        public int getLevel() {
            return level_;
        }

        public static final int STAGE_FIELD_NUMBER = 3;
        private com.google.protobuf.LazyStringList stage_;
        /**
         * <code>repeated string stage = 3;</code>
         */
        public com.google.protobuf.ProtocolStringList
        getStageList() {
            return stage_;
        }
        /**
         * <code>repeated string stage = 3;</code>
         */
        public int getStageCount() {
            return stage_.size();
        }
        /**
         * <code>repeated string stage = 3;</code>
         */
        public java.lang.String getStage(int index) {
            return stage_.get(index);
        }
        /**
         * <code>repeated string stage = 3;</code>
         */
        public com.google.protobuf.ByteString
        getStageBytes(int index) {
            return stage_.getByteString(index);
        }

        private void initFields() {
            phase_ = caffe.Loadcaffe.Phase.TEST;
            level_ = 0;
            stage_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeEnum(1, phase_.getNumber());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeInt32(2, level_);
            }
            for (int i = 0; i < stage_.size(); i++) {
                output.writeBytes(3, stage_.getByteString(i));
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeEnumSize(1, phase_.getNumber());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(2, level_);
            }
            {
                int dataSize = 0;
                for (int i = 0; i < stage_.size(); i++) {
                    dataSize += com.google.protobuf.CodedOutputStream
                            .computeBytesSizeNoTag(stage_.getByteString(i));
                }
                size += dataSize;
                size += 1 * getStageList().size();
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.NetState parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.NetState parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.NetState parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.NetState parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.NetState parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.NetState parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.NetState parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.NetState parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.NetState parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.NetState parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.NetState prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.NetState}
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.NetState)
                caffe.Loadcaffe.NetStateOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_NetState_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_NetState_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.NetState.class, caffe.Loadcaffe.NetState.Builder.class);
            }

            // Construct using caffe.Loadcaffe.NetState.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                phase_ = caffe.Loadcaffe.Phase.TEST;
                bitField0_ = (bitField0_ & ~0x00000001);
                level_ = 0;
                bitField0_ = (bitField0_ & ~0x00000002);
                stage_ = com.google.protobuf.LazyStringArrayList.EMPTY;
                bitField0_ = (bitField0_ & ~0x00000004);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_NetState_descriptor;
            }

            public caffe.Loadcaffe.NetState getDefaultInstanceForType() {
                return caffe.Loadcaffe.NetState.getDefaultInstance();
            }

            public caffe.Loadcaffe.NetState build() {
                caffe.Loadcaffe.NetState result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.NetState buildPartial() {
                caffe.Loadcaffe.NetState result = new caffe.Loadcaffe.NetState(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.phase_ = phase_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.level_ = level_;
                if (((bitField0_ & 0x00000004) == 0x00000004)) {
                    stage_ = stage_.getUnmodifiableView();
                    bitField0_ = (bitField0_ & ~0x00000004);
                }
                result.stage_ = stage_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.NetState) {
                    return mergeFrom((caffe.Loadcaffe.NetState)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.NetState other) {
                if (other == caffe.Loadcaffe.NetState.getDefaultInstance()) return this;
                if (other.hasPhase()) {
                    setPhase(other.getPhase());
                }
                if (other.hasLevel()) {
                    setLevel(other.getLevel());
                }
                if (!other.stage_.isEmpty()) {
                    if (stage_.isEmpty()) {
                        stage_ = other.stage_;
                        bitField0_ = (bitField0_ & ~0x00000004);
                    } else {
                        ensureStageIsMutable();
                        stage_.addAll(other.stage_);
                    }
                    onChanged();
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.NetState parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.NetState) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private caffe.Loadcaffe.Phase phase_ = caffe.Loadcaffe.Phase.TEST;
            /**
             * <code>optional .caffe.Phase phase = 1 [default = TEST];</code>
             */
            public boolean hasPhase() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional .caffe.Phase phase = 1 [default = TEST];</code>
             */
            public caffe.Loadcaffe.Phase getPhase() {
                return phase_;
            }
            /**
             * <code>optional .caffe.Phase phase = 1 [default = TEST];</code>
             */
            public Builder setPhase(caffe.Loadcaffe.Phase value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                phase_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional .caffe.Phase phase = 1 [default = TEST];</code>
             */
            public Builder clearPhase() {
                bitField0_ = (bitField0_ & ~0x00000001);
                phase_ = caffe.Loadcaffe.Phase.TEST;
                onChanged();
                return this;
            }

            private int level_ ;
            /**
             * <code>optional int32 level = 2 [default = 0];</code>
             */
            public boolean hasLevel() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional int32 level = 2 [default = 0];</code>
             */
            public int getLevel() {
                return level_;
            }
            /**
             * <code>optional int32 level = 2 [default = 0];</code>
             */
            public Builder setLevel(int value) {
                bitField0_ |= 0x00000002;
                level_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 level = 2 [default = 0];</code>
             */
            public Builder clearLevel() {
                bitField0_ = (bitField0_ & ~0x00000002);
                level_ = 0;
                onChanged();
                return this;
            }

            private com.google.protobuf.LazyStringList stage_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            private void ensureStageIsMutable() {
                if (!((bitField0_ & 0x00000004) == 0x00000004)) {
                    stage_ = new com.google.protobuf.LazyStringArrayList(stage_);
                    bitField0_ |= 0x00000004;
                }
            }
            /**
             * <code>repeated string stage = 3;</code>
             */
            public com.google.protobuf.ProtocolStringList
            getStageList() {
                return stage_.getUnmodifiableView();
            }
            /**
             * <code>repeated string stage = 3;</code>
             */
            public int getStageCount() {
                return stage_.size();
            }
            /**
             * <code>repeated string stage = 3;</code>
             */
            public java.lang.String getStage(int index) {
                return stage_.get(index);
            }
            /**
             * <code>repeated string stage = 3;</code>
             */
            public com.google.protobuf.ByteString
            getStageBytes(int index) {
                return stage_.getByteString(index);
            }
            /**
             * <code>repeated string stage = 3;</code>
             */
            public Builder setStage(
                    int index, java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureStageIsMutable();
                stage_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string stage = 3;</code>
             */
            public Builder addStage(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureStageIsMutable();
                stage_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string stage = 3;</code>
             */
            public Builder addAllStage(
                    java.lang.Iterable<java.lang.String> values) {
                ensureStageIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, stage_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string stage = 3;</code>
             */
            public Builder clearStage() {
                stage_ = com.google.protobuf.LazyStringArrayList.EMPTY;
                bitField0_ = (bitField0_ & ~0x00000004);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string stage = 3;</code>
             */
            public Builder addStageBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureStageIsMutable();
                stage_.add(value);
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.NetState)
        }

        static {
            defaultInstance = new NetState(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.NetState)
    }

    public interface NetStateRuleOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.NetStateRule)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional .caffe.Phase phase = 1;</code>
         *
         * <pre>
         * Set phase to require the NetState have a particular phase (TRAIN or TEST)
         * to meet this rule.
         * </pre>
         */
        boolean hasPhase();
        /**
         * <code>optional .caffe.Phase phase = 1;</code>
         *
         * <pre>
         * Set phase to require the NetState have a particular phase (TRAIN or TEST)
         * to meet this rule.
         * </pre>
         */
        caffe.Loadcaffe.Phase getPhase();

        /**
         * <code>optional int32 min_level = 2;</code>
         *
         * <pre>
         * Set the minimum and/or maximum levels in which the layer should be used.
         * Leave undefined to meet the rule regardless of level.
         * </pre>
         */
        boolean hasMinLevel();
        /**
         * <code>optional int32 min_level = 2;</code>
         *
         * <pre>
         * Set the minimum and/or maximum levels in which the layer should be used.
         * Leave undefined to meet the rule regardless of level.
         * </pre>
         */
        int getMinLevel();

        /**
         * <code>optional int32 max_level = 3;</code>
         */
        boolean hasMaxLevel();
        /**
         * <code>optional int32 max_level = 3;</code>
         */
        int getMaxLevel();

        /**
         * <code>repeated string stage = 4;</code>
         *
         * <pre>
         * Customizable sets of stages to include or exclude.
         * The net must have ALL of the specified stages and NONE of the specified
         * "not_stage"s to meet the rule.
         * (Use multiple NetStateRules to specify conjunctions of stages.)
         * </pre>
         */
        com.google.protobuf.ProtocolStringList
        getStageList();
        /**
         * <code>repeated string stage = 4;</code>
         *
         * <pre>
         * Customizable sets of stages to include or exclude.
         * The net must have ALL of the specified stages and NONE of the specified
         * "not_stage"s to meet the rule.
         * (Use multiple NetStateRules to specify conjunctions of stages.)
         * </pre>
         */
        int getStageCount();
        /**
         * <code>repeated string stage = 4;</code>
         *
         * <pre>
         * Customizable sets of stages to include or exclude.
         * The net must have ALL of the specified stages and NONE of the specified
         * "not_stage"s to meet the rule.
         * (Use multiple NetStateRules to specify conjunctions of stages.)
         * </pre>
         */
        java.lang.String getStage(int index);
        /**
         * <code>repeated string stage = 4;</code>
         *
         * <pre>
         * Customizable sets of stages to include or exclude.
         * The net must have ALL of the specified stages and NONE of the specified
         * "not_stage"s to meet the rule.
         * (Use multiple NetStateRules to specify conjunctions of stages.)
         * </pre>
         */
        com.google.protobuf.ByteString
        getStageBytes(int index);

        /**
         * <code>repeated string not_stage = 5;</code>
         */
        com.google.protobuf.ProtocolStringList
        getNotStageList();
        /**
         * <code>repeated string not_stage = 5;</code>
         */
        int getNotStageCount();
        /**
         * <code>repeated string not_stage = 5;</code>
         */
        java.lang.String getNotStage(int index);
        /**
         * <code>repeated string not_stage = 5;</code>
         */
        com.google.protobuf.ByteString
        getNotStageBytes(int index);
    }
    /**
     * Protobuf type {@code caffe.NetStateRule}
     */
    public static final class NetStateRule extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.NetStateRule)
            NetStateRuleOrBuilder {
        // Use NetStateRule.newBuilder() to construct.
        private NetStateRule(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private NetStateRule(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final NetStateRule defaultInstance;
        public static NetStateRule getDefaultInstance() {
            return defaultInstance;
        }

        public NetStateRule getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private NetStateRule(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            int rawValue = input.readEnum();
                            caffe.Loadcaffe.Phase value = caffe.Loadcaffe.Phase.valueOf(rawValue);
                            if (value == null) {
                                unknownFields.mergeVarintField(1, rawValue);
                            } else {
                                bitField0_ |= 0x00000001;
                                phase_ = value;
                            }
                            break;
                        }
                        case 16: {
                            bitField0_ |= 0x00000002;
                            minLevel_ = input.readInt32();
                            break;
                        }
                        case 24: {
                            bitField0_ |= 0x00000004;
                            maxLevel_ = input.readInt32();
                            break;
                        }
                        case 34: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                                stage_ = new com.google.protobuf.LazyStringArrayList();
                                mutable_bitField0_ |= 0x00000008;
                            }
                            stage_.add(bs);
                            break;
                        }
                        case 42: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                                notStage_ = new com.google.protobuf.LazyStringArrayList();
                                mutable_bitField0_ |= 0x00000010;
                            }
                            notStage_.add(bs);
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                    stage_ = stage_.getUnmodifiableView();
                }
                if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                    notStage_ = notStage_.getUnmodifiableView();
                }
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_NetStateRule_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_NetStateRule_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.NetStateRule.class, caffe.Loadcaffe.NetStateRule.Builder.class);
        }

        public static com.google.protobuf.Parser<NetStateRule> PARSER =
                new com.google.protobuf.AbstractParser<NetStateRule>() {
                    public NetStateRule parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new NetStateRule(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<NetStateRule> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int PHASE_FIELD_NUMBER = 1;
        private caffe.Loadcaffe.Phase phase_;
        /**
         * <code>optional .caffe.Phase phase = 1;</code>
         *
         * <pre>
         * Set phase to require the NetState have a particular phase (TRAIN or TEST)
         * to meet this rule.
         * </pre>
         */
        public boolean hasPhase() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional .caffe.Phase phase = 1;</code>
         *
         * <pre>
         * Set phase to require the NetState have a particular phase (TRAIN or TEST)
         * to meet this rule.
         * </pre>
         */
        public caffe.Loadcaffe.Phase getPhase() {
            return phase_;
        }

        public static final int MIN_LEVEL_FIELD_NUMBER = 2;
        private int minLevel_;
        /**
         * <code>optional int32 min_level = 2;</code>
         *
         * <pre>
         * Set the minimum and/or maximum levels in which the layer should be used.
         * Leave undefined to meet the rule regardless of level.
         * </pre>
         */
        public boolean hasMinLevel() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional int32 min_level = 2;</code>
         *
         * <pre>
         * Set the minimum and/or maximum levels in which the layer should be used.
         * Leave undefined to meet the rule regardless of level.
         * </pre>
         */
        public int getMinLevel() {
            return minLevel_;
        }

        public static final int MAX_LEVEL_FIELD_NUMBER = 3;
        private int maxLevel_;
        /**
         * <code>optional int32 max_level = 3;</code>
         */
        public boolean hasMaxLevel() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional int32 max_level = 3;</code>
         */
        public int getMaxLevel() {
            return maxLevel_;
        }

        public static final int STAGE_FIELD_NUMBER = 4;
        private com.google.protobuf.LazyStringList stage_;
        /**
         * <code>repeated string stage = 4;</code>
         *
         * <pre>
         * Customizable sets of stages to include or exclude.
         * The net must have ALL of the specified stages and NONE of the specified
         * "not_stage"s to meet the rule.
         * (Use multiple NetStateRules to specify conjunctions of stages.)
         * </pre>
         */
        public com.google.protobuf.ProtocolStringList
        getStageList() {
            return stage_;
        }
        /**
         * <code>repeated string stage = 4;</code>
         *
         * <pre>
         * Customizable sets of stages to include or exclude.
         * The net must have ALL of the specified stages and NONE of the specified
         * "not_stage"s to meet the rule.
         * (Use multiple NetStateRules to specify conjunctions of stages.)
         * </pre>
         */
        public int getStageCount() {
            return stage_.size();
        }
        /**
         * <code>repeated string stage = 4;</code>
         *
         * <pre>
         * Customizable sets of stages to include or exclude.
         * The net must have ALL of the specified stages and NONE of the specified
         * "not_stage"s to meet the rule.
         * (Use multiple NetStateRules to specify conjunctions of stages.)
         * </pre>
         */
        public java.lang.String getStage(int index) {
            return stage_.get(index);
        }
        /**
         * <code>repeated string stage = 4;</code>
         *
         * <pre>
         * Customizable sets of stages to include or exclude.
         * The net must have ALL of the specified stages and NONE of the specified
         * "not_stage"s to meet the rule.
         * (Use multiple NetStateRules to specify conjunctions of stages.)
         * </pre>
         */
        public com.google.protobuf.ByteString
        getStageBytes(int index) {
            return stage_.getByteString(index);
        }

        public static final int NOT_STAGE_FIELD_NUMBER = 5;
        private com.google.protobuf.LazyStringList notStage_;
        /**
         * <code>repeated string not_stage = 5;</code>
         */
        public com.google.protobuf.ProtocolStringList
        getNotStageList() {
            return notStage_;
        }
        /**
         * <code>repeated string not_stage = 5;</code>
         */
        public int getNotStageCount() {
            return notStage_.size();
        }
        /**
         * <code>repeated string not_stage = 5;</code>
         */
        public java.lang.String getNotStage(int index) {
            return notStage_.get(index);
        }
        /**
         * <code>repeated string not_stage = 5;</code>
         */
        public com.google.protobuf.ByteString
        getNotStageBytes(int index) {
            return notStage_.getByteString(index);
        }

        private void initFields() {
            phase_ = caffe.Loadcaffe.Phase.TRAIN;
            minLevel_ = 0;
            maxLevel_ = 0;
            stage_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            notStage_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeEnum(1, phase_.getNumber());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeInt32(2, minLevel_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeInt32(3, maxLevel_);
            }
            for (int i = 0; i < stage_.size(); i++) {
                output.writeBytes(4, stage_.getByteString(i));
            }
            for (int i = 0; i < notStage_.size(); i++) {
                output.writeBytes(5, notStage_.getByteString(i));
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeEnumSize(1, phase_.getNumber());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(2, minLevel_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(3, maxLevel_);
            }
            {
                int dataSize = 0;
                for (int i = 0; i < stage_.size(); i++) {
                    dataSize += com.google.protobuf.CodedOutputStream
                            .computeBytesSizeNoTag(stage_.getByteString(i));
                }
                size += dataSize;
                size += 1 * getStageList().size();
            }
            {
                int dataSize = 0;
                for (int i = 0; i < notStage_.size(); i++) {
                    dataSize += com.google.protobuf.CodedOutputStream
                            .computeBytesSizeNoTag(notStage_.getByteString(i));
                }
                size += dataSize;
                size += 1 * getNotStageList().size();
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.NetStateRule parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.NetStateRule parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.NetStateRule parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.NetStateRule parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.NetStateRule parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.NetStateRule parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.NetStateRule parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.NetStateRule parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.NetStateRule parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.NetStateRule parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.NetStateRule prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.NetStateRule}
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.NetStateRule)
                caffe.Loadcaffe.NetStateRuleOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_NetStateRule_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_NetStateRule_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.NetStateRule.class, caffe.Loadcaffe.NetStateRule.Builder.class);
            }

            // Construct using caffe.Loadcaffe.NetStateRule.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                phase_ = caffe.Loadcaffe.Phase.TRAIN;
                bitField0_ = (bitField0_ & ~0x00000001);
                minLevel_ = 0;
                bitField0_ = (bitField0_ & ~0x00000002);
                maxLevel_ = 0;
                bitField0_ = (bitField0_ & ~0x00000004);
                stage_ = com.google.protobuf.LazyStringArrayList.EMPTY;
                bitField0_ = (bitField0_ & ~0x00000008);
                notStage_ = com.google.protobuf.LazyStringArrayList.EMPTY;
                bitField0_ = (bitField0_ & ~0x00000010);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_NetStateRule_descriptor;
            }

            public caffe.Loadcaffe.NetStateRule getDefaultInstanceForType() {
                return caffe.Loadcaffe.NetStateRule.getDefaultInstance();
            }

            public caffe.Loadcaffe.NetStateRule build() {
                caffe.Loadcaffe.NetStateRule result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.NetStateRule buildPartial() {
                caffe.Loadcaffe.NetStateRule result = new caffe.Loadcaffe.NetStateRule(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.phase_ = phase_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.minLevel_ = minLevel_;
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000004;
                }
                result.maxLevel_ = maxLevel_;
                if (((bitField0_ & 0x00000008) == 0x00000008)) {
                    stage_ = stage_.getUnmodifiableView();
                    bitField0_ = (bitField0_ & ~0x00000008);
                }
                result.stage_ = stage_;
                if (((bitField0_ & 0x00000010) == 0x00000010)) {
                    notStage_ = notStage_.getUnmodifiableView();
                    bitField0_ = (bitField0_ & ~0x00000010);
                }
                result.notStage_ = notStage_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.NetStateRule) {
                    return mergeFrom((caffe.Loadcaffe.NetStateRule)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.NetStateRule other) {
                if (other == caffe.Loadcaffe.NetStateRule.getDefaultInstance()) return this;
                if (other.hasPhase()) {
                    setPhase(other.getPhase());
                }
                if (other.hasMinLevel()) {
                    setMinLevel(other.getMinLevel());
                }
                if (other.hasMaxLevel()) {
                    setMaxLevel(other.getMaxLevel());
                }
                if (!other.stage_.isEmpty()) {
                    if (stage_.isEmpty()) {
                        stage_ = other.stage_;
                        bitField0_ = (bitField0_ & ~0x00000008);
                    } else {
                        ensureStageIsMutable();
                        stage_.addAll(other.stage_);
                    }
                    onChanged();
                }
                if (!other.notStage_.isEmpty()) {
                    if (notStage_.isEmpty()) {
                        notStage_ = other.notStage_;
                        bitField0_ = (bitField0_ & ~0x00000010);
                    } else {
                        ensureNotStageIsMutable();
                        notStage_.addAll(other.notStage_);
                    }
                    onChanged();
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.NetStateRule parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.NetStateRule) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private caffe.Loadcaffe.Phase phase_ = caffe.Loadcaffe.Phase.TRAIN;
            /**
             * <code>optional .caffe.Phase phase = 1;</code>
             *
             * <pre>
             * Set phase to require the NetState have a particular phase (TRAIN or TEST)
             * to meet this rule.
             * </pre>
             */
            public boolean hasPhase() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional .caffe.Phase phase = 1;</code>
             *
             * <pre>
             * Set phase to require the NetState have a particular phase (TRAIN or TEST)
             * to meet this rule.
             * </pre>
             */
            public caffe.Loadcaffe.Phase getPhase() {
                return phase_;
            }
            /**
             * <code>optional .caffe.Phase phase = 1;</code>
             *
             * <pre>
             * Set phase to require the NetState have a particular phase (TRAIN or TEST)
             * to meet this rule.
             * </pre>
             */
            public Builder setPhase(caffe.Loadcaffe.Phase value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                phase_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional .caffe.Phase phase = 1;</code>
             *
             * <pre>
             * Set phase to require the NetState have a particular phase (TRAIN or TEST)
             * to meet this rule.
             * </pre>
             */
            public Builder clearPhase() {
                bitField0_ = (bitField0_ & ~0x00000001);
                phase_ = caffe.Loadcaffe.Phase.TRAIN;
                onChanged();
                return this;
            }

            private int minLevel_ ;
            /**
             * <code>optional int32 min_level = 2;</code>
             *
             * <pre>
             * Set the minimum and/or maximum levels in which the layer should be used.
             * Leave undefined to meet the rule regardless of level.
             * </pre>
             */
            public boolean hasMinLevel() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional int32 min_level = 2;</code>
             *
             * <pre>
             * Set the minimum and/or maximum levels in which the layer should be used.
             * Leave undefined to meet the rule regardless of level.
             * </pre>
             */
            public int getMinLevel() {
                return minLevel_;
            }
            /**
             * <code>optional int32 min_level = 2;</code>
             *
             * <pre>
             * Set the minimum and/or maximum levels in which the layer should be used.
             * Leave undefined to meet the rule regardless of level.
             * </pre>
             */
            public Builder setMinLevel(int value) {
                bitField0_ |= 0x00000002;
                minLevel_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 min_level = 2;</code>
             *
             * <pre>
             * Set the minimum and/or maximum levels in which the layer should be used.
             * Leave undefined to meet the rule regardless of level.
             * </pre>
             */
            public Builder clearMinLevel() {
                bitField0_ = (bitField0_ & ~0x00000002);
                minLevel_ = 0;
                onChanged();
                return this;
            }

            private int maxLevel_ ;
            /**
             * <code>optional int32 max_level = 3;</code>
             */
            public boolean hasMaxLevel() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional int32 max_level = 3;</code>
             */
            public int getMaxLevel() {
                return maxLevel_;
            }
            /**
             * <code>optional int32 max_level = 3;</code>
             */
            public Builder setMaxLevel(int value) {
                bitField0_ |= 0x00000004;
                maxLevel_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 max_level = 3;</code>
             */
            public Builder clearMaxLevel() {
                bitField0_ = (bitField0_ & ~0x00000004);
                maxLevel_ = 0;
                onChanged();
                return this;
            }

            private com.google.protobuf.LazyStringList stage_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            private void ensureStageIsMutable() {
                if (!((bitField0_ & 0x00000008) == 0x00000008)) {
                    stage_ = new com.google.protobuf.LazyStringArrayList(stage_);
                    bitField0_ |= 0x00000008;
                }
            }
            /**
             * <code>repeated string stage = 4;</code>
             *
             * <pre>
             * Customizable sets of stages to include or exclude.
             * The net must have ALL of the specified stages and NONE of the specified
             * "not_stage"s to meet the rule.
             * (Use multiple NetStateRules to specify conjunctions of stages.)
             * </pre>
             */
            public com.google.protobuf.ProtocolStringList
            getStageList() {
                return stage_.getUnmodifiableView();
            }
            /**
             * <code>repeated string stage = 4;</code>
             *
             * <pre>
             * Customizable sets of stages to include or exclude.
             * The net must have ALL of the specified stages and NONE of the specified
             * "not_stage"s to meet the rule.
             * (Use multiple NetStateRules to specify conjunctions of stages.)
             * </pre>
             */
            public int getStageCount() {
                return stage_.size();
            }
            /**
             * <code>repeated string stage = 4;</code>
             *
             * <pre>
             * Customizable sets of stages to include or exclude.
             * The net must have ALL of the specified stages and NONE of the specified
             * "not_stage"s to meet the rule.
             * (Use multiple NetStateRules to specify conjunctions of stages.)
             * </pre>
             */
            public java.lang.String getStage(int index) {
                return stage_.get(index);
            }
            /**
             * <code>repeated string stage = 4;</code>
             *
             * <pre>
             * Customizable sets of stages to include or exclude.
             * The net must have ALL of the specified stages and NONE of the specified
             * "not_stage"s to meet the rule.
             * (Use multiple NetStateRules to specify conjunctions of stages.)
             * </pre>
             */
            public com.google.protobuf.ByteString
            getStageBytes(int index) {
                return stage_.getByteString(index);
            }
            /**
             * <code>repeated string stage = 4;</code>
             *
             * <pre>
             * Customizable sets of stages to include or exclude.
             * The net must have ALL of the specified stages and NONE of the specified
             * "not_stage"s to meet the rule.
             * (Use multiple NetStateRules to specify conjunctions of stages.)
             * </pre>
             */
            public Builder setStage(
                    int index, java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureStageIsMutable();
                stage_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string stage = 4;</code>
             *
             * <pre>
             * Customizable sets of stages to include or exclude.
             * The net must have ALL of the specified stages and NONE of the specified
             * "not_stage"s to meet the rule.
             * (Use multiple NetStateRules to specify conjunctions of stages.)
             * </pre>
             */
            public Builder addStage(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureStageIsMutable();
                stage_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string stage = 4;</code>
             *
             * <pre>
             * Customizable sets of stages to include or exclude.
             * The net must have ALL of the specified stages and NONE of the specified
             * "not_stage"s to meet the rule.
             * (Use multiple NetStateRules to specify conjunctions of stages.)
             * </pre>
             */
            public Builder addAllStage(
                    java.lang.Iterable<java.lang.String> values) {
                ensureStageIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, stage_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string stage = 4;</code>
             *
             * <pre>
             * Customizable sets of stages to include or exclude.
             * The net must have ALL of the specified stages and NONE of the specified
             * "not_stage"s to meet the rule.
             * (Use multiple NetStateRules to specify conjunctions of stages.)
             * </pre>
             */
            public Builder clearStage() {
                stage_ = com.google.protobuf.LazyStringArrayList.EMPTY;
                bitField0_ = (bitField0_ & ~0x00000008);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string stage = 4;</code>
             *
             * <pre>
             * Customizable sets of stages to include or exclude.
             * The net must have ALL of the specified stages and NONE of the specified
             * "not_stage"s to meet the rule.
             * (Use multiple NetStateRules to specify conjunctions of stages.)
             * </pre>
             */
            public Builder addStageBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureStageIsMutable();
                stage_.add(value);
                onChanged();
                return this;
            }

            private com.google.protobuf.LazyStringList notStage_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            private void ensureNotStageIsMutable() {
                if (!((bitField0_ & 0x00000010) == 0x00000010)) {
                    notStage_ = new com.google.protobuf.LazyStringArrayList(notStage_);
                    bitField0_ |= 0x00000010;
                }
            }
            /**
             * <code>repeated string not_stage = 5;</code>
             */
            public com.google.protobuf.ProtocolStringList
            getNotStageList() {
                return notStage_.getUnmodifiableView();
            }
            /**
             * <code>repeated string not_stage = 5;</code>
             */
            public int getNotStageCount() {
                return notStage_.size();
            }
            /**
             * <code>repeated string not_stage = 5;</code>
             */
            public java.lang.String getNotStage(int index) {
                return notStage_.get(index);
            }
            /**
             * <code>repeated string not_stage = 5;</code>
             */
            public com.google.protobuf.ByteString
            getNotStageBytes(int index) {
                return notStage_.getByteString(index);
            }
            /**
             * <code>repeated string not_stage = 5;</code>
             */
            public Builder setNotStage(
                    int index, java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureNotStageIsMutable();
                notStage_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string not_stage = 5;</code>
             */
            public Builder addNotStage(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureNotStageIsMutable();
                notStage_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string not_stage = 5;</code>
             */
            public Builder addAllNotStage(
                    java.lang.Iterable<java.lang.String> values) {
                ensureNotStageIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, notStage_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string not_stage = 5;</code>
             */
            public Builder clearNotStage() {
                notStage_ = com.google.protobuf.LazyStringArrayList.EMPTY;
                bitField0_ = (bitField0_ & ~0x00000010);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string not_stage = 5;</code>
             */
            public Builder addNotStageBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureNotStageIsMutable();
                notStage_.add(value);
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.NetStateRule)
        }

        static {
            defaultInstance = new NetStateRule(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.NetStateRule)
    }

    public interface ParamSpecOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.ParamSpec)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * The names of the parameter blobs -- useful for sharing parameters among
         * layers, but never required otherwise.  To share a parameter between two
         * layers, give it a (non-empty) name.
         * </pre>
         */
        boolean hasName();
        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * The names of the parameter blobs -- useful for sharing parameters among
         * layers, but never required otherwise.  To share a parameter between two
         * layers, give it a (non-empty) name.
         * </pre>
         */
        java.lang.String getName();
        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * The names of the parameter blobs -- useful for sharing parameters among
         * layers, but never required otherwise.  To share a parameter between two
         * layers, give it a (non-empty) name.
         * </pre>
         */
        com.google.protobuf.ByteString
        getNameBytes();

        /**
         * <code>optional .caffe.ParamSpec.DimCheckMode share_mode = 2;</code>
         *
         * <pre>
         * Whether to require shared weights to have the same shape, or just the same
         * count -- defaults to STRICT if unspecified.
         * </pre>
         */
        boolean hasShareMode();
        /**
         * <code>optional .caffe.ParamSpec.DimCheckMode share_mode = 2;</code>
         *
         * <pre>
         * Whether to require shared weights to have the same shape, or just the same
         * count -- defaults to STRICT if unspecified.
         * </pre>
         */
        caffe.Loadcaffe.ParamSpec.DimCheckMode getShareMode();

        /**
         * <code>optional float lr_mult = 3 [default = 1];</code>
         *
         * <pre>
         * The multiplier on the global learning rate for this parameter.
         * </pre>
         */
        boolean hasLrMult();
        /**
         * <code>optional float lr_mult = 3 [default = 1];</code>
         *
         * <pre>
         * The multiplier on the global learning rate for this parameter.
         * </pre>
         */
        float getLrMult();

        /**
         * <code>optional float decay_mult = 4 [default = 1];</code>
         *
         * <pre>
         * The multiplier on the global weight decay for this parameter.
         * </pre>
         */
        boolean hasDecayMult();
        /**
         * <code>optional float decay_mult = 4 [default = 1];</code>
         *
         * <pre>
         * The multiplier on the global weight decay for this parameter.
         * </pre>
         */
        float getDecayMult();
    }
    /**
     * Protobuf type {@code caffe.ParamSpec}
     *
     * <pre>
     * Specifies training parameters (multipliers on global learning constants,
     * and the name and other settings used for weight sharing).
     * </pre>
     */
    public static final class ParamSpec extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.ParamSpec)
            ParamSpecOrBuilder {
        // Use ParamSpec.newBuilder() to construct.
        private ParamSpec(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private ParamSpec(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final ParamSpec defaultInstance;
        public static ParamSpec getDefaultInstance() {
            return defaultInstance;
        }

        public ParamSpec getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private ParamSpec(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 10: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000001;
                            name_ = bs;
                            break;
                        }
                        case 16: {
                            int rawValue = input.readEnum();
                            caffe.Loadcaffe.ParamSpec.DimCheckMode value = caffe.Loadcaffe.ParamSpec.DimCheckMode.valueOf(rawValue);
                            if (value == null) {
                                unknownFields.mergeVarintField(2, rawValue);
                            } else {
                                bitField0_ |= 0x00000002;
                                shareMode_ = value;
                            }
                            break;
                        }
                        case 29: {
                            bitField0_ |= 0x00000004;
                            lrMult_ = input.readFloat();
                            break;
                        }
                        case 37: {
                            bitField0_ |= 0x00000008;
                            decayMult_ = input.readFloat();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_ParamSpec_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_ParamSpec_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.ParamSpec.class, caffe.Loadcaffe.ParamSpec.Builder.class);
        }

        public static com.google.protobuf.Parser<ParamSpec> PARSER =
                new com.google.protobuf.AbstractParser<ParamSpec>() {
                    public ParamSpec parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new ParamSpec(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<ParamSpec> getParserForType() {
            return PARSER;
        }

        /**
         * Protobuf enum {@code caffe.ParamSpec.DimCheckMode}
         */
        public enum DimCheckMode
                implements com.google.protobuf.ProtocolMessageEnum {
            /**
             * <code>STRICT = 0;</code>
             *
             * <pre>
             * STRICT (default) requires that num, channels, height, width each match.
             * </pre>
             */
            STRICT(0, 0),
            /**
             * <code>PERMISSIVE = 1;</code>
             *
             * <pre>
             * PERMISSIVE requires only the count (num*channels*height*width) to match.
             * </pre>
             */
            PERMISSIVE(1, 1),
            ;

            /**
             * <code>STRICT = 0;</code>
             *
             * <pre>
             * STRICT (default) requires that num, channels, height, width each match.
             * </pre>
             */
            public static final int STRICT_VALUE = 0;
            /**
             * <code>PERMISSIVE = 1;</code>
             *
             * <pre>
             * PERMISSIVE requires only the count (num*channels*height*width) to match.
             * </pre>
             */
            public static final int PERMISSIVE_VALUE = 1;


            public final int getNumber() { return value; }

            public static DimCheckMode valueOf(int value) {
                switch (value) {
                    case 0: return STRICT;
                    case 1: return PERMISSIVE;
                    default: return null;
                }
            }

            public static com.google.protobuf.Internal.EnumLiteMap<DimCheckMode>
            internalGetValueMap() {
                return internalValueMap;
            }
            private static com.google.protobuf.Internal.EnumLiteMap<DimCheckMode>
                    internalValueMap =
                    new com.google.protobuf.Internal.EnumLiteMap<DimCheckMode>() {
                        public DimCheckMode findValueByNumber(int number) {
                            return DimCheckMode.valueOf(number);
                        }
                    };

            public final com.google.protobuf.Descriptors.EnumValueDescriptor
            getValueDescriptor() {
                return getDescriptor().getValues().get(index);
            }
            public final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptorForType() {
                return getDescriptor();
            }
            public static final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptor() {
                return caffe.Loadcaffe.ParamSpec.getDescriptor().getEnumTypes().get(0);
            }

            private static final DimCheckMode[] VALUES = values();

            public static DimCheckMode valueOf(
                    com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new java.lang.IllegalArgumentException(
                            "EnumValueDescriptor is not for this type.");
                }
                return VALUES[desc.getIndex()];
            }

            private final int index;
            private final int value;

            private DimCheckMode(int index, int value) {
                this.index = index;
                this.value = value;
            }

            // @@protoc_insertion_point(enum_scope:caffe.ParamSpec.DimCheckMode)
        }

        private int bitField0_;
        public static final int NAME_FIELD_NUMBER = 1;
        private java.lang.Object name_;
        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * The names of the parameter blobs -- useful for sharing parameters among
         * layers, but never required otherwise.  To share a parameter between two
         * layers, give it a (non-empty) name.
         * </pre>
         */
        public boolean hasName() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * The names of the parameter blobs -- useful for sharing parameters among
         * layers, but never required otherwise.  To share a parameter between two
         * layers, give it a (non-empty) name.
         * </pre>
         */
        public java.lang.String getName() {
            java.lang.Object ref = name_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    name_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * The names of the parameter blobs -- useful for sharing parameters among
         * layers, but never required otherwise.  To share a parameter between two
         * layers, give it a (non-empty) name.
         * </pre>
         */
        public com.google.protobuf.ByteString
        getNameBytes() {
            java.lang.Object ref = name_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                name_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int SHARE_MODE_FIELD_NUMBER = 2;
        private caffe.Loadcaffe.ParamSpec.DimCheckMode shareMode_;
        /**
         * <code>optional .caffe.ParamSpec.DimCheckMode share_mode = 2;</code>
         *
         * <pre>
         * Whether to require shared weights to have the same shape, or just the same
         * count -- defaults to STRICT if unspecified.
         * </pre>
         */
        public boolean hasShareMode() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional .caffe.ParamSpec.DimCheckMode share_mode = 2;</code>
         *
         * <pre>
         * Whether to require shared weights to have the same shape, or just the same
         * count -- defaults to STRICT if unspecified.
         * </pre>
         */
        public caffe.Loadcaffe.ParamSpec.DimCheckMode getShareMode() {
            return shareMode_;
        }

        public static final int LR_MULT_FIELD_NUMBER = 3;
        private float lrMult_;
        /**
         * <code>optional float lr_mult = 3 [default = 1];</code>
         *
         * <pre>
         * The multiplier on the global learning rate for this parameter.
         * </pre>
         */
        public boolean hasLrMult() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional float lr_mult = 3 [default = 1];</code>
         *
         * <pre>
         * The multiplier on the global learning rate for this parameter.
         * </pre>
         */
        public float getLrMult() {
            return lrMult_;
        }

        public static final int DECAY_MULT_FIELD_NUMBER = 4;
        private float decayMult_;
        /**
         * <code>optional float decay_mult = 4 [default = 1];</code>
         *
         * <pre>
         * The multiplier on the global weight decay for this parameter.
         * </pre>
         */
        public boolean hasDecayMult() {
            return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional float decay_mult = 4 [default = 1];</code>
         *
         * <pre>
         * The multiplier on the global weight decay for this parameter.
         * </pre>
         */
        public float getDecayMult() {
            return decayMult_;
        }

        private void initFields() {
            name_ = "";
            shareMode_ = caffe.Loadcaffe.ParamSpec.DimCheckMode.STRICT;
            lrMult_ = 1F;
            decayMult_ = 1F;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeBytes(1, getNameBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeEnum(2, shareMode_.getNumber());
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeFloat(3, lrMult_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                output.writeFloat(4, decayMult_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(1, getNameBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeEnumSize(2, shareMode_.getNumber());
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(3, lrMult_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(4, decayMult_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.ParamSpec parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.ParamSpec parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.ParamSpec parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.ParamSpec parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.ParamSpec parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.ParamSpec parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.ParamSpec parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.ParamSpec parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.ParamSpec parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.ParamSpec parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.ParamSpec prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.ParamSpec}
         *
         * <pre>
         * Specifies training parameters (multipliers on global learning constants,
         * and the name and other settings used for weight sharing).
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.ParamSpec)
                caffe.Loadcaffe.ParamSpecOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_ParamSpec_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_ParamSpec_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.ParamSpec.class, caffe.Loadcaffe.ParamSpec.Builder.class);
            }

            // Construct using caffe.Loadcaffe.ParamSpec.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                name_ = "";
                bitField0_ = (bitField0_ & ~0x00000001);
                shareMode_ = caffe.Loadcaffe.ParamSpec.DimCheckMode.STRICT;
                bitField0_ = (bitField0_ & ~0x00000002);
                lrMult_ = 1F;
                bitField0_ = (bitField0_ & ~0x00000004);
                decayMult_ = 1F;
                bitField0_ = (bitField0_ & ~0x00000008);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_ParamSpec_descriptor;
            }

            public caffe.Loadcaffe.ParamSpec getDefaultInstanceForType() {
                return caffe.Loadcaffe.ParamSpec.getDefaultInstance();
            }

            public caffe.Loadcaffe.ParamSpec build() {
                caffe.Loadcaffe.ParamSpec result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.ParamSpec buildPartial() {
                caffe.Loadcaffe.ParamSpec result = new caffe.Loadcaffe.ParamSpec(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.name_ = name_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.shareMode_ = shareMode_;
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000004;
                }
                result.lrMult_ = lrMult_;
                if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
                    to_bitField0_ |= 0x00000008;
                }
                result.decayMult_ = decayMult_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.ParamSpec) {
                    return mergeFrom((caffe.Loadcaffe.ParamSpec)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.ParamSpec other) {
                if (other == caffe.Loadcaffe.ParamSpec.getDefaultInstance()) return this;
                if (other.hasName()) {
                    bitField0_ |= 0x00000001;
                    name_ = other.name_;
                    onChanged();
                }
                if (other.hasShareMode()) {
                    setShareMode(other.getShareMode());
                }
                if (other.hasLrMult()) {
                    setLrMult(other.getLrMult());
                }
                if (other.hasDecayMult()) {
                    setDecayMult(other.getDecayMult());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.ParamSpec parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.ParamSpec) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private java.lang.Object name_ = "";
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * The names of the parameter blobs -- useful for sharing parameters among
             * layers, but never required otherwise.  To share a parameter between two
             * layers, give it a (non-empty) name.
             * </pre>
             */
            public boolean hasName() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * The names of the parameter blobs -- useful for sharing parameters among
             * layers, but never required otherwise.  To share a parameter between two
             * layers, give it a (non-empty) name.
             * </pre>
             */
            public java.lang.String getName() {
                java.lang.Object ref = name_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        name_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * The names of the parameter blobs -- useful for sharing parameters among
             * layers, but never required otherwise.  To share a parameter between two
             * layers, give it a (non-empty) name.
             * </pre>
             */
            public com.google.protobuf.ByteString
            getNameBytes() {
                java.lang.Object ref = name_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    name_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * The names of the parameter blobs -- useful for sharing parameters among
             * layers, but never required otherwise.  To share a parameter between two
             * layers, give it a (non-empty) name.
             * </pre>
             */
            public Builder setName(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                name_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * The names of the parameter blobs -- useful for sharing parameters among
             * layers, but never required otherwise.  To share a parameter between two
             * layers, give it a (non-empty) name.
             * </pre>
             */
            public Builder clearName() {
                bitField0_ = (bitField0_ & ~0x00000001);
                name_ = getDefaultInstance().getName();
                onChanged();
                return this;
            }
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * The names of the parameter blobs -- useful for sharing parameters among
             * layers, but never required otherwise.  To share a parameter between two
             * layers, give it a (non-empty) name.
             * </pre>
             */
            public Builder setNameBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                name_ = value;
                onChanged();
                return this;
            }

            private caffe.Loadcaffe.ParamSpec.DimCheckMode shareMode_ = caffe.Loadcaffe.ParamSpec.DimCheckMode.STRICT;
            /**
             * <code>optional .caffe.ParamSpec.DimCheckMode share_mode = 2;</code>
             *
             * <pre>
             * Whether to require shared weights to have the same shape, or just the same
             * count -- defaults to STRICT if unspecified.
             * </pre>
             */
            public boolean hasShareMode() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional .caffe.ParamSpec.DimCheckMode share_mode = 2;</code>
             *
             * <pre>
             * Whether to require shared weights to have the same shape, or just the same
             * count -- defaults to STRICT if unspecified.
             * </pre>
             */
            public caffe.Loadcaffe.ParamSpec.DimCheckMode getShareMode() {
                return shareMode_;
            }
            /**
             * <code>optional .caffe.ParamSpec.DimCheckMode share_mode = 2;</code>
             *
             * <pre>
             * Whether to require shared weights to have the same shape, or just the same
             * count -- defaults to STRICT if unspecified.
             * </pre>
             */
            public Builder setShareMode(caffe.Loadcaffe.ParamSpec.DimCheckMode value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000002;
                shareMode_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional .caffe.ParamSpec.DimCheckMode share_mode = 2;</code>
             *
             * <pre>
             * Whether to require shared weights to have the same shape, or just the same
             * count -- defaults to STRICT if unspecified.
             * </pre>
             */
            public Builder clearShareMode() {
                bitField0_ = (bitField0_ & ~0x00000002);
                shareMode_ = caffe.Loadcaffe.ParamSpec.DimCheckMode.STRICT;
                onChanged();
                return this;
            }

            private float lrMult_ = 1F;
            /**
             * <code>optional float lr_mult = 3 [default = 1];</code>
             *
             * <pre>
             * The multiplier on the global learning rate for this parameter.
             * </pre>
             */
            public boolean hasLrMult() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional float lr_mult = 3 [default = 1];</code>
             *
             * <pre>
             * The multiplier on the global learning rate for this parameter.
             * </pre>
             */
            public float getLrMult() {
                return lrMult_;
            }
            /**
             * <code>optional float lr_mult = 3 [default = 1];</code>
             *
             * <pre>
             * The multiplier on the global learning rate for this parameter.
             * </pre>
             */
            public Builder setLrMult(float value) {
                bitField0_ |= 0x00000004;
                lrMult_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float lr_mult = 3 [default = 1];</code>
             *
             * <pre>
             * The multiplier on the global learning rate for this parameter.
             * </pre>
             */
            public Builder clearLrMult() {
                bitField0_ = (bitField0_ & ~0x00000004);
                lrMult_ = 1F;
                onChanged();
                return this;
            }

            private float decayMult_ = 1F;
            /**
             * <code>optional float decay_mult = 4 [default = 1];</code>
             *
             * <pre>
             * The multiplier on the global weight decay for this parameter.
             * </pre>
             */
            public boolean hasDecayMult() {
                return ((bitField0_ & 0x00000008) == 0x00000008);
            }
            /**
             * <code>optional float decay_mult = 4 [default = 1];</code>
             *
             * <pre>
             * The multiplier on the global weight decay for this parameter.
             * </pre>
             */
            public float getDecayMult() {
                return decayMult_;
            }
            /**
             * <code>optional float decay_mult = 4 [default = 1];</code>
             *
             * <pre>
             * The multiplier on the global weight decay for this parameter.
             * </pre>
             */
            public Builder setDecayMult(float value) {
                bitField0_ |= 0x00000008;
                decayMult_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float decay_mult = 4 [default = 1];</code>
             *
             * <pre>
             * The multiplier on the global weight decay for this parameter.
             * </pre>
             */
            public Builder clearDecayMult() {
                bitField0_ = (bitField0_ & ~0x00000008);
                decayMult_ = 1F;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.ParamSpec)
        }

        static {
            defaultInstance = new ParamSpec(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.ParamSpec)
    }

    public interface LayerParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.LayerParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * the layer name
         * </pre>
         */
        boolean hasName();
        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * the layer name
         * </pre>
         */
        java.lang.String getName();
        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * the layer name
         * </pre>
         */
        com.google.protobuf.ByteString
        getNameBytes();

        /**
         * <code>optional string type = 2;</code>
         *
         * <pre>
         * the layer type
         * </pre>
         */
        boolean hasType();
        /**
         * <code>optional string type = 2;</code>
         *
         * <pre>
         * the layer type
         * </pre>
         */
        java.lang.String getType();
        /**
         * <code>optional string type = 2;</code>
         *
         * <pre>
         * the layer type
         * </pre>
         */
        com.google.protobuf.ByteString
        getTypeBytes();

        /**
         * <code>repeated string bottom = 3;</code>
         *
         * <pre>
         * the name of each bottom blob
         * </pre>
         */
        com.google.protobuf.ProtocolStringList
        getBottomList();
        /**
         * <code>repeated string bottom = 3;</code>
         *
         * <pre>
         * the name of each bottom blob
         * </pre>
         */
        int getBottomCount();
        /**
         * <code>repeated string bottom = 3;</code>
         *
         * <pre>
         * the name of each bottom blob
         * </pre>
         */
        java.lang.String getBottom(int index);
        /**
         * <code>repeated string bottom = 3;</code>
         *
         * <pre>
         * the name of each bottom blob
         * </pre>
         */
        com.google.protobuf.ByteString
        getBottomBytes(int index);

        /**
         * <code>repeated string top = 4;</code>
         *
         * <pre>
         * the name of each top blob
         * </pre>
         */
        com.google.protobuf.ProtocolStringList
        getTopList();
        /**
         * <code>repeated string top = 4;</code>
         *
         * <pre>
         * the name of each top blob
         * </pre>
         */
        int getTopCount();
        /**
         * <code>repeated string top = 4;</code>
         *
         * <pre>
         * the name of each top blob
         * </pre>
         */
        java.lang.String getTop(int index);
        /**
         * <code>repeated string top = 4;</code>
         *
         * <pre>
         * the name of each top blob
         * </pre>
         */
        com.google.protobuf.ByteString
        getTopBytes(int index);

        /**
         * <code>optional .caffe.Phase phase = 10;</code>
         *
         * <pre>
         * The train / test phase for computation.
         * </pre>
         */
        boolean hasPhase();
        /**
         * <code>optional .caffe.Phase phase = 10;</code>
         *
         * <pre>
         * The train / test phase for computation.
         * </pre>
         */
        caffe.Loadcaffe.Phase getPhase();

        /**
         * <code>repeated float loss_weight = 5;</code>
         *
         * <pre>
         * The amount of weight to assign each top blob in the objective.
         * Each layer assigns a default value, usually of either 0 or 1,
         * to each top blob.
         * </pre>
         */
        java.util.List<java.lang.Float> getLossWeightList();
        /**
         * <code>repeated float loss_weight = 5;</code>
         *
         * <pre>
         * The amount of weight to assign each top blob in the objective.
         * Each layer assigns a default value, usually of either 0 or 1,
         * to each top blob.
         * </pre>
         */
        int getLossWeightCount();
        /**
         * <code>repeated float loss_weight = 5;</code>
         *
         * <pre>
         * The amount of weight to assign each top blob in the objective.
         * Each layer assigns a default value, usually of either 0 or 1,
         * to each top blob.
         * </pre>
         */
        float getLossWeight(int index);

        /**
         * <code>repeated .caffe.ParamSpec param = 6;</code>
         *
         * <pre>
         * Specifies training parameters (multipliers on global learning constants,
         * and the name and other settings used for weight sharing).
         * </pre>
         */
        java.util.List<caffe.Loadcaffe.ParamSpec>
        getParamList();
        /**
         * <code>repeated .caffe.ParamSpec param = 6;</code>
         *
         * <pre>
         * Specifies training parameters (multipliers on global learning constants,
         * and the name and other settings used for weight sharing).
         * </pre>
         */
        caffe.Loadcaffe.ParamSpec getParam(int index);
        /**
         * <code>repeated .caffe.ParamSpec param = 6;</code>
         *
         * <pre>
         * Specifies training parameters (multipliers on global learning constants,
         * and the name and other settings used for weight sharing).
         * </pre>
         */
        int getParamCount();
        /**
         * <code>repeated .caffe.ParamSpec param = 6;</code>
         *
         * <pre>
         * Specifies training parameters (multipliers on global learning constants,
         * and the name and other settings used for weight sharing).
         * </pre>
         */
        java.util.List<? extends caffe.Loadcaffe.ParamSpecOrBuilder>
        getParamOrBuilderList();
        /**
         * <code>repeated .caffe.ParamSpec param = 6;</code>
         *
         * <pre>
         * Specifies training parameters (multipliers on global learning constants,
         * and the name and other settings used for weight sharing).
         * </pre>
         */
        caffe.Loadcaffe.ParamSpecOrBuilder getParamOrBuilder(
                int index);

        /**
         * <code>repeated .caffe.BlobProto blobs = 7;</code>
         *
         * <pre>
         * The blobs containing the numeric parameters of the layer.
         * </pre>
         */
        java.util.List<caffe.Loadcaffe.BlobProto>
        getBlobsList();
        /**
         * <code>repeated .caffe.BlobProto blobs = 7;</code>
         *
         * <pre>
         * The blobs containing the numeric parameters of the layer.
         * </pre>
         */
        caffe.Loadcaffe.BlobProto getBlobs(int index);
        /**
         * <code>repeated .caffe.BlobProto blobs = 7;</code>
         *
         * <pre>
         * The blobs containing the numeric parameters of the layer.
         * </pre>
         */
        int getBlobsCount();
        /**
         * <code>repeated .caffe.BlobProto blobs = 7;</code>
         *
         * <pre>
         * The blobs containing the numeric parameters of the layer.
         * </pre>
         */
        java.util.List<? extends caffe.Loadcaffe.BlobProtoOrBuilder>
        getBlobsOrBuilderList();
        /**
         * <code>repeated .caffe.BlobProto blobs = 7;</code>
         *
         * <pre>
         * The blobs containing the numeric parameters of the layer.
         * </pre>
         */
        caffe.Loadcaffe.BlobProtoOrBuilder getBlobsOrBuilder(
                int index);

        /**
         * <code>repeated .caffe.NetStateRule include = 8;</code>
         *
         * <pre>
         * Rules controlling whether and when a layer is included in the network,
         * based on the current NetState.  You may specify a non-zero number of rules
         * to include OR exclude, but not both.  If no include or exclude rules are
         * specified, the layer is always included.  If the current NetState meets
         * ANY (i.e., one or more) of the specified rules, the layer is
         * included/excluded.
         * </pre>
         */
        java.util.List<caffe.Loadcaffe.NetStateRule>
        getIncludeList();
        /**
         * <code>repeated .caffe.NetStateRule include = 8;</code>
         *
         * <pre>
         * Rules controlling whether and when a layer is included in the network,
         * based on the current NetState.  You may specify a non-zero number of rules
         * to include OR exclude, but not both.  If no include or exclude rules are
         * specified, the layer is always included.  If the current NetState meets
         * ANY (i.e., one or more) of the specified rules, the layer is
         * included/excluded.
         * </pre>
         */
        caffe.Loadcaffe.NetStateRule getInclude(int index);
        /**
         * <code>repeated .caffe.NetStateRule include = 8;</code>
         *
         * <pre>
         * Rules controlling whether and when a layer is included in the network,
         * based on the current NetState.  You may specify a non-zero number of rules
         * to include OR exclude, but not both.  If no include or exclude rules are
         * specified, the layer is always included.  If the current NetState meets
         * ANY (i.e., one or more) of the specified rules, the layer is
         * included/excluded.
         * </pre>
         */
        int getIncludeCount();
        /**
         * <code>repeated .caffe.NetStateRule include = 8;</code>
         *
         * <pre>
         * Rules controlling whether and when a layer is included in the network,
         * based on the current NetState.  You may specify a non-zero number of rules
         * to include OR exclude, but not both.  If no include or exclude rules are
         * specified, the layer is always included.  If the current NetState meets
         * ANY (i.e., one or more) of the specified rules, the layer is
         * included/excluded.
         * </pre>
         */
        java.util.List<? extends caffe.Loadcaffe.NetStateRuleOrBuilder>
        getIncludeOrBuilderList();
        /**
         * <code>repeated .caffe.NetStateRule include = 8;</code>
         *
         * <pre>
         * Rules controlling whether and when a layer is included in the network,
         * based on the current NetState.  You may specify a non-zero number of rules
         * to include OR exclude, but not both.  If no include or exclude rules are
         * specified, the layer is always included.  If the current NetState meets
         * ANY (i.e., one or more) of the specified rules, the layer is
         * included/excluded.
         * </pre>
         */
        caffe.Loadcaffe.NetStateRuleOrBuilder getIncludeOrBuilder(
                int index);

        /**
         * <code>repeated .caffe.NetStateRule exclude = 9;</code>
         */
        java.util.List<caffe.Loadcaffe.NetStateRule>
        getExcludeList();
        /**
         * <code>repeated .caffe.NetStateRule exclude = 9;</code>
         */
        caffe.Loadcaffe.NetStateRule getExclude(int index);
        /**
         * <code>repeated .caffe.NetStateRule exclude = 9;</code>
         */
        int getExcludeCount();
        /**
         * <code>repeated .caffe.NetStateRule exclude = 9;</code>
         */
        java.util.List<? extends caffe.Loadcaffe.NetStateRuleOrBuilder>
        getExcludeOrBuilderList();
        /**
         * <code>repeated .caffe.NetStateRule exclude = 9;</code>
         */
        caffe.Loadcaffe.NetStateRuleOrBuilder getExcludeOrBuilder(
                int index);

        /**
         * <code>optional .caffe.TransformationParameter transform_param = 100;</code>
         *
         * <pre>
         * Parameters for data pre-processing.
         * </pre>
         */
        boolean hasTransformParam();
        /**
         * <code>optional .caffe.TransformationParameter transform_param = 100;</code>
         *
         * <pre>
         * Parameters for data pre-processing.
         * </pre>
         */
        caffe.Loadcaffe.TransformationParameter getTransformParam();
        /**
         * <code>optional .caffe.TransformationParameter transform_param = 100;</code>
         *
         * <pre>
         * Parameters for data pre-processing.
         * </pre>
         */
        caffe.Loadcaffe.TransformationParameterOrBuilder getTransformParamOrBuilder();

        /**
         * <code>optional .caffe.LossParameter loss_param = 101;</code>
         *
         * <pre>
         * Parameters shared by loss layers.
         * </pre>
         */
        boolean hasLossParam();
        /**
         * <code>optional .caffe.LossParameter loss_param = 101;</code>
         *
         * <pre>
         * Parameters shared by loss layers.
         * </pre>
         */
        caffe.Loadcaffe.LossParameter getLossParam();
        /**
         * <code>optional .caffe.LossParameter loss_param = 101;</code>
         *
         * <pre>
         * Parameters shared by loss layers.
         * </pre>
         */
        caffe.Loadcaffe.LossParameterOrBuilder getLossParamOrBuilder();

        /**
         * <code>optional .caffe.AccuracyParameter accuracy_param = 102;</code>
         *
         * <pre>
         * Layer type-specific parameters.
         * Note: certain layers may have more than one computational engine
         * for their implementation. These layers include an Engine type and
         * engine parameter for selecting the implementation.
         * The default for the engine is set by the ENGINE switch at compile-time.
         * </pre>
         */
        boolean hasAccuracyParam();
        /**
         * <code>optional .caffe.AccuracyParameter accuracy_param = 102;</code>
         *
         * <pre>
         * Layer type-specific parameters.
         * Note: certain layers may have more than one computational engine
         * for their implementation. These layers include an Engine type and
         * engine parameter for selecting the implementation.
         * The default for the engine is set by the ENGINE switch at compile-time.
         * </pre>
         */
        caffe.Loadcaffe.AccuracyParameter getAccuracyParam();
        /**
         * <code>optional .caffe.AccuracyParameter accuracy_param = 102;</code>
         *
         * <pre>
         * Layer type-specific parameters.
         * Note: certain layers may have more than one computational engine
         * for their implementation. These layers include an Engine type and
         * engine parameter for selecting the implementation.
         * The default for the engine is set by the ENGINE switch at compile-time.
         * </pre>
         */
        caffe.Loadcaffe.AccuracyParameterOrBuilder getAccuracyParamOrBuilder();

        /**
         * <code>optional .caffe.ArgMaxParameter argmax_param = 103;</code>
         */
        boolean hasArgmaxParam();
        /**
         * <code>optional .caffe.ArgMaxParameter argmax_param = 103;</code>
         */
        caffe.Loadcaffe.ArgMaxParameter getArgmaxParam();
        /**
         * <code>optional .caffe.ArgMaxParameter argmax_param = 103;</code>
         */
        caffe.Loadcaffe.ArgMaxParameterOrBuilder getArgmaxParamOrBuilder();

        /**
         * <code>optional .caffe.ConcatParameter concat_param = 104;</code>
         */
        boolean hasConcatParam();
        /**
         * <code>optional .caffe.ConcatParameter concat_param = 104;</code>
         */
        caffe.Loadcaffe.ConcatParameter getConcatParam();
        /**
         * <code>optional .caffe.ConcatParameter concat_param = 104;</code>
         */
        caffe.Loadcaffe.ConcatParameterOrBuilder getConcatParamOrBuilder();

        /**
         * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 105;</code>
         */
        boolean hasContrastiveLossParam();
        /**
         * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 105;</code>
         */
        caffe.Loadcaffe.ContrastiveLossParameter getContrastiveLossParam();
        /**
         * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 105;</code>
         */
        caffe.Loadcaffe.ContrastiveLossParameterOrBuilder getContrastiveLossParamOrBuilder();

        /**
         * <code>optional .caffe.ConvolutionParameter convolution_param = 106;</code>
         */
        boolean hasConvolutionParam();
        /**
         * <code>optional .caffe.ConvolutionParameter convolution_param = 106;</code>
         */
        caffe.Loadcaffe.ConvolutionParameter getConvolutionParam();
        /**
         * <code>optional .caffe.ConvolutionParameter convolution_param = 106;</code>
         */
        caffe.Loadcaffe.ConvolutionParameterOrBuilder getConvolutionParamOrBuilder();

        /**
         * <code>optional .caffe.DataParameter data_param = 107;</code>
         */
        boolean hasDataParam();
        /**
         * <code>optional .caffe.DataParameter data_param = 107;</code>
         */
        caffe.Loadcaffe.DataParameter getDataParam();
        /**
         * <code>optional .caffe.DataParameter data_param = 107;</code>
         */
        caffe.Loadcaffe.DataParameterOrBuilder getDataParamOrBuilder();

        /**
         * <code>optional .caffe.DropoutParameter dropout_param = 108;</code>
         */
        boolean hasDropoutParam();
        /**
         * <code>optional .caffe.DropoutParameter dropout_param = 108;</code>
         */
        caffe.Loadcaffe.DropoutParameter getDropoutParam();
        /**
         * <code>optional .caffe.DropoutParameter dropout_param = 108;</code>
         */
        caffe.Loadcaffe.DropoutParameterOrBuilder getDropoutParamOrBuilder();

        /**
         * <code>optional .caffe.DummyDataParameter dummy_data_param = 109;</code>
         */
        boolean hasDummyDataParam();
        /**
         * <code>optional .caffe.DummyDataParameter dummy_data_param = 109;</code>
         */
        caffe.Loadcaffe.DummyDataParameter getDummyDataParam();
        /**
         * <code>optional .caffe.DummyDataParameter dummy_data_param = 109;</code>
         */
        caffe.Loadcaffe.DummyDataParameterOrBuilder getDummyDataParamOrBuilder();

        /**
         * <code>optional .caffe.EltwiseParameter eltwise_param = 110;</code>
         */
        boolean hasEltwiseParam();
        /**
         * <code>optional .caffe.EltwiseParameter eltwise_param = 110;</code>
         */
        caffe.Loadcaffe.EltwiseParameter getEltwiseParam();
        /**
         * <code>optional .caffe.EltwiseParameter eltwise_param = 110;</code>
         */
        caffe.Loadcaffe.EltwiseParameterOrBuilder getEltwiseParamOrBuilder();

        /**
         * <code>optional .caffe.ExpParameter exp_param = 111;</code>
         */
        boolean hasExpParam();
        /**
         * <code>optional .caffe.ExpParameter exp_param = 111;</code>
         */
        caffe.Loadcaffe.ExpParameter getExpParam();
        /**
         * <code>optional .caffe.ExpParameter exp_param = 111;</code>
         */
        caffe.Loadcaffe.ExpParameterOrBuilder getExpParamOrBuilder();

        /**
         * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 112;</code>
         */
        boolean hasHdf5DataParam();
        /**
         * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 112;</code>
         */
        caffe.Loadcaffe.HDF5DataParameter getHdf5DataParam();
        /**
         * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 112;</code>
         */
        caffe.Loadcaffe.HDF5DataParameterOrBuilder getHdf5DataParamOrBuilder();

        /**
         * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 113;</code>
         */
        boolean hasHdf5OutputParam();
        /**
         * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 113;</code>
         */
        caffe.Loadcaffe.HDF5OutputParameter getHdf5OutputParam();
        /**
         * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 113;</code>
         */
        caffe.Loadcaffe.HDF5OutputParameterOrBuilder getHdf5OutputParamOrBuilder();

        /**
         * <code>optional .caffe.HingeLossParameter hinge_loss_param = 114;</code>
         */
        boolean hasHingeLossParam();
        /**
         * <code>optional .caffe.HingeLossParameter hinge_loss_param = 114;</code>
         */
        caffe.Loadcaffe.HingeLossParameter getHingeLossParam();
        /**
         * <code>optional .caffe.HingeLossParameter hinge_loss_param = 114;</code>
         */
        caffe.Loadcaffe.HingeLossParameterOrBuilder getHingeLossParamOrBuilder();

        /**
         * <code>optional .caffe.ImageDataParameter image_data_param = 115;</code>
         */
        boolean hasImageDataParam();
        /**
         * <code>optional .caffe.ImageDataParameter image_data_param = 115;</code>
         */
        caffe.Loadcaffe.ImageDataParameter getImageDataParam();
        /**
         * <code>optional .caffe.ImageDataParameter image_data_param = 115;</code>
         */
        caffe.Loadcaffe.ImageDataParameterOrBuilder getImageDataParamOrBuilder();

        /**
         * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 116;</code>
         */
        boolean hasInfogainLossParam();
        /**
         * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 116;</code>
         */
        caffe.Loadcaffe.InfogainLossParameter getInfogainLossParam();
        /**
         * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 116;</code>
         */
        caffe.Loadcaffe.InfogainLossParameterOrBuilder getInfogainLossParamOrBuilder();

        /**
         * <code>optional .caffe.InnerProductParameter inner_product_param = 117;</code>
         */
        boolean hasInnerProductParam();
        /**
         * <code>optional .caffe.InnerProductParameter inner_product_param = 117;</code>
         */
        caffe.Loadcaffe.InnerProductParameter getInnerProductParam();
        /**
         * <code>optional .caffe.InnerProductParameter inner_product_param = 117;</code>
         */
        caffe.Loadcaffe.InnerProductParameterOrBuilder getInnerProductParamOrBuilder();

        /**
         * <code>optional .caffe.LRNParameter lrn_param = 118;</code>
         */
        boolean hasLrnParam();
        /**
         * <code>optional .caffe.LRNParameter lrn_param = 118;</code>
         */
        caffe.Loadcaffe.LRNParameter getLrnParam();
        /**
         * <code>optional .caffe.LRNParameter lrn_param = 118;</code>
         */
        caffe.Loadcaffe.LRNParameterOrBuilder getLrnParamOrBuilder();

        /**
         * <code>optional .caffe.MemoryDataParameter memory_data_param = 119;</code>
         */
        boolean hasMemoryDataParam();
        /**
         * <code>optional .caffe.MemoryDataParameter memory_data_param = 119;</code>
         */
        caffe.Loadcaffe.MemoryDataParameter getMemoryDataParam();
        /**
         * <code>optional .caffe.MemoryDataParameter memory_data_param = 119;</code>
         */
        caffe.Loadcaffe.MemoryDataParameterOrBuilder getMemoryDataParamOrBuilder();

        /**
         * <code>optional .caffe.MVNParameter mvn_param = 120;</code>
         */
        boolean hasMvnParam();
        /**
         * <code>optional .caffe.MVNParameter mvn_param = 120;</code>
         */
        caffe.Loadcaffe.MVNParameter getMvnParam();
        /**
         * <code>optional .caffe.MVNParameter mvn_param = 120;</code>
         */
        caffe.Loadcaffe.MVNParameterOrBuilder getMvnParamOrBuilder();

        /**
         * <code>optional .caffe.PoolingParameter pooling_param = 121;</code>
         */
        boolean hasPoolingParam();
        /**
         * <code>optional .caffe.PoolingParameter pooling_param = 121;</code>
         */
        caffe.Loadcaffe.PoolingParameter getPoolingParam();
        /**
         * <code>optional .caffe.PoolingParameter pooling_param = 121;</code>
         */
        caffe.Loadcaffe.PoolingParameterOrBuilder getPoolingParamOrBuilder();

        /**
         * <code>optional .caffe.PowerParameter power_param = 122;</code>
         */
        boolean hasPowerParam();
        /**
         * <code>optional .caffe.PowerParameter power_param = 122;</code>
         */
        caffe.Loadcaffe.PowerParameter getPowerParam();
        /**
         * <code>optional .caffe.PowerParameter power_param = 122;</code>
         */
        caffe.Loadcaffe.PowerParameterOrBuilder getPowerParamOrBuilder();

        /**
         * <code>optional .caffe.PReLUParameter prelu_param = 131;</code>
         */
        boolean hasPreluParam();
        /**
         * <code>optional .caffe.PReLUParameter prelu_param = 131;</code>
         */
        caffe.Loadcaffe.PReLUParameter getPreluParam();
        /**
         * <code>optional .caffe.PReLUParameter prelu_param = 131;</code>
         */
        caffe.Loadcaffe.PReLUParameterOrBuilder getPreluParamOrBuilder();

        /**
         * <code>optional .caffe.PythonParameter python_param = 130;</code>
         */
        boolean hasPythonParam();
        /**
         * <code>optional .caffe.PythonParameter python_param = 130;</code>
         */
        caffe.Loadcaffe.PythonParameter getPythonParam();
        /**
         * <code>optional .caffe.PythonParameter python_param = 130;</code>
         */
        caffe.Loadcaffe.PythonParameterOrBuilder getPythonParamOrBuilder();

        /**
         * <code>optional .caffe.ReLUParameter relu_param = 123;</code>
         */
        boolean hasReluParam();
        /**
         * <code>optional .caffe.ReLUParameter relu_param = 123;</code>
         */
        caffe.Loadcaffe.ReLUParameter getReluParam();
        /**
         * <code>optional .caffe.ReLUParameter relu_param = 123;</code>
         */
        caffe.Loadcaffe.ReLUParameterOrBuilder getReluParamOrBuilder();

        /**
         * <code>optional .caffe.SigmoidParameter sigmoid_param = 124;</code>
         */
        boolean hasSigmoidParam();
        /**
         * <code>optional .caffe.SigmoidParameter sigmoid_param = 124;</code>
         */
        caffe.Loadcaffe.SigmoidParameter getSigmoidParam();
        /**
         * <code>optional .caffe.SigmoidParameter sigmoid_param = 124;</code>
         */
        caffe.Loadcaffe.SigmoidParameterOrBuilder getSigmoidParamOrBuilder();

        /**
         * <code>optional .caffe.SoftmaxParameter softmax_param = 125;</code>
         */
        boolean hasSoftmaxParam();
        /**
         * <code>optional .caffe.SoftmaxParameter softmax_param = 125;</code>
         */
        caffe.Loadcaffe.SoftmaxParameter getSoftmaxParam();
        /**
         * <code>optional .caffe.SoftmaxParameter softmax_param = 125;</code>
         */
        caffe.Loadcaffe.SoftmaxParameterOrBuilder getSoftmaxParamOrBuilder();

        /**
         * <code>optional .caffe.SliceParameter slice_param = 126;</code>
         */
        boolean hasSliceParam();
        /**
         * <code>optional .caffe.SliceParameter slice_param = 126;</code>
         */
        caffe.Loadcaffe.SliceParameter getSliceParam();
        /**
         * <code>optional .caffe.SliceParameter slice_param = 126;</code>
         */
        caffe.Loadcaffe.SliceParameterOrBuilder getSliceParamOrBuilder();

        /**
         * <code>optional .caffe.TanHParameter tanh_param = 127;</code>
         */
        boolean hasTanhParam();
        /**
         * <code>optional .caffe.TanHParameter tanh_param = 127;</code>
         */
        caffe.Loadcaffe.TanHParameter getTanhParam();
        /**
         * <code>optional .caffe.TanHParameter tanh_param = 127;</code>
         */
        caffe.Loadcaffe.TanHParameterOrBuilder getTanhParamOrBuilder();

        /**
         * <code>optional .caffe.ThresholdParameter threshold_param = 128;</code>
         */
        boolean hasThresholdParam();
        /**
         * <code>optional .caffe.ThresholdParameter threshold_param = 128;</code>
         */
        caffe.Loadcaffe.ThresholdParameter getThresholdParam();
        /**
         * <code>optional .caffe.ThresholdParameter threshold_param = 128;</code>
         */
        caffe.Loadcaffe.ThresholdParameterOrBuilder getThresholdParamOrBuilder();

        /**
         * <code>optional .caffe.WindowDataParameter window_data_param = 129;</code>
         */
        boolean hasWindowDataParam();
        /**
         * <code>optional .caffe.WindowDataParameter window_data_param = 129;</code>
         */
        caffe.Loadcaffe.WindowDataParameter getWindowDataParam();
        /**
         * <code>optional .caffe.WindowDataParameter window_data_param = 129;</code>
         */
        caffe.Loadcaffe.WindowDataParameterOrBuilder getWindowDataParamOrBuilder();
    }
    /**
     * Protobuf type {@code caffe.LayerParameter}
     *
     * <pre>
     * NOTE
     * Update the next available ID when you add a new LayerParameter field.
     * LayerParameter next available layer-specific ID: 132 (last added: prelu_param)
     * </pre>
     */
    public static final class LayerParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.LayerParameter)
            LayerParameterOrBuilder {
        // Use LayerParameter.newBuilder() to construct.
        private LayerParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private LayerParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final LayerParameter defaultInstance;
        public static LayerParameter getDefaultInstance() {
            return defaultInstance;
        }

        public LayerParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private LayerParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            int mutable_bitField1_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 10: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000001;
                            name_ = bs;
                            break;
                        }
                        case 18: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000002;
                            type_ = bs;
                            break;
                        }
                        case 26: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                                bottom_ = new com.google.protobuf.LazyStringArrayList();
                                mutable_bitField0_ |= 0x00000004;
                            }
                            bottom_.add(bs);
                            break;
                        }
                        case 34: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                                top_ = new com.google.protobuf.LazyStringArrayList();
                                mutable_bitField0_ |= 0x00000008;
                            }
                            top_.add(bs);
                            break;
                        }
                        case 45: {
                            if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                                lossWeight_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x00000020;
                            }
                            lossWeight_.add(input.readFloat());
                            break;
                        }
                        case 42: {
                            int length = input.readRawVarint32();
                            int limit = input.pushLimit(length);
                            if (!((mutable_bitField0_ & 0x00000020) == 0x00000020) && input.getBytesUntilLimit() > 0) {
                                lossWeight_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x00000020;
                            }
                            while (input.getBytesUntilLimit() > 0) {
                                lossWeight_.add(input.readFloat());
                            }
                            input.popLimit(limit);
                            break;
                        }
                        case 50: {
                            if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                                param_ = new java.util.ArrayList<caffe.Loadcaffe.ParamSpec>();
                                mutable_bitField0_ |= 0x00000040;
                            }
                            param_.add(input.readMessage(caffe.Loadcaffe.ParamSpec.PARSER, extensionRegistry));
                            break;
                        }
                        case 58: {
                            if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                                blobs_ = new java.util.ArrayList<caffe.Loadcaffe.BlobProto>();
                                mutable_bitField0_ |= 0x00000080;
                            }
                            blobs_.add(input.readMessage(caffe.Loadcaffe.BlobProto.PARSER, extensionRegistry));
                            break;
                        }
                        case 66: {
                            if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                                include_ = new java.util.ArrayList<caffe.Loadcaffe.NetStateRule>();
                                mutable_bitField0_ |= 0x00000100;
                            }
                            include_.add(input.readMessage(caffe.Loadcaffe.NetStateRule.PARSER, extensionRegistry));
                            break;
                        }
                        case 74: {
                            if (!((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
                                exclude_ = new java.util.ArrayList<caffe.Loadcaffe.NetStateRule>();
                                mutable_bitField0_ |= 0x00000200;
                            }
                            exclude_.add(input.readMessage(caffe.Loadcaffe.NetStateRule.PARSER, extensionRegistry));
                            break;
                        }
                        case 80: {
                            int rawValue = input.readEnum();
                            caffe.Loadcaffe.Phase value = caffe.Loadcaffe.Phase.valueOf(rawValue);
                            if (value == null) {
                                unknownFields.mergeVarintField(10, rawValue);
                            } else {
                                bitField0_ |= 0x00000004;
                                phase_ = value;
                            }
                            break;
                        }
                        case 802: {
                            caffe.Loadcaffe.TransformationParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                                subBuilder = transformParam_.toBuilder();
                            }
                            transformParam_ = input.readMessage(caffe.Loadcaffe.TransformationParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(transformParam_);
                                transformParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000008;
                            break;
                        }
                        case 810: {
                            caffe.Loadcaffe.LossParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                                subBuilder = lossParam_.toBuilder();
                            }
                            lossParam_ = input.readMessage(caffe.Loadcaffe.LossParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(lossParam_);
                                lossParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000010;
                            break;
                        }
                        case 818: {
                            caffe.Loadcaffe.AccuracyParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                                subBuilder = accuracyParam_.toBuilder();
                            }
                            accuracyParam_ = input.readMessage(caffe.Loadcaffe.AccuracyParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(accuracyParam_);
                                accuracyParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000020;
                            break;
                        }
                        case 826: {
                            caffe.Loadcaffe.ArgMaxParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                                subBuilder = argmaxParam_.toBuilder();
                            }
                            argmaxParam_ = input.readMessage(caffe.Loadcaffe.ArgMaxParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(argmaxParam_);
                                argmaxParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000040;
                            break;
                        }
                        case 834: {
                            caffe.Loadcaffe.ConcatParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000080) == 0x00000080)) {
                                subBuilder = concatParam_.toBuilder();
                            }
                            concatParam_ = input.readMessage(caffe.Loadcaffe.ConcatParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(concatParam_);
                                concatParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000080;
                            break;
                        }
                        case 842: {
                            caffe.Loadcaffe.ContrastiveLossParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000100) == 0x00000100)) {
                                subBuilder = contrastiveLossParam_.toBuilder();
                            }
                            contrastiveLossParam_ = input.readMessage(caffe.Loadcaffe.ContrastiveLossParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(contrastiveLossParam_);
                                contrastiveLossParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000100;
                            break;
                        }
                        case 850: {
                            caffe.Loadcaffe.ConvolutionParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000200) == 0x00000200)) {
                                subBuilder = convolutionParam_.toBuilder();
                            }
                            convolutionParam_ = input.readMessage(caffe.Loadcaffe.ConvolutionParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(convolutionParam_);
                                convolutionParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000200;
                            break;
                        }
                        case 858: {
                            caffe.Loadcaffe.DataParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000400) == 0x00000400)) {
                                subBuilder = dataParam_.toBuilder();
                            }
                            dataParam_ = input.readMessage(caffe.Loadcaffe.DataParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(dataParam_);
                                dataParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000400;
                            break;
                        }
                        case 866: {
                            caffe.Loadcaffe.DropoutParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000800) == 0x00000800)) {
                                subBuilder = dropoutParam_.toBuilder();
                            }
                            dropoutParam_ = input.readMessage(caffe.Loadcaffe.DropoutParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(dropoutParam_);
                                dropoutParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000800;
                            break;
                        }
                        case 874: {
                            caffe.Loadcaffe.DummyDataParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00001000) == 0x00001000)) {
                                subBuilder = dummyDataParam_.toBuilder();
                            }
                            dummyDataParam_ = input.readMessage(caffe.Loadcaffe.DummyDataParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(dummyDataParam_);
                                dummyDataParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00001000;
                            break;
                        }
                        case 882: {
                            caffe.Loadcaffe.EltwiseParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00002000) == 0x00002000)) {
                                subBuilder = eltwiseParam_.toBuilder();
                            }
                            eltwiseParam_ = input.readMessage(caffe.Loadcaffe.EltwiseParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(eltwiseParam_);
                                eltwiseParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00002000;
                            break;
                        }
                        case 890: {
                            caffe.Loadcaffe.ExpParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00004000) == 0x00004000)) {
                                subBuilder = expParam_.toBuilder();
                            }
                            expParam_ = input.readMessage(caffe.Loadcaffe.ExpParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(expParam_);
                                expParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00004000;
                            break;
                        }
                        case 898: {
                            caffe.Loadcaffe.HDF5DataParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00008000) == 0x00008000)) {
                                subBuilder = hdf5DataParam_.toBuilder();
                            }
                            hdf5DataParam_ = input.readMessage(caffe.Loadcaffe.HDF5DataParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(hdf5DataParam_);
                                hdf5DataParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00008000;
                            break;
                        }
                        case 906: {
                            caffe.Loadcaffe.HDF5OutputParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00010000) == 0x00010000)) {
                                subBuilder = hdf5OutputParam_.toBuilder();
                            }
                            hdf5OutputParam_ = input.readMessage(caffe.Loadcaffe.HDF5OutputParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(hdf5OutputParam_);
                                hdf5OutputParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00010000;
                            break;
                        }
                        case 914: {
                            caffe.Loadcaffe.HingeLossParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00020000) == 0x00020000)) {
                                subBuilder = hingeLossParam_.toBuilder();
                            }
                            hingeLossParam_ = input.readMessage(caffe.Loadcaffe.HingeLossParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(hingeLossParam_);
                                hingeLossParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00020000;
                            break;
                        }
                        case 922: {
                            caffe.Loadcaffe.ImageDataParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00040000) == 0x00040000)) {
                                subBuilder = imageDataParam_.toBuilder();
                            }
                            imageDataParam_ = input.readMessage(caffe.Loadcaffe.ImageDataParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(imageDataParam_);
                                imageDataParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00040000;
                            break;
                        }
                        case 930: {
                            caffe.Loadcaffe.InfogainLossParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00080000) == 0x00080000)) {
                                subBuilder = infogainLossParam_.toBuilder();
                            }
                            infogainLossParam_ = input.readMessage(caffe.Loadcaffe.InfogainLossParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(infogainLossParam_);
                                infogainLossParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00080000;
                            break;
                        }
                        case 938: {
                            caffe.Loadcaffe.InnerProductParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00100000) == 0x00100000)) {
                                subBuilder = innerProductParam_.toBuilder();
                            }
                            innerProductParam_ = input.readMessage(caffe.Loadcaffe.InnerProductParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(innerProductParam_);
                                innerProductParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00100000;
                            break;
                        }
                        case 946: {
                            caffe.Loadcaffe.LRNParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00200000) == 0x00200000)) {
                                subBuilder = lrnParam_.toBuilder();
                            }
                            lrnParam_ = input.readMessage(caffe.Loadcaffe.LRNParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(lrnParam_);
                                lrnParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00200000;
                            break;
                        }
                        case 954: {
                            caffe.Loadcaffe.MemoryDataParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00400000) == 0x00400000)) {
                                subBuilder = memoryDataParam_.toBuilder();
                            }
                            memoryDataParam_ = input.readMessage(caffe.Loadcaffe.MemoryDataParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(memoryDataParam_);
                                memoryDataParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00400000;
                            break;
                        }
                        case 962: {
                            caffe.Loadcaffe.MVNParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00800000) == 0x00800000)) {
                                subBuilder = mvnParam_.toBuilder();
                            }
                            mvnParam_ = input.readMessage(caffe.Loadcaffe.MVNParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(mvnParam_);
                                mvnParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00800000;
                            break;
                        }
                        case 970: {
                            caffe.Loadcaffe.PoolingParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x01000000) == 0x01000000)) {
                                subBuilder = poolingParam_.toBuilder();
                            }
                            poolingParam_ = input.readMessage(caffe.Loadcaffe.PoolingParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(poolingParam_);
                                poolingParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x01000000;
                            break;
                        }
                        case 978: {
                            caffe.Loadcaffe.PowerParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x02000000) == 0x02000000)) {
                                subBuilder = powerParam_.toBuilder();
                            }
                            powerParam_ = input.readMessage(caffe.Loadcaffe.PowerParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(powerParam_);
                                powerParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x02000000;
                            break;
                        }
                        case 986: {
                            caffe.Loadcaffe.ReLUParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x10000000) == 0x10000000)) {
                                subBuilder = reluParam_.toBuilder();
                            }
                            reluParam_ = input.readMessage(caffe.Loadcaffe.ReLUParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(reluParam_);
                                reluParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x10000000;
                            break;
                        }
                        case 994: {
                            caffe.Loadcaffe.SigmoidParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x20000000) == 0x20000000)) {
                                subBuilder = sigmoidParam_.toBuilder();
                            }
                            sigmoidParam_ = input.readMessage(caffe.Loadcaffe.SigmoidParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(sigmoidParam_);
                                sigmoidParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x20000000;
                            break;
                        }
                        case 1002: {
                            caffe.Loadcaffe.SoftmaxParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x40000000) == 0x40000000)) {
                                subBuilder = softmaxParam_.toBuilder();
                            }
                            softmaxParam_ = input.readMessage(caffe.Loadcaffe.SoftmaxParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(softmaxParam_);
                                softmaxParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x40000000;
                            break;
                        }
                        case 1010: {
                            caffe.Loadcaffe.SliceParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x80000000) == 0x80000000)) {
                                subBuilder = sliceParam_.toBuilder();
                            }
                            sliceParam_ = input.readMessage(caffe.Loadcaffe.SliceParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(sliceParam_);
                                sliceParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x80000000;
                            break;
                        }
                        case 1018: {
                            caffe.Loadcaffe.TanHParameter.Builder subBuilder = null;
                            if (((bitField1_ & 0x00000001) == 0x00000001)) {
                                subBuilder = tanhParam_.toBuilder();
                            }
                            tanhParam_ = input.readMessage(caffe.Loadcaffe.TanHParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(tanhParam_);
                                tanhParam_ = subBuilder.buildPartial();
                            }
                            bitField1_ |= 0x00000001;
                            break;
                        }
                        case 1026: {
                            caffe.Loadcaffe.ThresholdParameter.Builder subBuilder = null;
                            if (((bitField1_ & 0x00000002) == 0x00000002)) {
                                subBuilder = thresholdParam_.toBuilder();
                            }
                            thresholdParam_ = input.readMessage(caffe.Loadcaffe.ThresholdParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(thresholdParam_);
                                thresholdParam_ = subBuilder.buildPartial();
                            }
                            bitField1_ |= 0x00000002;
                            break;
                        }
                        case 1034: {
                            caffe.Loadcaffe.WindowDataParameter.Builder subBuilder = null;
                            if (((bitField1_ & 0x00000004) == 0x00000004)) {
                                subBuilder = windowDataParam_.toBuilder();
                            }
                            windowDataParam_ = input.readMessage(caffe.Loadcaffe.WindowDataParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(windowDataParam_);
                                windowDataParam_ = subBuilder.buildPartial();
                            }
                            bitField1_ |= 0x00000004;
                            break;
                        }
                        case 1042: {
                            caffe.Loadcaffe.PythonParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x08000000) == 0x08000000)) {
                                subBuilder = pythonParam_.toBuilder();
                            }
                            pythonParam_ = input.readMessage(caffe.Loadcaffe.PythonParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(pythonParam_);
                                pythonParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x08000000;
                            break;
                        }
                        case 1050: {
                            caffe.Loadcaffe.PReLUParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x04000000) == 0x04000000)) {
                                subBuilder = preluParam_.toBuilder();
                            }
                            preluParam_ = input.readMessage(caffe.Loadcaffe.PReLUParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(preluParam_);
                                preluParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x04000000;
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                    bottom_ = bottom_.getUnmodifiableView();
                }
                if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                    top_ = top_.getUnmodifiableView();
                }
                if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                    lossWeight_ = java.util.Collections.unmodifiableList(lossWeight_);
                }
                if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                    param_ = java.util.Collections.unmodifiableList(param_);
                }
                if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                    blobs_ = java.util.Collections.unmodifiableList(blobs_);
                }
                if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                    include_ = java.util.Collections.unmodifiableList(include_);
                }
                if (((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
                    exclude_ = java.util.Collections.unmodifiableList(exclude_);
                }
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_LayerParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_LayerParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.LayerParameter.class, caffe.Loadcaffe.LayerParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<LayerParameter> PARSER =
                new com.google.protobuf.AbstractParser<LayerParameter>() {
                    public LayerParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new LayerParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<LayerParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        private int bitField1_;
        public static final int NAME_FIELD_NUMBER = 1;
        private java.lang.Object name_;
        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * the layer name
         * </pre>
         */
        public boolean hasName() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * the layer name
         * </pre>
         */
        public java.lang.String getName() {
            java.lang.Object ref = name_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    name_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * the layer name
         * </pre>
         */
        public com.google.protobuf.ByteString
        getNameBytes() {
            java.lang.Object ref = name_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                name_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int TYPE_FIELD_NUMBER = 2;
        private java.lang.Object type_;
        /**
         * <code>optional string type = 2;</code>
         *
         * <pre>
         * the layer type
         * </pre>
         */
        public boolean hasType() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional string type = 2;</code>
         *
         * <pre>
         * the layer type
         * </pre>
         */
        public java.lang.String getType() {
            java.lang.Object ref = type_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    type_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string type = 2;</code>
         *
         * <pre>
         * the layer type
         * </pre>
         */
        public com.google.protobuf.ByteString
        getTypeBytes() {
            java.lang.Object ref = type_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                type_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int BOTTOM_FIELD_NUMBER = 3;
        private com.google.protobuf.LazyStringList bottom_;
        /**
         * <code>repeated string bottom = 3;</code>
         *
         * <pre>
         * the name of each bottom blob
         * </pre>
         */
        public com.google.protobuf.ProtocolStringList
        getBottomList() {
            return bottom_;
        }
        /**
         * <code>repeated string bottom = 3;</code>
         *
         * <pre>
         * the name of each bottom blob
         * </pre>
         */
        public int getBottomCount() {
            return bottom_.size();
        }
        /**
         * <code>repeated string bottom = 3;</code>
         *
         * <pre>
         * the name of each bottom blob
         * </pre>
         */
        public java.lang.String getBottom(int index) {
            return bottom_.get(index);
        }
        /**
         * <code>repeated string bottom = 3;</code>
         *
         * <pre>
         * the name of each bottom blob
         * </pre>
         */
        public com.google.protobuf.ByteString
        getBottomBytes(int index) {
            return bottom_.getByteString(index);
        }

        public static final int TOP_FIELD_NUMBER = 4;
        private com.google.protobuf.LazyStringList top_;
        /**
         * <code>repeated string top = 4;</code>
         *
         * <pre>
         * the name of each top blob
         * </pre>
         */
        public com.google.protobuf.ProtocolStringList
        getTopList() {
            return top_;
        }
        /**
         * <code>repeated string top = 4;</code>
         *
         * <pre>
         * the name of each top blob
         * </pre>
         */
        public int getTopCount() {
            return top_.size();
        }
        /**
         * <code>repeated string top = 4;</code>
         *
         * <pre>
         * the name of each top blob
         * </pre>
         */
        public java.lang.String getTop(int index) {
            return top_.get(index);
        }
        /**
         * <code>repeated string top = 4;</code>
         *
         * <pre>
         * the name of each top blob
         * </pre>
         */
        public com.google.protobuf.ByteString
        getTopBytes(int index) {
            return top_.getByteString(index);
        }

        public static final int PHASE_FIELD_NUMBER = 10;
        private caffe.Loadcaffe.Phase phase_;
        /**
         * <code>optional .caffe.Phase phase = 10;</code>
         *
         * <pre>
         * The train / test phase for computation.
         * </pre>
         */
        public boolean hasPhase() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional .caffe.Phase phase = 10;</code>
         *
         * <pre>
         * The train / test phase for computation.
         * </pre>
         */
        public caffe.Loadcaffe.Phase getPhase() {
            return phase_;
        }

        public static final int LOSS_WEIGHT_FIELD_NUMBER = 5;
        private java.util.List<java.lang.Float> lossWeight_;
        /**
         * <code>repeated float loss_weight = 5;</code>
         *
         * <pre>
         * The amount of weight to assign each top blob in the objective.
         * Each layer assigns a default value, usually of either 0 or 1,
         * to each top blob.
         * </pre>
         */
        public java.util.List<java.lang.Float>
        getLossWeightList() {
            return lossWeight_;
        }
        /**
         * <code>repeated float loss_weight = 5;</code>
         *
         * <pre>
         * The amount of weight to assign each top blob in the objective.
         * Each layer assigns a default value, usually of either 0 or 1,
         * to each top blob.
         * </pre>
         */
        public int getLossWeightCount() {
            return lossWeight_.size();
        }
        /**
         * <code>repeated float loss_weight = 5;</code>
         *
         * <pre>
         * The amount of weight to assign each top blob in the objective.
         * Each layer assigns a default value, usually of either 0 or 1,
         * to each top blob.
         * </pre>
         */
        public float getLossWeight(int index) {
            return lossWeight_.get(index);
        }

        public static final int PARAM_FIELD_NUMBER = 6;
        private java.util.List<caffe.Loadcaffe.ParamSpec> param_;
        /**
         * <code>repeated .caffe.ParamSpec param = 6;</code>
         *
         * <pre>
         * Specifies training parameters (multipliers on global learning constants,
         * and the name and other settings used for weight sharing).
         * </pre>
         */
        public java.util.List<caffe.Loadcaffe.ParamSpec> getParamList() {
            return param_;
        }
        /**
         * <code>repeated .caffe.ParamSpec param = 6;</code>
         *
         * <pre>
         * Specifies training parameters (multipliers on global learning constants,
         * and the name and other settings used for weight sharing).
         * </pre>
         */
        public java.util.List<? extends caffe.Loadcaffe.ParamSpecOrBuilder>
        getParamOrBuilderList() {
            return param_;
        }
        /**
         * <code>repeated .caffe.ParamSpec param = 6;</code>
         *
         * <pre>
         * Specifies training parameters (multipliers on global learning constants,
         * and the name and other settings used for weight sharing).
         * </pre>
         */
        public int getParamCount() {
            return param_.size();
        }
        /**
         * <code>repeated .caffe.ParamSpec param = 6;</code>
         *
         * <pre>
         * Specifies training parameters (multipliers on global learning constants,
         * and the name and other settings used for weight sharing).
         * </pre>
         */
        public caffe.Loadcaffe.ParamSpec getParam(int index) {
            return param_.get(index);
        }
        /**
         * <code>repeated .caffe.ParamSpec param = 6;</code>
         *
         * <pre>
         * Specifies training parameters (multipliers on global learning constants,
         * and the name and other settings used for weight sharing).
         * </pre>
         */
        public caffe.Loadcaffe.ParamSpecOrBuilder getParamOrBuilder(
                int index) {
            return param_.get(index);
        }

        public static final int BLOBS_FIELD_NUMBER = 7;
        private java.util.List<caffe.Loadcaffe.BlobProto> blobs_;
        /**
         * <code>repeated .caffe.BlobProto blobs = 7;</code>
         *
         * <pre>
         * The blobs containing the numeric parameters of the layer.
         * </pre>
         */
        public java.util.List<caffe.Loadcaffe.BlobProto> getBlobsList() {
            return blobs_;
        }
        /**
         * <code>repeated .caffe.BlobProto blobs = 7;</code>
         *
         * <pre>
         * The blobs containing the numeric parameters of the layer.
         * </pre>
         */
        public java.util.List<? extends caffe.Loadcaffe.BlobProtoOrBuilder>
        getBlobsOrBuilderList() {
            return blobs_;
        }
        /**
         * <code>repeated .caffe.BlobProto blobs = 7;</code>
         *
         * <pre>
         * The blobs containing the numeric parameters of the layer.
         * </pre>
         */
        public int getBlobsCount() {
            return blobs_.size();
        }
        /**
         * <code>repeated .caffe.BlobProto blobs = 7;</code>
         *
         * <pre>
         * The blobs containing the numeric parameters of the layer.
         * </pre>
         */
        public caffe.Loadcaffe.BlobProto getBlobs(int index) {
            return blobs_.get(index);
        }
        /**
         * <code>repeated .caffe.BlobProto blobs = 7;</code>
         *
         * <pre>
         * The blobs containing the numeric parameters of the layer.
         * </pre>
         */
        public caffe.Loadcaffe.BlobProtoOrBuilder getBlobsOrBuilder(
                int index) {
            return blobs_.get(index);
        }

        public static final int INCLUDE_FIELD_NUMBER = 8;
        private java.util.List<caffe.Loadcaffe.NetStateRule> include_;
        /**
         * <code>repeated .caffe.NetStateRule include = 8;</code>
         *
         * <pre>
         * Rules controlling whether and when a layer is included in the network,
         * based on the current NetState.  You may specify a non-zero number of rules
         * to include OR exclude, but not both.  If no include or exclude rules are
         * specified, the layer is always included.  If the current NetState meets
         * ANY (i.e., one or more) of the specified rules, the layer is
         * included/excluded.
         * </pre>
         */
        public java.util.List<caffe.Loadcaffe.NetStateRule> getIncludeList() {
            return include_;
        }
        /**
         * <code>repeated .caffe.NetStateRule include = 8;</code>
         *
         * <pre>
         * Rules controlling whether and when a layer is included in the network,
         * based on the current NetState.  You may specify a non-zero number of rules
         * to include OR exclude, but not both.  If no include or exclude rules are
         * specified, the layer is always included.  If the current NetState meets
         * ANY (i.e., one or more) of the specified rules, the layer is
         * included/excluded.
         * </pre>
         */
        public java.util.List<? extends caffe.Loadcaffe.NetStateRuleOrBuilder>
        getIncludeOrBuilderList() {
            return include_;
        }
        /**
         * <code>repeated .caffe.NetStateRule include = 8;</code>
         *
         * <pre>
         * Rules controlling whether and when a layer is included in the network,
         * based on the current NetState.  You may specify a non-zero number of rules
         * to include OR exclude, but not both.  If no include or exclude rules are
         * specified, the layer is always included.  If the current NetState meets
         * ANY (i.e., one or more) of the specified rules, the layer is
         * included/excluded.
         * </pre>
         */
        public int getIncludeCount() {
            return include_.size();
        }
        /**
         * <code>repeated .caffe.NetStateRule include = 8;</code>
         *
         * <pre>
         * Rules controlling whether and when a layer is included in the network,
         * based on the current NetState.  You may specify a non-zero number of rules
         * to include OR exclude, but not both.  If no include or exclude rules are
         * specified, the layer is always included.  If the current NetState meets
         * ANY (i.e., one or more) of the specified rules, the layer is
         * included/excluded.
         * </pre>
         */
        public caffe.Loadcaffe.NetStateRule getInclude(int index) {
            return include_.get(index);
        }
        /**
         * <code>repeated .caffe.NetStateRule include = 8;</code>
         *
         * <pre>
         * Rules controlling whether and when a layer is included in the network,
         * based on the current NetState.  You may specify a non-zero number of rules
         * to include OR exclude, but not both.  If no include or exclude rules are
         * specified, the layer is always included.  If the current NetState meets
         * ANY (i.e., one or more) of the specified rules, the layer is
         * included/excluded.
         * </pre>
         */
        public caffe.Loadcaffe.NetStateRuleOrBuilder getIncludeOrBuilder(
                int index) {
            return include_.get(index);
        }

        public static final int EXCLUDE_FIELD_NUMBER = 9;
        private java.util.List<caffe.Loadcaffe.NetStateRule> exclude_;
        /**
         * <code>repeated .caffe.NetStateRule exclude = 9;</code>
         */
        public java.util.List<caffe.Loadcaffe.NetStateRule> getExcludeList() {
            return exclude_;
        }
        /**
         * <code>repeated .caffe.NetStateRule exclude = 9;</code>
         */
        public java.util.List<? extends caffe.Loadcaffe.NetStateRuleOrBuilder>
        getExcludeOrBuilderList() {
            return exclude_;
        }
        /**
         * <code>repeated .caffe.NetStateRule exclude = 9;</code>
         */
        public int getExcludeCount() {
            return exclude_.size();
        }
        /**
         * <code>repeated .caffe.NetStateRule exclude = 9;</code>
         */
        public caffe.Loadcaffe.NetStateRule getExclude(int index) {
            return exclude_.get(index);
        }
        /**
         * <code>repeated .caffe.NetStateRule exclude = 9;</code>
         */
        public caffe.Loadcaffe.NetStateRuleOrBuilder getExcludeOrBuilder(
                int index) {
            return exclude_.get(index);
        }

        public static final int TRANSFORM_PARAM_FIELD_NUMBER = 100;
        private caffe.Loadcaffe.TransformationParameter transformParam_;
        /**
         * <code>optional .caffe.TransformationParameter transform_param = 100;</code>
         *
         * <pre>
         * Parameters for data pre-processing.
         * </pre>
         */
        public boolean hasTransformParam() {
            return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional .caffe.TransformationParameter transform_param = 100;</code>
         *
         * <pre>
         * Parameters for data pre-processing.
         * </pre>
         */
        public caffe.Loadcaffe.TransformationParameter getTransformParam() {
            return transformParam_;
        }
        /**
         * <code>optional .caffe.TransformationParameter transform_param = 100;</code>
         *
         * <pre>
         * Parameters for data pre-processing.
         * </pre>
         */
        public caffe.Loadcaffe.TransformationParameterOrBuilder getTransformParamOrBuilder() {
            return transformParam_;
        }

        public static final int LOSS_PARAM_FIELD_NUMBER = 101;
        private caffe.Loadcaffe.LossParameter lossParam_;
        /**
         * <code>optional .caffe.LossParameter loss_param = 101;</code>
         *
         * <pre>
         * Parameters shared by loss layers.
         * </pre>
         */
        public boolean hasLossParam() {
            return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>optional .caffe.LossParameter loss_param = 101;</code>
         *
         * <pre>
         * Parameters shared by loss layers.
         * </pre>
         */
        public caffe.Loadcaffe.LossParameter getLossParam() {
            return lossParam_;
        }
        /**
         * <code>optional .caffe.LossParameter loss_param = 101;</code>
         *
         * <pre>
         * Parameters shared by loss layers.
         * </pre>
         */
        public caffe.Loadcaffe.LossParameterOrBuilder getLossParamOrBuilder() {
            return lossParam_;
        }

        public static final int ACCURACY_PARAM_FIELD_NUMBER = 102;
        private caffe.Loadcaffe.AccuracyParameter accuracyParam_;
        /**
         * <code>optional .caffe.AccuracyParameter accuracy_param = 102;</code>
         *
         * <pre>
         * Layer type-specific parameters.
         * Note: certain layers may have more than one computational engine
         * for their implementation. These layers include an Engine type and
         * engine parameter for selecting the implementation.
         * The default for the engine is set by the ENGINE switch at compile-time.
         * </pre>
         */
        public boolean hasAccuracyParam() {
            return ((bitField0_ & 0x00000020) == 0x00000020);
        }
        /**
         * <code>optional .caffe.AccuracyParameter accuracy_param = 102;</code>
         *
         * <pre>
         * Layer type-specific parameters.
         * Note: certain layers may have more than one computational engine
         * for their implementation. These layers include an Engine type and
         * engine parameter for selecting the implementation.
         * The default for the engine is set by the ENGINE switch at compile-time.
         * </pre>
         */
        public caffe.Loadcaffe.AccuracyParameter getAccuracyParam() {
            return accuracyParam_;
        }
        /**
         * <code>optional .caffe.AccuracyParameter accuracy_param = 102;</code>
         *
         * <pre>
         * Layer type-specific parameters.
         * Note: certain layers may have more than one computational engine
         * for their implementation. These layers include an Engine type and
         * engine parameter for selecting the implementation.
         * The default for the engine is set by the ENGINE switch at compile-time.
         * </pre>
         */
        public caffe.Loadcaffe.AccuracyParameterOrBuilder getAccuracyParamOrBuilder() {
            return accuracyParam_;
        }

        public static final int ARGMAX_PARAM_FIELD_NUMBER = 103;
        private caffe.Loadcaffe.ArgMaxParameter argmaxParam_;
        /**
         * <code>optional .caffe.ArgMaxParameter argmax_param = 103;</code>
         */
        public boolean hasArgmaxParam() {
            return ((bitField0_ & 0x00000040) == 0x00000040);
        }
        /**
         * <code>optional .caffe.ArgMaxParameter argmax_param = 103;</code>
         */
        public caffe.Loadcaffe.ArgMaxParameter getArgmaxParam() {
            return argmaxParam_;
        }
        /**
         * <code>optional .caffe.ArgMaxParameter argmax_param = 103;</code>
         */
        public caffe.Loadcaffe.ArgMaxParameterOrBuilder getArgmaxParamOrBuilder() {
            return argmaxParam_;
        }

        public static final int CONCAT_PARAM_FIELD_NUMBER = 104;
        private caffe.Loadcaffe.ConcatParameter concatParam_;
        /**
         * <code>optional .caffe.ConcatParameter concat_param = 104;</code>
         */
        public boolean hasConcatParam() {
            return ((bitField0_ & 0x00000080) == 0x00000080);
        }
        /**
         * <code>optional .caffe.ConcatParameter concat_param = 104;</code>
         */
        public caffe.Loadcaffe.ConcatParameter getConcatParam() {
            return concatParam_;
        }
        /**
         * <code>optional .caffe.ConcatParameter concat_param = 104;</code>
         */
        public caffe.Loadcaffe.ConcatParameterOrBuilder getConcatParamOrBuilder() {
            return concatParam_;
        }

        public static final int CONTRASTIVE_LOSS_PARAM_FIELD_NUMBER = 105;
        private caffe.Loadcaffe.ContrastiveLossParameter contrastiveLossParam_;
        /**
         * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 105;</code>
         */
        public boolean hasContrastiveLossParam() {
            return ((bitField0_ & 0x00000100) == 0x00000100);
        }
        /**
         * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 105;</code>
         */
        public caffe.Loadcaffe.ContrastiveLossParameter getContrastiveLossParam() {
            return contrastiveLossParam_;
        }
        /**
         * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 105;</code>
         */
        public caffe.Loadcaffe.ContrastiveLossParameterOrBuilder getContrastiveLossParamOrBuilder() {
            return contrastiveLossParam_;
        }

        public static final int CONVOLUTION_PARAM_FIELD_NUMBER = 106;
        private caffe.Loadcaffe.ConvolutionParameter convolutionParam_;
        /**
         * <code>optional .caffe.ConvolutionParameter convolution_param = 106;</code>
         */
        public boolean hasConvolutionParam() {
            return ((bitField0_ & 0x00000200) == 0x00000200);
        }
        /**
         * <code>optional .caffe.ConvolutionParameter convolution_param = 106;</code>
         */
        public caffe.Loadcaffe.ConvolutionParameter getConvolutionParam() {
            return convolutionParam_;
        }
        /**
         * <code>optional .caffe.ConvolutionParameter convolution_param = 106;</code>
         */
        public caffe.Loadcaffe.ConvolutionParameterOrBuilder getConvolutionParamOrBuilder() {
            return convolutionParam_;
        }

        public static final int DATA_PARAM_FIELD_NUMBER = 107;
        private caffe.Loadcaffe.DataParameter dataParam_;
        /**
         * <code>optional .caffe.DataParameter data_param = 107;</code>
         */
        public boolean hasDataParam() {
            return ((bitField0_ & 0x00000400) == 0x00000400);
        }
        /**
         * <code>optional .caffe.DataParameter data_param = 107;</code>
         */
        public caffe.Loadcaffe.DataParameter getDataParam() {
            return dataParam_;
        }
        /**
         * <code>optional .caffe.DataParameter data_param = 107;</code>
         */
        public caffe.Loadcaffe.DataParameterOrBuilder getDataParamOrBuilder() {
            return dataParam_;
        }

        public static final int DROPOUT_PARAM_FIELD_NUMBER = 108;
        private caffe.Loadcaffe.DropoutParameter dropoutParam_;
        /**
         * <code>optional .caffe.DropoutParameter dropout_param = 108;</code>
         */
        public boolean hasDropoutParam() {
            return ((bitField0_ & 0x00000800) == 0x00000800);
        }
        /**
         * <code>optional .caffe.DropoutParameter dropout_param = 108;</code>
         */
        public caffe.Loadcaffe.DropoutParameter getDropoutParam() {
            return dropoutParam_;
        }
        /**
         * <code>optional .caffe.DropoutParameter dropout_param = 108;</code>
         */
        public caffe.Loadcaffe.DropoutParameterOrBuilder getDropoutParamOrBuilder() {
            return dropoutParam_;
        }

        public static final int DUMMY_DATA_PARAM_FIELD_NUMBER = 109;
        private caffe.Loadcaffe.DummyDataParameter dummyDataParam_;
        /**
         * <code>optional .caffe.DummyDataParameter dummy_data_param = 109;</code>
         */
        public boolean hasDummyDataParam() {
            return ((bitField0_ & 0x00001000) == 0x00001000);
        }
        /**
         * <code>optional .caffe.DummyDataParameter dummy_data_param = 109;</code>
         */
        public caffe.Loadcaffe.DummyDataParameter getDummyDataParam() {
            return dummyDataParam_;
        }
        /**
         * <code>optional .caffe.DummyDataParameter dummy_data_param = 109;</code>
         */
        public caffe.Loadcaffe.DummyDataParameterOrBuilder getDummyDataParamOrBuilder() {
            return dummyDataParam_;
        }

        public static final int ELTWISE_PARAM_FIELD_NUMBER = 110;
        private caffe.Loadcaffe.EltwiseParameter eltwiseParam_;
        /**
         * <code>optional .caffe.EltwiseParameter eltwise_param = 110;</code>
         */
        public boolean hasEltwiseParam() {
            return ((bitField0_ & 0x00002000) == 0x00002000);
        }
        /**
         * <code>optional .caffe.EltwiseParameter eltwise_param = 110;</code>
         */
        public caffe.Loadcaffe.EltwiseParameter getEltwiseParam() {
            return eltwiseParam_;
        }
        /**
         * <code>optional .caffe.EltwiseParameter eltwise_param = 110;</code>
         */
        public caffe.Loadcaffe.EltwiseParameterOrBuilder getEltwiseParamOrBuilder() {
            return eltwiseParam_;
        }

        public static final int EXP_PARAM_FIELD_NUMBER = 111;
        private caffe.Loadcaffe.ExpParameter expParam_;
        /**
         * <code>optional .caffe.ExpParameter exp_param = 111;</code>
         */
        public boolean hasExpParam() {
            return ((bitField0_ & 0x00004000) == 0x00004000);
        }
        /**
         * <code>optional .caffe.ExpParameter exp_param = 111;</code>
         */
        public caffe.Loadcaffe.ExpParameter getExpParam() {
            return expParam_;
        }
        /**
         * <code>optional .caffe.ExpParameter exp_param = 111;</code>
         */
        public caffe.Loadcaffe.ExpParameterOrBuilder getExpParamOrBuilder() {
            return expParam_;
        }

        public static final int HDF5_DATA_PARAM_FIELD_NUMBER = 112;
        private caffe.Loadcaffe.HDF5DataParameter hdf5DataParam_;
        /**
         * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 112;</code>
         */
        public boolean hasHdf5DataParam() {
            return ((bitField0_ & 0x00008000) == 0x00008000);
        }
        /**
         * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 112;</code>
         */
        public caffe.Loadcaffe.HDF5DataParameter getHdf5DataParam() {
            return hdf5DataParam_;
        }
        /**
         * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 112;</code>
         */
        public caffe.Loadcaffe.HDF5DataParameterOrBuilder getHdf5DataParamOrBuilder() {
            return hdf5DataParam_;
        }

        public static final int HDF5_OUTPUT_PARAM_FIELD_NUMBER = 113;
        private caffe.Loadcaffe.HDF5OutputParameter hdf5OutputParam_;
        /**
         * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 113;</code>
         */
        public boolean hasHdf5OutputParam() {
            return ((bitField0_ & 0x00010000) == 0x00010000);
        }
        /**
         * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 113;</code>
         */
        public caffe.Loadcaffe.HDF5OutputParameter getHdf5OutputParam() {
            return hdf5OutputParam_;
        }
        /**
         * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 113;</code>
         */
        public caffe.Loadcaffe.HDF5OutputParameterOrBuilder getHdf5OutputParamOrBuilder() {
            return hdf5OutputParam_;
        }

        public static final int HINGE_LOSS_PARAM_FIELD_NUMBER = 114;
        private caffe.Loadcaffe.HingeLossParameter hingeLossParam_;
        /**
         * <code>optional .caffe.HingeLossParameter hinge_loss_param = 114;</code>
         */
        public boolean hasHingeLossParam() {
            return ((bitField0_ & 0x00020000) == 0x00020000);
        }
        /**
         * <code>optional .caffe.HingeLossParameter hinge_loss_param = 114;</code>
         */
        public caffe.Loadcaffe.HingeLossParameter getHingeLossParam() {
            return hingeLossParam_;
        }
        /**
         * <code>optional .caffe.HingeLossParameter hinge_loss_param = 114;</code>
         */
        public caffe.Loadcaffe.HingeLossParameterOrBuilder getHingeLossParamOrBuilder() {
            return hingeLossParam_;
        }

        public static final int IMAGE_DATA_PARAM_FIELD_NUMBER = 115;
        private caffe.Loadcaffe.ImageDataParameter imageDataParam_;
        /**
         * <code>optional .caffe.ImageDataParameter image_data_param = 115;</code>
         */
        public boolean hasImageDataParam() {
            return ((bitField0_ & 0x00040000) == 0x00040000);
        }
        /**
         * <code>optional .caffe.ImageDataParameter image_data_param = 115;</code>
         */
        public caffe.Loadcaffe.ImageDataParameter getImageDataParam() {
            return imageDataParam_;
        }
        /**
         * <code>optional .caffe.ImageDataParameter image_data_param = 115;</code>
         */
        public caffe.Loadcaffe.ImageDataParameterOrBuilder getImageDataParamOrBuilder() {
            return imageDataParam_;
        }

        public static final int INFOGAIN_LOSS_PARAM_FIELD_NUMBER = 116;
        private caffe.Loadcaffe.InfogainLossParameter infogainLossParam_;
        /**
         * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 116;</code>
         */
        public boolean hasInfogainLossParam() {
            return ((bitField0_ & 0x00080000) == 0x00080000);
        }
        /**
         * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 116;</code>
         */
        public caffe.Loadcaffe.InfogainLossParameter getInfogainLossParam() {
            return infogainLossParam_;
        }
        /**
         * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 116;</code>
         */
        public caffe.Loadcaffe.InfogainLossParameterOrBuilder getInfogainLossParamOrBuilder() {
            return infogainLossParam_;
        }

        public static final int INNER_PRODUCT_PARAM_FIELD_NUMBER = 117;
        private caffe.Loadcaffe.InnerProductParameter innerProductParam_;
        /**
         * <code>optional .caffe.InnerProductParameter inner_product_param = 117;</code>
         */
        public boolean hasInnerProductParam() {
            return ((bitField0_ & 0x00100000) == 0x00100000);
        }
        /**
         * <code>optional .caffe.InnerProductParameter inner_product_param = 117;</code>
         */
        public caffe.Loadcaffe.InnerProductParameter getInnerProductParam() {
            return innerProductParam_;
        }
        /**
         * <code>optional .caffe.InnerProductParameter inner_product_param = 117;</code>
         */
        public caffe.Loadcaffe.InnerProductParameterOrBuilder getInnerProductParamOrBuilder() {
            return innerProductParam_;
        }

        public static final int LRN_PARAM_FIELD_NUMBER = 118;
        private caffe.Loadcaffe.LRNParameter lrnParam_;
        /**
         * <code>optional .caffe.LRNParameter lrn_param = 118;</code>
         */
        public boolean hasLrnParam() {
            return ((bitField0_ & 0x00200000) == 0x00200000);
        }
        /**
         * <code>optional .caffe.LRNParameter lrn_param = 118;</code>
         */
        public caffe.Loadcaffe.LRNParameter getLrnParam() {
            return lrnParam_;
        }
        /**
         * <code>optional .caffe.LRNParameter lrn_param = 118;</code>
         */
        public caffe.Loadcaffe.LRNParameterOrBuilder getLrnParamOrBuilder() {
            return lrnParam_;
        }

        public static final int MEMORY_DATA_PARAM_FIELD_NUMBER = 119;
        private caffe.Loadcaffe.MemoryDataParameter memoryDataParam_;
        /**
         * <code>optional .caffe.MemoryDataParameter memory_data_param = 119;</code>
         */
        public boolean hasMemoryDataParam() {
            return ((bitField0_ & 0x00400000) == 0x00400000);
        }
        /**
         * <code>optional .caffe.MemoryDataParameter memory_data_param = 119;</code>
         */
        public caffe.Loadcaffe.MemoryDataParameter getMemoryDataParam() {
            return memoryDataParam_;
        }
        /**
         * <code>optional .caffe.MemoryDataParameter memory_data_param = 119;</code>
         */
        public caffe.Loadcaffe.MemoryDataParameterOrBuilder getMemoryDataParamOrBuilder() {
            return memoryDataParam_;
        }

        public static final int MVN_PARAM_FIELD_NUMBER = 120;
        private caffe.Loadcaffe.MVNParameter mvnParam_;
        /**
         * <code>optional .caffe.MVNParameter mvn_param = 120;</code>
         */
        public boolean hasMvnParam() {
            return ((bitField0_ & 0x00800000) == 0x00800000);
        }
        /**
         * <code>optional .caffe.MVNParameter mvn_param = 120;</code>
         */
        public caffe.Loadcaffe.MVNParameter getMvnParam() {
            return mvnParam_;
        }
        /**
         * <code>optional .caffe.MVNParameter mvn_param = 120;</code>
         */
        public caffe.Loadcaffe.MVNParameterOrBuilder getMvnParamOrBuilder() {
            return mvnParam_;
        }

        public static final int POOLING_PARAM_FIELD_NUMBER = 121;
        private caffe.Loadcaffe.PoolingParameter poolingParam_;
        /**
         * <code>optional .caffe.PoolingParameter pooling_param = 121;</code>
         */
        public boolean hasPoolingParam() {
            return ((bitField0_ & 0x01000000) == 0x01000000);
        }
        /**
         * <code>optional .caffe.PoolingParameter pooling_param = 121;</code>
         */
        public caffe.Loadcaffe.PoolingParameter getPoolingParam() {
            return poolingParam_;
        }
        /**
         * <code>optional .caffe.PoolingParameter pooling_param = 121;</code>
         */
        public caffe.Loadcaffe.PoolingParameterOrBuilder getPoolingParamOrBuilder() {
            return poolingParam_;
        }

        public static final int POWER_PARAM_FIELD_NUMBER = 122;
        private caffe.Loadcaffe.PowerParameter powerParam_;
        /**
         * <code>optional .caffe.PowerParameter power_param = 122;</code>
         */
        public boolean hasPowerParam() {
            return ((bitField0_ & 0x02000000) == 0x02000000);
        }
        /**
         * <code>optional .caffe.PowerParameter power_param = 122;</code>
         */
        public caffe.Loadcaffe.PowerParameter getPowerParam() {
            return powerParam_;
        }
        /**
         * <code>optional .caffe.PowerParameter power_param = 122;</code>
         */
        public caffe.Loadcaffe.PowerParameterOrBuilder getPowerParamOrBuilder() {
            return powerParam_;
        }

        public static final int PRELU_PARAM_FIELD_NUMBER = 131;
        private caffe.Loadcaffe.PReLUParameter preluParam_;
        /**
         * <code>optional .caffe.PReLUParameter prelu_param = 131;</code>
         */
        public boolean hasPreluParam() {
            return ((bitField0_ & 0x04000000) == 0x04000000);
        }
        /**
         * <code>optional .caffe.PReLUParameter prelu_param = 131;</code>
         */
        public caffe.Loadcaffe.PReLUParameter getPreluParam() {
            return preluParam_;
        }
        /**
         * <code>optional .caffe.PReLUParameter prelu_param = 131;</code>
         */
        public caffe.Loadcaffe.PReLUParameterOrBuilder getPreluParamOrBuilder() {
            return preluParam_;
        }

        public static final int PYTHON_PARAM_FIELD_NUMBER = 130;
        private caffe.Loadcaffe.PythonParameter pythonParam_;
        /**
         * <code>optional .caffe.PythonParameter python_param = 130;</code>
         */
        public boolean hasPythonParam() {
            return ((bitField0_ & 0x08000000) == 0x08000000);
        }
        /**
         * <code>optional .caffe.PythonParameter python_param = 130;</code>
         */
        public caffe.Loadcaffe.PythonParameter getPythonParam() {
            return pythonParam_;
        }
        /**
         * <code>optional .caffe.PythonParameter python_param = 130;</code>
         */
        public caffe.Loadcaffe.PythonParameterOrBuilder getPythonParamOrBuilder() {
            return pythonParam_;
        }

        public static final int RELU_PARAM_FIELD_NUMBER = 123;
        private caffe.Loadcaffe.ReLUParameter reluParam_;
        /**
         * <code>optional .caffe.ReLUParameter relu_param = 123;</code>
         */
        public boolean hasReluParam() {
            return ((bitField0_ & 0x10000000) == 0x10000000);
        }
        /**
         * <code>optional .caffe.ReLUParameter relu_param = 123;</code>
         */
        public caffe.Loadcaffe.ReLUParameter getReluParam() {
            return reluParam_;
        }
        /**
         * <code>optional .caffe.ReLUParameter relu_param = 123;</code>
         */
        public caffe.Loadcaffe.ReLUParameterOrBuilder getReluParamOrBuilder() {
            return reluParam_;
        }

        public static final int SIGMOID_PARAM_FIELD_NUMBER = 124;
        private caffe.Loadcaffe.SigmoidParameter sigmoidParam_;
        /**
         * <code>optional .caffe.SigmoidParameter sigmoid_param = 124;</code>
         */
        public boolean hasSigmoidParam() {
            return ((bitField0_ & 0x20000000) == 0x20000000);
        }
        /**
         * <code>optional .caffe.SigmoidParameter sigmoid_param = 124;</code>
         */
        public caffe.Loadcaffe.SigmoidParameter getSigmoidParam() {
            return sigmoidParam_;
        }
        /**
         * <code>optional .caffe.SigmoidParameter sigmoid_param = 124;</code>
         */
        public caffe.Loadcaffe.SigmoidParameterOrBuilder getSigmoidParamOrBuilder() {
            return sigmoidParam_;
        }

        public static final int SOFTMAX_PARAM_FIELD_NUMBER = 125;
        private caffe.Loadcaffe.SoftmaxParameter softmaxParam_;
        /**
         * <code>optional .caffe.SoftmaxParameter softmax_param = 125;</code>
         */
        public boolean hasSoftmaxParam() {
            return ((bitField0_ & 0x40000000) == 0x40000000);
        }
        /**
         * <code>optional .caffe.SoftmaxParameter softmax_param = 125;</code>
         */
        public caffe.Loadcaffe.SoftmaxParameter getSoftmaxParam() {
            return softmaxParam_;
        }
        /**
         * <code>optional .caffe.SoftmaxParameter softmax_param = 125;</code>
         */
        public caffe.Loadcaffe.SoftmaxParameterOrBuilder getSoftmaxParamOrBuilder() {
            return softmaxParam_;
        }

        public static final int SLICE_PARAM_FIELD_NUMBER = 126;
        private caffe.Loadcaffe.SliceParameter sliceParam_;
        /**
         * <code>optional .caffe.SliceParameter slice_param = 126;</code>
         */
        public boolean hasSliceParam() {
            return ((bitField0_ & 0x80000000) == 0x80000000);
        }
        /**
         * <code>optional .caffe.SliceParameter slice_param = 126;</code>
         */
        public caffe.Loadcaffe.SliceParameter getSliceParam() {
            return sliceParam_;
        }
        /**
         * <code>optional .caffe.SliceParameter slice_param = 126;</code>
         */
        public caffe.Loadcaffe.SliceParameterOrBuilder getSliceParamOrBuilder() {
            return sliceParam_;
        }

        public static final int TANH_PARAM_FIELD_NUMBER = 127;
        private caffe.Loadcaffe.TanHParameter tanhParam_;
        /**
         * <code>optional .caffe.TanHParameter tanh_param = 127;</code>
         */
        public boolean hasTanhParam() {
            return ((bitField1_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional .caffe.TanHParameter tanh_param = 127;</code>
         */
        public caffe.Loadcaffe.TanHParameter getTanhParam() {
            return tanhParam_;
        }
        /**
         * <code>optional .caffe.TanHParameter tanh_param = 127;</code>
         */
        public caffe.Loadcaffe.TanHParameterOrBuilder getTanhParamOrBuilder() {
            return tanhParam_;
        }

        public static final int THRESHOLD_PARAM_FIELD_NUMBER = 128;
        private caffe.Loadcaffe.ThresholdParameter thresholdParam_;
        /**
         * <code>optional .caffe.ThresholdParameter threshold_param = 128;</code>
         */
        public boolean hasThresholdParam() {
            return ((bitField1_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional .caffe.ThresholdParameter threshold_param = 128;</code>
         */
        public caffe.Loadcaffe.ThresholdParameter getThresholdParam() {
            return thresholdParam_;
        }
        /**
         * <code>optional .caffe.ThresholdParameter threshold_param = 128;</code>
         */
        public caffe.Loadcaffe.ThresholdParameterOrBuilder getThresholdParamOrBuilder() {
            return thresholdParam_;
        }

        public static final int WINDOW_DATA_PARAM_FIELD_NUMBER = 129;
        private caffe.Loadcaffe.WindowDataParameter windowDataParam_;
        /**
         * <code>optional .caffe.WindowDataParameter window_data_param = 129;</code>
         */
        public boolean hasWindowDataParam() {
            return ((bitField1_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional .caffe.WindowDataParameter window_data_param = 129;</code>
         */
        public caffe.Loadcaffe.WindowDataParameter getWindowDataParam() {
            return windowDataParam_;
        }
        /**
         * <code>optional .caffe.WindowDataParameter window_data_param = 129;</code>
         */
        public caffe.Loadcaffe.WindowDataParameterOrBuilder getWindowDataParamOrBuilder() {
            return windowDataParam_;
        }

        private void initFields() {
            name_ = "";
            type_ = "";
            bottom_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            top_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            phase_ = caffe.Loadcaffe.Phase.TRAIN;
            lossWeight_ = java.util.Collections.emptyList();
            param_ = java.util.Collections.emptyList();
            blobs_ = java.util.Collections.emptyList();
            include_ = java.util.Collections.emptyList();
            exclude_ = java.util.Collections.emptyList();
            transformParam_ = caffe.Loadcaffe.TransformationParameter.getDefaultInstance();
            lossParam_ = caffe.Loadcaffe.LossParameter.getDefaultInstance();
            accuracyParam_ = caffe.Loadcaffe.AccuracyParameter.getDefaultInstance();
            argmaxParam_ = caffe.Loadcaffe.ArgMaxParameter.getDefaultInstance();
            concatParam_ = caffe.Loadcaffe.ConcatParameter.getDefaultInstance();
            contrastiveLossParam_ = caffe.Loadcaffe.ContrastiveLossParameter.getDefaultInstance();
            convolutionParam_ = caffe.Loadcaffe.ConvolutionParameter.getDefaultInstance();
            dataParam_ = caffe.Loadcaffe.DataParameter.getDefaultInstance();
            dropoutParam_ = caffe.Loadcaffe.DropoutParameter.getDefaultInstance();
            dummyDataParam_ = caffe.Loadcaffe.DummyDataParameter.getDefaultInstance();
            eltwiseParam_ = caffe.Loadcaffe.EltwiseParameter.getDefaultInstance();
            expParam_ = caffe.Loadcaffe.ExpParameter.getDefaultInstance();
            hdf5DataParam_ = caffe.Loadcaffe.HDF5DataParameter.getDefaultInstance();
            hdf5OutputParam_ = caffe.Loadcaffe.HDF5OutputParameter.getDefaultInstance();
            hingeLossParam_ = caffe.Loadcaffe.HingeLossParameter.getDefaultInstance();
            imageDataParam_ = caffe.Loadcaffe.ImageDataParameter.getDefaultInstance();
            infogainLossParam_ = caffe.Loadcaffe.InfogainLossParameter.getDefaultInstance();
            innerProductParam_ = caffe.Loadcaffe.InnerProductParameter.getDefaultInstance();
            lrnParam_ = caffe.Loadcaffe.LRNParameter.getDefaultInstance();
            memoryDataParam_ = caffe.Loadcaffe.MemoryDataParameter.getDefaultInstance();
            mvnParam_ = caffe.Loadcaffe.MVNParameter.getDefaultInstance();
            poolingParam_ = caffe.Loadcaffe.PoolingParameter.getDefaultInstance();
            powerParam_ = caffe.Loadcaffe.PowerParameter.getDefaultInstance();
            preluParam_ = caffe.Loadcaffe.PReLUParameter.getDefaultInstance();
            pythonParam_ = caffe.Loadcaffe.PythonParameter.getDefaultInstance();
            reluParam_ = caffe.Loadcaffe.ReLUParameter.getDefaultInstance();
            sigmoidParam_ = caffe.Loadcaffe.SigmoidParameter.getDefaultInstance();
            softmaxParam_ = caffe.Loadcaffe.SoftmaxParameter.getDefaultInstance();
            sliceParam_ = caffe.Loadcaffe.SliceParameter.getDefaultInstance();
            tanhParam_ = caffe.Loadcaffe.TanHParameter.getDefaultInstance();
            thresholdParam_ = caffe.Loadcaffe.ThresholdParameter.getDefaultInstance();
            windowDataParam_ = caffe.Loadcaffe.WindowDataParameter.getDefaultInstance();
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeBytes(1, getNameBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeBytes(2, getTypeBytes());
            }
            for (int i = 0; i < bottom_.size(); i++) {
                output.writeBytes(3, bottom_.getByteString(i));
            }
            for (int i = 0; i < top_.size(); i++) {
                output.writeBytes(4, top_.getByteString(i));
            }
            for (int i = 0; i < lossWeight_.size(); i++) {
                output.writeFloat(5, lossWeight_.get(i));
            }
            for (int i = 0; i < param_.size(); i++) {
                output.writeMessage(6, param_.get(i));
            }
            for (int i = 0; i < blobs_.size(); i++) {
                output.writeMessage(7, blobs_.get(i));
            }
            for (int i = 0; i < include_.size(); i++) {
                output.writeMessage(8, include_.get(i));
            }
            for (int i = 0; i < exclude_.size(); i++) {
                output.writeMessage(9, exclude_.get(i));
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeEnum(10, phase_.getNumber());
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                output.writeMessage(100, transformParam_);
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                output.writeMessage(101, lossParam_);
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                output.writeMessage(102, accuracyParam_);
            }
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                output.writeMessage(103, argmaxParam_);
            }
            if (((bitField0_ & 0x00000080) == 0x00000080)) {
                output.writeMessage(104, concatParam_);
            }
            if (((bitField0_ & 0x00000100) == 0x00000100)) {
                output.writeMessage(105, contrastiveLossParam_);
            }
            if (((bitField0_ & 0x00000200) == 0x00000200)) {
                output.writeMessage(106, convolutionParam_);
            }
            if (((bitField0_ & 0x00000400) == 0x00000400)) {
                output.writeMessage(107, dataParam_);
            }
            if (((bitField0_ & 0x00000800) == 0x00000800)) {
                output.writeMessage(108, dropoutParam_);
            }
            if (((bitField0_ & 0x00001000) == 0x00001000)) {
                output.writeMessage(109, dummyDataParam_);
            }
            if (((bitField0_ & 0x00002000) == 0x00002000)) {
                output.writeMessage(110, eltwiseParam_);
            }
            if (((bitField0_ & 0x00004000) == 0x00004000)) {
                output.writeMessage(111, expParam_);
            }
            if (((bitField0_ & 0x00008000) == 0x00008000)) {
                output.writeMessage(112, hdf5DataParam_);
            }
            if (((bitField0_ & 0x00010000) == 0x00010000)) {
                output.writeMessage(113, hdf5OutputParam_);
            }
            if (((bitField0_ & 0x00020000) == 0x00020000)) {
                output.writeMessage(114, hingeLossParam_);
            }
            if (((bitField0_ & 0x00040000) == 0x00040000)) {
                output.writeMessage(115, imageDataParam_);
            }
            if (((bitField0_ & 0x00080000) == 0x00080000)) {
                output.writeMessage(116, infogainLossParam_);
            }
            if (((bitField0_ & 0x00100000) == 0x00100000)) {
                output.writeMessage(117, innerProductParam_);
            }
            if (((bitField0_ & 0x00200000) == 0x00200000)) {
                output.writeMessage(118, lrnParam_);
            }
            if (((bitField0_ & 0x00400000) == 0x00400000)) {
                output.writeMessage(119, memoryDataParam_);
            }
            if (((bitField0_ & 0x00800000) == 0x00800000)) {
                output.writeMessage(120, mvnParam_);
            }
            if (((bitField0_ & 0x01000000) == 0x01000000)) {
                output.writeMessage(121, poolingParam_);
            }
            if (((bitField0_ & 0x02000000) == 0x02000000)) {
                output.writeMessage(122, powerParam_);
            }
            if (((bitField0_ & 0x10000000) == 0x10000000)) {
                output.writeMessage(123, reluParam_);
            }
            if (((bitField0_ & 0x20000000) == 0x20000000)) {
                output.writeMessage(124, sigmoidParam_);
            }
            if (((bitField0_ & 0x40000000) == 0x40000000)) {
                output.writeMessage(125, softmaxParam_);
            }
            if (((bitField0_ & 0x80000000) == 0x80000000)) {
                output.writeMessage(126, sliceParam_);
            }
            if (((bitField1_ & 0x00000001) == 0x00000001)) {
                output.writeMessage(127, tanhParam_);
            }
            if (((bitField1_ & 0x00000002) == 0x00000002)) {
                output.writeMessage(128, thresholdParam_);
            }
            if (((bitField1_ & 0x00000004) == 0x00000004)) {
                output.writeMessage(129, windowDataParam_);
            }
            if (((bitField0_ & 0x08000000) == 0x08000000)) {
                output.writeMessage(130, pythonParam_);
            }
            if (((bitField0_ & 0x04000000) == 0x04000000)) {
                output.writeMessage(131, preluParam_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(1, getNameBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(2, getTypeBytes());
            }
            {
                int dataSize = 0;
                for (int i = 0; i < bottom_.size(); i++) {
                    dataSize += com.google.protobuf.CodedOutputStream
                            .computeBytesSizeNoTag(bottom_.getByteString(i));
                }
                size += dataSize;
                size += 1 * getBottomList().size();
            }
            {
                int dataSize = 0;
                for (int i = 0; i < top_.size(); i++) {
                    dataSize += com.google.protobuf.CodedOutputStream
                            .computeBytesSizeNoTag(top_.getByteString(i));
                }
                size += dataSize;
                size += 1 * getTopList().size();
            }
            {
                int dataSize = 0;
                dataSize = 4 * getLossWeightList().size();
                size += dataSize;
                size += 1 * getLossWeightList().size();
            }
            for (int i = 0; i < param_.size(); i++) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(6, param_.get(i));
            }
            for (int i = 0; i < blobs_.size(); i++) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(7, blobs_.get(i));
            }
            for (int i = 0; i < include_.size(); i++) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(8, include_.get(i));
            }
            for (int i = 0; i < exclude_.size(); i++) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(9, exclude_.get(i));
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeEnumSize(10, phase_.getNumber());
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(100, transformParam_);
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(101, lossParam_);
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(102, accuracyParam_);
            }
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(103, argmaxParam_);
            }
            if (((bitField0_ & 0x00000080) == 0x00000080)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(104, concatParam_);
            }
            if (((bitField0_ & 0x00000100) == 0x00000100)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(105, contrastiveLossParam_);
            }
            if (((bitField0_ & 0x00000200) == 0x00000200)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(106, convolutionParam_);
            }
            if (((bitField0_ & 0x00000400) == 0x00000400)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(107, dataParam_);
            }
            if (((bitField0_ & 0x00000800) == 0x00000800)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(108, dropoutParam_);
            }
            if (((bitField0_ & 0x00001000) == 0x00001000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(109, dummyDataParam_);
            }
            if (((bitField0_ & 0x00002000) == 0x00002000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(110, eltwiseParam_);
            }
            if (((bitField0_ & 0x00004000) == 0x00004000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(111, expParam_);
            }
            if (((bitField0_ & 0x00008000) == 0x00008000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(112, hdf5DataParam_);
            }
            if (((bitField0_ & 0x00010000) == 0x00010000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(113, hdf5OutputParam_);
            }
            if (((bitField0_ & 0x00020000) == 0x00020000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(114, hingeLossParam_);
            }
            if (((bitField0_ & 0x00040000) == 0x00040000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(115, imageDataParam_);
            }
            if (((bitField0_ & 0x00080000) == 0x00080000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(116, infogainLossParam_);
            }
            if (((bitField0_ & 0x00100000) == 0x00100000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(117, innerProductParam_);
            }
            if (((bitField0_ & 0x00200000) == 0x00200000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(118, lrnParam_);
            }
            if (((bitField0_ & 0x00400000) == 0x00400000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(119, memoryDataParam_);
            }
            if (((bitField0_ & 0x00800000) == 0x00800000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(120, mvnParam_);
            }
            if (((bitField0_ & 0x01000000) == 0x01000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(121, poolingParam_);
            }
            if (((bitField0_ & 0x02000000) == 0x02000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(122, powerParam_);
            }
            if (((bitField0_ & 0x10000000) == 0x10000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(123, reluParam_);
            }
            if (((bitField0_ & 0x20000000) == 0x20000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(124, sigmoidParam_);
            }
            if (((bitField0_ & 0x40000000) == 0x40000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(125, softmaxParam_);
            }
            if (((bitField0_ & 0x80000000) == 0x80000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(126, sliceParam_);
            }
            if (((bitField1_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(127, tanhParam_);
            }
            if (((bitField1_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(128, thresholdParam_);
            }
            if (((bitField1_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(129, windowDataParam_);
            }
            if (((bitField0_ & 0x08000000) == 0x08000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(130, pythonParam_);
            }
            if (((bitField0_ & 0x04000000) == 0x04000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(131, preluParam_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.LayerParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.LayerParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.LayerParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.LayerParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.LayerParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.LayerParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.LayerParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.LayerParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.LayerParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.LayerParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.LayerParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.LayerParameter}
         *
         * <pre>
         * NOTE
         * Update the next available ID when you add a new LayerParameter field.
         * LayerParameter next available layer-specific ID: 132 (last added: prelu_param)
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.LayerParameter)
                caffe.Loadcaffe.LayerParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_LayerParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_LayerParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.LayerParameter.class, caffe.Loadcaffe.LayerParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.LayerParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                    getParamFieldBuilder();
                    getBlobsFieldBuilder();
                    getIncludeFieldBuilder();
                    getExcludeFieldBuilder();
                    getTransformParamFieldBuilder();
                    getLossParamFieldBuilder();
                    getAccuracyParamFieldBuilder();
                    getArgmaxParamFieldBuilder();
                    getConcatParamFieldBuilder();
                    getContrastiveLossParamFieldBuilder();
                    getConvolutionParamFieldBuilder();
                    getDataParamFieldBuilder();
                    getDropoutParamFieldBuilder();
                    getDummyDataParamFieldBuilder();
                    getEltwiseParamFieldBuilder();
                    getExpParamFieldBuilder();
                    getHdf5DataParamFieldBuilder();
                    getHdf5OutputParamFieldBuilder();
                    getHingeLossParamFieldBuilder();
                    getImageDataParamFieldBuilder();
                    getInfogainLossParamFieldBuilder();
                    getInnerProductParamFieldBuilder();
                    getLrnParamFieldBuilder();
                    getMemoryDataParamFieldBuilder();
                    getMvnParamFieldBuilder();
                    getPoolingParamFieldBuilder();
                    getPowerParamFieldBuilder();
                    getPreluParamFieldBuilder();
                    getPythonParamFieldBuilder();
                    getReluParamFieldBuilder();
                    getSigmoidParamFieldBuilder();
                    getSoftmaxParamFieldBuilder();
                    getSliceParamFieldBuilder();
                    getTanhParamFieldBuilder();
                    getThresholdParamFieldBuilder();
                    getWindowDataParamFieldBuilder();
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                name_ = "";
                bitField0_ = (bitField0_ & ~0x00000001);
                type_ = "";
                bitField0_ = (bitField0_ & ~0x00000002);
                bottom_ = com.google.protobuf.LazyStringArrayList.EMPTY;
                bitField0_ = (bitField0_ & ~0x00000004);
                top_ = com.google.protobuf.LazyStringArrayList.EMPTY;
                bitField0_ = (bitField0_ & ~0x00000008);
                phase_ = caffe.Loadcaffe.Phase.TRAIN;
                bitField0_ = (bitField0_ & ~0x00000010);
                lossWeight_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000020);
                if (paramBuilder_ == null) {
                    param_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000040);
                } else {
                    paramBuilder_.clear();
                }
                if (blobsBuilder_ == null) {
                    blobs_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000080);
                } else {
                    blobsBuilder_.clear();
                }
                if (includeBuilder_ == null) {
                    include_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000100);
                } else {
                    includeBuilder_.clear();
                }
                if (excludeBuilder_ == null) {
                    exclude_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000200);
                } else {
                    excludeBuilder_.clear();
                }
                if (transformParamBuilder_ == null) {
                    transformParam_ = caffe.Loadcaffe.TransformationParameter.getDefaultInstance();
                } else {
                    transformParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000400);
                if (lossParamBuilder_ == null) {
                    lossParam_ = caffe.Loadcaffe.LossParameter.getDefaultInstance();
                } else {
                    lossParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000800);
                if (accuracyParamBuilder_ == null) {
                    accuracyParam_ = caffe.Loadcaffe.AccuracyParameter.getDefaultInstance();
                } else {
                    accuracyParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00001000);
                if (argmaxParamBuilder_ == null) {
                    argmaxParam_ = caffe.Loadcaffe.ArgMaxParameter.getDefaultInstance();
                } else {
                    argmaxParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00002000);
                if (concatParamBuilder_ == null) {
                    concatParam_ = caffe.Loadcaffe.ConcatParameter.getDefaultInstance();
                } else {
                    concatParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00004000);
                if (contrastiveLossParamBuilder_ == null) {
                    contrastiveLossParam_ = caffe.Loadcaffe.ContrastiveLossParameter.getDefaultInstance();
                } else {
                    contrastiveLossParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00008000);
                if (convolutionParamBuilder_ == null) {
                    convolutionParam_ = caffe.Loadcaffe.ConvolutionParameter.getDefaultInstance();
                } else {
                    convolutionParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00010000);
                if (dataParamBuilder_ == null) {
                    dataParam_ = caffe.Loadcaffe.DataParameter.getDefaultInstance();
                } else {
                    dataParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00020000);
                if (dropoutParamBuilder_ == null) {
                    dropoutParam_ = caffe.Loadcaffe.DropoutParameter.getDefaultInstance();
                } else {
                    dropoutParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00040000);
                if (dummyDataParamBuilder_ == null) {
                    dummyDataParam_ = caffe.Loadcaffe.DummyDataParameter.getDefaultInstance();
                } else {
                    dummyDataParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00080000);
                if (eltwiseParamBuilder_ == null) {
                    eltwiseParam_ = caffe.Loadcaffe.EltwiseParameter.getDefaultInstance();
                } else {
                    eltwiseParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00100000);
                if (expParamBuilder_ == null) {
                    expParam_ = caffe.Loadcaffe.ExpParameter.getDefaultInstance();
                } else {
                    expParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00200000);
                if (hdf5DataParamBuilder_ == null) {
                    hdf5DataParam_ = caffe.Loadcaffe.HDF5DataParameter.getDefaultInstance();
                } else {
                    hdf5DataParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00400000);
                if (hdf5OutputParamBuilder_ == null) {
                    hdf5OutputParam_ = caffe.Loadcaffe.HDF5OutputParameter.getDefaultInstance();
                } else {
                    hdf5OutputParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00800000);
                if (hingeLossParamBuilder_ == null) {
                    hingeLossParam_ = caffe.Loadcaffe.HingeLossParameter.getDefaultInstance();
                } else {
                    hingeLossParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x01000000);
                if (imageDataParamBuilder_ == null) {
                    imageDataParam_ = caffe.Loadcaffe.ImageDataParameter.getDefaultInstance();
                } else {
                    imageDataParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x02000000);
                if (infogainLossParamBuilder_ == null) {
                    infogainLossParam_ = caffe.Loadcaffe.InfogainLossParameter.getDefaultInstance();
                } else {
                    infogainLossParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x04000000);
                if (innerProductParamBuilder_ == null) {
                    innerProductParam_ = caffe.Loadcaffe.InnerProductParameter.getDefaultInstance();
                } else {
                    innerProductParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x08000000);
                if (lrnParamBuilder_ == null) {
                    lrnParam_ = caffe.Loadcaffe.LRNParameter.getDefaultInstance();
                } else {
                    lrnParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x10000000);
                if (memoryDataParamBuilder_ == null) {
                    memoryDataParam_ = caffe.Loadcaffe.MemoryDataParameter.getDefaultInstance();
                } else {
                    memoryDataParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x20000000);
                if (mvnParamBuilder_ == null) {
                    mvnParam_ = caffe.Loadcaffe.MVNParameter.getDefaultInstance();
                } else {
                    mvnParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x40000000);
                if (poolingParamBuilder_ == null) {
                    poolingParam_ = caffe.Loadcaffe.PoolingParameter.getDefaultInstance();
                } else {
                    poolingParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x80000000);
                if (powerParamBuilder_ == null) {
                    powerParam_ = caffe.Loadcaffe.PowerParameter.getDefaultInstance();
                } else {
                    powerParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000001);
                if (preluParamBuilder_ == null) {
                    preluParam_ = caffe.Loadcaffe.PReLUParameter.getDefaultInstance();
                } else {
                    preluParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000002);
                if (pythonParamBuilder_ == null) {
                    pythonParam_ = caffe.Loadcaffe.PythonParameter.getDefaultInstance();
                } else {
                    pythonParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000004);
                if (reluParamBuilder_ == null) {
                    reluParam_ = caffe.Loadcaffe.ReLUParameter.getDefaultInstance();
                } else {
                    reluParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000008);
                if (sigmoidParamBuilder_ == null) {
                    sigmoidParam_ = caffe.Loadcaffe.SigmoidParameter.getDefaultInstance();
                } else {
                    sigmoidParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000010);
                if (softmaxParamBuilder_ == null) {
                    softmaxParam_ = caffe.Loadcaffe.SoftmaxParameter.getDefaultInstance();
                } else {
                    softmaxParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000020);
                if (sliceParamBuilder_ == null) {
                    sliceParam_ = caffe.Loadcaffe.SliceParameter.getDefaultInstance();
                } else {
                    sliceParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000040);
                if (tanhParamBuilder_ == null) {
                    tanhParam_ = caffe.Loadcaffe.TanHParameter.getDefaultInstance();
                } else {
                    tanhParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000080);
                if (thresholdParamBuilder_ == null) {
                    thresholdParam_ = caffe.Loadcaffe.ThresholdParameter.getDefaultInstance();
                } else {
                    thresholdParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000100);
                if (windowDataParamBuilder_ == null) {
                    windowDataParam_ = caffe.Loadcaffe.WindowDataParameter.getDefaultInstance();
                } else {
                    windowDataParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000200);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_LayerParameter_descriptor;
            }

            public caffe.Loadcaffe.LayerParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.LayerParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.LayerParameter build() {
                caffe.Loadcaffe.LayerParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.LayerParameter buildPartial() {
                caffe.Loadcaffe.LayerParameter result = new caffe.Loadcaffe.LayerParameter(this);
                int from_bitField0_ = bitField0_;
                int from_bitField1_ = bitField1_;
                int to_bitField0_ = 0;
                int to_bitField1_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.name_ = name_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.type_ = type_;
                if (((bitField0_ & 0x00000004) == 0x00000004)) {
                    bottom_ = bottom_.getUnmodifiableView();
                    bitField0_ = (bitField0_ & ~0x00000004);
                }
                result.bottom_ = bottom_;
                if (((bitField0_ & 0x00000008) == 0x00000008)) {
                    top_ = top_.getUnmodifiableView();
                    bitField0_ = (bitField0_ & ~0x00000008);
                }
                result.top_ = top_;
                if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
                    to_bitField0_ |= 0x00000004;
                }
                result.phase_ = phase_;
                if (((bitField0_ & 0x00000020) == 0x00000020)) {
                    lossWeight_ = java.util.Collections.unmodifiableList(lossWeight_);
                    bitField0_ = (bitField0_ & ~0x00000020);
                }
                result.lossWeight_ = lossWeight_;
                if (paramBuilder_ == null) {
                    if (((bitField0_ & 0x00000040) == 0x00000040)) {
                        param_ = java.util.Collections.unmodifiableList(param_);
                        bitField0_ = (bitField0_ & ~0x00000040);
                    }
                    result.param_ = param_;
                } else {
                    result.param_ = paramBuilder_.build();
                }
                if (blobsBuilder_ == null) {
                    if (((bitField0_ & 0x00000080) == 0x00000080)) {
                        blobs_ = java.util.Collections.unmodifiableList(blobs_);
                        bitField0_ = (bitField0_ & ~0x00000080);
                    }
                    result.blobs_ = blobs_;
                } else {
                    result.blobs_ = blobsBuilder_.build();
                }
                if (includeBuilder_ == null) {
                    if (((bitField0_ & 0x00000100) == 0x00000100)) {
                        include_ = java.util.Collections.unmodifiableList(include_);
                        bitField0_ = (bitField0_ & ~0x00000100);
                    }
                    result.include_ = include_;
                } else {
                    result.include_ = includeBuilder_.build();
                }
                if (excludeBuilder_ == null) {
                    if (((bitField0_ & 0x00000200) == 0x00000200)) {
                        exclude_ = java.util.Collections.unmodifiableList(exclude_);
                        bitField0_ = (bitField0_ & ~0x00000200);
                    }
                    result.exclude_ = exclude_;
                } else {
                    result.exclude_ = excludeBuilder_.build();
                }
                if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
                    to_bitField0_ |= 0x00000008;
                }
                if (transformParamBuilder_ == null) {
                    result.transformParam_ = transformParam_;
                } else {
                    result.transformParam_ = transformParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
                    to_bitField0_ |= 0x00000010;
                }
                if (lossParamBuilder_ == null) {
                    result.lossParam_ = lossParam_;
                } else {
                    result.lossParam_ = lossParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
                    to_bitField0_ |= 0x00000020;
                }
                if (accuracyParamBuilder_ == null) {
                    result.accuracyParam_ = accuracyParam_;
                } else {
                    result.accuracyParam_ = accuracyParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
                    to_bitField0_ |= 0x00000040;
                }
                if (argmaxParamBuilder_ == null) {
                    result.argmaxParam_ = argmaxParam_;
                } else {
                    result.argmaxParam_ = argmaxParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00004000) == 0x00004000)) {
                    to_bitField0_ |= 0x00000080;
                }
                if (concatParamBuilder_ == null) {
                    result.concatParam_ = concatParam_;
                } else {
                    result.concatParam_ = concatParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00008000) == 0x00008000)) {
                    to_bitField0_ |= 0x00000100;
                }
                if (contrastiveLossParamBuilder_ == null) {
                    result.contrastiveLossParam_ = contrastiveLossParam_;
                } else {
                    result.contrastiveLossParam_ = contrastiveLossParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00010000) == 0x00010000)) {
                    to_bitField0_ |= 0x00000200;
                }
                if (convolutionParamBuilder_ == null) {
                    result.convolutionParam_ = convolutionParam_;
                } else {
                    result.convolutionParam_ = convolutionParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00020000) == 0x00020000)) {
                    to_bitField0_ |= 0x00000400;
                }
                if (dataParamBuilder_ == null) {
                    result.dataParam_ = dataParam_;
                } else {
                    result.dataParam_ = dataParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00040000) == 0x00040000)) {
                    to_bitField0_ |= 0x00000800;
                }
                if (dropoutParamBuilder_ == null) {
                    result.dropoutParam_ = dropoutParam_;
                } else {
                    result.dropoutParam_ = dropoutParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00080000) == 0x00080000)) {
                    to_bitField0_ |= 0x00001000;
                }
                if (dummyDataParamBuilder_ == null) {
                    result.dummyDataParam_ = dummyDataParam_;
                } else {
                    result.dummyDataParam_ = dummyDataParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00100000) == 0x00100000)) {
                    to_bitField0_ |= 0x00002000;
                }
                if (eltwiseParamBuilder_ == null) {
                    result.eltwiseParam_ = eltwiseParam_;
                } else {
                    result.eltwiseParam_ = eltwiseParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00200000) == 0x00200000)) {
                    to_bitField0_ |= 0x00004000;
                }
                if (expParamBuilder_ == null) {
                    result.expParam_ = expParam_;
                } else {
                    result.expParam_ = expParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00400000) == 0x00400000)) {
                    to_bitField0_ |= 0x00008000;
                }
                if (hdf5DataParamBuilder_ == null) {
                    result.hdf5DataParam_ = hdf5DataParam_;
                } else {
                    result.hdf5DataParam_ = hdf5DataParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00800000) == 0x00800000)) {
                    to_bitField0_ |= 0x00010000;
                }
                if (hdf5OutputParamBuilder_ == null) {
                    result.hdf5OutputParam_ = hdf5OutputParam_;
                } else {
                    result.hdf5OutputParam_ = hdf5OutputParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x01000000) == 0x01000000)) {
                    to_bitField0_ |= 0x00020000;
                }
                if (hingeLossParamBuilder_ == null) {
                    result.hingeLossParam_ = hingeLossParam_;
                } else {
                    result.hingeLossParam_ = hingeLossParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x02000000) == 0x02000000)) {
                    to_bitField0_ |= 0x00040000;
                }
                if (imageDataParamBuilder_ == null) {
                    result.imageDataParam_ = imageDataParam_;
                } else {
                    result.imageDataParam_ = imageDataParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x04000000) == 0x04000000)) {
                    to_bitField0_ |= 0x00080000;
                }
                if (infogainLossParamBuilder_ == null) {
                    result.infogainLossParam_ = infogainLossParam_;
                } else {
                    result.infogainLossParam_ = infogainLossParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x08000000) == 0x08000000)) {
                    to_bitField0_ |= 0x00100000;
                }
                if (innerProductParamBuilder_ == null) {
                    result.innerProductParam_ = innerProductParam_;
                } else {
                    result.innerProductParam_ = innerProductParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x10000000) == 0x10000000)) {
                    to_bitField0_ |= 0x00200000;
                }
                if (lrnParamBuilder_ == null) {
                    result.lrnParam_ = lrnParam_;
                } else {
                    result.lrnParam_ = lrnParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x20000000) == 0x20000000)) {
                    to_bitField0_ |= 0x00400000;
                }
                if (memoryDataParamBuilder_ == null) {
                    result.memoryDataParam_ = memoryDataParam_;
                } else {
                    result.memoryDataParam_ = memoryDataParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x40000000) == 0x40000000)) {
                    to_bitField0_ |= 0x00800000;
                }
                if (mvnParamBuilder_ == null) {
                    result.mvnParam_ = mvnParam_;
                } else {
                    result.mvnParam_ = mvnParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x80000000) == 0x80000000)) {
                    to_bitField0_ |= 0x01000000;
                }
                if (poolingParamBuilder_ == null) {
                    result.poolingParam_ = poolingParam_;
                } else {
                    result.poolingParam_ = poolingParamBuilder_.build();
                }
                if (((from_bitField1_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x02000000;
                }
                if (powerParamBuilder_ == null) {
                    result.powerParam_ = powerParam_;
                } else {
                    result.powerParam_ = powerParamBuilder_.build();
                }
                if (((from_bitField1_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x04000000;
                }
                if (preluParamBuilder_ == null) {
                    result.preluParam_ = preluParam_;
                } else {
                    result.preluParam_ = preluParamBuilder_.build();
                }
                if (((from_bitField1_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x08000000;
                }
                if (pythonParamBuilder_ == null) {
                    result.pythonParam_ = pythonParam_;
                } else {
                    result.pythonParam_ = pythonParamBuilder_.build();
                }
                if (((from_bitField1_ & 0x00000008) == 0x00000008)) {
                    to_bitField0_ |= 0x10000000;
                }
                if (reluParamBuilder_ == null) {
                    result.reluParam_ = reluParam_;
                } else {
                    result.reluParam_ = reluParamBuilder_.build();
                }
                if (((from_bitField1_ & 0x00000010) == 0x00000010)) {
                    to_bitField0_ |= 0x20000000;
                }
                if (sigmoidParamBuilder_ == null) {
                    result.sigmoidParam_ = sigmoidParam_;
                } else {
                    result.sigmoidParam_ = sigmoidParamBuilder_.build();
                }
                if (((from_bitField1_ & 0x00000020) == 0x00000020)) {
                    to_bitField0_ |= 0x40000000;
                }
                if (softmaxParamBuilder_ == null) {
                    result.softmaxParam_ = softmaxParam_;
                } else {
                    result.softmaxParam_ = softmaxParamBuilder_.build();
                }
                if (((from_bitField1_ & 0x00000040) == 0x00000040)) {
                    to_bitField0_ |= 0x80000000;
                }
                if (sliceParamBuilder_ == null) {
                    result.sliceParam_ = sliceParam_;
                } else {
                    result.sliceParam_ = sliceParamBuilder_.build();
                }
                if (((from_bitField1_ & 0x00000080) == 0x00000080)) {
                    to_bitField1_ |= 0x00000001;
                }
                if (tanhParamBuilder_ == null) {
                    result.tanhParam_ = tanhParam_;
                } else {
                    result.tanhParam_ = tanhParamBuilder_.build();
                }
                if (((from_bitField1_ & 0x00000100) == 0x00000100)) {
                    to_bitField1_ |= 0x00000002;
                }
                if (thresholdParamBuilder_ == null) {
                    result.thresholdParam_ = thresholdParam_;
                } else {
                    result.thresholdParam_ = thresholdParamBuilder_.build();
                }
                if (((from_bitField1_ & 0x00000200) == 0x00000200)) {
                    to_bitField1_ |= 0x00000004;
                }
                if (windowDataParamBuilder_ == null) {
                    result.windowDataParam_ = windowDataParam_;
                } else {
                    result.windowDataParam_ = windowDataParamBuilder_.build();
                }
                result.bitField0_ = to_bitField0_;
                result.bitField1_ = to_bitField1_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.LayerParameter) {
                    return mergeFrom((caffe.Loadcaffe.LayerParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.LayerParameter other) {
                if (other == caffe.Loadcaffe.LayerParameter.getDefaultInstance()) return this;
                if (other.hasName()) {
                    bitField0_ |= 0x00000001;
                    name_ = other.name_;
                    onChanged();
                }
                if (other.hasType()) {
                    bitField0_ |= 0x00000002;
                    type_ = other.type_;
                    onChanged();
                }
                if (!other.bottom_.isEmpty()) {
                    if (bottom_.isEmpty()) {
                        bottom_ = other.bottom_;
                        bitField0_ = (bitField0_ & ~0x00000004);
                    } else {
                        ensureBottomIsMutable();
                        bottom_.addAll(other.bottom_);
                    }
                    onChanged();
                }
                if (!other.top_.isEmpty()) {
                    if (top_.isEmpty()) {
                        top_ = other.top_;
                        bitField0_ = (bitField0_ & ~0x00000008);
                    } else {
                        ensureTopIsMutable();
                        top_.addAll(other.top_);
                    }
                    onChanged();
                }
                if (other.hasPhase()) {
                    setPhase(other.getPhase());
                }
                if (!other.lossWeight_.isEmpty()) {
                    if (lossWeight_.isEmpty()) {
                        lossWeight_ = other.lossWeight_;
                        bitField0_ = (bitField0_ & ~0x00000020);
                    } else {
                        ensureLossWeightIsMutable();
                        lossWeight_.addAll(other.lossWeight_);
                    }
                    onChanged();
                }
                if (paramBuilder_ == null) {
                    if (!other.param_.isEmpty()) {
                        if (param_.isEmpty()) {
                            param_ = other.param_;
                            bitField0_ = (bitField0_ & ~0x00000040);
                        } else {
                            ensureParamIsMutable();
                            param_.addAll(other.param_);
                        }
                        onChanged();
                    }
                } else {
                    if (!other.param_.isEmpty()) {
                        if (paramBuilder_.isEmpty()) {
                            paramBuilder_.dispose();
                            paramBuilder_ = null;
                            param_ = other.param_;
                            bitField0_ = (bitField0_ & ~0x00000040);
                            paramBuilder_ =
                                    com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                                            getParamFieldBuilder() : null;
                        } else {
                            paramBuilder_.addAllMessages(other.param_);
                        }
                    }
                }
                if (blobsBuilder_ == null) {
                    if (!other.blobs_.isEmpty()) {
                        if (blobs_.isEmpty()) {
                            blobs_ = other.blobs_;
                            bitField0_ = (bitField0_ & ~0x00000080);
                        } else {
                            ensureBlobsIsMutable();
                            blobs_.addAll(other.blobs_);
                        }
                        onChanged();
                    }
                } else {
                    if (!other.blobs_.isEmpty()) {
                        if (blobsBuilder_.isEmpty()) {
                            blobsBuilder_.dispose();
                            blobsBuilder_ = null;
                            blobs_ = other.blobs_;
                            bitField0_ = (bitField0_ & ~0x00000080);
                            blobsBuilder_ =
                                    com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                                            getBlobsFieldBuilder() : null;
                        } else {
                            blobsBuilder_.addAllMessages(other.blobs_);
                        }
                    }
                }
                if (includeBuilder_ == null) {
                    if (!other.include_.isEmpty()) {
                        if (include_.isEmpty()) {
                            include_ = other.include_;
                            bitField0_ = (bitField0_ & ~0x00000100);
                        } else {
                            ensureIncludeIsMutable();
                            include_.addAll(other.include_);
                        }
                        onChanged();
                    }
                } else {
                    if (!other.include_.isEmpty()) {
                        if (includeBuilder_.isEmpty()) {
                            includeBuilder_.dispose();
                            includeBuilder_ = null;
                            include_ = other.include_;
                            bitField0_ = (bitField0_ & ~0x00000100);
                            includeBuilder_ =
                                    com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                                            getIncludeFieldBuilder() : null;
                        } else {
                            includeBuilder_.addAllMessages(other.include_);
                        }
                    }
                }
                if (excludeBuilder_ == null) {
                    if (!other.exclude_.isEmpty()) {
                        if (exclude_.isEmpty()) {
                            exclude_ = other.exclude_;
                            bitField0_ = (bitField0_ & ~0x00000200);
                        } else {
                            ensureExcludeIsMutable();
                            exclude_.addAll(other.exclude_);
                        }
                        onChanged();
                    }
                } else {
                    if (!other.exclude_.isEmpty()) {
                        if (excludeBuilder_.isEmpty()) {
                            excludeBuilder_.dispose();
                            excludeBuilder_ = null;
                            exclude_ = other.exclude_;
                            bitField0_ = (bitField0_ & ~0x00000200);
                            excludeBuilder_ =
                                    com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                                            getExcludeFieldBuilder() : null;
                        } else {
                            excludeBuilder_.addAllMessages(other.exclude_);
                        }
                    }
                }
                if (other.hasTransformParam()) {
                    mergeTransformParam(other.getTransformParam());
                }
                if (other.hasLossParam()) {
                    mergeLossParam(other.getLossParam());
                }
                if (other.hasAccuracyParam()) {
                    mergeAccuracyParam(other.getAccuracyParam());
                }
                if (other.hasArgmaxParam()) {
                    mergeArgmaxParam(other.getArgmaxParam());
                }
                if (other.hasConcatParam()) {
                    mergeConcatParam(other.getConcatParam());
                }
                if (other.hasContrastiveLossParam()) {
                    mergeContrastiveLossParam(other.getContrastiveLossParam());
                }
                if (other.hasConvolutionParam()) {
                    mergeConvolutionParam(other.getConvolutionParam());
                }
                if (other.hasDataParam()) {
                    mergeDataParam(other.getDataParam());
                }
                if (other.hasDropoutParam()) {
                    mergeDropoutParam(other.getDropoutParam());
                }
                if (other.hasDummyDataParam()) {
                    mergeDummyDataParam(other.getDummyDataParam());
                }
                if (other.hasEltwiseParam()) {
                    mergeEltwiseParam(other.getEltwiseParam());
                }
                if (other.hasExpParam()) {
                    mergeExpParam(other.getExpParam());
                }
                if (other.hasHdf5DataParam()) {
                    mergeHdf5DataParam(other.getHdf5DataParam());
                }
                if (other.hasHdf5OutputParam()) {
                    mergeHdf5OutputParam(other.getHdf5OutputParam());
                }
                if (other.hasHingeLossParam()) {
                    mergeHingeLossParam(other.getHingeLossParam());
                }
                if (other.hasImageDataParam()) {
                    mergeImageDataParam(other.getImageDataParam());
                }
                if (other.hasInfogainLossParam()) {
                    mergeInfogainLossParam(other.getInfogainLossParam());
                }
                if (other.hasInnerProductParam()) {
                    mergeInnerProductParam(other.getInnerProductParam());
                }
                if (other.hasLrnParam()) {
                    mergeLrnParam(other.getLrnParam());
                }
                if (other.hasMemoryDataParam()) {
                    mergeMemoryDataParam(other.getMemoryDataParam());
                }
                if (other.hasMvnParam()) {
                    mergeMvnParam(other.getMvnParam());
                }
                if (other.hasPoolingParam()) {
                    mergePoolingParam(other.getPoolingParam());
                }
                if (other.hasPowerParam()) {
                    mergePowerParam(other.getPowerParam());
                }
                if (other.hasPreluParam()) {
                    mergePreluParam(other.getPreluParam());
                }
                if (other.hasPythonParam()) {
                    mergePythonParam(other.getPythonParam());
                }
                if (other.hasReluParam()) {
                    mergeReluParam(other.getReluParam());
                }
                if (other.hasSigmoidParam()) {
                    mergeSigmoidParam(other.getSigmoidParam());
                }
                if (other.hasSoftmaxParam()) {
                    mergeSoftmaxParam(other.getSoftmaxParam());
                }
                if (other.hasSliceParam()) {
                    mergeSliceParam(other.getSliceParam());
                }
                if (other.hasTanhParam()) {
                    mergeTanhParam(other.getTanhParam());
                }
                if (other.hasThresholdParam()) {
                    mergeThresholdParam(other.getThresholdParam());
                }
                if (other.hasWindowDataParam()) {
                    mergeWindowDataParam(other.getWindowDataParam());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.LayerParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.LayerParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;
            private int bitField1_;

            private java.lang.Object name_ = "";
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * the layer name
             * </pre>
             */
            public boolean hasName() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * the layer name
             * </pre>
             */
            public java.lang.String getName() {
                java.lang.Object ref = name_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        name_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * the layer name
             * </pre>
             */
            public com.google.protobuf.ByteString
            getNameBytes() {
                java.lang.Object ref = name_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    name_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * the layer name
             * </pre>
             */
            public Builder setName(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                name_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * the layer name
             * </pre>
             */
            public Builder clearName() {
                bitField0_ = (bitField0_ & ~0x00000001);
                name_ = getDefaultInstance().getName();
                onChanged();
                return this;
            }
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * the layer name
             * </pre>
             */
            public Builder setNameBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                name_ = value;
                onChanged();
                return this;
            }

            private java.lang.Object type_ = "";
            /**
             * <code>optional string type = 2;</code>
             *
             * <pre>
             * the layer type
             * </pre>
             */
            public boolean hasType() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional string type = 2;</code>
             *
             * <pre>
             * the layer type
             * </pre>
             */
            public java.lang.String getType() {
                java.lang.Object ref = type_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        type_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string type = 2;</code>
             *
             * <pre>
             * the layer type
             * </pre>
             */
            public com.google.protobuf.ByteString
            getTypeBytes() {
                java.lang.Object ref = type_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    type_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string type = 2;</code>
             *
             * <pre>
             * the layer type
             * </pre>
             */
            public Builder setType(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000002;
                type_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string type = 2;</code>
             *
             * <pre>
             * the layer type
             * </pre>
             */
            public Builder clearType() {
                bitField0_ = (bitField0_ & ~0x00000002);
                type_ = getDefaultInstance().getType();
                onChanged();
                return this;
            }
            /**
             * <code>optional string type = 2;</code>
             *
             * <pre>
             * the layer type
             * </pre>
             */
            public Builder setTypeBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000002;
                type_ = value;
                onChanged();
                return this;
            }

            private com.google.protobuf.LazyStringList bottom_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            private void ensureBottomIsMutable() {
                if (!((bitField0_ & 0x00000004) == 0x00000004)) {
                    bottom_ = new com.google.protobuf.LazyStringArrayList(bottom_);
                    bitField0_ |= 0x00000004;
                }
            }
            /**
             * <code>repeated string bottom = 3;</code>
             *
             * <pre>
             * the name of each bottom blob
             * </pre>
             */
            public com.google.protobuf.ProtocolStringList
            getBottomList() {
                return bottom_.getUnmodifiableView();
            }
            /**
             * <code>repeated string bottom = 3;</code>
             *
             * <pre>
             * the name of each bottom blob
             * </pre>
             */
            public int getBottomCount() {
                return bottom_.size();
            }
            /**
             * <code>repeated string bottom = 3;</code>
             *
             * <pre>
             * the name of each bottom blob
             * </pre>
             */
            public java.lang.String getBottom(int index) {
                return bottom_.get(index);
            }
            /**
             * <code>repeated string bottom = 3;</code>
             *
             * <pre>
             * the name of each bottom blob
             * </pre>
             */
            public com.google.protobuf.ByteString
            getBottomBytes(int index) {
                return bottom_.getByteString(index);
            }
            /**
             * <code>repeated string bottom = 3;</code>
             *
             * <pre>
             * the name of each bottom blob
             * </pre>
             */
            public Builder setBottom(
                    int index, java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureBottomIsMutable();
                bottom_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string bottom = 3;</code>
             *
             * <pre>
             * the name of each bottom blob
             * </pre>
             */
            public Builder addBottom(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureBottomIsMutable();
                bottom_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string bottom = 3;</code>
             *
             * <pre>
             * the name of each bottom blob
             * </pre>
             */
            public Builder addAllBottom(
                    java.lang.Iterable<java.lang.String> values) {
                ensureBottomIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, bottom_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string bottom = 3;</code>
             *
             * <pre>
             * the name of each bottom blob
             * </pre>
             */
            public Builder clearBottom() {
                bottom_ = com.google.protobuf.LazyStringArrayList.EMPTY;
                bitField0_ = (bitField0_ & ~0x00000004);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string bottom = 3;</code>
             *
             * <pre>
             * the name of each bottom blob
             * </pre>
             */
            public Builder addBottomBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureBottomIsMutable();
                bottom_.add(value);
                onChanged();
                return this;
            }

            private com.google.protobuf.LazyStringList top_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            private void ensureTopIsMutable() {
                if (!((bitField0_ & 0x00000008) == 0x00000008)) {
                    top_ = new com.google.protobuf.LazyStringArrayList(top_);
                    bitField0_ |= 0x00000008;
                }
            }
            /**
             * <code>repeated string top = 4;</code>
             *
             * <pre>
             * the name of each top blob
             * </pre>
             */
            public com.google.protobuf.ProtocolStringList
            getTopList() {
                return top_.getUnmodifiableView();
            }
            /**
             * <code>repeated string top = 4;</code>
             *
             * <pre>
             * the name of each top blob
             * </pre>
             */
            public int getTopCount() {
                return top_.size();
            }
            /**
             * <code>repeated string top = 4;</code>
             *
             * <pre>
             * the name of each top blob
             * </pre>
             */
            public java.lang.String getTop(int index) {
                return top_.get(index);
            }
            /**
             * <code>repeated string top = 4;</code>
             *
             * <pre>
             * the name of each top blob
             * </pre>
             */
            public com.google.protobuf.ByteString
            getTopBytes(int index) {
                return top_.getByteString(index);
            }
            /**
             * <code>repeated string top = 4;</code>
             *
             * <pre>
             * the name of each top blob
             * </pre>
             */
            public Builder setTop(
                    int index, java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureTopIsMutable();
                top_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string top = 4;</code>
             *
             * <pre>
             * the name of each top blob
             * </pre>
             */
            public Builder addTop(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureTopIsMutable();
                top_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string top = 4;</code>
             *
             * <pre>
             * the name of each top blob
             * </pre>
             */
            public Builder addAllTop(
                    java.lang.Iterable<java.lang.String> values) {
                ensureTopIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, top_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string top = 4;</code>
             *
             * <pre>
             * the name of each top blob
             * </pre>
             */
            public Builder clearTop() {
                top_ = com.google.protobuf.LazyStringArrayList.EMPTY;
                bitField0_ = (bitField0_ & ~0x00000008);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string top = 4;</code>
             *
             * <pre>
             * the name of each top blob
             * </pre>
             */
            public Builder addTopBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureTopIsMutable();
                top_.add(value);
                onChanged();
                return this;
            }

            private caffe.Loadcaffe.Phase phase_ = caffe.Loadcaffe.Phase.TRAIN;
            /**
             * <code>optional .caffe.Phase phase = 10;</code>
             *
             * <pre>
             * The train / test phase for computation.
             * </pre>
             */
            public boolean hasPhase() {
                return ((bitField0_ & 0x00000010) == 0x00000010);
            }
            /**
             * <code>optional .caffe.Phase phase = 10;</code>
             *
             * <pre>
             * The train / test phase for computation.
             * </pre>
             */
            public caffe.Loadcaffe.Phase getPhase() {
                return phase_;
            }
            /**
             * <code>optional .caffe.Phase phase = 10;</code>
             *
             * <pre>
             * The train / test phase for computation.
             * </pre>
             */
            public Builder setPhase(caffe.Loadcaffe.Phase value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000010;
                phase_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional .caffe.Phase phase = 10;</code>
             *
             * <pre>
             * The train / test phase for computation.
             * </pre>
             */
            public Builder clearPhase() {
                bitField0_ = (bitField0_ & ~0x00000010);
                phase_ = caffe.Loadcaffe.Phase.TRAIN;
                onChanged();
                return this;
            }

            private java.util.List<java.lang.Float> lossWeight_ = java.util.Collections.emptyList();
            private void ensureLossWeightIsMutable() {
                if (!((bitField0_ & 0x00000020) == 0x00000020)) {
                    lossWeight_ = new java.util.ArrayList<java.lang.Float>(lossWeight_);
                    bitField0_ |= 0x00000020;
                }
            }
            /**
             * <code>repeated float loss_weight = 5;</code>
             *
             * <pre>
             * The amount of weight to assign each top blob in the objective.
             * Each layer assigns a default value, usually of either 0 or 1,
             * to each top blob.
             * </pre>
             */
            public java.util.List<java.lang.Float>
            getLossWeightList() {
                return java.util.Collections.unmodifiableList(lossWeight_);
            }
            /**
             * <code>repeated float loss_weight = 5;</code>
             *
             * <pre>
             * The amount of weight to assign each top blob in the objective.
             * Each layer assigns a default value, usually of either 0 or 1,
             * to each top blob.
             * </pre>
             */
            public int getLossWeightCount() {
                return lossWeight_.size();
            }
            /**
             * <code>repeated float loss_weight = 5;</code>
             *
             * <pre>
             * The amount of weight to assign each top blob in the objective.
             * Each layer assigns a default value, usually of either 0 or 1,
             * to each top blob.
             * </pre>
             */
            public float getLossWeight(int index) {
                return lossWeight_.get(index);
            }
            /**
             * <code>repeated float loss_weight = 5;</code>
             *
             * <pre>
             * The amount of weight to assign each top blob in the objective.
             * Each layer assigns a default value, usually of either 0 or 1,
             * to each top blob.
             * </pre>
             */
            public Builder setLossWeight(
                    int index, float value) {
                ensureLossWeightIsMutable();
                lossWeight_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float loss_weight = 5;</code>
             *
             * <pre>
             * The amount of weight to assign each top blob in the objective.
             * Each layer assigns a default value, usually of either 0 or 1,
             * to each top blob.
             * </pre>
             */
            public Builder addLossWeight(float value) {
                ensureLossWeightIsMutable();
                lossWeight_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float loss_weight = 5;</code>
             *
             * <pre>
             * The amount of weight to assign each top blob in the objective.
             * Each layer assigns a default value, usually of either 0 or 1,
             * to each top blob.
             * </pre>
             */
            public Builder addAllLossWeight(
                    java.lang.Iterable<? extends java.lang.Float> values) {
                ensureLossWeightIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, lossWeight_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float loss_weight = 5;</code>
             *
             * <pre>
             * The amount of weight to assign each top blob in the objective.
             * Each layer assigns a default value, usually of either 0 or 1,
             * to each top blob.
             * </pre>
             */
            public Builder clearLossWeight() {
                lossWeight_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000020);
                onChanged();
                return this;
            }

            private java.util.List<caffe.Loadcaffe.ParamSpec> param_ =
                    java.util.Collections.emptyList();
            private void ensureParamIsMutable() {
                if (!((bitField0_ & 0x00000040) == 0x00000040)) {
                    param_ = new java.util.ArrayList<caffe.Loadcaffe.ParamSpec>(param_);
                    bitField0_ |= 0x00000040;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.ParamSpec, caffe.Loadcaffe.ParamSpec.Builder, caffe.Loadcaffe.ParamSpecOrBuilder> paramBuilder_;

            /**
             * <code>repeated .caffe.ParamSpec param = 6;</code>
             *
             * <pre>
             * Specifies training parameters (multipliers on global learning constants,
             * and the name and other settings used for weight sharing).
             * </pre>
             */
            public java.util.List<caffe.Loadcaffe.ParamSpec> getParamList() {
                if (paramBuilder_ == null) {
                    return java.util.Collections.unmodifiableList(param_);
                } else {
                    return paramBuilder_.getMessageList();
                }
            }
            /**
             * <code>repeated .caffe.ParamSpec param = 6;</code>
             *
             * <pre>
             * Specifies training parameters (multipliers on global learning constants,
             * and the name and other settings used for weight sharing).
             * </pre>
             */
            public int getParamCount() {
                if (paramBuilder_ == null) {
                    return param_.size();
                } else {
                    return paramBuilder_.getCount();
                }
            }
            /**
             * <code>repeated .caffe.ParamSpec param = 6;</code>
             *
             * <pre>
             * Specifies training parameters (multipliers on global learning constants,
             * and the name and other settings used for weight sharing).
             * </pre>
             */
            public caffe.Loadcaffe.ParamSpec getParam(int index) {
                if (paramBuilder_ == null) {
                    return param_.get(index);
                } else {
                    return paramBuilder_.getMessage(index);
                }
            }
            /**
             * <code>repeated .caffe.ParamSpec param = 6;</code>
             *
             * <pre>
             * Specifies training parameters (multipliers on global learning constants,
             * and the name and other settings used for weight sharing).
             * </pre>
             */
            public Builder setParam(
                    int index, caffe.Loadcaffe.ParamSpec value) {
                if (paramBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureParamIsMutable();
                    param_.set(index, value);
                    onChanged();
                } else {
                    paramBuilder_.setMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.ParamSpec param = 6;</code>
             *
             * <pre>
             * Specifies training parameters (multipliers on global learning constants,
             * and the name and other settings used for weight sharing).
             * </pre>
             */
            public Builder setParam(
                    int index, caffe.Loadcaffe.ParamSpec.Builder builderForValue) {
                if (paramBuilder_ == null) {
                    ensureParamIsMutable();
                    param_.set(index, builderForValue.build());
                    onChanged();
                } else {
                    paramBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.ParamSpec param = 6;</code>
             *
             * <pre>
             * Specifies training parameters (multipliers on global learning constants,
             * and the name and other settings used for weight sharing).
             * </pre>
             */
            public Builder addParam(caffe.Loadcaffe.ParamSpec value) {
                if (paramBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureParamIsMutable();
                    param_.add(value);
                    onChanged();
                } else {
                    paramBuilder_.addMessage(value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.ParamSpec param = 6;</code>
             *
             * <pre>
             * Specifies training parameters (multipliers on global learning constants,
             * and the name and other settings used for weight sharing).
             * </pre>
             */
            public Builder addParam(
                    int index, caffe.Loadcaffe.ParamSpec value) {
                if (paramBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureParamIsMutable();
                    param_.add(index, value);
                    onChanged();
                } else {
                    paramBuilder_.addMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.ParamSpec param = 6;</code>
             *
             * <pre>
             * Specifies training parameters (multipliers on global learning constants,
             * and the name and other settings used for weight sharing).
             * </pre>
             */
            public Builder addParam(
                    caffe.Loadcaffe.ParamSpec.Builder builderForValue) {
                if (paramBuilder_ == null) {
                    ensureParamIsMutable();
                    param_.add(builderForValue.build());
                    onChanged();
                } else {
                    paramBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.ParamSpec param = 6;</code>
             *
             * <pre>
             * Specifies training parameters (multipliers on global learning constants,
             * and the name and other settings used for weight sharing).
             * </pre>
             */
            public Builder addParam(
                    int index, caffe.Loadcaffe.ParamSpec.Builder builderForValue) {
                if (paramBuilder_ == null) {
                    ensureParamIsMutable();
                    param_.add(index, builderForValue.build());
                    onChanged();
                } else {
                    paramBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.ParamSpec param = 6;</code>
             *
             * <pre>
             * Specifies training parameters (multipliers on global learning constants,
             * and the name and other settings used for weight sharing).
             * </pre>
             */
            public Builder addAllParam(
                    java.lang.Iterable<? extends caffe.Loadcaffe.ParamSpec> values) {
                if (paramBuilder_ == null) {
                    ensureParamIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(
                            values, param_);
                    onChanged();
                } else {
                    paramBuilder_.addAllMessages(values);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.ParamSpec param = 6;</code>
             *
             * <pre>
             * Specifies training parameters (multipliers on global learning constants,
             * and the name and other settings used for weight sharing).
             * </pre>
             */
            public Builder clearParam() {
                if (paramBuilder_ == null) {
                    param_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000040);
                    onChanged();
                } else {
                    paramBuilder_.clear();
                }
                return this;
            }
            /**
             * <code>repeated .caffe.ParamSpec param = 6;</code>
             *
             * <pre>
             * Specifies training parameters (multipliers on global learning constants,
             * and the name and other settings used for weight sharing).
             * </pre>
             */
            public Builder removeParam(int index) {
                if (paramBuilder_ == null) {
                    ensureParamIsMutable();
                    param_.remove(index);
                    onChanged();
                } else {
                    paramBuilder_.remove(index);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.ParamSpec param = 6;</code>
             *
             * <pre>
             * Specifies training parameters (multipliers on global learning constants,
             * and the name and other settings used for weight sharing).
             * </pre>
             */
            public caffe.Loadcaffe.ParamSpec.Builder getParamBuilder(
                    int index) {
                return getParamFieldBuilder().getBuilder(index);
            }
            /**
             * <code>repeated .caffe.ParamSpec param = 6;</code>
             *
             * <pre>
             * Specifies training parameters (multipliers on global learning constants,
             * and the name and other settings used for weight sharing).
             * </pre>
             */
            public caffe.Loadcaffe.ParamSpecOrBuilder getParamOrBuilder(
                    int index) {
                if (paramBuilder_ == null) {
                    return param_.get(index);  } else {
                    return paramBuilder_.getMessageOrBuilder(index);
                }
            }
            /**
             * <code>repeated .caffe.ParamSpec param = 6;</code>
             *
             * <pre>
             * Specifies training parameters (multipliers on global learning constants,
             * and the name and other settings used for weight sharing).
             * </pre>
             */
            public java.util.List<? extends caffe.Loadcaffe.ParamSpecOrBuilder>
            getParamOrBuilderList() {
                if (paramBuilder_ != null) {
                    return paramBuilder_.getMessageOrBuilderList();
                } else {
                    return java.util.Collections.unmodifiableList(param_);
                }
            }
            /**
             * <code>repeated .caffe.ParamSpec param = 6;</code>
             *
             * <pre>
             * Specifies training parameters (multipliers on global learning constants,
             * and the name and other settings used for weight sharing).
             * </pre>
             */
            public caffe.Loadcaffe.ParamSpec.Builder addParamBuilder() {
                return getParamFieldBuilder().addBuilder(
                        caffe.Loadcaffe.ParamSpec.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.ParamSpec param = 6;</code>
             *
             * <pre>
             * Specifies training parameters (multipliers on global learning constants,
             * and the name and other settings used for weight sharing).
             * </pre>
             */
            public caffe.Loadcaffe.ParamSpec.Builder addParamBuilder(
                    int index) {
                return getParamFieldBuilder().addBuilder(
                        index, caffe.Loadcaffe.ParamSpec.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.ParamSpec param = 6;</code>
             *
             * <pre>
             * Specifies training parameters (multipliers on global learning constants,
             * and the name and other settings used for weight sharing).
             * </pre>
             */
            public java.util.List<caffe.Loadcaffe.ParamSpec.Builder>
            getParamBuilderList() {
                return getParamFieldBuilder().getBuilderList();
            }
            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.ParamSpec, caffe.Loadcaffe.ParamSpec.Builder, caffe.Loadcaffe.ParamSpecOrBuilder>
            getParamFieldBuilder() {
                if (paramBuilder_ == null) {
                    paramBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            caffe.Loadcaffe.ParamSpec, caffe.Loadcaffe.ParamSpec.Builder, caffe.Loadcaffe.ParamSpecOrBuilder>(
                            param_,
                            ((bitField0_ & 0x00000040) == 0x00000040),
                            getParentForChildren(),
                            isClean());
                    param_ = null;
                }
                return paramBuilder_;
            }

            private java.util.List<caffe.Loadcaffe.BlobProto> blobs_ =
                    java.util.Collections.emptyList();
            private void ensureBlobsIsMutable() {
                if (!((bitField0_ & 0x00000080) == 0x00000080)) {
                    blobs_ = new java.util.ArrayList<caffe.Loadcaffe.BlobProto>(blobs_);
                    bitField0_ |= 0x00000080;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.BlobProto, caffe.Loadcaffe.BlobProto.Builder, caffe.Loadcaffe.BlobProtoOrBuilder> blobsBuilder_;

            /**
             * <code>repeated .caffe.BlobProto blobs = 7;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer.
             * </pre>
             */
            public java.util.List<caffe.Loadcaffe.BlobProto> getBlobsList() {
                if (blobsBuilder_ == null) {
                    return java.util.Collections.unmodifiableList(blobs_);
                } else {
                    return blobsBuilder_.getMessageList();
                }
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 7;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer.
             * </pre>
             */
            public int getBlobsCount() {
                if (blobsBuilder_ == null) {
                    return blobs_.size();
                } else {
                    return blobsBuilder_.getCount();
                }
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 7;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer.
             * </pre>
             */
            public caffe.Loadcaffe.BlobProto getBlobs(int index) {
                if (blobsBuilder_ == null) {
                    return blobs_.get(index);
                } else {
                    return blobsBuilder_.getMessage(index);
                }
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 7;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer.
             * </pre>
             */
            public Builder setBlobs(
                    int index, caffe.Loadcaffe.BlobProto value) {
                if (blobsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureBlobsIsMutable();
                    blobs_.set(index, value);
                    onChanged();
                } else {
                    blobsBuilder_.setMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 7;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer.
             * </pre>
             */
            public Builder setBlobs(
                    int index, caffe.Loadcaffe.BlobProto.Builder builderForValue) {
                if (blobsBuilder_ == null) {
                    ensureBlobsIsMutable();
                    blobs_.set(index, builderForValue.build());
                    onChanged();
                } else {
                    blobsBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 7;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer.
             * </pre>
             */
            public Builder addBlobs(caffe.Loadcaffe.BlobProto value) {
                if (blobsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureBlobsIsMutable();
                    blobs_.add(value);
                    onChanged();
                } else {
                    blobsBuilder_.addMessage(value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 7;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer.
             * </pre>
             */
            public Builder addBlobs(
                    int index, caffe.Loadcaffe.BlobProto value) {
                if (blobsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureBlobsIsMutable();
                    blobs_.add(index, value);
                    onChanged();
                } else {
                    blobsBuilder_.addMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 7;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer.
             * </pre>
             */
            public Builder addBlobs(
                    caffe.Loadcaffe.BlobProto.Builder builderForValue) {
                if (blobsBuilder_ == null) {
                    ensureBlobsIsMutable();
                    blobs_.add(builderForValue.build());
                    onChanged();
                } else {
                    blobsBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 7;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer.
             * </pre>
             */
            public Builder addBlobs(
                    int index, caffe.Loadcaffe.BlobProto.Builder builderForValue) {
                if (blobsBuilder_ == null) {
                    ensureBlobsIsMutable();
                    blobs_.add(index, builderForValue.build());
                    onChanged();
                } else {
                    blobsBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 7;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer.
             * </pre>
             */
            public Builder addAllBlobs(
                    java.lang.Iterable<? extends caffe.Loadcaffe.BlobProto> values) {
                if (blobsBuilder_ == null) {
                    ensureBlobsIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(
                            values, blobs_);
                    onChanged();
                } else {
                    blobsBuilder_.addAllMessages(values);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 7;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer.
             * </pre>
             */
            public Builder clearBlobs() {
                if (blobsBuilder_ == null) {
                    blobs_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000080);
                    onChanged();
                } else {
                    blobsBuilder_.clear();
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 7;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer.
             * </pre>
             */
            public Builder removeBlobs(int index) {
                if (blobsBuilder_ == null) {
                    ensureBlobsIsMutable();
                    blobs_.remove(index);
                    onChanged();
                } else {
                    blobsBuilder_.remove(index);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 7;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer.
             * </pre>
             */
            public caffe.Loadcaffe.BlobProto.Builder getBlobsBuilder(
                    int index) {
                return getBlobsFieldBuilder().getBuilder(index);
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 7;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer.
             * </pre>
             */
            public caffe.Loadcaffe.BlobProtoOrBuilder getBlobsOrBuilder(
                    int index) {
                if (blobsBuilder_ == null) {
                    return blobs_.get(index);  } else {
                    return blobsBuilder_.getMessageOrBuilder(index);
                }
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 7;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer.
             * </pre>
             */
            public java.util.List<? extends caffe.Loadcaffe.BlobProtoOrBuilder>
            getBlobsOrBuilderList() {
                if (blobsBuilder_ != null) {
                    return blobsBuilder_.getMessageOrBuilderList();
                } else {
                    return java.util.Collections.unmodifiableList(blobs_);
                }
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 7;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer.
             * </pre>
             */
            public caffe.Loadcaffe.BlobProto.Builder addBlobsBuilder() {
                return getBlobsFieldBuilder().addBuilder(
                        caffe.Loadcaffe.BlobProto.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 7;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer.
             * </pre>
             */
            public caffe.Loadcaffe.BlobProto.Builder addBlobsBuilder(
                    int index) {
                return getBlobsFieldBuilder().addBuilder(
                        index, caffe.Loadcaffe.BlobProto.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 7;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer.
             * </pre>
             */
            public java.util.List<caffe.Loadcaffe.BlobProto.Builder>
            getBlobsBuilderList() {
                return getBlobsFieldBuilder().getBuilderList();
            }
            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.BlobProto, caffe.Loadcaffe.BlobProto.Builder, caffe.Loadcaffe.BlobProtoOrBuilder>
            getBlobsFieldBuilder() {
                if (blobsBuilder_ == null) {
                    blobsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            caffe.Loadcaffe.BlobProto, caffe.Loadcaffe.BlobProto.Builder, caffe.Loadcaffe.BlobProtoOrBuilder>(
                            blobs_,
                            ((bitField0_ & 0x00000080) == 0x00000080),
                            getParentForChildren(),
                            isClean());
                    blobs_ = null;
                }
                return blobsBuilder_;
            }

            private java.util.List<caffe.Loadcaffe.NetStateRule> include_ =
                    java.util.Collections.emptyList();
            private void ensureIncludeIsMutable() {
                if (!((bitField0_ & 0x00000100) == 0x00000100)) {
                    include_ = new java.util.ArrayList<caffe.Loadcaffe.NetStateRule>(include_);
                    bitField0_ |= 0x00000100;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.NetStateRule, caffe.Loadcaffe.NetStateRule.Builder, caffe.Loadcaffe.NetStateRuleOrBuilder> includeBuilder_;

            /**
             * <code>repeated .caffe.NetStateRule include = 8;</code>
             *
             * <pre>
             * Rules controlling whether and when a layer is included in the network,
             * based on the current NetState.  You may specify a non-zero number of rules
             * to include OR exclude, but not both.  If no include or exclude rules are
             * specified, the layer is always included.  If the current NetState meets
             * ANY (i.e., one or more) of the specified rules, the layer is
             * included/excluded.
             * </pre>
             */
            public java.util.List<caffe.Loadcaffe.NetStateRule> getIncludeList() {
                if (includeBuilder_ == null) {
                    return java.util.Collections.unmodifiableList(include_);
                } else {
                    return includeBuilder_.getMessageList();
                }
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 8;</code>
             *
             * <pre>
             * Rules controlling whether and when a layer is included in the network,
             * based on the current NetState.  You may specify a non-zero number of rules
             * to include OR exclude, but not both.  If no include or exclude rules are
             * specified, the layer is always included.  If the current NetState meets
             * ANY (i.e., one or more) of the specified rules, the layer is
             * included/excluded.
             * </pre>
             */
            public int getIncludeCount() {
                if (includeBuilder_ == null) {
                    return include_.size();
                } else {
                    return includeBuilder_.getCount();
                }
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 8;</code>
             *
             * <pre>
             * Rules controlling whether and when a layer is included in the network,
             * based on the current NetState.  You may specify a non-zero number of rules
             * to include OR exclude, but not both.  If no include or exclude rules are
             * specified, the layer is always included.  If the current NetState meets
             * ANY (i.e., one or more) of the specified rules, the layer is
             * included/excluded.
             * </pre>
             */
            public caffe.Loadcaffe.NetStateRule getInclude(int index) {
                if (includeBuilder_ == null) {
                    return include_.get(index);
                } else {
                    return includeBuilder_.getMessage(index);
                }
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 8;</code>
             *
             * <pre>
             * Rules controlling whether and when a layer is included in the network,
             * based on the current NetState.  You may specify a non-zero number of rules
             * to include OR exclude, but not both.  If no include or exclude rules are
             * specified, the layer is always included.  If the current NetState meets
             * ANY (i.e., one or more) of the specified rules, the layer is
             * included/excluded.
             * </pre>
             */
            public Builder setInclude(
                    int index, caffe.Loadcaffe.NetStateRule value) {
                if (includeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureIncludeIsMutable();
                    include_.set(index, value);
                    onChanged();
                } else {
                    includeBuilder_.setMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 8;</code>
             *
             * <pre>
             * Rules controlling whether and when a layer is included in the network,
             * based on the current NetState.  You may specify a non-zero number of rules
             * to include OR exclude, but not both.  If no include or exclude rules are
             * specified, the layer is always included.  If the current NetState meets
             * ANY (i.e., one or more) of the specified rules, the layer is
             * included/excluded.
             * </pre>
             */
            public Builder setInclude(
                    int index, caffe.Loadcaffe.NetStateRule.Builder builderForValue) {
                if (includeBuilder_ == null) {
                    ensureIncludeIsMutable();
                    include_.set(index, builderForValue.build());
                    onChanged();
                } else {
                    includeBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 8;</code>
             *
             * <pre>
             * Rules controlling whether and when a layer is included in the network,
             * based on the current NetState.  You may specify a non-zero number of rules
             * to include OR exclude, but not both.  If no include or exclude rules are
             * specified, the layer is always included.  If the current NetState meets
             * ANY (i.e., one or more) of the specified rules, the layer is
             * included/excluded.
             * </pre>
             */
            public Builder addInclude(caffe.Loadcaffe.NetStateRule value) {
                if (includeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureIncludeIsMutable();
                    include_.add(value);
                    onChanged();
                } else {
                    includeBuilder_.addMessage(value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 8;</code>
             *
             * <pre>
             * Rules controlling whether and when a layer is included in the network,
             * based on the current NetState.  You may specify a non-zero number of rules
             * to include OR exclude, but not both.  If no include or exclude rules are
             * specified, the layer is always included.  If the current NetState meets
             * ANY (i.e., one or more) of the specified rules, the layer is
             * included/excluded.
             * </pre>
             */
            public Builder addInclude(
                    int index, caffe.Loadcaffe.NetStateRule value) {
                if (includeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureIncludeIsMutable();
                    include_.add(index, value);
                    onChanged();
                } else {
                    includeBuilder_.addMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 8;</code>
             *
             * <pre>
             * Rules controlling whether and when a layer is included in the network,
             * based on the current NetState.  You may specify a non-zero number of rules
             * to include OR exclude, but not both.  If no include or exclude rules are
             * specified, the layer is always included.  If the current NetState meets
             * ANY (i.e., one or more) of the specified rules, the layer is
             * included/excluded.
             * </pre>
             */
            public Builder addInclude(
                    caffe.Loadcaffe.NetStateRule.Builder builderForValue) {
                if (includeBuilder_ == null) {
                    ensureIncludeIsMutable();
                    include_.add(builderForValue.build());
                    onChanged();
                } else {
                    includeBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 8;</code>
             *
             * <pre>
             * Rules controlling whether and when a layer is included in the network,
             * based on the current NetState.  You may specify a non-zero number of rules
             * to include OR exclude, but not both.  If no include or exclude rules are
             * specified, the layer is always included.  If the current NetState meets
             * ANY (i.e., one or more) of the specified rules, the layer is
             * included/excluded.
             * </pre>
             */
            public Builder addInclude(
                    int index, caffe.Loadcaffe.NetStateRule.Builder builderForValue) {
                if (includeBuilder_ == null) {
                    ensureIncludeIsMutable();
                    include_.add(index, builderForValue.build());
                    onChanged();
                } else {
                    includeBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 8;</code>
             *
             * <pre>
             * Rules controlling whether and when a layer is included in the network,
             * based on the current NetState.  You may specify a non-zero number of rules
             * to include OR exclude, but not both.  If no include or exclude rules are
             * specified, the layer is always included.  If the current NetState meets
             * ANY (i.e., one or more) of the specified rules, the layer is
             * included/excluded.
             * </pre>
             */
            public Builder addAllInclude(
                    java.lang.Iterable<? extends caffe.Loadcaffe.NetStateRule> values) {
                if (includeBuilder_ == null) {
                    ensureIncludeIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(
                            values, include_);
                    onChanged();
                } else {
                    includeBuilder_.addAllMessages(values);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 8;</code>
             *
             * <pre>
             * Rules controlling whether and when a layer is included in the network,
             * based on the current NetState.  You may specify a non-zero number of rules
             * to include OR exclude, but not both.  If no include or exclude rules are
             * specified, the layer is always included.  If the current NetState meets
             * ANY (i.e., one or more) of the specified rules, the layer is
             * included/excluded.
             * </pre>
             */
            public Builder clearInclude() {
                if (includeBuilder_ == null) {
                    include_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000100);
                    onChanged();
                } else {
                    includeBuilder_.clear();
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 8;</code>
             *
             * <pre>
             * Rules controlling whether and when a layer is included in the network,
             * based on the current NetState.  You may specify a non-zero number of rules
             * to include OR exclude, but not both.  If no include or exclude rules are
             * specified, the layer is always included.  If the current NetState meets
             * ANY (i.e., one or more) of the specified rules, the layer is
             * included/excluded.
             * </pre>
             */
            public Builder removeInclude(int index) {
                if (includeBuilder_ == null) {
                    ensureIncludeIsMutable();
                    include_.remove(index);
                    onChanged();
                } else {
                    includeBuilder_.remove(index);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 8;</code>
             *
             * <pre>
             * Rules controlling whether and when a layer is included in the network,
             * based on the current NetState.  You may specify a non-zero number of rules
             * to include OR exclude, but not both.  If no include or exclude rules are
             * specified, the layer is always included.  If the current NetState meets
             * ANY (i.e., one or more) of the specified rules, the layer is
             * included/excluded.
             * </pre>
             */
            public caffe.Loadcaffe.NetStateRule.Builder getIncludeBuilder(
                    int index) {
                return getIncludeFieldBuilder().getBuilder(index);
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 8;</code>
             *
             * <pre>
             * Rules controlling whether and when a layer is included in the network,
             * based on the current NetState.  You may specify a non-zero number of rules
             * to include OR exclude, but not both.  If no include or exclude rules are
             * specified, the layer is always included.  If the current NetState meets
             * ANY (i.e., one or more) of the specified rules, the layer is
             * included/excluded.
             * </pre>
             */
            public caffe.Loadcaffe.NetStateRuleOrBuilder getIncludeOrBuilder(
                    int index) {
                if (includeBuilder_ == null) {
                    return include_.get(index);  } else {
                    return includeBuilder_.getMessageOrBuilder(index);
                }
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 8;</code>
             *
             * <pre>
             * Rules controlling whether and when a layer is included in the network,
             * based on the current NetState.  You may specify a non-zero number of rules
             * to include OR exclude, but not both.  If no include or exclude rules are
             * specified, the layer is always included.  If the current NetState meets
             * ANY (i.e., one or more) of the specified rules, the layer is
             * included/excluded.
             * </pre>
             */
            public java.util.List<? extends caffe.Loadcaffe.NetStateRuleOrBuilder>
            getIncludeOrBuilderList() {
                if (includeBuilder_ != null) {
                    return includeBuilder_.getMessageOrBuilderList();
                } else {
                    return java.util.Collections.unmodifiableList(include_);
                }
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 8;</code>
             *
             * <pre>
             * Rules controlling whether and when a layer is included in the network,
             * based on the current NetState.  You may specify a non-zero number of rules
             * to include OR exclude, but not both.  If no include or exclude rules are
             * specified, the layer is always included.  If the current NetState meets
             * ANY (i.e., one or more) of the specified rules, the layer is
             * included/excluded.
             * </pre>
             */
            public caffe.Loadcaffe.NetStateRule.Builder addIncludeBuilder() {
                return getIncludeFieldBuilder().addBuilder(
                        caffe.Loadcaffe.NetStateRule.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 8;</code>
             *
             * <pre>
             * Rules controlling whether and when a layer is included in the network,
             * based on the current NetState.  You may specify a non-zero number of rules
             * to include OR exclude, but not both.  If no include or exclude rules are
             * specified, the layer is always included.  If the current NetState meets
             * ANY (i.e., one or more) of the specified rules, the layer is
             * included/excluded.
             * </pre>
             */
            public caffe.Loadcaffe.NetStateRule.Builder addIncludeBuilder(
                    int index) {
                return getIncludeFieldBuilder().addBuilder(
                        index, caffe.Loadcaffe.NetStateRule.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 8;</code>
             *
             * <pre>
             * Rules controlling whether and when a layer is included in the network,
             * based on the current NetState.  You may specify a non-zero number of rules
             * to include OR exclude, but not both.  If no include or exclude rules are
             * specified, the layer is always included.  If the current NetState meets
             * ANY (i.e., one or more) of the specified rules, the layer is
             * included/excluded.
             * </pre>
             */
            public java.util.List<caffe.Loadcaffe.NetStateRule.Builder>
            getIncludeBuilderList() {
                return getIncludeFieldBuilder().getBuilderList();
            }
            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.NetStateRule, caffe.Loadcaffe.NetStateRule.Builder, caffe.Loadcaffe.NetStateRuleOrBuilder>
            getIncludeFieldBuilder() {
                if (includeBuilder_ == null) {
                    includeBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            caffe.Loadcaffe.NetStateRule, caffe.Loadcaffe.NetStateRule.Builder, caffe.Loadcaffe.NetStateRuleOrBuilder>(
                            include_,
                            ((bitField0_ & 0x00000100) == 0x00000100),
                            getParentForChildren(),
                            isClean());
                    include_ = null;
                }
                return includeBuilder_;
            }

            private java.util.List<caffe.Loadcaffe.NetStateRule> exclude_ =
                    java.util.Collections.emptyList();
            private void ensureExcludeIsMutable() {
                if (!((bitField0_ & 0x00000200) == 0x00000200)) {
                    exclude_ = new java.util.ArrayList<caffe.Loadcaffe.NetStateRule>(exclude_);
                    bitField0_ |= 0x00000200;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.NetStateRule, caffe.Loadcaffe.NetStateRule.Builder, caffe.Loadcaffe.NetStateRuleOrBuilder> excludeBuilder_;

            /**
             * <code>repeated .caffe.NetStateRule exclude = 9;</code>
             */
            public java.util.List<caffe.Loadcaffe.NetStateRule> getExcludeList() {
                if (excludeBuilder_ == null) {
                    return java.util.Collections.unmodifiableList(exclude_);
                } else {
                    return excludeBuilder_.getMessageList();
                }
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 9;</code>
             */
            public int getExcludeCount() {
                if (excludeBuilder_ == null) {
                    return exclude_.size();
                } else {
                    return excludeBuilder_.getCount();
                }
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 9;</code>
             */
            public caffe.Loadcaffe.NetStateRule getExclude(int index) {
                if (excludeBuilder_ == null) {
                    return exclude_.get(index);
                } else {
                    return excludeBuilder_.getMessage(index);
                }
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 9;</code>
             */
            public Builder setExclude(
                    int index, caffe.Loadcaffe.NetStateRule value) {
                if (excludeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureExcludeIsMutable();
                    exclude_.set(index, value);
                    onChanged();
                } else {
                    excludeBuilder_.setMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 9;</code>
             */
            public Builder setExclude(
                    int index, caffe.Loadcaffe.NetStateRule.Builder builderForValue) {
                if (excludeBuilder_ == null) {
                    ensureExcludeIsMutable();
                    exclude_.set(index, builderForValue.build());
                    onChanged();
                } else {
                    excludeBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 9;</code>
             */
            public Builder addExclude(caffe.Loadcaffe.NetStateRule value) {
                if (excludeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureExcludeIsMutable();
                    exclude_.add(value);
                    onChanged();
                } else {
                    excludeBuilder_.addMessage(value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 9;</code>
             */
            public Builder addExclude(
                    int index, caffe.Loadcaffe.NetStateRule value) {
                if (excludeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureExcludeIsMutable();
                    exclude_.add(index, value);
                    onChanged();
                } else {
                    excludeBuilder_.addMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 9;</code>
             */
            public Builder addExclude(
                    caffe.Loadcaffe.NetStateRule.Builder builderForValue) {
                if (excludeBuilder_ == null) {
                    ensureExcludeIsMutable();
                    exclude_.add(builderForValue.build());
                    onChanged();
                } else {
                    excludeBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 9;</code>
             */
            public Builder addExclude(
                    int index, caffe.Loadcaffe.NetStateRule.Builder builderForValue) {
                if (excludeBuilder_ == null) {
                    ensureExcludeIsMutable();
                    exclude_.add(index, builderForValue.build());
                    onChanged();
                } else {
                    excludeBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 9;</code>
             */
            public Builder addAllExclude(
                    java.lang.Iterable<? extends caffe.Loadcaffe.NetStateRule> values) {
                if (excludeBuilder_ == null) {
                    ensureExcludeIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(
                            values, exclude_);
                    onChanged();
                } else {
                    excludeBuilder_.addAllMessages(values);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 9;</code>
             */
            public Builder clearExclude() {
                if (excludeBuilder_ == null) {
                    exclude_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000200);
                    onChanged();
                } else {
                    excludeBuilder_.clear();
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 9;</code>
             */
            public Builder removeExclude(int index) {
                if (excludeBuilder_ == null) {
                    ensureExcludeIsMutable();
                    exclude_.remove(index);
                    onChanged();
                } else {
                    excludeBuilder_.remove(index);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 9;</code>
             */
            public caffe.Loadcaffe.NetStateRule.Builder getExcludeBuilder(
                    int index) {
                return getExcludeFieldBuilder().getBuilder(index);
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 9;</code>
             */
            public caffe.Loadcaffe.NetStateRuleOrBuilder getExcludeOrBuilder(
                    int index) {
                if (excludeBuilder_ == null) {
                    return exclude_.get(index);  } else {
                    return excludeBuilder_.getMessageOrBuilder(index);
                }
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 9;</code>
             */
            public java.util.List<? extends caffe.Loadcaffe.NetStateRuleOrBuilder>
            getExcludeOrBuilderList() {
                if (excludeBuilder_ != null) {
                    return excludeBuilder_.getMessageOrBuilderList();
                } else {
                    return java.util.Collections.unmodifiableList(exclude_);
                }
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 9;</code>
             */
            public caffe.Loadcaffe.NetStateRule.Builder addExcludeBuilder() {
                return getExcludeFieldBuilder().addBuilder(
                        caffe.Loadcaffe.NetStateRule.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 9;</code>
             */
            public caffe.Loadcaffe.NetStateRule.Builder addExcludeBuilder(
                    int index) {
                return getExcludeFieldBuilder().addBuilder(
                        index, caffe.Loadcaffe.NetStateRule.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 9;</code>
             */
            public java.util.List<caffe.Loadcaffe.NetStateRule.Builder>
            getExcludeBuilderList() {
                return getExcludeFieldBuilder().getBuilderList();
            }
            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.NetStateRule, caffe.Loadcaffe.NetStateRule.Builder, caffe.Loadcaffe.NetStateRuleOrBuilder>
            getExcludeFieldBuilder() {
                if (excludeBuilder_ == null) {
                    excludeBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            caffe.Loadcaffe.NetStateRule, caffe.Loadcaffe.NetStateRule.Builder, caffe.Loadcaffe.NetStateRuleOrBuilder>(
                            exclude_,
                            ((bitField0_ & 0x00000200) == 0x00000200),
                            getParentForChildren(),
                            isClean());
                    exclude_ = null;
                }
                return excludeBuilder_;
            }

            private caffe.Loadcaffe.TransformationParameter transformParam_ = caffe.Loadcaffe.TransformationParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.TransformationParameter, caffe.Loadcaffe.TransformationParameter.Builder, caffe.Loadcaffe.TransformationParameterOrBuilder> transformParamBuilder_;
            /**
             * <code>optional .caffe.TransformationParameter transform_param = 100;</code>
             *
             * <pre>
             * Parameters for data pre-processing.
             * </pre>
             */
            public boolean hasTransformParam() {
                return ((bitField0_ & 0x00000400) == 0x00000400);
            }
            /**
             * <code>optional .caffe.TransformationParameter transform_param = 100;</code>
             *
             * <pre>
             * Parameters for data pre-processing.
             * </pre>
             */
            public caffe.Loadcaffe.TransformationParameter getTransformParam() {
                if (transformParamBuilder_ == null) {
                    return transformParam_;
                } else {
                    return transformParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.TransformationParameter transform_param = 100;</code>
             *
             * <pre>
             * Parameters for data pre-processing.
             * </pre>
             */
            public Builder setTransformParam(caffe.Loadcaffe.TransformationParameter value) {
                if (transformParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    transformParam_ = value;
                    onChanged();
                } else {
                    transformParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00000400;
                return this;
            }
            /**
             * <code>optional .caffe.TransformationParameter transform_param = 100;</code>
             *
             * <pre>
             * Parameters for data pre-processing.
             * </pre>
             */
            public Builder setTransformParam(
                    caffe.Loadcaffe.TransformationParameter.Builder builderForValue) {
                if (transformParamBuilder_ == null) {
                    transformParam_ = builderForValue.build();
                    onChanged();
                } else {
                    transformParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00000400;
                return this;
            }
            /**
             * <code>optional .caffe.TransformationParameter transform_param = 100;</code>
             *
             * <pre>
             * Parameters for data pre-processing.
             * </pre>
             */
            public Builder mergeTransformParam(caffe.Loadcaffe.TransformationParameter value) {
                if (transformParamBuilder_ == null) {
                    if (((bitField0_ & 0x00000400) == 0x00000400) &&
                            transformParam_ != caffe.Loadcaffe.TransformationParameter.getDefaultInstance()) {
                        transformParam_ =
                                caffe.Loadcaffe.TransformationParameter.newBuilder(transformParam_).mergeFrom(value).buildPartial();
                    } else {
                        transformParam_ = value;
                    }
                    onChanged();
                } else {
                    transformParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00000400;
                return this;
            }
            /**
             * <code>optional .caffe.TransformationParameter transform_param = 100;</code>
             *
             * <pre>
             * Parameters for data pre-processing.
             * </pre>
             */
            public Builder clearTransformParam() {
                if (transformParamBuilder_ == null) {
                    transformParam_ = caffe.Loadcaffe.TransformationParameter.getDefaultInstance();
                    onChanged();
                } else {
                    transformParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000400);
                return this;
            }
            /**
             * <code>optional .caffe.TransformationParameter transform_param = 100;</code>
             *
             * <pre>
             * Parameters for data pre-processing.
             * </pre>
             */
            public caffe.Loadcaffe.TransformationParameter.Builder getTransformParamBuilder() {
                bitField0_ |= 0x00000400;
                onChanged();
                return getTransformParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.TransformationParameter transform_param = 100;</code>
             *
             * <pre>
             * Parameters for data pre-processing.
             * </pre>
             */
            public caffe.Loadcaffe.TransformationParameterOrBuilder getTransformParamOrBuilder() {
                if (transformParamBuilder_ != null) {
                    return transformParamBuilder_.getMessageOrBuilder();
                } else {
                    return transformParam_;
                }
            }
            /**
             * <code>optional .caffe.TransformationParameter transform_param = 100;</code>
             *
             * <pre>
             * Parameters for data pre-processing.
             * </pre>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.TransformationParameter, caffe.Loadcaffe.TransformationParameter.Builder, caffe.Loadcaffe.TransformationParameterOrBuilder>
            getTransformParamFieldBuilder() {
                if (transformParamBuilder_ == null) {
                    transformParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.TransformationParameter, caffe.Loadcaffe.TransformationParameter.Builder, caffe.Loadcaffe.TransformationParameterOrBuilder>(
                            getTransformParam(),
                            getParentForChildren(),
                            isClean());
                    transformParam_ = null;
                }
                return transformParamBuilder_;
            }

            private caffe.Loadcaffe.LossParameter lossParam_ = caffe.Loadcaffe.LossParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.LossParameter, caffe.Loadcaffe.LossParameter.Builder, caffe.Loadcaffe.LossParameterOrBuilder> lossParamBuilder_;
            /**
             * <code>optional .caffe.LossParameter loss_param = 101;</code>
             *
             * <pre>
             * Parameters shared by loss layers.
             * </pre>
             */
            public boolean hasLossParam() {
                return ((bitField0_ & 0x00000800) == 0x00000800);
            }
            /**
             * <code>optional .caffe.LossParameter loss_param = 101;</code>
             *
             * <pre>
             * Parameters shared by loss layers.
             * </pre>
             */
            public caffe.Loadcaffe.LossParameter getLossParam() {
                if (lossParamBuilder_ == null) {
                    return lossParam_;
                } else {
                    return lossParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.LossParameter loss_param = 101;</code>
             *
             * <pre>
             * Parameters shared by loss layers.
             * </pre>
             */
            public Builder setLossParam(caffe.Loadcaffe.LossParameter value) {
                if (lossParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    lossParam_ = value;
                    onChanged();
                } else {
                    lossParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00000800;
                return this;
            }
            /**
             * <code>optional .caffe.LossParameter loss_param = 101;</code>
             *
             * <pre>
             * Parameters shared by loss layers.
             * </pre>
             */
            public Builder setLossParam(
                    caffe.Loadcaffe.LossParameter.Builder builderForValue) {
                if (lossParamBuilder_ == null) {
                    lossParam_ = builderForValue.build();
                    onChanged();
                } else {
                    lossParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00000800;
                return this;
            }
            /**
             * <code>optional .caffe.LossParameter loss_param = 101;</code>
             *
             * <pre>
             * Parameters shared by loss layers.
             * </pre>
             */
            public Builder mergeLossParam(caffe.Loadcaffe.LossParameter value) {
                if (lossParamBuilder_ == null) {
                    if (((bitField0_ & 0x00000800) == 0x00000800) &&
                            lossParam_ != caffe.Loadcaffe.LossParameter.getDefaultInstance()) {
                        lossParam_ =
                                caffe.Loadcaffe.LossParameter.newBuilder(lossParam_).mergeFrom(value).buildPartial();
                    } else {
                        lossParam_ = value;
                    }
                    onChanged();
                } else {
                    lossParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00000800;
                return this;
            }
            /**
             * <code>optional .caffe.LossParameter loss_param = 101;</code>
             *
             * <pre>
             * Parameters shared by loss layers.
             * </pre>
             */
            public Builder clearLossParam() {
                if (lossParamBuilder_ == null) {
                    lossParam_ = caffe.Loadcaffe.LossParameter.getDefaultInstance();
                    onChanged();
                } else {
                    lossParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000800);
                return this;
            }
            /**
             * <code>optional .caffe.LossParameter loss_param = 101;</code>
             *
             * <pre>
             * Parameters shared by loss layers.
             * </pre>
             */
            public caffe.Loadcaffe.LossParameter.Builder getLossParamBuilder() {
                bitField0_ |= 0x00000800;
                onChanged();
                return getLossParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.LossParameter loss_param = 101;</code>
             *
             * <pre>
             * Parameters shared by loss layers.
             * </pre>
             */
            public caffe.Loadcaffe.LossParameterOrBuilder getLossParamOrBuilder() {
                if (lossParamBuilder_ != null) {
                    return lossParamBuilder_.getMessageOrBuilder();
                } else {
                    return lossParam_;
                }
            }
            /**
             * <code>optional .caffe.LossParameter loss_param = 101;</code>
             *
             * <pre>
             * Parameters shared by loss layers.
             * </pre>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.LossParameter, caffe.Loadcaffe.LossParameter.Builder, caffe.Loadcaffe.LossParameterOrBuilder>
            getLossParamFieldBuilder() {
                if (lossParamBuilder_ == null) {
                    lossParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.LossParameter, caffe.Loadcaffe.LossParameter.Builder, caffe.Loadcaffe.LossParameterOrBuilder>(
                            getLossParam(),
                            getParentForChildren(),
                            isClean());
                    lossParam_ = null;
                }
                return lossParamBuilder_;
            }

            private caffe.Loadcaffe.AccuracyParameter accuracyParam_ = caffe.Loadcaffe.AccuracyParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.AccuracyParameter, caffe.Loadcaffe.AccuracyParameter.Builder, caffe.Loadcaffe.AccuracyParameterOrBuilder> accuracyParamBuilder_;
            /**
             * <code>optional .caffe.AccuracyParameter accuracy_param = 102;</code>
             *
             * <pre>
             * Layer type-specific parameters.
             * Note: certain layers may have more than one computational engine
             * for their implementation. These layers include an Engine type and
             * engine parameter for selecting the implementation.
             * The default for the engine is set by the ENGINE switch at compile-time.
             * </pre>
             */
            public boolean hasAccuracyParam() {
                return ((bitField0_ & 0x00001000) == 0x00001000);
            }
            /**
             * <code>optional .caffe.AccuracyParameter accuracy_param = 102;</code>
             *
             * <pre>
             * Layer type-specific parameters.
             * Note: certain layers may have more than one computational engine
             * for their implementation. These layers include an Engine type and
             * engine parameter for selecting the implementation.
             * The default for the engine is set by the ENGINE switch at compile-time.
             * </pre>
             */
            public caffe.Loadcaffe.AccuracyParameter getAccuracyParam() {
                if (accuracyParamBuilder_ == null) {
                    return accuracyParam_;
                } else {
                    return accuracyParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.AccuracyParameter accuracy_param = 102;</code>
             *
             * <pre>
             * Layer type-specific parameters.
             * Note: certain layers may have more than one computational engine
             * for their implementation. These layers include an Engine type and
             * engine parameter for selecting the implementation.
             * The default for the engine is set by the ENGINE switch at compile-time.
             * </pre>
             */
            public Builder setAccuracyParam(caffe.Loadcaffe.AccuracyParameter value) {
                if (accuracyParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    accuracyParam_ = value;
                    onChanged();
                } else {
                    accuracyParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00001000;
                return this;
            }
            /**
             * <code>optional .caffe.AccuracyParameter accuracy_param = 102;</code>
             *
             * <pre>
             * Layer type-specific parameters.
             * Note: certain layers may have more than one computational engine
             * for their implementation. These layers include an Engine type and
             * engine parameter for selecting the implementation.
             * The default for the engine is set by the ENGINE switch at compile-time.
             * </pre>
             */
            public Builder setAccuracyParam(
                    caffe.Loadcaffe.AccuracyParameter.Builder builderForValue) {
                if (accuracyParamBuilder_ == null) {
                    accuracyParam_ = builderForValue.build();
                    onChanged();
                } else {
                    accuracyParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00001000;
                return this;
            }
            /**
             * <code>optional .caffe.AccuracyParameter accuracy_param = 102;</code>
             *
             * <pre>
             * Layer type-specific parameters.
             * Note: certain layers may have more than one computational engine
             * for their implementation. These layers include an Engine type and
             * engine parameter for selecting the implementation.
             * The default for the engine is set by the ENGINE switch at compile-time.
             * </pre>
             */
            public Builder mergeAccuracyParam(caffe.Loadcaffe.AccuracyParameter value) {
                if (accuracyParamBuilder_ == null) {
                    if (((bitField0_ & 0x00001000) == 0x00001000) &&
                            accuracyParam_ != caffe.Loadcaffe.AccuracyParameter.getDefaultInstance()) {
                        accuracyParam_ =
                                caffe.Loadcaffe.AccuracyParameter.newBuilder(accuracyParam_).mergeFrom(value).buildPartial();
                    } else {
                        accuracyParam_ = value;
                    }
                    onChanged();
                } else {
                    accuracyParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00001000;
                return this;
            }
            /**
             * <code>optional .caffe.AccuracyParameter accuracy_param = 102;</code>
             *
             * <pre>
             * Layer type-specific parameters.
             * Note: certain layers may have more than one computational engine
             * for their implementation. These layers include an Engine type and
             * engine parameter for selecting the implementation.
             * The default for the engine is set by the ENGINE switch at compile-time.
             * </pre>
             */
            public Builder clearAccuracyParam() {
                if (accuracyParamBuilder_ == null) {
                    accuracyParam_ = caffe.Loadcaffe.AccuracyParameter.getDefaultInstance();
                    onChanged();
                } else {
                    accuracyParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00001000);
                return this;
            }
            /**
             * <code>optional .caffe.AccuracyParameter accuracy_param = 102;</code>
             *
             * <pre>
             * Layer type-specific parameters.
             * Note: certain layers may have more than one computational engine
             * for their implementation. These layers include an Engine type and
             * engine parameter for selecting the implementation.
             * The default for the engine is set by the ENGINE switch at compile-time.
             * </pre>
             */
            public caffe.Loadcaffe.AccuracyParameter.Builder getAccuracyParamBuilder() {
                bitField0_ |= 0x00001000;
                onChanged();
                return getAccuracyParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.AccuracyParameter accuracy_param = 102;</code>
             *
             * <pre>
             * Layer type-specific parameters.
             * Note: certain layers may have more than one computational engine
             * for their implementation. These layers include an Engine type and
             * engine parameter for selecting the implementation.
             * The default for the engine is set by the ENGINE switch at compile-time.
             * </pre>
             */
            public caffe.Loadcaffe.AccuracyParameterOrBuilder getAccuracyParamOrBuilder() {
                if (accuracyParamBuilder_ != null) {
                    return accuracyParamBuilder_.getMessageOrBuilder();
                } else {
                    return accuracyParam_;
                }
            }
            /**
             * <code>optional .caffe.AccuracyParameter accuracy_param = 102;</code>
             *
             * <pre>
             * Layer type-specific parameters.
             * Note: certain layers may have more than one computational engine
             * for their implementation. These layers include an Engine type and
             * engine parameter for selecting the implementation.
             * The default for the engine is set by the ENGINE switch at compile-time.
             * </pre>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.AccuracyParameter, caffe.Loadcaffe.AccuracyParameter.Builder, caffe.Loadcaffe.AccuracyParameterOrBuilder>
            getAccuracyParamFieldBuilder() {
                if (accuracyParamBuilder_ == null) {
                    accuracyParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.AccuracyParameter, caffe.Loadcaffe.AccuracyParameter.Builder, caffe.Loadcaffe.AccuracyParameterOrBuilder>(
                            getAccuracyParam(),
                            getParentForChildren(),
                            isClean());
                    accuracyParam_ = null;
                }
                return accuracyParamBuilder_;
            }

            private caffe.Loadcaffe.ArgMaxParameter argmaxParam_ = caffe.Loadcaffe.ArgMaxParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ArgMaxParameter, caffe.Loadcaffe.ArgMaxParameter.Builder, caffe.Loadcaffe.ArgMaxParameterOrBuilder> argmaxParamBuilder_;
            /**
             * <code>optional .caffe.ArgMaxParameter argmax_param = 103;</code>
             */
            public boolean hasArgmaxParam() {
                return ((bitField0_ & 0x00002000) == 0x00002000);
            }
            /**
             * <code>optional .caffe.ArgMaxParameter argmax_param = 103;</code>
             */
            public caffe.Loadcaffe.ArgMaxParameter getArgmaxParam() {
                if (argmaxParamBuilder_ == null) {
                    return argmaxParam_;
                } else {
                    return argmaxParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.ArgMaxParameter argmax_param = 103;</code>
             */
            public Builder setArgmaxParam(caffe.Loadcaffe.ArgMaxParameter value) {
                if (argmaxParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    argmaxParam_ = value;
                    onChanged();
                } else {
                    argmaxParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00002000;
                return this;
            }
            /**
             * <code>optional .caffe.ArgMaxParameter argmax_param = 103;</code>
             */
            public Builder setArgmaxParam(
                    caffe.Loadcaffe.ArgMaxParameter.Builder builderForValue) {
                if (argmaxParamBuilder_ == null) {
                    argmaxParam_ = builderForValue.build();
                    onChanged();
                } else {
                    argmaxParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00002000;
                return this;
            }
            /**
             * <code>optional .caffe.ArgMaxParameter argmax_param = 103;</code>
             */
            public Builder mergeArgmaxParam(caffe.Loadcaffe.ArgMaxParameter value) {
                if (argmaxParamBuilder_ == null) {
                    if (((bitField0_ & 0x00002000) == 0x00002000) &&
                            argmaxParam_ != caffe.Loadcaffe.ArgMaxParameter.getDefaultInstance()) {
                        argmaxParam_ =
                                caffe.Loadcaffe.ArgMaxParameter.newBuilder(argmaxParam_).mergeFrom(value).buildPartial();
                    } else {
                        argmaxParam_ = value;
                    }
                    onChanged();
                } else {
                    argmaxParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00002000;
                return this;
            }
            /**
             * <code>optional .caffe.ArgMaxParameter argmax_param = 103;</code>
             */
            public Builder clearArgmaxParam() {
                if (argmaxParamBuilder_ == null) {
                    argmaxParam_ = caffe.Loadcaffe.ArgMaxParameter.getDefaultInstance();
                    onChanged();
                } else {
                    argmaxParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00002000);
                return this;
            }
            /**
             * <code>optional .caffe.ArgMaxParameter argmax_param = 103;</code>
             */
            public caffe.Loadcaffe.ArgMaxParameter.Builder getArgmaxParamBuilder() {
                bitField0_ |= 0x00002000;
                onChanged();
                return getArgmaxParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.ArgMaxParameter argmax_param = 103;</code>
             */
            public caffe.Loadcaffe.ArgMaxParameterOrBuilder getArgmaxParamOrBuilder() {
                if (argmaxParamBuilder_ != null) {
                    return argmaxParamBuilder_.getMessageOrBuilder();
                } else {
                    return argmaxParam_;
                }
            }
            /**
             * <code>optional .caffe.ArgMaxParameter argmax_param = 103;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ArgMaxParameter, caffe.Loadcaffe.ArgMaxParameter.Builder, caffe.Loadcaffe.ArgMaxParameterOrBuilder>
            getArgmaxParamFieldBuilder() {
                if (argmaxParamBuilder_ == null) {
                    argmaxParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.ArgMaxParameter, caffe.Loadcaffe.ArgMaxParameter.Builder, caffe.Loadcaffe.ArgMaxParameterOrBuilder>(
                            getArgmaxParam(),
                            getParentForChildren(),
                            isClean());
                    argmaxParam_ = null;
                }
                return argmaxParamBuilder_;
            }

            private caffe.Loadcaffe.ConcatParameter concatParam_ = caffe.Loadcaffe.ConcatParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ConcatParameter, caffe.Loadcaffe.ConcatParameter.Builder, caffe.Loadcaffe.ConcatParameterOrBuilder> concatParamBuilder_;
            /**
             * <code>optional .caffe.ConcatParameter concat_param = 104;</code>
             */
            public boolean hasConcatParam() {
                return ((bitField0_ & 0x00004000) == 0x00004000);
            }
            /**
             * <code>optional .caffe.ConcatParameter concat_param = 104;</code>
             */
            public caffe.Loadcaffe.ConcatParameter getConcatParam() {
                if (concatParamBuilder_ == null) {
                    return concatParam_;
                } else {
                    return concatParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.ConcatParameter concat_param = 104;</code>
             */
            public Builder setConcatParam(caffe.Loadcaffe.ConcatParameter value) {
                if (concatParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    concatParam_ = value;
                    onChanged();
                } else {
                    concatParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00004000;
                return this;
            }
            /**
             * <code>optional .caffe.ConcatParameter concat_param = 104;</code>
             */
            public Builder setConcatParam(
                    caffe.Loadcaffe.ConcatParameter.Builder builderForValue) {
                if (concatParamBuilder_ == null) {
                    concatParam_ = builderForValue.build();
                    onChanged();
                } else {
                    concatParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00004000;
                return this;
            }
            /**
             * <code>optional .caffe.ConcatParameter concat_param = 104;</code>
             */
            public Builder mergeConcatParam(caffe.Loadcaffe.ConcatParameter value) {
                if (concatParamBuilder_ == null) {
                    if (((bitField0_ & 0x00004000) == 0x00004000) &&
                            concatParam_ != caffe.Loadcaffe.ConcatParameter.getDefaultInstance()) {
                        concatParam_ =
                                caffe.Loadcaffe.ConcatParameter.newBuilder(concatParam_).mergeFrom(value).buildPartial();
                    } else {
                        concatParam_ = value;
                    }
                    onChanged();
                } else {
                    concatParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00004000;
                return this;
            }
            /**
             * <code>optional .caffe.ConcatParameter concat_param = 104;</code>
             */
            public Builder clearConcatParam() {
                if (concatParamBuilder_ == null) {
                    concatParam_ = caffe.Loadcaffe.ConcatParameter.getDefaultInstance();
                    onChanged();
                } else {
                    concatParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00004000);
                return this;
            }
            /**
             * <code>optional .caffe.ConcatParameter concat_param = 104;</code>
             */
            public caffe.Loadcaffe.ConcatParameter.Builder getConcatParamBuilder() {
                bitField0_ |= 0x00004000;
                onChanged();
                return getConcatParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.ConcatParameter concat_param = 104;</code>
             */
            public caffe.Loadcaffe.ConcatParameterOrBuilder getConcatParamOrBuilder() {
                if (concatParamBuilder_ != null) {
                    return concatParamBuilder_.getMessageOrBuilder();
                } else {
                    return concatParam_;
                }
            }
            /**
             * <code>optional .caffe.ConcatParameter concat_param = 104;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ConcatParameter, caffe.Loadcaffe.ConcatParameter.Builder, caffe.Loadcaffe.ConcatParameterOrBuilder>
            getConcatParamFieldBuilder() {
                if (concatParamBuilder_ == null) {
                    concatParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.ConcatParameter, caffe.Loadcaffe.ConcatParameter.Builder, caffe.Loadcaffe.ConcatParameterOrBuilder>(
                            getConcatParam(),
                            getParentForChildren(),
                            isClean());
                    concatParam_ = null;
                }
                return concatParamBuilder_;
            }

            private caffe.Loadcaffe.ContrastiveLossParameter contrastiveLossParam_ = caffe.Loadcaffe.ContrastiveLossParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ContrastiveLossParameter, caffe.Loadcaffe.ContrastiveLossParameter.Builder, caffe.Loadcaffe.ContrastiveLossParameterOrBuilder> contrastiveLossParamBuilder_;
            /**
             * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 105;</code>
             */
            public boolean hasContrastiveLossParam() {
                return ((bitField0_ & 0x00008000) == 0x00008000);
            }
            /**
             * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 105;</code>
             */
            public caffe.Loadcaffe.ContrastiveLossParameter getContrastiveLossParam() {
                if (contrastiveLossParamBuilder_ == null) {
                    return contrastiveLossParam_;
                } else {
                    return contrastiveLossParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 105;</code>
             */
            public Builder setContrastiveLossParam(caffe.Loadcaffe.ContrastiveLossParameter value) {
                if (contrastiveLossParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    contrastiveLossParam_ = value;
                    onChanged();
                } else {
                    contrastiveLossParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00008000;
                return this;
            }
            /**
             * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 105;</code>
             */
            public Builder setContrastiveLossParam(
                    caffe.Loadcaffe.ContrastiveLossParameter.Builder builderForValue) {
                if (contrastiveLossParamBuilder_ == null) {
                    contrastiveLossParam_ = builderForValue.build();
                    onChanged();
                } else {
                    contrastiveLossParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00008000;
                return this;
            }
            /**
             * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 105;</code>
             */
            public Builder mergeContrastiveLossParam(caffe.Loadcaffe.ContrastiveLossParameter value) {
                if (contrastiveLossParamBuilder_ == null) {
                    if (((bitField0_ & 0x00008000) == 0x00008000) &&
                            contrastiveLossParam_ != caffe.Loadcaffe.ContrastiveLossParameter.getDefaultInstance()) {
                        contrastiveLossParam_ =
                                caffe.Loadcaffe.ContrastiveLossParameter.newBuilder(contrastiveLossParam_).mergeFrom(value).buildPartial();
                    } else {
                        contrastiveLossParam_ = value;
                    }
                    onChanged();
                } else {
                    contrastiveLossParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00008000;
                return this;
            }
            /**
             * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 105;</code>
             */
            public Builder clearContrastiveLossParam() {
                if (contrastiveLossParamBuilder_ == null) {
                    contrastiveLossParam_ = caffe.Loadcaffe.ContrastiveLossParameter.getDefaultInstance();
                    onChanged();
                } else {
                    contrastiveLossParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00008000);
                return this;
            }
            /**
             * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 105;</code>
             */
            public caffe.Loadcaffe.ContrastiveLossParameter.Builder getContrastiveLossParamBuilder() {
                bitField0_ |= 0x00008000;
                onChanged();
                return getContrastiveLossParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 105;</code>
             */
            public caffe.Loadcaffe.ContrastiveLossParameterOrBuilder getContrastiveLossParamOrBuilder() {
                if (contrastiveLossParamBuilder_ != null) {
                    return contrastiveLossParamBuilder_.getMessageOrBuilder();
                } else {
                    return contrastiveLossParam_;
                }
            }
            /**
             * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 105;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ContrastiveLossParameter, caffe.Loadcaffe.ContrastiveLossParameter.Builder, caffe.Loadcaffe.ContrastiveLossParameterOrBuilder>
            getContrastiveLossParamFieldBuilder() {
                if (contrastiveLossParamBuilder_ == null) {
                    contrastiveLossParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.ContrastiveLossParameter, caffe.Loadcaffe.ContrastiveLossParameter.Builder, caffe.Loadcaffe.ContrastiveLossParameterOrBuilder>(
                            getContrastiveLossParam(),
                            getParentForChildren(),
                            isClean());
                    contrastiveLossParam_ = null;
                }
                return contrastiveLossParamBuilder_;
            }

            private caffe.Loadcaffe.ConvolutionParameter convolutionParam_ = caffe.Loadcaffe.ConvolutionParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ConvolutionParameter, caffe.Loadcaffe.ConvolutionParameter.Builder, caffe.Loadcaffe.ConvolutionParameterOrBuilder> convolutionParamBuilder_;
            /**
             * <code>optional .caffe.ConvolutionParameter convolution_param = 106;</code>
             */
            public boolean hasConvolutionParam() {
                return ((bitField0_ & 0x00010000) == 0x00010000);
            }
            /**
             * <code>optional .caffe.ConvolutionParameter convolution_param = 106;</code>
             */
            public caffe.Loadcaffe.ConvolutionParameter getConvolutionParam() {
                if (convolutionParamBuilder_ == null) {
                    return convolutionParam_;
                } else {
                    return convolutionParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.ConvolutionParameter convolution_param = 106;</code>
             */
            public Builder setConvolutionParam(caffe.Loadcaffe.ConvolutionParameter value) {
                if (convolutionParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    convolutionParam_ = value;
                    onChanged();
                } else {
                    convolutionParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00010000;
                return this;
            }
            /**
             * <code>optional .caffe.ConvolutionParameter convolution_param = 106;</code>
             */
            public Builder setConvolutionParam(
                    caffe.Loadcaffe.ConvolutionParameter.Builder builderForValue) {
                if (convolutionParamBuilder_ == null) {
                    convolutionParam_ = builderForValue.build();
                    onChanged();
                } else {
                    convolutionParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00010000;
                return this;
            }
            /**
             * <code>optional .caffe.ConvolutionParameter convolution_param = 106;</code>
             */
            public Builder mergeConvolutionParam(caffe.Loadcaffe.ConvolutionParameter value) {
                if (convolutionParamBuilder_ == null) {
                    if (((bitField0_ & 0x00010000) == 0x00010000) &&
                            convolutionParam_ != caffe.Loadcaffe.ConvolutionParameter.getDefaultInstance()) {
                        convolutionParam_ =
                                caffe.Loadcaffe.ConvolutionParameter.newBuilder(convolutionParam_).mergeFrom(value).buildPartial();
                    } else {
                        convolutionParam_ = value;
                    }
                    onChanged();
                } else {
                    convolutionParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00010000;
                return this;
            }
            /**
             * <code>optional .caffe.ConvolutionParameter convolution_param = 106;</code>
             */
            public Builder clearConvolutionParam() {
                if (convolutionParamBuilder_ == null) {
                    convolutionParam_ = caffe.Loadcaffe.ConvolutionParameter.getDefaultInstance();
                    onChanged();
                } else {
                    convolutionParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00010000);
                return this;
            }
            /**
             * <code>optional .caffe.ConvolutionParameter convolution_param = 106;</code>
             */
            public caffe.Loadcaffe.ConvolutionParameter.Builder getConvolutionParamBuilder() {
                bitField0_ |= 0x00010000;
                onChanged();
                return getConvolutionParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.ConvolutionParameter convolution_param = 106;</code>
             */
            public caffe.Loadcaffe.ConvolutionParameterOrBuilder getConvolutionParamOrBuilder() {
                if (convolutionParamBuilder_ != null) {
                    return convolutionParamBuilder_.getMessageOrBuilder();
                } else {
                    return convolutionParam_;
                }
            }
            /**
             * <code>optional .caffe.ConvolutionParameter convolution_param = 106;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ConvolutionParameter, caffe.Loadcaffe.ConvolutionParameter.Builder, caffe.Loadcaffe.ConvolutionParameterOrBuilder>
            getConvolutionParamFieldBuilder() {
                if (convolutionParamBuilder_ == null) {
                    convolutionParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.ConvolutionParameter, caffe.Loadcaffe.ConvolutionParameter.Builder, caffe.Loadcaffe.ConvolutionParameterOrBuilder>(
                            getConvolutionParam(),
                            getParentForChildren(),
                            isClean());
                    convolutionParam_ = null;
                }
                return convolutionParamBuilder_;
            }

            private caffe.Loadcaffe.DataParameter dataParam_ = caffe.Loadcaffe.DataParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.DataParameter, caffe.Loadcaffe.DataParameter.Builder, caffe.Loadcaffe.DataParameterOrBuilder> dataParamBuilder_;
            /**
             * <code>optional .caffe.DataParameter data_param = 107;</code>
             */
            public boolean hasDataParam() {
                return ((bitField0_ & 0x00020000) == 0x00020000);
            }
            /**
             * <code>optional .caffe.DataParameter data_param = 107;</code>
             */
            public caffe.Loadcaffe.DataParameter getDataParam() {
                if (dataParamBuilder_ == null) {
                    return dataParam_;
                } else {
                    return dataParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.DataParameter data_param = 107;</code>
             */
            public Builder setDataParam(caffe.Loadcaffe.DataParameter value) {
                if (dataParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    dataParam_ = value;
                    onChanged();
                } else {
                    dataParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00020000;
                return this;
            }
            /**
             * <code>optional .caffe.DataParameter data_param = 107;</code>
             */
            public Builder setDataParam(
                    caffe.Loadcaffe.DataParameter.Builder builderForValue) {
                if (dataParamBuilder_ == null) {
                    dataParam_ = builderForValue.build();
                    onChanged();
                } else {
                    dataParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00020000;
                return this;
            }
            /**
             * <code>optional .caffe.DataParameter data_param = 107;</code>
             */
            public Builder mergeDataParam(caffe.Loadcaffe.DataParameter value) {
                if (dataParamBuilder_ == null) {
                    if (((bitField0_ & 0x00020000) == 0x00020000) &&
                            dataParam_ != caffe.Loadcaffe.DataParameter.getDefaultInstance()) {
                        dataParam_ =
                                caffe.Loadcaffe.DataParameter.newBuilder(dataParam_).mergeFrom(value).buildPartial();
                    } else {
                        dataParam_ = value;
                    }
                    onChanged();
                } else {
                    dataParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00020000;
                return this;
            }
            /**
             * <code>optional .caffe.DataParameter data_param = 107;</code>
             */
            public Builder clearDataParam() {
                if (dataParamBuilder_ == null) {
                    dataParam_ = caffe.Loadcaffe.DataParameter.getDefaultInstance();
                    onChanged();
                } else {
                    dataParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00020000);
                return this;
            }
            /**
             * <code>optional .caffe.DataParameter data_param = 107;</code>
             */
            public caffe.Loadcaffe.DataParameter.Builder getDataParamBuilder() {
                bitField0_ |= 0x00020000;
                onChanged();
                return getDataParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.DataParameter data_param = 107;</code>
             */
            public caffe.Loadcaffe.DataParameterOrBuilder getDataParamOrBuilder() {
                if (dataParamBuilder_ != null) {
                    return dataParamBuilder_.getMessageOrBuilder();
                } else {
                    return dataParam_;
                }
            }
            /**
             * <code>optional .caffe.DataParameter data_param = 107;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.DataParameter, caffe.Loadcaffe.DataParameter.Builder, caffe.Loadcaffe.DataParameterOrBuilder>
            getDataParamFieldBuilder() {
                if (dataParamBuilder_ == null) {
                    dataParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.DataParameter, caffe.Loadcaffe.DataParameter.Builder, caffe.Loadcaffe.DataParameterOrBuilder>(
                            getDataParam(),
                            getParentForChildren(),
                            isClean());
                    dataParam_ = null;
                }
                return dataParamBuilder_;
            }

            private caffe.Loadcaffe.DropoutParameter dropoutParam_ = caffe.Loadcaffe.DropoutParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.DropoutParameter, caffe.Loadcaffe.DropoutParameter.Builder, caffe.Loadcaffe.DropoutParameterOrBuilder> dropoutParamBuilder_;
            /**
             * <code>optional .caffe.DropoutParameter dropout_param = 108;</code>
             */
            public boolean hasDropoutParam() {
                return ((bitField0_ & 0x00040000) == 0x00040000);
            }
            /**
             * <code>optional .caffe.DropoutParameter dropout_param = 108;</code>
             */
            public caffe.Loadcaffe.DropoutParameter getDropoutParam() {
                if (dropoutParamBuilder_ == null) {
                    return dropoutParam_;
                } else {
                    return dropoutParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.DropoutParameter dropout_param = 108;</code>
             */
            public Builder setDropoutParam(caffe.Loadcaffe.DropoutParameter value) {
                if (dropoutParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    dropoutParam_ = value;
                    onChanged();
                } else {
                    dropoutParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00040000;
                return this;
            }
            /**
             * <code>optional .caffe.DropoutParameter dropout_param = 108;</code>
             */
            public Builder setDropoutParam(
                    caffe.Loadcaffe.DropoutParameter.Builder builderForValue) {
                if (dropoutParamBuilder_ == null) {
                    dropoutParam_ = builderForValue.build();
                    onChanged();
                } else {
                    dropoutParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00040000;
                return this;
            }
            /**
             * <code>optional .caffe.DropoutParameter dropout_param = 108;</code>
             */
            public Builder mergeDropoutParam(caffe.Loadcaffe.DropoutParameter value) {
                if (dropoutParamBuilder_ == null) {
                    if (((bitField0_ & 0x00040000) == 0x00040000) &&
                            dropoutParam_ != caffe.Loadcaffe.DropoutParameter.getDefaultInstance()) {
                        dropoutParam_ =
                                caffe.Loadcaffe.DropoutParameter.newBuilder(dropoutParam_).mergeFrom(value).buildPartial();
                    } else {
                        dropoutParam_ = value;
                    }
                    onChanged();
                } else {
                    dropoutParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00040000;
                return this;
            }
            /**
             * <code>optional .caffe.DropoutParameter dropout_param = 108;</code>
             */
            public Builder clearDropoutParam() {
                if (dropoutParamBuilder_ == null) {
                    dropoutParam_ = caffe.Loadcaffe.DropoutParameter.getDefaultInstance();
                    onChanged();
                } else {
                    dropoutParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00040000);
                return this;
            }
            /**
             * <code>optional .caffe.DropoutParameter dropout_param = 108;</code>
             */
            public caffe.Loadcaffe.DropoutParameter.Builder getDropoutParamBuilder() {
                bitField0_ |= 0x00040000;
                onChanged();
                return getDropoutParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.DropoutParameter dropout_param = 108;</code>
             */
            public caffe.Loadcaffe.DropoutParameterOrBuilder getDropoutParamOrBuilder() {
                if (dropoutParamBuilder_ != null) {
                    return dropoutParamBuilder_.getMessageOrBuilder();
                } else {
                    return dropoutParam_;
                }
            }
            /**
             * <code>optional .caffe.DropoutParameter dropout_param = 108;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.DropoutParameter, caffe.Loadcaffe.DropoutParameter.Builder, caffe.Loadcaffe.DropoutParameterOrBuilder>
            getDropoutParamFieldBuilder() {
                if (dropoutParamBuilder_ == null) {
                    dropoutParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.DropoutParameter, caffe.Loadcaffe.DropoutParameter.Builder, caffe.Loadcaffe.DropoutParameterOrBuilder>(
                            getDropoutParam(),
                            getParentForChildren(),
                            isClean());
                    dropoutParam_ = null;
                }
                return dropoutParamBuilder_;
            }

            private caffe.Loadcaffe.DummyDataParameter dummyDataParam_ = caffe.Loadcaffe.DummyDataParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.DummyDataParameter, caffe.Loadcaffe.DummyDataParameter.Builder, caffe.Loadcaffe.DummyDataParameterOrBuilder> dummyDataParamBuilder_;
            /**
             * <code>optional .caffe.DummyDataParameter dummy_data_param = 109;</code>
             */
            public boolean hasDummyDataParam() {
                return ((bitField0_ & 0x00080000) == 0x00080000);
            }
            /**
             * <code>optional .caffe.DummyDataParameter dummy_data_param = 109;</code>
             */
            public caffe.Loadcaffe.DummyDataParameter getDummyDataParam() {
                if (dummyDataParamBuilder_ == null) {
                    return dummyDataParam_;
                } else {
                    return dummyDataParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.DummyDataParameter dummy_data_param = 109;</code>
             */
            public Builder setDummyDataParam(caffe.Loadcaffe.DummyDataParameter value) {
                if (dummyDataParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    dummyDataParam_ = value;
                    onChanged();
                } else {
                    dummyDataParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00080000;
                return this;
            }
            /**
             * <code>optional .caffe.DummyDataParameter dummy_data_param = 109;</code>
             */
            public Builder setDummyDataParam(
                    caffe.Loadcaffe.DummyDataParameter.Builder builderForValue) {
                if (dummyDataParamBuilder_ == null) {
                    dummyDataParam_ = builderForValue.build();
                    onChanged();
                } else {
                    dummyDataParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00080000;
                return this;
            }
            /**
             * <code>optional .caffe.DummyDataParameter dummy_data_param = 109;</code>
             */
            public Builder mergeDummyDataParam(caffe.Loadcaffe.DummyDataParameter value) {
                if (dummyDataParamBuilder_ == null) {
                    if (((bitField0_ & 0x00080000) == 0x00080000) &&
                            dummyDataParam_ != caffe.Loadcaffe.DummyDataParameter.getDefaultInstance()) {
                        dummyDataParam_ =
                                caffe.Loadcaffe.DummyDataParameter.newBuilder(dummyDataParam_).mergeFrom(value).buildPartial();
                    } else {
                        dummyDataParam_ = value;
                    }
                    onChanged();
                } else {
                    dummyDataParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00080000;
                return this;
            }
            /**
             * <code>optional .caffe.DummyDataParameter dummy_data_param = 109;</code>
             */
            public Builder clearDummyDataParam() {
                if (dummyDataParamBuilder_ == null) {
                    dummyDataParam_ = caffe.Loadcaffe.DummyDataParameter.getDefaultInstance();
                    onChanged();
                } else {
                    dummyDataParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00080000);
                return this;
            }
            /**
             * <code>optional .caffe.DummyDataParameter dummy_data_param = 109;</code>
             */
            public caffe.Loadcaffe.DummyDataParameter.Builder getDummyDataParamBuilder() {
                bitField0_ |= 0x00080000;
                onChanged();
                return getDummyDataParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.DummyDataParameter dummy_data_param = 109;</code>
             */
            public caffe.Loadcaffe.DummyDataParameterOrBuilder getDummyDataParamOrBuilder() {
                if (dummyDataParamBuilder_ != null) {
                    return dummyDataParamBuilder_.getMessageOrBuilder();
                } else {
                    return dummyDataParam_;
                }
            }
            /**
             * <code>optional .caffe.DummyDataParameter dummy_data_param = 109;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.DummyDataParameter, caffe.Loadcaffe.DummyDataParameter.Builder, caffe.Loadcaffe.DummyDataParameterOrBuilder>
            getDummyDataParamFieldBuilder() {
                if (dummyDataParamBuilder_ == null) {
                    dummyDataParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.DummyDataParameter, caffe.Loadcaffe.DummyDataParameter.Builder, caffe.Loadcaffe.DummyDataParameterOrBuilder>(
                            getDummyDataParam(),
                            getParentForChildren(),
                            isClean());
                    dummyDataParam_ = null;
                }
                return dummyDataParamBuilder_;
            }

            private caffe.Loadcaffe.EltwiseParameter eltwiseParam_ = caffe.Loadcaffe.EltwiseParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.EltwiseParameter, caffe.Loadcaffe.EltwiseParameter.Builder, caffe.Loadcaffe.EltwiseParameterOrBuilder> eltwiseParamBuilder_;
            /**
             * <code>optional .caffe.EltwiseParameter eltwise_param = 110;</code>
             */
            public boolean hasEltwiseParam() {
                return ((bitField0_ & 0x00100000) == 0x00100000);
            }
            /**
             * <code>optional .caffe.EltwiseParameter eltwise_param = 110;</code>
             */
            public caffe.Loadcaffe.EltwiseParameter getEltwiseParam() {
                if (eltwiseParamBuilder_ == null) {
                    return eltwiseParam_;
                } else {
                    return eltwiseParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.EltwiseParameter eltwise_param = 110;</code>
             */
            public Builder setEltwiseParam(caffe.Loadcaffe.EltwiseParameter value) {
                if (eltwiseParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    eltwiseParam_ = value;
                    onChanged();
                } else {
                    eltwiseParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00100000;
                return this;
            }
            /**
             * <code>optional .caffe.EltwiseParameter eltwise_param = 110;</code>
             */
            public Builder setEltwiseParam(
                    caffe.Loadcaffe.EltwiseParameter.Builder builderForValue) {
                if (eltwiseParamBuilder_ == null) {
                    eltwiseParam_ = builderForValue.build();
                    onChanged();
                } else {
                    eltwiseParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00100000;
                return this;
            }
            /**
             * <code>optional .caffe.EltwiseParameter eltwise_param = 110;</code>
             */
            public Builder mergeEltwiseParam(caffe.Loadcaffe.EltwiseParameter value) {
                if (eltwiseParamBuilder_ == null) {
                    if (((bitField0_ & 0x00100000) == 0x00100000) &&
                            eltwiseParam_ != caffe.Loadcaffe.EltwiseParameter.getDefaultInstance()) {
                        eltwiseParam_ =
                                caffe.Loadcaffe.EltwiseParameter.newBuilder(eltwiseParam_).mergeFrom(value).buildPartial();
                    } else {
                        eltwiseParam_ = value;
                    }
                    onChanged();
                } else {
                    eltwiseParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00100000;
                return this;
            }
            /**
             * <code>optional .caffe.EltwiseParameter eltwise_param = 110;</code>
             */
            public Builder clearEltwiseParam() {
                if (eltwiseParamBuilder_ == null) {
                    eltwiseParam_ = caffe.Loadcaffe.EltwiseParameter.getDefaultInstance();
                    onChanged();
                } else {
                    eltwiseParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00100000);
                return this;
            }
            /**
             * <code>optional .caffe.EltwiseParameter eltwise_param = 110;</code>
             */
            public caffe.Loadcaffe.EltwiseParameter.Builder getEltwiseParamBuilder() {
                bitField0_ |= 0x00100000;
                onChanged();
                return getEltwiseParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.EltwiseParameter eltwise_param = 110;</code>
             */
            public caffe.Loadcaffe.EltwiseParameterOrBuilder getEltwiseParamOrBuilder() {
                if (eltwiseParamBuilder_ != null) {
                    return eltwiseParamBuilder_.getMessageOrBuilder();
                } else {
                    return eltwiseParam_;
                }
            }
            /**
             * <code>optional .caffe.EltwiseParameter eltwise_param = 110;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.EltwiseParameter, caffe.Loadcaffe.EltwiseParameter.Builder, caffe.Loadcaffe.EltwiseParameterOrBuilder>
            getEltwiseParamFieldBuilder() {
                if (eltwiseParamBuilder_ == null) {
                    eltwiseParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.EltwiseParameter, caffe.Loadcaffe.EltwiseParameter.Builder, caffe.Loadcaffe.EltwiseParameterOrBuilder>(
                            getEltwiseParam(),
                            getParentForChildren(),
                            isClean());
                    eltwiseParam_ = null;
                }
                return eltwiseParamBuilder_;
            }

            private caffe.Loadcaffe.ExpParameter expParam_ = caffe.Loadcaffe.ExpParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ExpParameter, caffe.Loadcaffe.ExpParameter.Builder, caffe.Loadcaffe.ExpParameterOrBuilder> expParamBuilder_;
            /**
             * <code>optional .caffe.ExpParameter exp_param = 111;</code>
             */
            public boolean hasExpParam() {
                return ((bitField0_ & 0x00200000) == 0x00200000);
            }
            /**
             * <code>optional .caffe.ExpParameter exp_param = 111;</code>
             */
            public caffe.Loadcaffe.ExpParameter getExpParam() {
                if (expParamBuilder_ == null) {
                    return expParam_;
                } else {
                    return expParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.ExpParameter exp_param = 111;</code>
             */
            public Builder setExpParam(caffe.Loadcaffe.ExpParameter value) {
                if (expParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    expParam_ = value;
                    onChanged();
                } else {
                    expParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00200000;
                return this;
            }
            /**
             * <code>optional .caffe.ExpParameter exp_param = 111;</code>
             */
            public Builder setExpParam(
                    caffe.Loadcaffe.ExpParameter.Builder builderForValue) {
                if (expParamBuilder_ == null) {
                    expParam_ = builderForValue.build();
                    onChanged();
                } else {
                    expParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00200000;
                return this;
            }
            /**
             * <code>optional .caffe.ExpParameter exp_param = 111;</code>
             */
            public Builder mergeExpParam(caffe.Loadcaffe.ExpParameter value) {
                if (expParamBuilder_ == null) {
                    if (((bitField0_ & 0x00200000) == 0x00200000) &&
                            expParam_ != caffe.Loadcaffe.ExpParameter.getDefaultInstance()) {
                        expParam_ =
                                caffe.Loadcaffe.ExpParameter.newBuilder(expParam_).mergeFrom(value).buildPartial();
                    } else {
                        expParam_ = value;
                    }
                    onChanged();
                } else {
                    expParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00200000;
                return this;
            }
            /**
             * <code>optional .caffe.ExpParameter exp_param = 111;</code>
             */
            public Builder clearExpParam() {
                if (expParamBuilder_ == null) {
                    expParam_ = caffe.Loadcaffe.ExpParameter.getDefaultInstance();
                    onChanged();
                } else {
                    expParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00200000);
                return this;
            }
            /**
             * <code>optional .caffe.ExpParameter exp_param = 111;</code>
             */
            public caffe.Loadcaffe.ExpParameter.Builder getExpParamBuilder() {
                bitField0_ |= 0x00200000;
                onChanged();
                return getExpParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.ExpParameter exp_param = 111;</code>
             */
            public caffe.Loadcaffe.ExpParameterOrBuilder getExpParamOrBuilder() {
                if (expParamBuilder_ != null) {
                    return expParamBuilder_.getMessageOrBuilder();
                } else {
                    return expParam_;
                }
            }
            /**
             * <code>optional .caffe.ExpParameter exp_param = 111;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ExpParameter, caffe.Loadcaffe.ExpParameter.Builder, caffe.Loadcaffe.ExpParameterOrBuilder>
            getExpParamFieldBuilder() {
                if (expParamBuilder_ == null) {
                    expParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.ExpParameter, caffe.Loadcaffe.ExpParameter.Builder, caffe.Loadcaffe.ExpParameterOrBuilder>(
                            getExpParam(),
                            getParentForChildren(),
                            isClean());
                    expParam_ = null;
                }
                return expParamBuilder_;
            }

            private caffe.Loadcaffe.HDF5DataParameter hdf5DataParam_ = caffe.Loadcaffe.HDF5DataParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.HDF5DataParameter, caffe.Loadcaffe.HDF5DataParameter.Builder, caffe.Loadcaffe.HDF5DataParameterOrBuilder> hdf5DataParamBuilder_;
            /**
             * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 112;</code>
             */
            public boolean hasHdf5DataParam() {
                return ((bitField0_ & 0x00400000) == 0x00400000);
            }
            /**
             * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 112;</code>
             */
            public caffe.Loadcaffe.HDF5DataParameter getHdf5DataParam() {
                if (hdf5DataParamBuilder_ == null) {
                    return hdf5DataParam_;
                } else {
                    return hdf5DataParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 112;</code>
             */
            public Builder setHdf5DataParam(caffe.Loadcaffe.HDF5DataParameter value) {
                if (hdf5DataParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    hdf5DataParam_ = value;
                    onChanged();
                } else {
                    hdf5DataParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00400000;
                return this;
            }
            /**
             * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 112;</code>
             */
            public Builder setHdf5DataParam(
                    caffe.Loadcaffe.HDF5DataParameter.Builder builderForValue) {
                if (hdf5DataParamBuilder_ == null) {
                    hdf5DataParam_ = builderForValue.build();
                    onChanged();
                } else {
                    hdf5DataParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00400000;
                return this;
            }
            /**
             * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 112;</code>
             */
            public Builder mergeHdf5DataParam(caffe.Loadcaffe.HDF5DataParameter value) {
                if (hdf5DataParamBuilder_ == null) {
                    if (((bitField0_ & 0x00400000) == 0x00400000) &&
                            hdf5DataParam_ != caffe.Loadcaffe.HDF5DataParameter.getDefaultInstance()) {
                        hdf5DataParam_ =
                                caffe.Loadcaffe.HDF5DataParameter.newBuilder(hdf5DataParam_).mergeFrom(value).buildPartial();
                    } else {
                        hdf5DataParam_ = value;
                    }
                    onChanged();
                } else {
                    hdf5DataParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00400000;
                return this;
            }
            /**
             * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 112;</code>
             */
            public Builder clearHdf5DataParam() {
                if (hdf5DataParamBuilder_ == null) {
                    hdf5DataParam_ = caffe.Loadcaffe.HDF5DataParameter.getDefaultInstance();
                    onChanged();
                } else {
                    hdf5DataParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00400000);
                return this;
            }
            /**
             * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 112;</code>
             */
            public caffe.Loadcaffe.HDF5DataParameter.Builder getHdf5DataParamBuilder() {
                bitField0_ |= 0x00400000;
                onChanged();
                return getHdf5DataParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 112;</code>
             */
            public caffe.Loadcaffe.HDF5DataParameterOrBuilder getHdf5DataParamOrBuilder() {
                if (hdf5DataParamBuilder_ != null) {
                    return hdf5DataParamBuilder_.getMessageOrBuilder();
                } else {
                    return hdf5DataParam_;
                }
            }
            /**
             * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 112;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.HDF5DataParameter, caffe.Loadcaffe.HDF5DataParameter.Builder, caffe.Loadcaffe.HDF5DataParameterOrBuilder>
            getHdf5DataParamFieldBuilder() {
                if (hdf5DataParamBuilder_ == null) {
                    hdf5DataParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.HDF5DataParameter, caffe.Loadcaffe.HDF5DataParameter.Builder, caffe.Loadcaffe.HDF5DataParameterOrBuilder>(
                            getHdf5DataParam(),
                            getParentForChildren(),
                            isClean());
                    hdf5DataParam_ = null;
                }
                return hdf5DataParamBuilder_;
            }

            private caffe.Loadcaffe.HDF5OutputParameter hdf5OutputParam_ = caffe.Loadcaffe.HDF5OutputParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.HDF5OutputParameter, caffe.Loadcaffe.HDF5OutputParameter.Builder, caffe.Loadcaffe.HDF5OutputParameterOrBuilder> hdf5OutputParamBuilder_;
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 113;</code>
             */
            public boolean hasHdf5OutputParam() {
                return ((bitField0_ & 0x00800000) == 0x00800000);
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 113;</code>
             */
            public caffe.Loadcaffe.HDF5OutputParameter getHdf5OutputParam() {
                if (hdf5OutputParamBuilder_ == null) {
                    return hdf5OutputParam_;
                } else {
                    return hdf5OutputParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 113;</code>
             */
            public Builder setHdf5OutputParam(caffe.Loadcaffe.HDF5OutputParameter value) {
                if (hdf5OutputParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    hdf5OutputParam_ = value;
                    onChanged();
                } else {
                    hdf5OutputParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00800000;
                return this;
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 113;</code>
             */
            public Builder setHdf5OutputParam(
                    caffe.Loadcaffe.HDF5OutputParameter.Builder builderForValue) {
                if (hdf5OutputParamBuilder_ == null) {
                    hdf5OutputParam_ = builderForValue.build();
                    onChanged();
                } else {
                    hdf5OutputParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00800000;
                return this;
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 113;</code>
             */
            public Builder mergeHdf5OutputParam(caffe.Loadcaffe.HDF5OutputParameter value) {
                if (hdf5OutputParamBuilder_ == null) {
                    if (((bitField0_ & 0x00800000) == 0x00800000) &&
                            hdf5OutputParam_ != caffe.Loadcaffe.HDF5OutputParameter.getDefaultInstance()) {
                        hdf5OutputParam_ =
                                caffe.Loadcaffe.HDF5OutputParameter.newBuilder(hdf5OutputParam_).mergeFrom(value).buildPartial();
                    } else {
                        hdf5OutputParam_ = value;
                    }
                    onChanged();
                } else {
                    hdf5OutputParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00800000;
                return this;
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 113;</code>
             */
            public Builder clearHdf5OutputParam() {
                if (hdf5OutputParamBuilder_ == null) {
                    hdf5OutputParam_ = caffe.Loadcaffe.HDF5OutputParameter.getDefaultInstance();
                    onChanged();
                } else {
                    hdf5OutputParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00800000);
                return this;
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 113;</code>
             */
            public caffe.Loadcaffe.HDF5OutputParameter.Builder getHdf5OutputParamBuilder() {
                bitField0_ |= 0x00800000;
                onChanged();
                return getHdf5OutputParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 113;</code>
             */
            public caffe.Loadcaffe.HDF5OutputParameterOrBuilder getHdf5OutputParamOrBuilder() {
                if (hdf5OutputParamBuilder_ != null) {
                    return hdf5OutputParamBuilder_.getMessageOrBuilder();
                } else {
                    return hdf5OutputParam_;
                }
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 113;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.HDF5OutputParameter, caffe.Loadcaffe.HDF5OutputParameter.Builder, caffe.Loadcaffe.HDF5OutputParameterOrBuilder>
            getHdf5OutputParamFieldBuilder() {
                if (hdf5OutputParamBuilder_ == null) {
                    hdf5OutputParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.HDF5OutputParameter, caffe.Loadcaffe.HDF5OutputParameter.Builder, caffe.Loadcaffe.HDF5OutputParameterOrBuilder>(
                            getHdf5OutputParam(),
                            getParentForChildren(),
                            isClean());
                    hdf5OutputParam_ = null;
                }
                return hdf5OutputParamBuilder_;
            }

            private caffe.Loadcaffe.HingeLossParameter hingeLossParam_ = caffe.Loadcaffe.HingeLossParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.HingeLossParameter, caffe.Loadcaffe.HingeLossParameter.Builder, caffe.Loadcaffe.HingeLossParameterOrBuilder> hingeLossParamBuilder_;
            /**
             * <code>optional .caffe.HingeLossParameter hinge_loss_param = 114;</code>
             */
            public boolean hasHingeLossParam() {
                return ((bitField0_ & 0x01000000) == 0x01000000);
            }
            /**
             * <code>optional .caffe.HingeLossParameter hinge_loss_param = 114;</code>
             */
            public caffe.Loadcaffe.HingeLossParameter getHingeLossParam() {
                if (hingeLossParamBuilder_ == null) {
                    return hingeLossParam_;
                } else {
                    return hingeLossParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.HingeLossParameter hinge_loss_param = 114;</code>
             */
            public Builder setHingeLossParam(caffe.Loadcaffe.HingeLossParameter value) {
                if (hingeLossParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    hingeLossParam_ = value;
                    onChanged();
                } else {
                    hingeLossParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x01000000;
                return this;
            }
            /**
             * <code>optional .caffe.HingeLossParameter hinge_loss_param = 114;</code>
             */
            public Builder setHingeLossParam(
                    caffe.Loadcaffe.HingeLossParameter.Builder builderForValue) {
                if (hingeLossParamBuilder_ == null) {
                    hingeLossParam_ = builderForValue.build();
                    onChanged();
                } else {
                    hingeLossParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x01000000;
                return this;
            }
            /**
             * <code>optional .caffe.HingeLossParameter hinge_loss_param = 114;</code>
             */
            public Builder mergeHingeLossParam(caffe.Loadcaffe.HingeLossParameter value) {
                if (hingeLossParamBuilder_ == null) {
                    if (((bitField0_ & 0x01000000) == 0x01000000) &&
                            hingeLossParam_ != caffe.Loadcaffe.HingeLossParameter.getDefaultInstance()) {
                        hingeLossParam_ =
                                caffe.Loadcaffe.HingeLossParameter.newBuilder(hingeLossParam_).mergeFrom(value).buildPartial();
                    } else {
                        hingeLossParam_ = value;
                    }
                    onChanged();
                } else {
                    hingeLossParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x01000000;
                return this;
            }
            /**
             * <code>optional .caffe.HingeLossParameter hinge_loss_param = 114;</code>
             */
            public Builder clearHingeLossParam() {
                if (hingeLossParamBuilder_ == null) {
                    hingeLossParam_ = caffe.Loadcaffe.HingeLossParameter.getDefaultInstance();
                    onChanged();
                } else {
                    hingeLossParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x01000000);
                return this;
            }
            /**
             * <code>optional .caffe.HingeLossParameter hinge_loss_param = 114;</code>
             */
            public caffe.Loadcaffe.HingeLossParameter.Builder getHingeLossParamBuilder() {
                bitField0_ |= 0x01000000;
                onChanged();
                return getHingeLossParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.HingeLossParameter hinge_loss_param = 114;</code>
             */
            public caffe.Loadcaffe.HingeLossParameterOrBuilder getHingeLossParamOrBuilder() {
                if (hingeLossParamBuilder_ != null) {
                    return hingeLossParamBuilder_.getMessageOrBuilder();
                } else {
                    return hingeLossParam_;
                }
            }
            /**
             * <code>optional .caffe.HingeLossParameter hinge_loss_param = 114;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.HingeLossParameter, caffe.Loadcaffe.HingeLossParameter.Builder, caffe.Loadcaffe.HingeLossParameterOrBuilder>
            getHingeLossParamFieldBuilder() {
                if (hingeLossParamBuilder_ == null) {
                    hingeLossParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.HingeLossParameter, caffe.Loadcaffe.HingeLossParameter.Builder, caffe.Loadcaffe.HingeLossParameterOrBuilder>(
                            getHingeLossParam(),
                            getParentForChildren(),
                            isClean());
                    hingeLossParam_ = null;
                }
                return hingeLossParamBuilder_;
            }

            private caffe.Loadcaffe.ImageDataParameter imageDataParam_ = caffe.Loadcaffe.ImageDataParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ImageDataParameter, caffe.Loadcaffe.ImageDataParameter.Builder, caffe.Loadcaffe.ImageDataParameterOrBuilder> imageDataParamBuilder_;
            /**
             * <code>optional .caffe.ImageDataParameter image_data_param = 115;</code>
             */
            public boolean hasImageDataParam() {
                return ((bitField0_ & 0x02000000) == 0x02000000);
            }
            /**
             * <code>optional .caffe.ImageDataParameter image_data_param = 115;</code>
             */
            public caffe.Loadcaffe.ImageDataParameter getImageDataParam() {
                if (imageDataParamBuilder_ == null) {
                    return imageDataParam_;
                } else {
                    return imageDataParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.ImageDataParameter image_data_param = 115;</code>
             */
            public Builder setImageDataParam(caffe.Loadcaffe.ImageDataParameter value) {
                if (imageDataParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    imageDataParam_ = value;
                    onChanged();
                } else {
                    imageDataParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x02000000;
                return this;
            }
            /**
             * <code>optional .caffe.ImageDataParameter image_data_param = 115;</code>
             */
            public Builder setImageDataParam(
                    caffe.Loadcaffe.ImageDataParameter.Builder builderForValue) {
                if (imageDataParamBuilder_ == null) {
                    imageDataParam_ = builderForValue.build();
                    onChanged();
                } else {
                    imageDataParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x02000000;
                return this;
            }
            /**
             * <code>optional .caffe.ImageDataParameter image_data_param = 115;</code>
             */
            public Builder mergeImageDataParam(caffe.Loadcaffe.ImageDataParameter value) {
                if (imageDataParamBuilder_ == null) {
                    if (((bitField0_ & 0x02000000) == 0x02000000) &&
                            imageDataParam_ != caffe.Loadcaffe.ImageDataParameter.getDefaultInstance()) {
                        imageDataParam_ =
                                caffe.Loadcaffe.ImageDataParameter.newBuilder(imageDataParam_).mergeFrom(value).buildPartial();
                    } else {
                        imageDataParam_ = value;
                    }
                    onChanged();
                } else {
                    imageDataParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x02000000;
                return this;
            }
            /**
             * <code>optional .caffe.ImageDataParameter image_data_param = 115;</code>
             */
            public Builder clearImageDataParam() {
                if (imageDataParamBuilder_ == null) {
                    imageDataParam_ = caffe.Loadcaffe.ImageDataParameter.getDefaultInstance();
                    onChanged();
                } else {
                    imageDataParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x02000000);
                return this;
            }
            /**
             * <code>optional .caffe.ImageDataParameter image_data_param = 115;</code>
             */
            public caffe.Loadcaffe.ImageDataParameter.Builder getImageDataParamBuilder() {
                bitField0_ |= 0x02000000;
                onChanged();
                return getImageDataParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.ImageDataParameter image_data_param = 115;</code>
             */
            public caffe.Loadcaffe.ImageDataParameterOrBuilder getImageDataParamOrBuilder() {
                if (imageDataParamBuilder_ != null) {
                    return imageDataParamBuilder_.getMessageOrBuilder();
                } else {
                    return imageDataParam_;
                }
            }
            /**
             * <code>optional .caffe.ImageDataParameter image_data_param = 115;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ImageDataParameter, caffe.Loadcaffe.ImageDataParameter.Builder, caffe.Loadcaffe.ImageDataParameterOrBuilder>
            getImageDataParamFieldBuilder() {
                if (imageDataParamBuilder_ == null) {
                    imageDataParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.ImageDataParameter, caffe.Loadcaffe.ImageDataParameter.Builder, caffe.Loadcaffe.ImageDataParameterOrBuilder>(
                            getImageDataParam(),
                            getParentForChildren(),
                            isClean());
                    imageDataParam_ = null;
                }
                return imageDataParamBuilder_;
            }

            private caffe.Loadcaffe.InfogainLossParameter infogainLossParam_ = caffe.Loadcaffe.InfogainLossParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.InfogainLossParameter, caffe.Loadcaffe.InfogainLossParameter.Builder, caffe.Loadcaffe.InfogainLossParameterOrBuilder> infogainLossParamBuilder_;
            /**
             * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 116;</code>
             */
            public boolean hasInfogainLossParam() {
                return ((bitField0_ & 0x04000000) == 0x04000000);
            }
            /**
             * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 116;</code>
             */
            public caffe.Loadcaffe.InfogainLossParameter getInfogainLossParam() {
                if (infogainLossParamBuilder_ == null) {
                    return infogainLossParam_;
                } else {
                    return infogainLossParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 116;</code>
             */
            public Builder setInfogainLossParam(caffe.Loadcaffe.InfogainLossParameter value) {
                if (infogainLossParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    infogainLossParam_ = value;
                    onChanged();
                } else {
                    infogainLossParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x04000000;
                return this;
            }
            /**
             * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 116;</code>
             */
            public Builder setInfogainLossParam(
                    caffe.Loadcaffe.InfogainLossParameter.Builder builderForValue) {
                if (infogainLossParamBuilder_ == null) {
                    infogainLossParam_ = builderForValue.build();
                    onChanged();
                } else {
                    infogainLossParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x04000000;
                return this;
            }
            /**
             * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 116;</code>
             */
            public Builder mergeInfogainLossParam(caffe.Loadcaffe.InfogainLossParameter value) {
                if (infogainLossParamBuilder_ == null) {
                    if (((bitField0_ & 0x04000000) == 0x04000000) &&
                            infogainLossParam_ != caffe.Loadcaffe.InfogainLossParameter.getDefaultInstance()) {
                        infogainLossParam_ =
                                caffe.Loadcaffe.InfogainLossParameter.newBuilder(infogainLossParam_).mergeFrom(value).buildPartial();
                    } else {
                        infogainLossParam_ = value;
                    }
                    onChanged();
                } else {
                    infogainLossParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x04000000;
                return this;
            }
            /**
             * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 116;</code>
             */
            public Builder clearInfogainLossParam() {
                if (infogainLossParamBuilder_ == null) {
                    infogainLossParam_ = caffe.Loadcaffe.InfogainLossParameter.getDefaultInstance();
                    onChanged();
                } else {
                    infogainLossParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x04000000);
                return this;
            }
            /**
             * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 116;</code>
             */
            public caffe.Loadcaffe.InfogainLossParameter.Builder getInfogainLossParamBuilder() {
                bitField0_ |= 0x04000000;
                onChanged();
                return getInfogainLossParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 116;</code>
             */
            public caffe.Loadcaffe.InfogainLossParameterOrBuilder getInfogainLossParamOrBuilder() {
                if (infogainLossParamBuilder_ != null) {
                    return infogainLossParamBuilder_.getMessageOrBuilder();
                } else {
                    return infogainLossParam_;
                }
            }
            /**
             * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 116;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.InfogainLossParameter, caffe.Loadcaffe.InfogainLossParameter.Builder, caffe.Loadcaffe.InfogainLossParameterOrBuilder>
            getInfogainLossParamFieldBuilder() {
                if (infogainLossParamBuilder_ == null) {
                    infogainLossParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.InfogainLossParameter, caffe.Loadcaffe.InfogainLossParameter.Builder, caffe.Loadcaffe.InfogainLossParameterOrBuilder>(
                            getInfogainLossParam(),
                            getParentForChildren(),
                            isClean());
                    infogainLossParam_ = null;
                }
                return infogainLossParamBuilder_;
            }

            private caffe.Loadcaffe.InnerProductParameter innerProductParam_ = caffe.Loadcaffe.InnerProductParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.InnerProductParameter, caffe.Loadcaffe.InnerProductParameter.Builder, caffe.Loadcaffe.InnerProductParameterOrBuilder> innerProductParamBuilder_;
            /**
             * <code>optional .caffe.InnerProductParameter inner_product_param = 117;</code>
             */
            public boolean hasInnerProductParam() {
                return ((bitField0_ & 0x08000000) == 0x08000000);
            }
            /**
             * <code>optional .caffe.InnerProductParameter inner_product_param = 117;</code>
             */
            public caffe.Loadcaffe.InnerProductParameter getInnerProductParam() {
                if (innerProductParamBuilder_ == null) {
                    return innerProductParam_;
                } else {
                    return innerProductParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.InnerProductParameter inner_product_param = 117;</code>
             */
            public Builder setInnerProductParam(caffe.Loadcaffe.InnerProductParameter value) {
                if (innerProductParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    innerProductParam_ = value;
                    onChanged();
                } else {
                    innerProductParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x08000000;
                return this;
            }
            /**
             * <code>optional .caffe.InnerProductParameter inner_product_param = 117;</code>
             */
            public Builder setInnerProductParam(
                    caffe.Loadcaffe.InnerProductParameter.Builder builderForValue) {
                if (innerProductParamBuilder_ == null) {
                    innerProductParam_ = builderForValue.build();
                    onChanged();
                } else {
                    innerProductParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x08000000;
                return this;
            }
            /**
             * <code>optional .caffe.InnerProductParameter inner_product_param = 117;</code>
             */
            public Builder mergeInnerProductParam(caffe.Loadcaffe.InnerProductParameter value) {
                if (innerProductParamBuilder_ == null) {
                    if (((bitField0_ & 0x08000000) == 0x08000000) &&
                            innerProductParam_ != caffe.Loadcaffe.InnerProductParameter.getDefaultInstance()) {
                        innerProductParam_ =
                                caffe.Loadcaffe.InnerProductParameter.newBuilder(innerProductParam_).mergeFrom(value).buildPartial();
                    } else {
                        innerProductParam_ = value;
                    }
                    onChanged();
                } else {
                    innerProductParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x08000000;
                return this;
            }
            /**
             * <code>optional .caffe.InnerProductParameter inner_product_param = 117;</code>
             */
            public Builder clearInnerProductParam() {
                if (innerProductParamBuilder_ == null) {
                    innerProductParam_ = caffe.Loadcaffe.InnerProductParameter.getDefaultInstance();
                    onChanged();
                } else {
                    innerProductParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x08000000);
                return this;
            }
            /**
             * <code>optional .caffe.InnerProductParameter inner_product_param = 117;</code>
             */
            public caffe.Loadcaffe.InnerProductParameter.Builder getInnerProductParamBuilder() {
                bitField0_ |= 0x08000000;
                onChanged();
                return getInnerProductParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.InnerProductParameter inner_product_param = 117;</code>
             */
            public caffe.Loadcaffe.InnerProductParameterOrBuilder getInnerProductParamOrBuilder() {
                if (innerProductParamBuilder_ != null) {
                    return innerProductParamBuilder_.getMessageOrBuilder();
                } else {
                    return innerProductParam_;
                }
            }
            /**
             * <code>optional .caffe.InnerProductParameter inner_product_param = 117;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.InnerProductParameter, caffe.Loadcaffe.InnerProductParameter.Builder, caffe.Loadcaffe.InnerProductParameterOrBuilder>
            getInnerProductParamFieldBuilder() {
                if (innerProductParamBuilder_ == null) {
                    innerProductParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.InnerProductParameter, caffe.Loadcaffe.InnerProductParameter.Builder, caffe.Loadcaffe.InnerProductParameterOrBuilder>(
                            getInnerProductParam(),
                            getParentForChildren(),
                            isClean());
                    innerProductParam_ = null;
                }
                return innerProductParamBuilder_;
            }

            private caffe.Loadcaffe.LRNParameter lrnParam_ = caffe.Loadcaffe.LRNParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.LRNParameter, caffe.Loadcaffe.LRNParameter.Builder, caffe.Loadcaffe.LRNParameterOrBuilder> lrnParamBuilder_;
            /**
             * <code>optional .caffe.LRNParameter lrn_param = 118;</code>
             */
            public boolean hasLrnParam() {
                return ((bitField0_ & 0x10000000) == 0x10000000);
            }
            /**
             * <code>optional .caffe.LRNParameter lrn_param = 118;</code>
             */
            public caffe.Loadcaffe.LRNParameter getLrnParam() {
                if (lrnParamBuilder_ == null) {
                    return lrnParam_;
                } else {
                    return lrnParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.LRNParameter lrn_param = 118;</code>
             */
            public Builder setLrnParam(caffe.Loadcaffe.LRNParameter value) {
                if (lrnParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    lrnParam_ = value;
                    onChanged();
                } else {
                    lrnParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x10000000;
                return this;
            }
            /**
             * <code>optional .caffe.LRNParameter lrn_param = 118;</code>
             */
            public Builder setLrnParam(
                    caffe.Loadcaffe.LRNParameter.Builder builderForValue) {
                if (lrnParamBuilder_ == null) {
                    lrnParam_ = builderForValue.build();
                    onChanged();
                } else {
                    lrnParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x10000000;
                return this;
            }
            /**
             * <code>optional .caffe.LRNParameter lrn_param = 118;</code>
             */
            public Builder mergeLrnParam(caffe.Loadcaffe.LRNParameter value) {
                if (lrnParamBuilder_ == null) {
                    if (((bitField0_ & 0x10000000) == 0x10000000) &&
                            lrnParam_ != caffe.Loadcaffe.LRNParameter.getDefaultInstance()) {
                        lrnParam_ =
                                caffe.Loadcaffe.LRNParameter.newBuilder(lrnParam_).mergeFrom(value).buildPartial();
                    } else {
                        lrnParam_ = value;
                    }
                    onChanged();
                } else {
                    lrnParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x10000000;
                return this;
            }
            /**
             * <code>optional .caffe.LRNParameter lrn_param = 118;</code>
             */
            public Builder clearLrnParam() {
                if (lrnParamBuilder_ == null) {
                    lrnParam_ = caffe.Loadcaffe.LRNParameter.getDefaultInstance();
                    onChanged();
                } else {
                    lrnParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x10000000);
                return this;
            }
            /**
             * <code>optional .caffe.LRNParameter lrn_param = 118;</code>
             */
            public caffe.Loadcaffe.LRNParameter.Builder getLrnParamBuilder() {
                bitField0_ |= 0x10000000;
                onChanged();
                return getLrnParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.LRNParameter lrn_param = 118;</code>
             */
            public caffe.Loadcaffe.LRNParameterOrBuilder getLrnParamOrBuilder() {
                if (lrnParamBuilder_ != null) {
                    return lrnParamBuilder_.getMessageOrBuilder();
                } else {
                    return lrnParam_;
                }
            }
            /**
             * <code>optional .caffe.LRNParameter lrn_param = 118;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.LRNParameter, caffe.Loadcaffe.LRNParameter.Builder, caffe.Loadcaffe.LRNParameterOrBuilder>
            getLrnParamFieldBuilder() {
                if (lrnParamBuilder_ == null) {
                    lrnParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.LRNParameter, caffe.Loadcaffe.LRNParameter.Builder, caffe.Loadcaffe.LRNParameterOrBuilder>(
                            getLrnParam(),
                            getParentForChildren(),
                            isClean());
                    lrnParam_ = null;
                }
                return lrnParamBuilder_;
            }

            private caffe.Loadcaffe.MemoryDataParameter memoryDataParam_ = caffe.Loadcaffe.MemoryDataParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.MemoryDataParameter, caffe.Loadcaffe.MemoryDataParameter.Builder, caffe.Loadcaffe.MemoryDataParameterOrBuilder> memoryDataParamBuilder_;
            /**
             * <code>optional .caffe.MemoryDataParameter memory_data_param = 119;</code>
             */
            public boolean hasMemoryDataParam() {
                return ((bitField0_ & 0x20000000) == 0x20000000);
            }
            /**
             * <code>optional .caffe.MemoryDataParameter memory_data_param = 119;</code>
             */
            public caffe.Loadcaffe.MemoryDataParameter getMemoryDataParam() {
                if (memoryDataParamBuilder_ == null) {
                    return memoryDataParam_;
                } else {
                    return memoryDataParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.MemoryDataParameter memory_data_param = 119;</code>
             */
            public Builder setMemoryDataParam(caffe.Loadcaffe.MemoryDataParameter value) {
                if (memoryDataParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    memoryDataParam_ = value;
                    onChanged();
                } else {
                    memoryDataParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x20000000;
                return this;
            }
            /**
             * <code>optional .caffe.MemoryDataParameter memory_data_param = 119;</code>
             */
            public Builder setMemoryDataParam(
                    caffe.Loadcaffe.MemoryDataParameter.Builder builderForValue) {
                if (memoryDataParamBuilder_ == null) {
                    memoryDataParam_ = builderForValue.build();
                    onChanged();
                } else {
                    memoryDataParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x20000000;
                return this;
            }
            /**
             * <code>optional .caffe.MemoryDataParameter memory_data_param = 119;</code>
             */
            public Builder mergeMemoryDataParam(caffe.Loadcaffe.MemoryDataParameter value) {
                if (memoryDataParamBuilder_ == null) {
                    if (((bitField0_ & 0x20000000) == 0x20000000) &&
                            memoryDataParam_ != caffe.Loadcaffe.MemoryDataParameter.getDefaultInstance()) {
                        memoryDataParam_ =
                                caffe.Loadcaffe.MemoryDataParameter.newBuilder(memoryDataParam_).mergeFrom(value).buildPartial();
                    } else {
                        memoryDataParam_ = value;
                    }
                    onChanged();
                } else {
                    memoryDataParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x20000000;
                return this;
            }
            /**
             * <code>optional .caffe.MemoryDataParameter memory_data_param = 119;</code>
             */
            public Builder clearMemoryDataParam() {
                if (memoryDataParamBuilder_ == null) {
                    memoryDataParam_ = caffe.Loadcaffe.MemoryDataParameter.getDefaultInstance();
                    onChanged();
                } else {
                    memoryDataParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x20000000);
                return this;
            }
            /**
             * <code>optional .caffe.MemoryDataParameter memory_data_param = 119;</code>
             */
            public caffe.Loadcaffe.MemoryDataParameter.Builder getMemoryDataParamBuilder() {
                bitField0_ |= 0x20000000;
                onChanged();
                return getMemoryDataParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.MemoryDataParameter memory_data_param = 119;</code>
             */
            public caffe.Loadcaffe.MemoryDataParameterOrBuilder getMemoryDataParamOrBuilder() {
                if (memoryDataParamBuilder_ != null) {
                    return memoryDataParamBuilder_.getMessageOrBuilder();
                } else {
                    return memoryDataParam_;
                }
            }
            /**
             * <code>optional .caffe.MemoryDataParameter memory_data_param = 119;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.MemoryDataParameter, caffe.Loadcaffe.MemoryDataParameter.Builder, caffe.Loadcaffe.MemoryDataParameterOrBuilder>
            getMemoryDataParamFieldBuilder() {
                if (memoryDataParamBuilder_ == null) {
                    memoryDataParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.MemoryDataParameter, caffe.Loadcaffe.MemoryDataParameter.Builder, caffe.Loadcaffe.MemoryDataParameterOrBuilder>(
                            getMemoryDataParam(),
                            getParentForChildren(),
                            isClean());
                    memoryDataParam_ = null;
                }
                return memoryDataParamBuilder_;
            }

            private caffe.Loadcaffe.MVNParameter mvnParam_ = caffe.Loadcaffe.MVNParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.MVNParameter, caffe.Loadcaffe.MVNParameter.Builder, caffe.Loadcaffe.MVNParameterOrBuilder> mvnParamBuilder_;
            /**
             * <code>optional .caffe.MVNParameter mvn_param = 120;</code>
             */
            public boolean hasMvnParam() {
                return ((bitField0_ & 0x40000000) == 0x40000000);
            }
            /**
             * <code>optional .caffe.MVNParameter mvn_param = 120;</code>
             */
            public caffe.Loadcaffe.MVNParameter getMvnParam() {
                if (mvnParamBuilder_ == null) {
                    return mvnParam_;
                } else {
                    return mvnParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.MVNParameter mvn_param = 120;</code>
             */
            public Builder setMvnParam(caffe.Loadcaffe.MVNParameter value) {
                if (mvnParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    mvnParam_ = value;
                    onChanged();
                } else {
                    mvnParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x40000000;
                return this;
            }
            /**
             * <code>optional .caffe.MVNParameter mvn_param = 120;</code>
             */
            public Builder setMvnParam(
                    caffe.Loadcaffe.MVNParameter.Builder builderForValue) {
                if (mvnParamBuilder_ == null) {
                    mvnParam_ = builderForValue.build();
                    onChanged();
                } else {
                    mvnParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x40000000;
                return this;
            }
            /**
             * <code>optional .caffe.MVNParameter mvn_param = 120;</code>
             */
            public Builder mergeMvnParam(caffe.Loadcaffe.MVNParameter value) {
                if (mvnParamBuilder_ == null) {
                    if (((bitField0_ & 0x40000000) == 0x40000000) &&
                            mvnParam_ != caffe.Loadcaffe.MVNParameter.getDefaultInstance()) {
                        mvnParam_ =
                                caffe.Loadcaffe.MVNParameter.newBuilder(mvnParam_).mergeFrom(value).buildPartial();
                    } else {
                        mvnParam_ = value;
                    }
                    onChanged();
                } else {
                    mvnParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x40000000;
                return this;
            }
            /**
             * <code>optional .caffe.MVNParameter mvn_param = 120;</code>
             */
            public Builder clearMvnParam() {
                if (mvnParamBuilder_ == null) {
                    mvnParam_ = caffe.Loadcaffe.MVNParameter.getDefaultInstance();
                    onChanged();
                } else {
                    mvnParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x40000000);
                return this;
            }
            /**
             * <code>optional .caffe.MVNParameter mvn_param = 120;</code>
             */
            public caffe.Loadcaffe.MVNParameter.Builder getMvnParamBuilder() {
                bitField0_ |= 0x40000000;
                onChanged();
                return getMvnParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.MVNParameter mvn_param = 120;</code>
             */
            public caffe.Loadcaffe.MVNParameterOrBuilder getMvnParamOrBuilder() {
                if (mvnParamBuilder_ != null) {
                    return mvnParamBuilder_.getMessageOrBuilder();
                } else {
                    return mvnParam_;
                }
            }
            /**
             * <code>optional .caffe.MVNParameter mvn_param = 120;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.MVNParameter, caffe.Loadcaffe.MVNParameter.Builder, caffe.Loadcaffe.MVNParameterOrBuilder>
            getMvnParamFieldBuilder() {
                if (mvnParamBuilder_ == null) {
                    mvnParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.MVNParameter, caffe.Loadcaffe.MVNParameter.Builder, caffe.Loadcaffe.MVNParameterOrBuilder>(
                            getMvnParam(),
                            getParentForChildren(),
                            isClean());
                    mvnParam_ = null;
                }
                return mvnParamBuilder_;
            }

            private caffe.Loadcaffe.PoolingParameter poolingParam_ = caffe.Loadcaffe.PoolingParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.PoolingParameter, caffe.Loadcaffe.PoolingParameter.Builder, caffe.Loadcaffe.PoolingParameterOrBuilder> poolingParamBuilder_;
            /**
             * <code>optional .caffe.PoolingParameter pooling_param = 121;</code>
             */
            public boolean hasPoolingParam() {
                return ((bitField0_ & 0x80000000) == 0x80000000);
            }
            /**
             * <code>optional .caffe.PoolingParameter pooling_param = 121;</code>
             */
            public caffe.Loadcaffe.PoolingParameter getPoolingParam() {
                if (poolingParamBuilder_ == null) {
                    return poolingParam_;
                } else {
                    return poolingParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.PoolingParameter pooling_param = 121;</code>
             */
            public Builder setPoolingParam(caffe.Loadcaffe.PoolingParameter value) {
                if (poolingParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    poolingParam_ = value;
                    onChanged();
                } else {
                    poolingParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x80000000;
                return this;
            }
            /**
             * <code>optional .caffe.PoolingParameter pooling_param = 121;</code>
             */
            public Builder setPoolingParam(
                    caffe.Loadcaffe.PoolingParameter.Builder builderForValue) {
                if (poolingParamBuilder_ == null) {
                    poolingParam_ = builderForValue.build();
                    onChanged();
                } else {
                    poolingParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x80000000;
                return this;
            }
            /**
             * <code>optional .caffe.PoolingParameter pooling_param = 121;</code>
             */
            public Builder mergePoolingParam(caffe.Loadcaffe.PoolingParameter value) {
                if (poolingParamBuilder_ == null) {
                    if (((bitField0_ & 0x80000000) == 0x80000000) &&
                            poolingParam_ != caffe.Loadcaffe.PoolingParameter.getDefaultInstance()) {
                        poolingParam_ =
                                caffe.Loadcaffe.PoolingParameter.newBuilder(poolingParam_).mergeFrom(value).buildPartial();
                    } else {
                        poolingParam_ = value;
                    }
                    onChanged();
                } else {
                    poolingParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x80000000;
                return this;
            }
            /**
             * <code>optional .caffe.PoolingParameter pooling_param = 121;</code>
             */
            public Builder clearPoolingParam() {
                if (poolingParamBuilder_ == null) {
                    poolingParam_ = caffe.Loadcaffe.PoolingParameter.getDefaultInstance();
                    onChanged();
                } else {
                    poolingParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x80000000);
                return this;
            }
            /**
             * <code>optional .caffe.PoolingParameter pooling_param = 121;</code>
             */
            public caffe.Loadcaffe.PoolingParameter.Builder getPoolingParamBuilder() {
                bitField0_ |= 0x80000000;
                onChanged();
                return getPoolingParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.PoolingParameter pooling_param = 121;</code>
             */
            public caffe.Loadcaffe.PoolingParameterOrBuilder getPoolingParamOrBuilder() {
                if (poolingParamBuilder_ != null) {
                    return poolingParamBuilder_.getMessageOrBuilder();
                } else {
                    return poolingParam_;
                }
            }
            /**
             * <code>optional .caffe.PoolingParameter pooling_param = 121;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.PoolingParameter, caffe.Loadcaffe.PoolingParameter.Builder, caffe.Loadcaffe.PoolingParameterOrBuilder>
            getPoolingParamFieldBuilder() {
                if (poolingParamBuilder_ == null) {
                    poolingParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.PoolingParameter, caffe.Loadcaffe.PoolingParameter.Builder, caffe.Loadcaffe.PoolingParameterOrBuilder>(
                            getPoolingParam(),
                            getParentForChildren(),
                            isClean());
                    poolingParam_ = null;
                }
                return poolingParamBuilder_;
            }

            private caffe.Loadcaffe.PowerParameter powerParam_ = caffe.Loadcaffe.PowerParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.PowerParameter, caffe.Loadcaffe.PowerParameter.Builder, caffe.Loadcaffe.PowerParameterOrBuilder> powerParamBuilder_;
            /**
             * <code>optional .caffe.PowerParameter power_param = 122;</code>
             */
            public boolean hasPowerParam() {
                return ((bitField1_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional .caffe.PowerParameter power_param = 122;</code>
             */
            public caffe.Loadcaffe.PowerParameter getPowerParam() {
                if (powerParamBuilder_ == null) {
                    return powerParam_;
                } else {
                    return powerParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.PowerParameter power_param = 122;</code>
             */
            public Builder setPowerParam(caffe.Loadcaffe.PowerParameter value) {
                if (powerParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    powerParam_ = value;
                    onChanged();
                } else {
                    powerParamBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000001;
                return this;
            }
            /**
             * <code>optional .caffe.PowerParameter power_param = 122;</code>
             */
            public Builder setPowerParam(
                    caffe.Loadcaffe.PowerParameter.Builder builderForValue) {
                if (powerParamBuilder_ == null) {
                    powerParam_ = builderForValue.build();
                    onChanged();
                } else {
                    powerParamBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000001;
                return this;
            }
            /**
             * <code>optional .caffe.PowerParameter power_param = 122;</code>
             */
            public Builder mergePowerParam(caffe.Loadcaffe.PowerParameter value) {
                if (powerParamBuilder_ == null) {
                    if (((bitField1_ & 0x00000001) == 0x00000001) &&
                            powerParam_ != caffe.Loadcaffe.PowerParameter.getDefaultInstance()) {
                        powerParam_ =
                                caffe.Loadcaffe.PowerParameter.newBuilder(powerParam_).mergeFrom(value).buildPartial();
                    } else {
                        powerParam_ = value;
                    }
                    onChanged();
                } else {
                    powerParamBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000001;
                return this;
            }
            /**
             * <code>optional .caffe.PowerParameter power_param = 122;</code>
             */
            public Builder clearPowerParam() {
                if (powerParamBuilder_ == null) {
                    powerParam_ = caffe.Loadcaffe.PowerParameter.getDefaultInstance();
                    onChanged();
                } else {
                    powerParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000001);
                return this;
            }
            /**
             * <code>optional .caffe.PowerParameter power_param = 122;</code>
             */
            public caffe.Loadcaffe.PowerParameter.Builder getPowerParamBuilder() {
                bitField1_ |= 0x00000001;
                onChanged();
                return getPowerParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.PowerParameter power_param = 122;</code>
             */
            public caffe.Loadcaffe.PowerParameterOrBuilder getPowerParamOrBuilder() {
                if (powerParamBuilder_ != null) {
                    return powerParamBuilder_.getMessageOrBuilder();
                } else {
                    return powerParam_;
                }
            }
            /**
             * <code>optional .caffe.PowerParameter power_param = 122;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.PowerParameter, caffe.Loadcaffe.PowerParameter.Builder, caffe.Loadcaffe.PowerParameterOrBuilder>
            getPowerParamFieldBuilder() {
                if (powerParamBuilder_ == null) {
                    powerParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.PowerParameter, caffe.Loadcaffe.PowerParameter.Builder, caffe.Loadcaffe.PowerParameterOrBuilder>(
                            getPowerParam(),
                            getParentForChildren(),
                            isClean());
                    powerParam_ = null;
                }
                return powerParamBuilder_;
            }

            private caffe.Loadcaffe.PReLUParameter preluParam_ = caffe.Loadcaffe.PReLUParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.PReLUParameter, caffe.Loadcaffe.PReLUParameter.Builder, caffe.Loadcaffe.PReLUParameterOrBuilder> preluParamBuilder_;
            /**
             * <code>optional .caffe.PReLUParameter prelu_param = 131;</code>
             */
            public boolean hasPreluParam() {
                return ((bitField1_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional .caffe.PReLUParameter prelu_param = 131;</code>
             */
            public caffe.Loadcaffe.PReLUParameter getPreluParam() {
                if (preluParamBuilder_ == null) {
                    return preluParam_;
                } else {
                    return preluParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.PReLUParameter prelu_param = 131;</code>
             */
            public Builder setPreluParam(caffe.Loadcaffe.PReLUParameter value) {
                if (preluParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    preluParam_ = value;
                    onChanged();
                } else {
                    preluParamBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000002;
                return this;
            }
            /**
             * <code>optional .caffe.PReLUParameter prelu_param = 131;</code>
             */
            public Builder setPreluParam(
                    caffe.Loadcaffe.PReLUParameter.Builder builderForValue) {
                if (preluParamBuilder_ == null) {
                    preluParam_ = builderForValue.build();
                    onChanged();
                } else {
                    preluParamBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000002;
                return this;
            }
            /**
             * <code>optional .caffe.PReLUParameter prelu_param = 131;</code>
             */
            public Builder mergePreluParam(caffe.Loadcaffe.PReLUParameter value) {
                if (preluParamBuilder_ == null) {
                    if (((bitField1_ & 0x00000002) == 0x00000002) &&
                            preluParam_ != caffe.Loadcaffe.PReLUParameter.getDefaultInstance()) {
                        preluParam_ =
                                caffe.Loadcaffe.PReLUParameter.newBuilder(preluParam_).mergeFrom(value).buildPartial();
                    } else {
                        preluParam_ = value;
                    }
                    onChanged();
                } else {
                    preluParamBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000002;
                return this;
            }
            /**
             * <code>optional .caffe.PReLUParameter prelu_param = 131;</code>
             */
            public Builder clearPreluParam() {
                if (preluParamBuilder_ == null) {
                    preluParam_ = caffe.Loadcaffe.PReLUParameter.getDefaultInstance();
                    onChanged();
                } else {
                    preluParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000002);
                return this;
            }
            /**
             * <code>optional .caffe.PReLUParameter prelu_param = 131;</code>
             */
            public caffe.Loadcaffe.PReLUParameter.Builder getPreluParamBuilder() {
                bitField1_ |= 0x00000002;
                onChanged();
                return getPreluParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.PReLUParameter prelu_param = 131;</code>
             */
            public caffe.Loadcaffe.PReLUParameterOrBuilder getPreluParamOrBuilder() {
                if (preluParamBuilder_ != null) {
                    return preluParamBuilder_.getMessageOrBuilder();
                } else {
                    return preluParam_;
                }
            }
            /**
             * <code>optional .caffe.PReLUParameter prelu_param = 131;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.PReLUParameter, caffe.Loadcaffe.PReLUParameter.Builder, caffe.Loadcaffe.PReLUParameterOrBuilder>
            getPreluParamFieldBuilder() {
                if (preluParamBuilder_ == null) {
                    preluParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.PReLUParameter, caffe.Loadcaffe.PReLUParameter.Builder, caffe.Loadcaffe.PReLUParameterOrBuilder>(
                            getPreluParam(),
                            getParentForChildren(),
                            isClean());
                    preluParam_ = null;
                }
                return preluParamBuilder_;
            }

            private caffe.Loadcaffe.PythonParameter pythonParam_ = caffe.Loadcaffe.PythonParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.PythonParameter, caffe.Loadcaffe.PythonParameter.Builder, caffe.Loadcaffe.PythonParameterOrBuilder> pythonParamBuilder_;
            /**
             * <code>optional .caffe.PythonParameter python_param = 130;</code>
             */
            public boolean hasPythonParam() {
                return ((bitField1_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional .caffe.PythonParameter python_param = 130;</code>
             */
            public caffe.Loadcaffe.PythonParameter getPythonParam() {
                if (pythonParamBuilder_ == null) {
                    return pythonParam_;
                } else {
                    return pythonParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.PythonParameter python_param = 130;</code>
             */
            public Builder setPythonParam(caffe.Loadcaffe.PythonParameter value) {
                if (pythonParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    pythonParam_ = value;
                    onChanged();
                } else {
                    pythonParamBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000004;
                return this;
            }
            /**
             * <code>optional .caffe.PythonParameter python_param = 130;</code>
             */
            public Builder setPythonParam(
                    caffe.Loadcaffe.PythonParameter.Builder builderForValue) {
                if (pythonParamBuilder_ == null) {
                    pythonParam_ = builderForValue.build();
                    onChanged();
                } else {
                    pythonParamBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000004;
                return this;
            }
            /**
             * <code>optional .caffe.PythonParameter python_param = 130;</code>
             */
            public Builder mergePythonParam(caffe.Loadcaffe.PythonParameter value) {
                if (pythonParamBuilder_ == null) {
                    if (((bitField1_ & 0x00000004) == 0x00000004) &&
                            pythonParam_ != caffe.Loadcaffe.PythonParameter.getDefaultInstance()) {
                        pythonParam_ =
                                caffe.Loadcaffe.PythonParameter.newBuilder(pythonParam_).mergeFrom(value).buildPartial();
                    } else {
                        pythonParam_ = value;
                    }
                    onChanged();
                } else {
                    pythonParamBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000004;
                return this;
            }
            /**
             * <code>optional .caffe.PythonParameter python_param = 130;</code>
             */
            public Builder clearPythonParam() {
                if (pythonParamBuilder_ == null) {
                    pythonParam_ = caffe.Loadcaffe.PythonParameter.getDefaultInstance();
                    onChanged();
                } else {
                    pythonParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000004);
                return this;
            }
            /**
             * <code>optional .caffe.PythonParameter python_param = 130;</code>
             */
            public caffe.Loadcaffe.PythonParameter.Builder getPythonParamBuilder() {
                bitField1_ |= 0x00000004;
                onChanged();
                return getPythonParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.PythonParameter python_param = 130;</code>
             */
            public caffe.Loadcaffe.PythonParameterOrBuilder getPythonParamOrBuilder() {
                if (pythonParamBuilder_ != null) {
                    return pythonParamBuilder_.getMessageOrBuilder();
                } else {
                    return pythonParam_;
                }
            }
            /**
             * <code>optional .caffe.PythonParameter python_param = 130;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.PythonParameter, caffe.Loadcaffe.PythonParameter.Builder, caffe.Loadcaffe.PythonParameterOrBuilder>
            getPythonParamFieldBuilder() {
                if (pythonParamBuilder_ == null) {
                    pythonParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.PythonParameter, caffe.Loadcaffe.PythonParameter.Builder, caffe.Loadcaffe.PythonParameterOrBuilder>(
                            getPythonParam(),
                            getParentForChildren(),
                            isClean());
                    pythonParam_ = null;
                }
                return pythonParamBuilder_;
            }

            private caffe.Loadcaffe.ReLUParameter reluParam_ = caffe.Loadcaffe.ReLUParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ReLUParameter, caffe.Loadcaffe.ReLUParameter.Builder, caffe.Loadcaffe.ReLUParameterOrBuilder> reluParamBuilder_;
            /**
             * <code>optional .caffe.ReLUParameter relu_param = 123;</code>
             */
            public boolean hasReluParam() {
                return ((bitField1_ & 0x00000008) == 0x00000008);
            }
            /**
             * <code>optional .caffe.ReLUParameter relu_param = 123;</code>
             */
            public caffe.Loadcaffe.ReLUParameter getReluParam() {
                if (reluParamBuilder_ == null) {
                    return reluParam_;
                } else {
                    return reluParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.ReLUParameter relu_param = 123;</code>
             */
            public Builder setReluParam(caffe.Loadcaffe.ReLUParameter value) {
                if (reluParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    reluParam_ = value;
                    onChanged();
                } else {
                    reluParamBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000008;
                return this;
            }
            /**
             * <code>optional .caffe.ReLUParameter relu_param = 123;</code>
             */
            public Builder setReluParam(
                    caffe.Loadcaffe.ReLUParameter.Builder builderForValue) {
                if (reluParamBuilder_ == null) {
                    reluParam_ = builderForValue.build();
                    onChanged();
                } else {
                    reluParamBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000008;
                return this;
            }
            /**
             * <code>optional .caffe.ReLUParameter relu_param = 123;</code>
             */
            public Builder mergeReluParam(caffe.Loadcaffe.ReLUParameter value) {
                if (reluParamBuilder_ == null) {
                    if (((bitField1_ & 0x00000008) == 0x00000008) &&
                            reluParam_ != caffe.Loadcaffe.ReLUParameter.getDefaultInstance()) {
                        reluParam_ =
                                caffe.Loadcaffe.ReLUParameter.newBuilder(reluParam_).mergeFrom(value).buildPartial();
                    } else {
                        reluParam_ = value;
                    }
                    onChanged();
                } else {
                    reluParamBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000008;
                return this;
            }
            /**
             * <code>optional .caffe.ReLUParameter relu_param = 123;</code>
             */
            public Builder clearReluParam() {
                if (reluParamBuilder_ == null) {
                    reluParam_ = caffe.Loadcaffe.ReLUParameter.getDefaultInstance();
                    onChanged();
                } else {
                    reluParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000008);
                return this;
            }
            /**
             * <code>optional .caffe.ReLUParameter relu_param = 123;</code>
             */
            public caffe.Loadcaffe.ReLUParameter.Builder getReluParamBuilder() {
                bitField1_ |= 0x00000008;
                onChanged();
                return getReluParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.ReLUParameter relu_param = 123;</code>
             */
            public caffe.Loadcaffe.ReLUParameterOrBuilder getReluParamOrBuilder() {
                if (reluParamBuilder_ != null) {
                    return reluParamBuilder_.getMessageOrBuilder();
                } else {
                    return reluParam_;
                }
            }
            /**
             * <code>optional .caffe.ReLUParameter relu_param = 123;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ReLUParameter, caffe.Loadcaffe.ReLUParameter.Builder, caffe.Loadcaffe.ReLUParameterOrBuilder>
            getReluParamFieldBuilder() {
                if (reluParamBuilder_ == null) {
                    reluParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.ReLUParameter, caffe.Loadcaffe.ReLUParameter.Builder, caffe.Loadcaffe.ReLUParameterOrBuilder>(
                            getReluParam(),
                            getParentForChildren(),
                            isClean());
                    reluParam_ = null;
                }
                return reluParamBuilder_;
            }

            private caffe.Loadcaffe.SigmoidParameter sigmoidParam_ = caffe.Loadcaffe.SigmoidParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.SigmoidParameter, caffe.Loadcaffe.SigmoidParameter.Builder, caffe.Loadcaffe.SigmoidParameterOrBuilder> sigmoidParamBuilder_;
            /**
             * <code>optional .caffe.SigmoidParameter sigmoid_param = 124;</code>
             */
            public boolean hasSigmoidParam() {
                return ((bitField1_ & 0x00000010) == 0x00000010);
            }
            /**
             * <code>optional .caffe.SigmoidParameter sigmoid_param = 124;</code>
             */
            public caffe.Loadcaffe.SigmoidParameter getSigmoidParam() {
                if (sigmoidParamBuilder_ == null) {
                    return sigmoidParam_;
                } else {
                    return sigmoidParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.SigmoidParameter sigmoid_param = 124;</code>
             */
            public Builder setSigmoidParam(caffe.Loadcaffe.SigmoidParameter value) {
                if (sigmoidParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    sigmoidParam_ = value;
                    onChanged();
                } else {
                    sigmoidParamBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000010;
                return this;
            }
            /**
             * <code>optional .caffe.SigmoidParameter sigmoid_param = 124;</code>
             */
            public Builder setSigmoidParam(
                    caffe.Loadcaffe.SigmoidParameter.Builder builderForValue) {
                if (sigmoidParamBuilder_ == null) {
                    sigmoidParam_ = builderForValue.build();
                    onChanged();
                } else {
                    sigmoidParamBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000010;
                return this;
            }
            /**
             * <code>optional .caffe.SigmoidParameter sigmoid_param = 124;</code>
             */
            public Builder mergeSigmoidParam(caffe.Loadcaffe.SigmoidParameter value) {
                if (sigmoidParamBuilder_ == null) {
                    if (((bitField1_ & 0x00000010) == 0x00000010) &&
                            sigmoidParam_ != caffe.Loadcaffe.SigmoidParameter.getDefaultInstance()) {
                        sigmoidParam_ =
                                caffe.Loadcaffe.SigmoidParameter.newBuilder(sigmoidParam_).mergeFrom(value).buildPartial();
                    } else {
                        sigmoidParam_ = value;
                    }
                    onChanged();
                } else {
                    sigmoidParamBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000010;
                return this;
            }
            /**
             * <code>optional .caffe.SigmoidParameter sigmoid_param = 124;</code>
             */
            public Builder clearSigmoidParam() {
                if (sigmoidParamBuilder_ == null) {
                    sigmoidParam_ = caffe.Loadcaffe.SigmoidParameter.getDefaultInstance();
                    onChanged();
                } else {
                    sigmoidParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000010);
                return this;
            }
            /**
             * <code>optional .caffe.SigmoidParameter sigmoid_param = 124;</code>
             */
            public caffe.Loadcaffe.SigmoidParameter.Builder getSigmoidParamBuilder() {
                bitField1_ |= 0x00000010;
                onChanged();
                return getSigmoidParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.SigmoidParameter sigmoid_param = 124;</code>
             */
            public caffe.Loadcaffe.SigmoidParameterOrBuilder getSigmoidParamOrBuilder() {
                if (sigmoidParamBuilder_ != null) {
                    return sigmoidParamBuilder_.getMessageOrBuilder();
                } else {
                    return sigmoidParam_;
                }
            }
            /**
             * <code>optional .caffe.SigmoidParameter sigmoid_param = 124;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.SigmoidParameter, caffe.Loadcaffe.SigmoidParameter.Builder, caffe.Loadcaffe.SigmoidParameterOrBuilder>
            getSigmoidParamFieldBuilder() {
                if (sigmoidParamBuilder_ == null) {
                    sigmoidParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.SigmoidParameter, caffe.Loadcaffe.SigmoidParameter.Builder, caffe.Loadcaffe.SigmoidParameterOrBuilder>(
                            getSigmoidParam(),
                            getParentForChildren(),
                            isClean());
                    sigmoidParam_ = null;
                }
                return sigmoidParamBuilder_;
            }

            private caffe.Loadcaffe.SoftmaxParameter softmaxParam_ = caffe.Loadcaffe.SoftmaxParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.SoftmaxParameter, caffe.Loadcaffe.SoftmaxParameter.Builder, caffe.Loadcaffe.SoftmaxParameterOrBuilder> softmaxParamBuilder_;
            /**
             * <code>optional .caffe.SoftmaxParameter softmax_param = 125;</code>
             */
            public boolean hasSoftmaxParam() {
                return ((bitField1_ & 0x00000020) == 0x00000020);
            }
            /**
             * <code>optional .caffe.SoftmaxParameter softmax_param = 125;</code>
             */
            public caffe.Loadcaffe.SoftmaxParameter getSoftmaxParam() {
                if (softmaxParamBuilder_ == null) {
                    return softmaxParam_;
                } else {
                    return softmaxParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.SoftmaxParameter softmax_param = 125;</code>
             */
            public Builder setSoftmaxParam(caffe.Loadcaffe.SoftmaxParameter value) {
                if (softmaxParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    softmaxParam_ = value;
                    onChanged();
                } else {
                    softmaxParamBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000020;
                return this;
            }
            /**
             * <code>optional .caffe.SoftmaxParameter softmax_param = 125;</code>
             */
            public Builder setSoftmaxParam(
                    caffe.Loadcaffe.SoftmaxParameter.Builder builderForValue) {
                if (softmaxParamBuilder_ == null) {
                    softmaxParam_ = builderForValue.build();
                    onChanged();
                } else {
                    softmaxParamBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000020;
                return this;
            }
            /**
             * <code>optional .caffe.SoftmaxParameter softmax_param = 125;</code>
             */
            public Builder mergeSoftmaxParam(caffe.Loadcaffe.SoftmaxParameter value) {
                if (softmaxParamBuilder_ == null) {
                    if (((bitField1_ & 0x00000020) == 0x00000020) &&
                            softmaxParam_ != caffe.Loadcaffe.SoftmaxParameter.getDefaultInstance()) {
                        softmaxParam_ =
                                caffe.Loadcaffe.SoftmaxParameter.newBuilder(softmaxParam_).mergeFrom(value).buildPartial();
                    } else {
                        softmaxParam_ = value;
                    }
                    onChanged();
                } else {
                    softmaxParamBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000020;
                return this;
            }
            /**
             * <code>optional .caffe.SoftmaxParameter softmax_param = 125;</code>
             */
            public Builder clearSoftmaxParam() {
                if (softmaxParamBuilder_ == null) {
                    softmaxParam_ = caffe.Loadcaffe.SoftmaxParameter.getDefaultInstance();
                    onChanged();
                } else {
                    softmaxParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000020);
                return this;
            }
            /**
             * <code>optional .caffe.SoftmaxParameter softmax_param = 125;</code>
             */
            public caffe.Loadcaffe.SoftmaxParameter.Builder getSoftmaxParamBuilder() {
                bitField1_ |= 0x00000020;
                onChanged();
                return getSoftmaxParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.SoftmaxParameter softmax_param = 125;</code>
             */
            public caffe.Loadcaffe.SoftmaxParameterOrBuilder getSoftmaxParamOrBuilder() {
                if (softmaxParamBuilder_ != null) {
                    return softmaxParamBuilder_.getMessageOrBuilder();
                } else {
                    return softmaxParam_;
                }
            }
            /**
             * <code>optional .caffe.SoftmaxParameter softmax_param = 125;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.SoftmaxParameter, caffe.Loadcaffe.SoftmaxParameter.Builder, caffe.Loadcaffe.SoftmaxParameterOrBuilder>
            getSoftmaxParamFieldBuilder() {
                if (softmaxParamBuilder_ == null) {
                    softmaxParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.SoftmaxParameter, caffe.Loadcaffe.SoftmaxParameter.Builder, caffe.Loadcaffe.SoftmaxParameterOrBuilder>(
                            getSoftmaxParam(),
                            getParentForChildren(),
                            isClean());
                    softmaxParam_ = null;
                }
                return softmaxParamBuilder_;
            }

            private caffe.Loadcaffe.SliceParameter sliceParam_ = caffe.Loadcaffe.SliceParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.SliceParameter, caffe.Loadcaffe.SliceParameter.Builder, caffe.Loadcaffe.SliceParameterOrBuilder> sliceParamBuilder_;
            /**
             * <code>optional .caffe.SliceParameter slice_param = 126;</code>
             */
            public boolean hasSliceParam() {
                return ((bitField1_ & 0x00000040) == 0x00000040);
            }
            /**
             * <code>optional .caffe.SliceParameter slice_param = 126;</code>
             */
            public caffe.Loadcaffe.SliceParameter getSliceParam() {
                if (sliceParamBuilder_ == null) {
                    return sliceParam_;
                } else {
                    return sliceParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.SliceParameter slice_param = 126;</code>
             */
            public Builder setSliceParam(caffe.Loadcaffe.SliceParameter value) {
                if (sliceParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    sliceParam_ = value;
                    onChanged();
                } else {
                    sliceParamBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000040;
                return this;
            }
            /**
             * <code>optional .caffe.SliceParameter slice_param = 126;</code>
             */
            public Builder setSliceParam(
                    caffe.Loadcaffe.SliceParameter.Builder builderForValue) {
                if (sliceParamBuilder_ == null) {
                    sliceParam_ = builderForValue.build();
                    onChanged();
                } else {
                    sliceParamBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000040;
                return this;
            }
            /**
             * <code>optional .caffe.SliceParameter slice_param = 126;</code>
             */
            public Builder mergeSliceParam(caffe.Loadcaffe.SliceParameter value) {
                if (sliceParamBuilder_ == null) {
                    if (((bitField1_ & 0x00000040) == 0x00000040) &&
                            sliceParam_ != caffe.Loadcaffe.SliceParameter.getDefaultInstance()) {
                        sliceParam_ =
                                caffe.Loadcaffe.SliceParameter.newBuilder(sliceParam_).mergeFrom(value).buildPartial();
                    } else {
                        sliceParam_ = value;
                    }
                    onChanged();
                } else {
                    sliceParamBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000040;
                return this;
            }
            /**
             * <code>optional .caffe.SliceParameter slice_param = 126;</code>
             */
            public Builder clearSliceParam() {
                if (sliceParamBuilder_ == null) {
                    sliceParam_ = caffe.Loadcaffe.SliceParameter.getDefaultInstance();
                    onChanged();
                } else {
                    sliceParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000040);
                return this;
            }
            /**
             * <code>optional .caffe.SliceParameter slice_param = 126;</code>
             */
            public caffe.Loadcaffe.SliceParameter.Builder getSliceParamBuilder() {
                bitField1_ |= 0x00000040;
                onChanged();
                return getSliceParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.SliceParameter slice_param = 126;</code>
             */
            public caffe.Loadcaffe.SliceParameterOrBuilder getSliceParamOrBuilder() {
                if (sliceParamBuilder_ != null) {
                    return sliceParamBuilder_.getMessageOrBuilder();
                } else {
                    return sliceParam_;
                }
            }
            /**
             * <code>optional .caffe.SliceParameter slice_param = 126;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.SliceParameter, caffe.Loadcaffe.SliceParameter.Builder, caffe.Loadcaffe.SliceParameterOrBuilder>
            getSliceParamFieldBuilder() {
                if (sliceParamBuilder_ == null) {
                    sliceParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.SliceParameter, caffe.Loadcaffe.SliceParameter.Builder, caffe.Loadcaffe.SliceParameterOrBuilder>(
                            getSliceParam(),
                            getParentForChildren(),
                            isClean());
                    sliceParam_ = null;
                }
                return sliceParamBuilder_;
            }

            private caffe.Loadcaffe.TanHParameter tanhParam_ = caffe.Loadcaffe.TanHParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.TanHParameter, caffe.Loadcaffe.TanHParameter.Builder, caffe.Loadcaffe.TanHParameterOrBuilder> tanhParamBuilder_;
            /**
             * <code>optional .caffe.TanHParameter tanh_param = 127;</code>
             */
            public boolean hasTanhParam() {
                return ((bitField1_ & 0x00000080) == 0x00000080);
            }
            /**
             * <code>optional .caffe.TanHParameter tanh_param = 127;</code>
             */
            public caffe.Loadcaffe.TanHParameter getTanhParam() {
                if (tanhParamBuilder_ == null) {
                    return tanhParam_;
                } else {
                    return tanhParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.TanHParameter tanh_param = 127;</code>
             */
            public Builder setTanhParam(caffe.Loadcaffe.TanHParameter value) {
                if (tanhParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    tanhParam_ = value;
                    onChanged();
                } else {
                    tanhParamBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000080;
                return this;
            }
            /**
             * <code>optional .caffe.TanHParameter tanh_param = 127;</code>
             */
            public Builder setTanhParam(
                    caffe.Loadcaffe.TanHParameter.Builder builderForValue) {
                if (tanhParamBuilder_ == null) {
                    tanhParam_ = builderForValue.build();
                    onChanged();
                } else {
                    tanhParamBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000080;
                return this;
            }
            /**
             * <code>optional .caffe.TanHParameter tanh_param = 127;</code>
             */
            public Builder mergeTanhParam(caffe.Loadcaffe.TanHParameter value) {
                if (tanhParamBuilder_ == null) {
                    if (((bitField1_ & 0x00000080) == 0x00000080) &&
                            tanhParam_ != caffe.Loadcaffe.TanHParameter.getDefaultInstance()) {
                        tanhParam_ =
                                caffe.Loadcaffe.TanHParameter.newBuilder(tanhParam_).mergeFrom(value).buildPartial();
                    } else {
                        tanhParam_ = value;
                    }
                    onChanged();
                } else {
                    tanhParamBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000080;
                return this;
            }
            /**
             * <code>optional .caffe.TanHParameter tanh_param = 127;</code>
             */
            public Builder clearTanhParam() {
                if (tanhParamBuilder_ == null) {
                    tanhParam_ = caffe.Loadcaffe.TanHParameter.getDefaultInstance();
                    onChanged();
                } else {
                    tanhParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000080);
                return this;
            }
            /**
             * <code>optional .caffe.TanHParameter tanh_param = 127;</code>
             */
            public caffe.Loadcaffe.TanHParameter.Builder getTanhParamBuilder() {
                bitField1_ |= 0x00000080;
                onChanged();
                return getTanhParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.TanHParameter tanh_param = 127;</code>
             */
            public caffe.Loadcaffe.TanHParameterOrBuilder getTanhParamOrBuilder() {
                if (tanhParamBuilder_ != null) {
                    return tanhParamBuilder_.getMessageOrBuilder();
                } else {
                    return tanhParam_;
                }
            }
            /**
             * <code>optional .caffe.TanHParameter tanh_param = 127;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.TanHParameter, caffe.Loadcaffe.TanHParameter.Builder, caffe.Loadcaffe.TanHParameterOrBuilder>
            getTanhParamFieldBuilder() {
                if (tanhParamBuilder_ == null) {
                    tanhParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.TanHParameter, caffe.Loadcaffe.TanHParameter.Builder, caffe.Loadcaffe.TanHParameterOrBuilder>(
                            getTanhParam(),
                            getParentForChildren(),
                            isClean());
                    tanhParam_ = null;
                }
                return tanhParamBuilder_;
            }

            private caffe.Loadcaffe.ThresholdParameter thresholdParam_ = caffe.Loadcaffe.ThresholdParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ThresholdParameter, caffe.Loadcaffe.ThresholdParameter.Builder, caffe.Loadcaffe.ThresholdParameterOrBuilder> thresholdParamBuilder_;
            /**
             * <code>optional .caffe.ThresholdParameter threshold_param = 128;</code>
             */
            public boolean hasThresholdParam() {
                return ((bitField1_ & 0x00000100) == 0x00000100);
            }
            /**
             * <code>optional .caffe.ThresholdParameter threshold_param = 128;</code>
             */
            public caffe.Loadcaffe.ThresholdParameter getThresholdParam() {
                if (thresholdParamBuilder_ == null) {
                    return thresholdParam_;
                } else {
                    return thresholdParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.ThresholdParameter threshold_param = 128;</code>
             */
            public Builder setThresholdParam(caffe.Loadcaffe.ThresholdParameter value) {
                if (thresholdParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    thresholdParam_ = value;
                    onChanged();
                } else {
                    thresholdParamBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000100;
                return this;
            }
            /**
             * <code>optional .caffe.ThresholdParameter threshold_param = 128;</code>
             */
            public Builder setThresholdParam(
                    caffe.Loadcaffe.ThresholdParameter.Builder builderForValue) {
                if (thresholdParamBuilder_ == null) {
                    thresholdParam_ = builderForValue.build();
                    onChanged();
                } else {
                    thresholdParamBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000100;
                return this;
            }
            /**
             * <code>optional .caffe.ThresholdParameter threshold_param = 128;</code>
             */
            public Builder mergeThresholdParam(caffe.Loadcaffe.ThresholdParameter value) {
                if (thresholdParamBuilder_ == null) {
                    if (((bitField1_ & 0x00000100) == 0x00000100) &&
                            thresholdParam_ != caffe.Loadcaffe.ThresholdParameter.getDefaultInstance()) {
                        thresholdParam_ =
                                caffe.Loadcaffe.ThresholdParameter.newBuilder(thresholdParam_).mergeFrom(value).buildPartial();
                    } else {
                        thresholdParam_ = value;
                    }
                    onChanged();
                } else {
                    thresholdParamBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000100;
                return this;
            }
            /**
             * <code>optional .caffe.ThresholdParameter threshold_param = 128;</code>
             */
            public Builder clearThresholdParam() {
                if (thresholdParamBuilder_ == null) {
                    thresholdParam_ = caffe.Loadcaffe.ThresholdParameter.getDefaultInstance();
                    onChanged();
                } else {
                    thresholdParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000100);
                return this;
            }
            /**
             * <code>optional .caffe.ThresholdParameter threshold_param = 128;</code>
             */
            public caffe.Loadcaffe.ThresholdParameter.Builder getThresholdParamBuilder() {
                bitField1_ |= 0x00000100;
                onChanged();
                return getThresholdParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.ThresholdParameter threshold_param = 128;</code>
             */
            public caffe.Loadcaffe.ThresholdParameterOrBuilder getThresholdParamOrBuilder() {
                if (thresholdParamBuilder_ != null) {
                    return thresholdParamBuilder_.getMessageOrBuilder();
                } else {
                    return thresholdParam_;
                }
            }
            /**
             * <code>optional .caffe.ThresholdParameter threshold_param = 128;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ThresholdParameter, caffe.Loadcaffe.ThresholdParameter.Builder, caffe.Loadcaffe.ThresholdParameterOrBuilder>
            getThresholdParamFieldBuilder() {
                if (thresholdParamBuilder_ == null) {
                    thresholdParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.ThresholdParameter, caffe.Loadcaffe.ThresholdParameter.Builder, caffe.Loadcaffe.ThresholdParameterOrBuilder>(
                            getThresholdParam(),
                            getParentForChildren(),
                            isClean());
                    thresholdParam_ = null;
                }
                return thresholdParamBuilder_;
            }

            private caffe.Loadcaffe.WindowDataParameter windowDataParam_ = caffe.Loadcaffe.WindowDataParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.WindowDataParameter, caffe.Loadcaffe.WindowDataParameter.Builder, caffe.Loadcaffe.WindowDataParameterOrBuilder> windowDataParamBuilder_;
            /**
             * <code>optional .caffe.WindowDataParameter window_data_param = 129;</code>
             */
            public boolean hasWindowDataParam() {
                return ((bitField1_ & 0x00000200) == 0x00000200);
            }
            /**
             * <code>optional .caffe.WindowDataParameter window_data_param = 129;</code>
             */
            public caffe.Loadcaffe.WindowDataParameter getWindowDataParam() {
                if (windowDataParamBuilder_ == null) {
                    return windowDataParam_;
                } else {
                    return windowDataParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.WindowDataParameter window_data_param = 129;</code>
             */
            public Builder setWindowDataParam(caffe.Loadcaffe.WindowDataParameter value) {
                if (windowDataParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    windowDataParam_ = value;
                    onChanged();
                } else {
                    windowDataParamBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000200;
                return this;
            }
            /**
             * <code>optional .caffe.WindowDataParameter window_data_param = 129;</code>
             */
            public Builder setWindowDataParam(
                    caffe.Loadcaffe.WindowDataParameter.Builder builderForValue) {
                if (windowDataParamBuilder_ == null) {
                    windowDataParam_ = builderForValue.build();
                    onChanged();
                } else {
                    windowDataParamBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000200;
                return this;
            }
            /**
             * <code>optional .caffe.WindowDataParameter window_data_param = 129;</code>
             */
            public Builder mergeWindowDataParam(caffe.Loadcaffe.WindowDataParameter value) {
                if (windowDataParamBuilder_ == null) {
                    if (((bitField1_ & 0x00000200) == 0x00000200) &&
                            windowDataParam_ != caffe.Loadcaffe.WindowDataParameter.getDefaultInstance()) {
                        windowDataParam_ =
                                caffe.Loadcaffe.WindowDataParameter.newBuilder(windowDataParam_).mergeFrom(value).buildPartial();
                    } else {
                        windowDataParam_ = value;
                    }
                    onChanged();
                } else {
                    windowDataParamBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000200;
                return this;
            }
            /**
             * <code>optional .caffe.WindowDataParameter window_data_param = 129;</code>
             */
            public Builder clearWindowDataParam() {
                if (windowDataParamBuilder_ == null) {
                    windowDataParam_ = caffe.Loadcaffe.WindowDataParameter.getDefaultInstance();
                    onChanged();
                } else {
                    windowDataParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000200);
                return this;
            }
            /**
             * <code>optional .caffe.WindowDataParameter window_data_param = 129;</code>
             */
            public caffe.Loadcaffe.WindowDataParameter.Builder getWindowDataParamBuilder() {
                bitField1_ |= 0x00000200;
                onChanged();
                return getWindowDataParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.WindowDataParameter window_data_param = 129;</code>
             */
            public caffe.Loadcaffe.WindowDataParameterOrBuilder getWindowDataParamOrBuilder() {
                if (windowDataParamBuilder_ != null) {
                    return windowDataParamBuilder_.getMessageOrBuilder();
                } else {
                    return windowDataParam_;
                }
            }
            /**
             * <code>optional .caffe.WindowDataParameter window_data_param = 129;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.WindowDataParameter, caffe.Loadcaffe.WindowDataParameter.Builder, caffe.Loadcaffe.WindowDataParameterOrBuilder>
            getWindowDataParamFieldBuilder() {
                if (windowDataParamBuilder_ == null) {
                    windowDataParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.WindowDataParameter, caffe.Loadcaffe.WindowDataParameter.Builder, caffe.Loadcaffe.WindowDataParameterOrBuilder>(
                            getWindowDataParam(),
                            getParentForChildren(),
                            isClean());
                    windowDataParam_ = null;
                }
                return windowDataParamBuilder_;
            }

            // @@protoc_insertion_point(builder_scope:caffe.LayerParameter)
        }

        static {
            defaultInstance = new LayerParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.LayerParameter)
    }

    public interface TransformationParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.TransformationParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional float scale = 1 [default = 1];</code>
         *
         * <pre>
         * For data pre-processing, we can do simple scaling and subtracting the
         * data mean, if provided. Note that the mean subtraction is always carried
         * out before scaling.
         * </pre>
         */
        boolean hasScale();
        /**
         * <code>optional float scale = 1 [default = 1];</code>
         *
         * <pre>
         * For data pre-processing, we can do simple scaling and subtracting the
         * data mean, if provided. Note that the mean subtraction is always carried
         * out before scaling.
         * </pre>
         */
        float getScale();

        /**
         * <code>optional bool mirror = 2 [default = false];</code>
         *
         * <pre>
         * Specify if we want to randomly mirror data.
         * </pre>
         */
        boolean hasMirror();
        /**
         * <code>optional bool mirror = 2 [default = false];</code>
         *
         * <pre>
         * Specify if we want to randomly mirror data.
         * </pre>
         */
        boolean getMirror();

        /**
         * <code>optional uint32 crop_size = 3 [default = 0];</code>
         *
         * <pre>
         * Specify if we would like to randomly crop an image.
         * </pre>
         */
        boolean hasCropSize();
        /**
         * <code>optional uint32 crop_size = 3 [default = 0];</code>
         *
         * <pre>
         * Specify if we would like to randomly crop an image.
         * </pre>
         */
        int getCropSize();

        /**
         * <code>optional string mean_file = 4;</code>
         *
         * <pre>
         * mean_file and mean_value cannot be specified at the same time
         * </pre>
         */
        boolean hasMeanFile();
        /**
         * <code>optional string mean_file = 4;</code>
         *
         * <pre>
         * mean_file and mean_value cannot be specified at the same time
         * </pre>
         */
        java.lang.String getMeanFile();
        /**
         * <code>optional string mean_file = 4;</code>
         *
         * <pre>
         * mean_file and mean_value cannot be specified at the same time
         * </pre>
         */
        com.google.protobuf.ByteString
        getMeanFileBytes();

        /**
         * <code>repeated float mean_value = 5;</code>
         *
         * <pre>
         * if specified can be repeated once (would substract it from all the channels)
         * or can be repeated the same number of times as channels
         * (would subtract them from the corresponding channel)
         * </pre>
         */
        java.util.List<java.lang.Float> getMeanValueList();
        /**
         * <code>repeated float mean_value = 5;</code>
         *
         * <pre>
         * if specified can be repeated once (would substract it from all the channels)
         * or can be repeated the same number of times as channels
         * (would subtract them from the corresponding channel)
         * </pre>
         */
        int getMeanValueCount();
        /**
         * <code>repeated float mean_value = 5;</code>
         *
         * <pre>
         * if specified can be repeated once (would substract it from all the channels)
         * or can be repeated the same number of times as channels
         * (would subtract them from the corresponding channel)
         * </pre>
         */
        float getMeanValue(int index);
    }
    /**
     * Protobuf type {@code caffe.TransformationParameter}
     *
     * <pre>
     * Message that stores parameters used to apply transformation
     * to the data layer's data
     * </pre>
     */
    public static final class TransformationParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.TransformationParameter)
            TransformationParameterOrBuilder {
        // Use TransformationParameter.newBuilder() to construct.
        private TransformationParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private TransformationParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final TransformationParameter defaultInstance;
        public static TransformationParameter getDefaultInstance() {
            return defaultInstance;
        }

        public TransformationParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private TransformationParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 13: {
                            bitField0_ |= 0x00000001;
                            scale_ = input.readFloat();
                            break;
                        }
                        case 16: {
                            bitField0_ |= 0x00000002;
                            mirror_ = input.readBool();
                            break;
                        }
                        case 24: {
                            bitField0_ |= 0x00000004;
                            cropSize_ = input.readUInt32();
                            break;
                        }
                        case 34: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000008;
                            meanFile_ = bs;
                            break;
                        }
                        case 45: {
                            if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                                meanValue_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x00000010;
                            }
                            meanValue_.add(input.readFloat());
                            break;
                        }
                        case 42: {
                            int length = input.readRawVarint32();
                            int limit = input.pushLimit(length);
                            if (!((mutable_bitField0_ & 0x00000010) == 0x00000010) && input.getBytesUntilLimit() > 0) {
                                meanValue_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x00000010;
                            }
                            while (input.getBytesUntilLimit() > 0) {
                                meanValue_.add(input.readFloat());
                            }
                            input.popLimit(limit);
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                    meanValue_ = java.util.Collections.unmodifiableList(meanValue_);
                }
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_TransformationParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_TransformationParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.TransformationParameter.class, caffe.Loadcaffe.TransformationParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<TransformationParameter> PARSER =
                new com.google.protobuf.AbstractParser<TransformationParameter>() {
                    public TransformationParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new TransformationParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<TransformationParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int SCALE_FIELD_NUMBER = 1;
        private float scale_;
        /**
         * <code>optional float scale = 1 [default = 1];</code>
         *
         * <pre>
         * For data pre-processing, we can do simple scaling and subtracting the
         * data mean, if provided. Note that the mean subtraction is always carried
         * out before scaling.
         * </pre>
         */
        public boolean hasScale() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional float scale = 1 [default = 1];</code>
         *
         * <pre>
         * For data pre-processing, we can do simple scaling and subtracting the
         * data mean, if provided. Note that the mean subtraction is always carried
         * out before scaling.
         * </pre>
         */
        public float getScale() {
            return scale_;
        }

        public static final int MIRROR_FIELD_NUMBER = 2;
        private boolean mirror_;
        /**
         * <code>optional bool mirror = 2 [default = false];</code>
         *
         * <pre>
         * Specify if we want to randomly mirror data.
         * </pre>
         */
        public boolean hasMirror() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional bool mirror = 2 [default = false];</code>
         *
         * <pre>
         * Specify if we want to randomly mirror data.
         * </pre>
         */
        public boolean getMirror() {
            return mirror_;
        }

        public static final int CROP_SIZE_FIELD_NUMBER = 3;
        private int cropSize_;
        /**
         * <code>optional uint32 crop_size = 3 [default = 0];</code>
         *
         * <pre>
         * Specify if we would like to randomly crop an image.
         * </pre>
         */
        public boolean hasCropSize() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional uint32 crop_size = 3 [default = 0];</code>
         *
         * <pre>
         * Specify if we would like to randomly crop an image.
         * </pre>
         */
        public int getCropSize() {
            return cropSize_;
        }

        public static final int MEAN_FILE_FIELD_NUMBER = 4;
        private java.lang.Object meanFile_;
        /**
         * <code>optional string mean_file = 4;</code>
         *
         * <pre>
         * mean_file and mean_value cannot be specified at the same time
         * </pre>
         */
        public boolean hasMeanFile() {
            return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional string mean_file = 4;</code>
         *
         * <pre>
         * mean_file and mean_value cannot be specified at the same time
         * </pre>
         */
        public java.lang.String getMeanFile() {
            java.lang.Object ref = meanFile_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    meanFile_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string mean_file = 4;</code>
         *
         * <pre>
         * mean_file and mean_value cannot be specified at the same time
         * </pre>
         */
        public com.google.protobuf.ByteString
        getMeanFileBytes() {
            java.lang.Object ref = meanFile_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                meanFile_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int MEAN_VALUE_FIELD_NUMBER = 5;
        private java.util.List<java.lang.Float> meanValue_;
        /**
         * <code>repeated float mean_value = 5;</code>
         *
         * <pre>
         * if specified can be repeated once (would substract it from all the channels)
         * or can be repeated the same number of times as channels
         * (would subtract them from the corresponding channel)
         * </pre>
         */
        public java.util.List<java.lang.Float>
        getMeanValueList() {
            return meanValue_;
        }
        /**
         * <code>repeated float mean_value = 5;</code>
         *
         * <pre>
         * if specified can be repeated once (would substract it from all the channels)
         * or can be repeated the same number of times as channels
         * (would subtract them from the corresponding channel)
         * </pre>
         */
        public int getMeanValueCount() {
            return meanValue_.size();
        }
        /**
         * <code>repeated float mean_value = 5;</code>
         *
         * <pre>
         * if specified can be repeated once (would substract it from all the channels)
         * or can be repeated the same number of times as channels
         * (would subtract them from the corresponding channel)
         * </pre>
         */
        public float getMeanValue(int index) {
            return meanValue_.get(index);
        }

        private void initFields() {
            scale_ = 1F;
            mirror_ = false;
            cropSize_ = 0;
            meanFile_ = "";
            meanValue_ = java.util.Collections.emptyList();
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeFloat(1, scale_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeBool(2, mirror_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeUInt32(3, cropSize_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                output.writeBytes(4, getMeanFileBytes());
            }
            for (int i = 0; i < meanValue_.size(); i++) {
                output.writeFloat(5, meanValue_.get(i));
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(1, scale_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(2, mirror_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(3, cropSize_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(4, getMeanFileBytes());
            }
            {
                int dataSize = 0;
                dataSize = 4 * getMeanValueList().size();
                size += dataSize;
                size += 1 * getMeanValueList().size();
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.TransformationParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.TransformationParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.TransformationParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.TransformationParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.TransformationParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.TransformationParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.TransformationParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.TransformationParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.TransformationParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.TransformationParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.TransformationParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.TransformationParameter}
         *
         * <pre>
         * Message that stores parameters used to apply transformation
         * to the data layer's data
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.TransformationParameter)
                caffe.Loadcaffe.TransformationParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_TransformationParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_TransformationParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.TransformationParameter.class, caffe.Loadcaffe.TransformationParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.TransformationParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                scale_ = 1F;
                bitField0_ = (bitField0_ & ~0x00000001);
                mirror_ = false;
                bitField0_ = (bitField0_ & ~0x00000002);
                cropSize_ = 0;
                bitField0_ = (bitField0_ & ~0x00000004);
                meanFile_ = "";
                bitField0_ = (bitField0_ & ~0x00000008);
                meanValue_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000010);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_TransformationParameter_descriptor;
            }

            public caffe.Loadcaffe.TransformationParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.TransformationParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.TransformationParameter build() {
                caffe.Loadcaffe.TransformationParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.TransformationParameter buildPartial() {
                caffe.Loadcaffe.TransformationParameter result = new caffe.Loadcaffe.TransformationParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.scale_ = scale_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.mirror_ = mirror_;
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000004;
                }
                result.cropSize_ = cropSize_;
                if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
                    to_bitField0_ |= 0x00000008;
                }
                result.meanFile_ = meanFile_;
                if (((bitField0_ & 0x00000010) == 0x00000010)) {
                    meanValue_ = java.util.Collections.unmodifiableList(meanValue_);
                    bitField0_ = (bitField0_ & ~0x00000010);
                }
                result.meanValue_ = meanValue_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.TransformationParameter) {
                    return mergeFrom((caffe.Loadcaffe.TransformationParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.TransformationParameter other) {
                if (other == caffe.Loadcaffe.TransformationParameter.getDefaultInstance()) return this;
                if (other.hasScale()) {
                    setScale(other.getScale());
                }
                if (other.hasMirror()) {
                    setMirror(other.getMirror());
                }
                if (other.hasCropSize()) {
                    setCropSize(other.getCropSize());
                }
                if (other.hasMeanFile()) {
                    bitField0_ |= 0x00000008;
                    meanFile_ = other.meanFile_;
                    onChanged();
                }
                if (!other.meanValue_.isEmpty()) {
                    if (meanValue_.isEmpty()) {
                        meanValue_ = other.meanValue_;
                        bitField0_ = (bitField0_ & ~0x00000010);
                    } else {
                        ensureMeanValueIsMutable();
                        meanValue_.addAll(other.meanValue_);
                    }
                    onChanged();
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.TransformationParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.TransformationParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private float scale_ = 1F;
            /**
             * <code>optional float scale = 1 [default = 1];</code>
             *
             * <pre>
             * For data pre-processing, we can do simple scaling and subtracting the
             * data mean, if provided. Note that the mean subtraction is always carried
             * out before scaling.
             * </pre>
             */
            public boolean hasScale() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional float scale = 1 [default = 1];</code>
             *
             * <pre>
             * For data pre-processing, we can do simple scaling and subtracting the
             * data mean, if provided. Note that the mean subtraction is always carried
             * out before scaling.
             * </pre>
             */
            public float getScale() {
                return scale_;
            }
            /**
             * <code>optional float scale = 1 [default = 1];</code>
             *
             * <pre>
             * For data pre-processing, we can do simple scaling and subtracting the
             * data mean, if provided. Note that the mean subtraction is always carried
             * out before scaling.
             * </pre>
             */
            public Builder setScale(float value) {
                bitField0_ |= 0x00000001;
                scale_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float scale = 1 [default = 1];</code>
             *
             * <pre>
             * For data pre-processing, we can do simple scaling and subtracting the
             * data mean, if provided. Note that the mean subtraction is always carried
             * out before scaling.
             * </pre>
             */
            public Builder clearScale() {
                bitField0_ = (bitField0_ & ~0x00000001);
                scale_ = 1F;
                onChanged();
                return this;
            }

            private boolean mirror_ ;
            /**
             * <code>optional bool mirror = 2 [default = false];</code>
             *
             * <pre>
             * Specify if we want to randomly mirror data.
             * </pre>
             */
            public boolean hasMirror() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional bool mirror = 2 [default = false];</code>
             *
             * <pre>
             * Specify if we want to randomly mirror data.
             * </pre>
             */
            public boolean getMirror() {
                return mirror_;
            }
            /**
             * <code>optional bool mirror = 2 [default = false];</code>
             *
             * <pre>
             * Specify if we want to randomly mirror data.
             * </pre>
             */
            public Builder setMirror(boolean value) {
                bitField0_ |= 0x00000002;
                mirror_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool mirror = 2 [default = false];</code>
             *
             * <pre>
             * Specify if we want to randomly mirror data.
             * </pre>
             */
            public Builder clearMirror() {
                bitField0_ = (bitField0_ & ~0x00000002);
                mirror_ = false;
                onChanged();
                return this;
            }

            private int cropSize_ ;
            /**
             * <code>optional uint32 crop_size = 3 [default = 0];</code>
             *
             * <pre>
             * Specify if we would like to randomly crop an image.
             * </pre>
             */
            public boolean hasCropSize() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional uint32 crop_size = 3 [default = 0];</code>
             *
             * <pre>
             * Specify if we would like to randomly crop an image.
             * </pre>
             */
            public int getCropSize() {
                return cropSize_;
            }
            /**
             * <code>optional uint32 crop_size = 3 [default = 0];</code>
             *
             * <pre>
             * Specify if we would like to randomly crop an image.
             * </pre>
             */
            public Builder setCropSize(int value) {
                bitField0_ |= 0x00000004;
                cropSize_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 crop_size = 3 [default = 0];</code>
             *
             * <pre>
             * Specify if we would like to randomly crop an image.
             * </pre>
             */
            public Builder clearCropSize() {
                bitField0_ = (bitField0_ & ~0x00000004);
                cropSize_ = 0;
                onChanged();
                return this;
            }

            private java.lang.Object meanFile_ = "";
            /**
             * <code>optional string mean_file = 4;</code>
             *
             * <pre>
             * mean_file and mean_value cannot be specified at the same time
             * </pre>
             */
            public boolean hasMeanFile() {
                return ((bitField0_ & 0x00000008) == 0x00000008);
            }
            /**
             * <code>optional string mean_file = 4;</code>
             *
             * <pre>
             * mean_file and mean_value cannot be specified at the same time
             * </pre>
             */
            public java.lang.String getMeanFile() {
                java.lang.Object ref = meanFile_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        meanFile_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string mean_file = 4;</code>
             *
             * <pre>
             * mean_file and mean_value cannot be specified at the same time
             * </pre>
             */
            public com.google.protobuf.ByteString
            getMeanFileBytes() {
                java.lang.Object ref = meanFile_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    meanFile_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string mean_file = 4;</code>
             *
             * <pre>
             * mean_file and mean_value cannot be specified at the same time
             * </pre>
             */
            public Builder setMeanFile(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000008;
                meanFile_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string mean_file = 4;</code>
             *
             * <pre>
             * mean_file and mean_value cannot be specified at the same time
             * </pre>
             */
            public Builder clearMeanFile() {
                bitField0_ = (bitField0_ & ~0x00000008);
                meanFile_ = getDefaultInstance().getMeanFile();
                onChanged();
                return this;
            }
            /**
             * <code>optional string mean_file = 4;</code>
             *
             * <pre>
             * mean_file and mean_value cannot be specified at the same time
             * </pre>
             */
            public Builder setMeanFileBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000008;
                meanFile_ = value;
                onChanged();
                return this;
            }

            private java.util.List<java.lang.Float> meanValue_ = java.util.Collections.emptyList();
            private void ensureMeanValueIsMutable() {
                if (!((bitField0_ & 0x00000010) == 0x00000010)) {
                    meanValue_ = new java.util.ArrayList<java.lang.Float>(meanValue_);
                    bitField0_ |= 0x00000010;
                }
            }
            /**
             * <code>repeated float mean_value = 5;</code>
             *
             * <pre>
             * if specified can be repeated once (would substract it from all the channels)
             * or can be repeated the same number of times as channels
             * (would subtract them from the corresponding channel)
             * </pre>
             */
            public java.util.List<java.lang.Float>
            getMeanValueList() {
                return java.util.Collections.unmodifiableList(meanValue_);
            }
            /**
             * <code>repeated float mean_value = 5;</code>
             *
             * <pre>
             * if specified can be repeated once (would substract it from all the channels)
             * or can be repeated the same number of times as channels
             * (would subtract them from the corresponding channel)
             * </pre>
             */
            public int getMeanValueCount() {
                return meanValue_.size();
            }
            /**
             * <code>repeated float mean_value = 5;</code>
             *
             * <pre>
             * if specified can be repeated once (would substract it from all the channels)
             * or can be repeated the same number of times as channels
             * (would subtract them from the corresponding channel)
             * </pre>
             */
            public float getMeanValue(int index) {
                return meanValue_.get(index);
            }
            /**
             * <code>repeated float mean_value = 5;</code>
             *
             * <pre>
             * if specified can be repeated once (would substract it from all the channels)
             * or can be repeated the same number of times as channels
             * (would subtract them from the corresponding channel)
             * </pre>
             */
            public Builder setMeanValue(
                    int index, float value) {
                ensureMeanValueIsMutable();
                meanValue_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float mean_value = 5;</code>
             *
             * <pre>
             * if specified can be repeated once (would substract it from all the channels)
             * or can be repeated the same number of times as channels
             * (would subtract them from the corresponding channel)
             * </pre>
             */
            public Builder addMeanValue(float value) {
                ensureMeanValueIsMutable();
                meanValue_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float mean_value = 5;</code>
             *
             * <pre>
             * if specified can be repeated once (would substract it from all the channels)
             * or can be repeated the same number of times as channels
             * (would subtract them from the corresponding channel)
             * </pre>
             */
            public Builder addAllMeanValue(
                    java.lang.Iterable<? extends java.lang.Float> values) {
                ensureMeanValueIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, meanValue_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float mean_value = 5;</code>
             *
             * <pre>
             * if specified can be repeated once (would substract it from all the channels)
             * or can be repeated the same number of times as channels
             * (would subtract them from the corresponding channel)
             * </pre>
             */
            public Builder clearMeanValue() {
                meanValue_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000010);
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.TransformationParameter)
        }

        static {
            defaultInstance = new TransformationParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.TransformationParameter)
    }

    public interface LossParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.LossParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional int32 ignore_label = 1;</code>
         *
         * <pre>
         * If specified, ignore instances with the given label.
         * </pre>
         */
        boolean hasIgnoreLabel();
        /**
         * <code>optional int32 ignore_label = 1;</code>
         *
         * <pre>
         * If specified, ignore instances with the given label.
         * </pre>
         */
        int getIgnoreLabel();

        /**
         * <code>optional bool normalize = 2 [default = true];</code>
         *
         * <pre>
         * If true, normalize each batch across all instances (including spatial
         * dimesions, but not ignored instances); else, divide by batch size only.
         * </pre>
         */
        boolean hasNormalize();
        /**
         * <code>optional bool normalize = 2 [default = true];</code>
         *
         * <pre>
         * If true, normalize each batch across all instances (including spatial
         * dimesions, but not ignored instances); else, divide by batch size only.
         * </pre>
         */
        boolean getNormalize();
    }
    /**
     * Protobuf type {@code caffe.LossParameter}
     *
     * <pre>
     * Message that stores parameters shared by loss layers
     * </pre>
     */
    public static final class LossParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.LossParameter)
            LossParameterOrBuilder {
        // Use LossParameter.newBuilder() to construct.
        private LossParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private LossParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final LossParameter defaultInstance;
        public static LossParameter getDefaultInstance() {
            return defaultInstance;
        }

        public LossParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private LossParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            bitField0_ |= 0x00000001;
                            ignoreLabel_ = input.readInt32();
                            break;
                        }
                        case 16: {
                            bitField0_ |= 0x00000002;
                            normalize_ = input.readBool();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_LossParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_LossParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.LossParameter.class, caffe.Loadcaffe.LossParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<LossParameter> PARSER =
                new com.google.protobuf.AbstractParser<LossParameter>() {
                    public LossParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new LossParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<LossParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int IGNORE_LABEL_FIELD_NUMBER = 1;
        private int ignoreLabel_;
        /**
         * <code>optional int32 ignore_label = 1;</code>
         *
         * <pre>
         * If specified, ignore instances with the given label.
         * </pre>
         */
        public boolean hasIgnoreLabel() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional int32 ignore_label = 1;</code>
         *
         * <pre>
         * If specified, ignore instances with the given label.
         * </pre>
         */
        public int getIgnoreLabel() {
            return ignoreLabel_;
        }

        public static final int NORMALIZE_FIELD_NUMBER = 2;
        private boolean normalize_;
        /**
         * <code>optional bool normalize = 2 [default = true];</code>
         *
         * <pre>
         * If true, normalize each batch across all instances (including spatial
         * dimesions, but not ignored instances); else, divide by batch size only.
         * </pre>
         */
        public boolean hasNormalize() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional bool normalize = 2 [default = true];</code>
         *
         * <pre>
         * If true, normalize each batch across all instances (including spatial
         * dimesions, but not ignored instances); else, divide by batch size only.
         * </pre>
         */
        public boolean getNormalize() {
            return normalize_;
        }

        private void initFields() {
            ignoreLabel_ = 0;
            normalize_ = true;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeInt32(1, ignoreLabel_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeBool(2, normalize_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(1, ignoreLabel_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(2, normalize_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.LossParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.LossParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.LossParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.LossParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.LossParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.LossParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.LossParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.LossParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.LossParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.LossParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.LossParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.LossParameter}
         *
         * <pre>
         * Message that stores parameters shared by loss layers
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.LossParameter)
                caffe.Loadcaffe.LossParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_LossParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_LossParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.LossParameter.class, caffe.Loadcaffe.LossParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.LossParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                ignoreLabel_ = 0;
                bitField0_ = (bitField0_ & ~0x00000001);
                normalize_ = true;
                bitField0_ = (bitField0_ & ~0x00000002);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_LossParameter_descriptor;
            }

            public caffe.Loadcaffe.LossParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.LossParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.LossParameter build() {
                caffe.Loadcaffe.LossParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.LossParameter buildPartial() {
                caffe.Loadcaffe.LossParameter result = new caffe.Loadcaffe.LossParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.ignoreLabel_ = ignoreLabel_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.normalize_ = normalize_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.LossParameter) {
                    return mergeFrom((caffe.Loadcaffe.LossParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.LossParameter other) {
                if (other == caffe.Loadcaffe.LossParameter.getDefaultInstance()) return this;
                if (other.hasIgnoreLabel()) {
                    setIgnoreLabel(other.getIgnoreLabel());
                }
                if (other.hasNormalize()) {
                    setNormalize(other.getNormalize());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.LossParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.LossParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private int ignoreLabel_ ;
            /**
             * <code>optional int32 ignore_label = 1;</code>
             *
             * <pre>
             * If specified, ignore instances with the given label.
             * </pre>
             */
            public boolean hasIgnoreLabel() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional int32 ignore_label = 1;</code>
             *
             * <pre>
             * If specified, ignore instances with the given label.
             * </pre>
             */
            public int getIgnoreLabel() {
                return ignoreLabel_;
            }
            /**
             * <code>optional int32 ignore_label = 1;</code>
             *
             * <pre>
             * If specified, ignore instances with the given label.
             * </pre>
             */
            public Builder setIgnoreLabel(int value) {
                bitField0_ |= 0x00000001;
                ignoreLabel_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 ignore_label = 1;</code>
             *
             * <pre>
             * If specified, ignore instances with the given label.
             * </pre>
             */
            public Builder clearIgnoreLabel() {
                bitField0_ = (bitField0_ & ~0x00000001);
                ignoreLabel_ = 0;
                onChanged();
                return this;
            }

            private boolean normalize_ = true;
            /**
             * <code>optional bool normalize = 2 [default = true];</code>
             *
             * <pre>
             * If true, normalize each batch across all instances (including spatial
             * dimesions, but not ignored instances); else, divide by batch size only.
             * </pre>
             */
            public boolean hasNormalize() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional bool normalize = 2 [default = true];</code>
             *
             * <pre>
             * If true, normalize each batch across all instances (including spatial
             * dimesions, but not ignored instances); else, divide by batch size only.
             * </pre>
             */
            public boolean getNormalize() {
                return normalize_;
            }
            /**
             * <code>optional bool normalize = 2 [default = true];</code>
             *
             * <pre>
             * If true, normalize each batch across all instances (including spatial
             * dimesions, but not ignored instances); else, divide by batch size only.
             * </pre>
             */
            public Builder setNormalize(boolean value) {
                bitField0_ |= 0x00000002;
                normalize_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool normalize = 2 [default = true];</code>
             *
             * <pre>
             * If true, normalize each batch across all instances (including spatial
             * dimesions, but not ignored instances); else, divide by batch size only.
             * </pre>
             */
            public Builder clearNormalize() {
                bitField0_ = (bitField0_ & ~0x00000002);
                normalize_ = true;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.LossParameter)
        }

        static {
            defaultInstance = new LossParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.LossParameter)
    }

    public interface AccuracyParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.AccuracyParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional uint32 top_k = 1 [default = 1];</code>
         *
         * <pre>
         * When computing accuracy, count as correct by comparing the true label to
         * the top k scoring classes.  By default, only compare to the top scoring
         * class (i.e. argmax).
         * </pre>
         */
        boolean hasTopK();
        /**
         * <code>optional uint32 top_k = 1 [default = 1];</code>
         *
         * <pre>
         * When computing accuracy, count as correct by comparing the true label to
         * the top k scoring classes.  By default, only compare to the top scoring
         * class (i.e. argmax).
         * </pre>
         */
        int getTopK();

        /**
         * <code>optional int32 axis = 2 [default = 1];</code>
         *
         * <pre>
         * The "label" axis of the prediction blob, whose argmax corresponds to the
         * predicted label -- may be negative to index from the end (e.g., -1 for the
         * last axis).  For example, if axis == 1 and the predictions are
         * (N x C x H x W), the label blob is expected to contain N*H*W ground truth
         * labels with integer values in {0, 1, ..., C-1}.
         * </pre>
         */
        boolean hasAxis();
        /**
         * <code>optional int32 axis = 2 [default = 1];</code>
         *
         * <pre>
         * The "label" axis of the prediction blob, whose argmax corresponds to the
         * predicted label -- may be negative to index from the end (e.g., -1 for the
         * last axis).  For example, if axis == 1 and the predictions are
         * (N x C x H x W), the label blob is expected to contain N*H*W ground truth
         * labels with integer values in {0, 1, ..., C-1}.
         * </pre>
         */
        int getAxis();

        /**
         * <code>optional int32 ignore_label = 3;</code>
         *
         * <pre>
         * If specified, ignore instances with the given label.
         * </pre>
         */
        boolean hasIgnoreLabel();
        /**
         * <code>optional int32 ignore_label = 3;</code>
         *
         * <pre>
         * If specified, ignore instances with the given label.
         * </pre>
         */
        int getIgnoreLabel();
    }
    /**
     * Protobuf type {@code caffe.AccuracyParameter}
     *
     * <pre>
     * Message that stores parameters used by AccuracyLayer
     * </pre>
     */
    public static final class AccuracyParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.AccuracyParameter)
            AccuracyParameterOrBuilder {
        // Use AccuracyParameter.newBuilder() to construct.
        private AccuracyParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private AccuracyParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final AccuracyParameter defaultInstance;
        public static AccuracyParameter getDefaultInstance() {
            return defaultInstance;
        }

        public AccuracyParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private AccuracyParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            bitField0_ |= 0x00000001;
                            topK_ = input.readUInt32();
                            break;
                        }
                        case 16: {
                            bitField0_ |= 0x00000002;
                            axis_ = input.readInt32();
                            break;
                        }
                        case 24: {
                            bitField0_ |= 0x00000004;
                            ignoreLabel_ = input.readInt32();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_AccuracyParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_AccuracyParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.AccuracyParameter.class, caffe.Loadcaffe.AccuracyParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<AccuracyParameter> PARSER =
                new com.google.protobuf.AbstractParser<AccuracyParameter>() {
                    public AccuracyParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new AccuracyParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<AccuracyParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int TOP_K_FIELD_NUMBER = 1;
        private int topK_;
        /**
         * <code>optional uint32 top_k = 1 [default = 1];</code>
         *
         * <pre>
         * When computing accuracy, count as correct by comparing the true label to
         * the top k scoring classes.  By default, only compare to the top scoring
         * class (i.e. argmax).
         * </pre>
         */
        public boolean hasTopK() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional uint32 top_k = 1 [default = 1];</code>
         *
         * <pre>
         * When computing accuracy, count as correct by comparing the true label to
         * the top k scoring classes.  By default, only compare to the top scoring
         * class (i.e. argmax).
         * </pre>
         */
        public int getTopK() {
            return topK_;
        }

        public static final int AXIS_FIELD_NUMBER = 2;
        private int axis_;
        /**
         * <code>optional int32 axis = 2 [default = 1];</code>
         *
         * <pre>
         * The "label" axis of the prediction blob, whose argmax corresponds to the
         * predicted label -- may be negative to index from the end (e.g., -1 for the
         * last axis).  For example, if axis == 1 and the predictions are
         * (N x C x H x W), the label blob is expected to contain N*H*W ground truth
         * labels with integer values in {0, 1, ..., C-1}.
         * </pre>
         */
        public boolean hasAxis() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional int32 axis = 2 [default = 1];</code>
         *
         * <pre>
         * The "label" axis of the prediction blob, whose argmax corresponds to the
         * predicted label -- may be negative to index from the end (e.g., -1 for the
         * last axis).  For example, if axis == 1 and the predictions are
         * (N x C x H x W), the label blob is expected to contain N*H*W ground truth
         * labels with integer values in {0, 1, ..., C-1}.
         * </pre>
         */
        public int getAxis() {
            return axis_;
        }

        public static final int IGNORE_LABEL_FIELD_NUMBER = 3;
        private int ignoreLabel_;
        /**
         * <code>optional int32 ignore_label = 3;</code>
         *
         * <pre>
         * If specified, ignore instances with the given label.
         * </pre>
         */
        public boolean hasIgnoreLabel() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional int32 ignore_label = 3;</code>
         *
         * <pre>
         * If specified, ignore instances with the given label.
         * </pre>
         */
        public int getIgnoreLabel() {
            return ignoreLabel_;
        }

        private void initFields() {
            topK_ = 1;
            axis_ = 1;
            ignoreLabel_ = 0;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeUInt32(1, topK_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeInt32(2, axis_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeInt32(3, ignoreLabel_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(1, topK_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(2, axis_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(3, ignoreLabel_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.AccuracyParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.AccuracyParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.AccuracyParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.AccuracyParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.AccuracyParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.AccuracyParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.AccuracyParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.AccuracyParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.AccuracyParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.AccuracyParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.AccuracyParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.AccuracyParameter}
         *
         * <pre>
         * Message that stores parameters used by AccuracyLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.AccuracyParameter)
                caffe.Loadcaffe.AccuracyParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_AccuracyParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_AccuracyParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.AccuracyParameter.class, caffe.Loadcaffe.AccuracyParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.AccuracyParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                topK_ = 1;
                bitField0_ = (bitField0_ & ~0x00000001);
                axis_ = 1;
                bitField0_ = (bitField0_ & ~0x00000002);
                ignoreLabel_ = 0;
                bitField0_ = (bitField0_ & ~0x00000004);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_AccuracyParameter_descriptor;
            }

            public caffe.Loadcaffe.AccuracyParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.AccuracyParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.AccuracyParameter build() {
                caffe.Loadcaffe.AccuracyParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.AccuracyParameter buildPartial() {
                caffe.Loadcaffe.AccuracyParameter result = new caffe.Loadcaffe.AccuracyParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.topK_ = topK_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.axis_ = axis_;
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000004;
                }
                result.ignoreLabel_ = ignoreLabel_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.AccuracyParameter) {
                    return mergeFrom((caffe.Loadcaffe.AccuracyParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.AccuracyParameter other) {
                if (other == caffe.Loadcaffe.AccuracyParameter.getDefaultInstance()) return this;
                if (other.hasTopK()) {
                    setTopK(other.getTopK());
                }
                if (other.hasAxis()) {
                    setAxis(other.getAxis());
                }
                if (other.hasIgnoreLabel()) {
                    setIgnoreLabel(other.getIgnoreLabel());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.AccuracyParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.AccuracyParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private int topK_ = 1;
            /**
             * <code>optional uint32 top_k = 1 [default = 1];</code>
             *
             * <pre>
             * When computing accuracy, count as correct by comparing the true label to
             * the top k scoring classes.  By default, only compare to the top scoring
             * class (i.e. argmax).
             * </pre>
             */
            public boolean hasTopK() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional uint32 top_k = 1 [default = 1];</code>
             *
             * <pre>
             * When computing accuracy, count as correct by comparing the true label to
             * the top k scoring classes.  By default, only compare to the top scoring
             * class (i.e. argmax).
             * </pre>
             */
            public int getTopK() {
                return topK_;
            }
            /**
             * <code>optional uint32 top_k = 1 [default = 1];</code>
             *
             * <pre>
             * When computing accuracy, count as correct by comparing the true label to
             * the top k scoring classes.  By default, only compare to the top scoring
             * class (i.e. argmax).
             * </pre>
             */
            public Builder setTopK(int value) {
                bitField0_ |= 0x00000001;
                topK_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 top_k = 1 [default = 1];</code>
             *
             * <pre>
             * When computing accuracy, count as correct by comparing the true label to
             * the top k scoring classes.  By default, only compare to the top scoring
             * class (i.e. argmax).
             * </pre>
             */
            public Builder clearTopK() {
                bitField0_ = (bitField0_ & ~0x00000001);
                topK_ = 1;
                onChanged();
                return this;
            }

            private int axis_ = 1;
            /**
             * <code>optional int32 axis = 2 [default = 1];</code>
             *
             * <pre>
             * The "label" axis of the prediction blob, whose argmax corresponds to the
             * predicted label -- may be negative to index from the end (e.g., -1 for the
             * last axis).  For example, if axis == 1 and the predictions are
             * (N x C x H x W), the label blob is expected to contain N*H*W ground truth
             * labels with integer values in {0, 1, ..., C-1}.
             * </pre>
             */
            public boolean hasAxis() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional int32 axis = 2 [default = 1];</code>
             *
             * <pre>
             * The "label" axis of the prediction blob, whose argmax corresponds to the
             * predicted label -- may be negative to index from the end (e.g., -1 for the
             * last axis).  For example, if axis == 1 and the predictions are
             * (N x C x H x W), the label blob is expected to contain N*H*W ground truth
             * labels with integer values in {0, 1, ..., C-1}.
             * </pre>
             */
            public int getAxis() {
                return axis_;
            }
            /**
             * <code>optional int32 axis = 2 [default = 1];</code>
             *
             * <pre>
             * The "label" axis of the prediction blob, whose argmax corresponds to the
             * predicted label -- may be negative to index from the end (e.g., -1 for the
             * last axis).  For example, if axis == 1 and the predictions are
             * (N x C x H x W), the label blob is expected to contain N*H*W ground truth
             * labels with integer values in {0, 1, ..., C-1}.
             * </pre>
             */
            public Builder setAxis(int value) {
                bitField0_ |= 0x00000002;
                axis_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 axis = 2 [default = 1];</code>
             *
             * <pre>
             * The "label" axis of the prediction blob, whose argmax corresponds to the
             * predicted label -- may be negative to index from the end (e.g., -1 for the
             * last axis).  For example, if axis == 1 and the predictions are
             * (N x C x H x W), the label blob is expected to contain N*H*W ground truth
             * labels with integer values in {0, 1, ..., C-1}.
             * </pre>
             */
            public Builder clearAxis() {
                bitField0_ = (bitField0_ & ~0x00000002);
                axis_ = 1;
                onChanged();
                return this;
            }

            private int ignoreLabel_ ;
            /**
             * <code>optional int32 ignore_label = 3;</code>
             *
             * <pre>
             * If specified, ignore instances with the given label.
             * </pre>
             */
            public boolean hasIgnoreLabel() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional int32 ignore_label = 3;</code>
             *
             * <pre>
             * If specified, ignore instances with the given label.
             * </pre>
             */
            public int getIgnoreLabel() {
                return ignoreLabel_;
            }
            /**
             * <code>optional int32 ignore_label = 3;</code>
             *
             * <pre>
             * If specified, ignore instances with the given label.
             * </pre>
             */
            public Builder setIgnoreLabel(int value) {
                bitField0_ |= 0x00000004;
                ignoreLabel_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 ignore_label = 3;</code>
             *
             * <pre>
             * If specified, ignore instances with the given label.
             * </pre>
             */
            public Builder clearIgnoreLabel() {
                bitField0_ = (bitField0_ & ~0x00000004);
                ignoreLabel_ = 0;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.AccuracyParameter)
        }

        static {
            defaultInstance = new AccuracyParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.AccuracyParameter)
    }

    public interface ArgMaxParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.ArgMaxParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional bool out_max_val = 1 [default = false];</code>
         *
         * <pre>
         * If true produce pairs (argmax, maxval)
         * </pre>
         */
        boolean hasOutMaxVal();
        /**
         * <code>optional bool out_max_val = 1 [default = false];</code>
         *
         * <pre>
         * If true produce pairs (argmax, maxval)
         * </pre>
         */
        boolean getOutMaxVal();

        /**
         * <code>optional uint32 top_k = 2 [default = 1];</code>
         */
        boolean hasTopK();
        /**
         * <code>optional uint32 top_k = 2 [default = 1];</code>
         */
        int getTopK();
    }
    /**
     * Protobuf type {@code caffe.ArgMaxParameter}
     *
     * <pre>
     * Message that stores parameters used by ArgMaxLayer
     * </pre>
     */
    public static final class ArgMaxParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.ArgMaxParameter)
            ArgMaxParameterOrBuilder {
        // Use ArgMaxParameter.newBuilder() to construct.
        private ArgMaxParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private ArgMaxParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final ArgMaxParameter defaultInstance;
        public static ArgMaxParameter getDefaultInstance() {
            return defaultInstance;
        }

        public ArgMaxParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private ArgMaxParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            bitField0_ |= 0x00000001;
                            outMaxVal_ = input.readBool();
                            break;
                        }
                        case 16: {
                            bitField0_ |= 0x00000002;
                            topK_ = input.readUInt32();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_ArgMaxParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_ArgMaxParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.ArgMaxParameter.class, caffe.Loadcaffe.ArgMaxParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<ArgMaxParameter> PARSER =
                new com.google.protobuf.AbstractParser<ArgMaxParameter>() {
                    public ArgMaxParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new ArgMaxParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<ArgMaxParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int OUT_MAX_VAL_FIELD_NUMBER = 1;
        private boolean outMaxVal_;
        /**
         * <code>optional bool out_max_val = 1 [default = false];</code>
         *
         * <pre>
         * If true produce pairs (argmax, maxval)
         * </pre>
         */
        public boolean hasOutMaxVal() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional bool out_max_val = 1 [default = false];</code>
         *
         * <pre>
         * If true produce pairs (argmax, maxval)
         * </pre>
         */
        public boolean getOutMaxVal() {
            return outMaxVal_;
        }

        public static final int TOP_K_FIELD_NUMBER = 2;
        private int topK_;
        /**
         * <code>optional uint32 top_k = 2 [default = 1];</code>
         */
        public boolean hasTopK() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional uint32 top_k = 2 [default = 1];</code>
         */
        public int getTopK() {
            return topK_;
        }

        private void initFields() {
            outMaxVal_ = false;
            topK_ = 1;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeBool(1, outMaxVal_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeUInt32(2, topK_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(1, outMaxVal_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(2, topK_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.ArgMaxParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.ArgMaxParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.ArgMaxParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.ArgMaxParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.ArgMaxParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.ArgMaxParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.ArgMaxParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.ArgMaxParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.ArgMaxParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.ArgMaxParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.ArgMaxParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.ArgMaxParameter}
         *
         * <pre>
         * Message that stores parameters used by ArgMaxLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.ArgMaxParameter)
                caffe.Loadcaffe.ArgMaxParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_ArgMaxParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_ArgMaxParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.ArgMaxParameter.class, caffe.Loadcaffe.ArgMaxParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.ArgMaxParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                outMaxVal_ = false;
                bitField0_ = (bitField0_ & ~0x00000001);
                topK_ = 1;
                bitField0_ = (bitField0_ & ~0x00000002);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_ArgMaxParameter_descriptor;
            }

            public caffe.Loadcaffe.ArgMaxParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.ArgMaxParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.ArgMaxParameter build() {
                caffe.Loadcaffe.ArgMaxParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.ArgMaxParameter buildPartial() {
                caffe.Loadcaffe.ArgMaxParameter result = new caffe.Loadcaffe.ArgMaxParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.outMaxVal_ = outMaxVal_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.topK_ = topK_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.ArgMaxParameter) {
                    return mergeFrom((caffe.Loadcaffe.ArgMaxParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.ArgMaxParameter other) {
                if (other == caffe.Loadcaffe.ArgMaxParameter.getDefaultInstance()) return this;
                if (other.hasOutMaxVal()) {
                    setOutMaxVal(other.getOutMaxVal());
                }
                if (other.hasTopK()) {
                    setTopK(other.getTopK());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.ArgMaxParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.ArgMaxParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private boolean outMaxVal_ ;
            /**
             * <code>optional bool out_max_val = 1 [default = false];</code>
             *
             * <pre>
             * If true produce pairs (argmax, maxval)
             * </pre>
             */
            public boolean hasOutMaxVal() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional bool out_max_val = 1 [default = false];</code>
             *
             * <pre>
             * If true produce pairs (argmax, maxval)
             * </pre>
             */
            public boolean getOutMaxVal() {
                return outMaxVal_;
            }
            /**
             * <code>optional bool out_max_val = 1 [default = false];</code>
             *
             * <pre>
             * If true produce pairs (argmax, maxval)
             * </pre>
             */
            public Builder setOutMaxVal(boolean value) {
                bitField0_ |= 0x00000001;
                outMaxVal_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool out_max_val = 1 [default = false];</code>
             *
             * <pre>
             * If true produce pairs (argmax, maxval)
             * </pre>
             */
            public Builder clearOutMaxVal() {
                bitField0_ = (bitField0_ & ~0x00000001);
                outMaxVal_ = false;
                onChanged();
                return this;
            }

            private int topK_ = 1;
            /**
             * <code>optional uint32 top_k = 2 [default = 1];</code>
             */
            public boolean hasTopK() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional uint32 top_k = 2 [default = 1];</code>
             */
            public int getTopK() {
                return topK_;
            }
            /**
             * <code>optional uint32 top_k = 2 [default = 1];</code>
             */
            public Builder setTopK(int value) {
                bitField0_ |= 0x00000002;
                topK_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 top_k = 2 [default = 1];</code>
             */
            public Builder clearTopK() {
                bitField0_ = (bitField0_ & ~0x00000002);
                topK_ = 1;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.ArgMaxParameter)
        }

        static {
            defaultInstance = new ArgMaxParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.ArgMaxParameter)
    }

    public interface ConcatParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.ConcatParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional int32 axis = 2 [default = 1];</code>
         *
         * <pre>
         * The axis along which to concatenate -- may be negative to index from the
         * end (e.g., -1 for the last axis).  Other axes must have the
         * same dimension for all the bottom blobs.
         * By default, ConcatLayer concatenates blobs along the "channels" axis (1).
         * </pre>
         */
        boolean hasAxis();
        /**
         * <code>optional int32 axis = 2 [default = 1];</code>
         *
         * <pre>
         * The axis along which to concatenate -- may be negative to index from the
         * end (e.g., -1 for the last axis).  Other axes must have the
         * same dimension for all the bottom blobs.
         * By default, ConcatLayer concatenates blobs along the "channels" axis (1).
         * </pre>
         */
        int getAxis();

        /**
         * <code>optional uint32 concat_dim = 1 [default = 1];</code>
         *
         * <pre>
         * DEPRECATED: alias for "axis" -- does not support negative indexing.
         * </pre>
         */
        boolean hasConcatDim();
        /**
         * <code>optional uint32 concat_dim = 1 [default = 1];</code>
         *
         * <pre>
         * DEPRECATED: alias for "axis" -- does not support negative indexing.
         * </pre>
         */
        int getConcatDim();
    }
    /**
     * Protobuf type {@code caffe.ConcatParameter}
     *
     * <pre>
     * Message that stores parameters used by ConcatLayer
     * </pre>
     */
    public static final class ConcatParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.ConcatParameter)
            ConcatParameterOrBuilder {
        // Use ConcatParameter.newBuilder() to construct.
        private ConcatParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private ConcatParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final ConcatParameter defaultInstance;
        public static ConcatParameter getDefaultInstance() {
            return defaultInstance;
        }

        public ConcatParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private ConcatParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            bitField0_ |= 0x00000002;
                            concatDim_ = input.readUInt32();
                            break;
                        }
                        case 16: {
                            bitField0_ |= 0x00000001;
                            axis_ = input.readInt32();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_ConcatParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_ConcatParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.ConcatParameter.class, caffe.Loadcaffe.ConcatParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<ConcatParameter> PARSER =
                new com.google.protobuf.AbstractParser<ConcatParameter>() {
                    public ConcatParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new ConcatParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<ConcatParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int AXIS_FIELD_NUMBER = 2;
        private int axis_;
        /**
         * <code>optional int32 axis = 2 [default = 1];</code>
         *
         * <pre>
         * The axis along which to concatenate -- may be negative to index from the
         * end (e.g., -1 for the last axis).  Other axes must have the
         * same dimension for all the bottom blobs.
         * By default, ConcatLayer concatenates blobs along the "channels" axis (1).
         * </pre>
         */
        public boolean hasAxis() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional int32 axis = 2 [default = 1];</code>
         *
         * <pre>
         * The axis along which to concatenate -- may be negative to index from the
         * end (e.g., -1 for the last axis).  Other axes must have the
         * same dimension for all the bottom blobs.
         * By default, ConcatLayer concatenates blobs along the "channels" axis (1).
         * </pre>
         */
        public int getAxis() {
            return axis_;
        }

        public static final int CONCAT_DIM_FIELD_NUMBER = 1;
        private int concatDim_;
        /**
         * <code>optional uint32 concat_dim = 1 [default = 1];</code>
         *
         * <pre>
         * DEPRECATED: alias for "axis" -- does not support negative indexing.
         * </pre>
         */
        public boolean hasConcatDim() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional uint32 concat_dim = 1 [default = 1];</code>
         *
         * <pre>
         * DEPRECATED: alias for "axis" -- does not support negative indexing.
         * </pre>
         */
        public int getConcatDim() {
            return concatDim_;
        }

        private void initFields() {
            axis_ = 1;
            concatDim_ = 1;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeUInt32(1, concatDim_);
            }
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeInt32(2, axis_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(1, concatDim_);
            }
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(2, axis_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.ConcatParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.ConcatParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.ConcatParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.ConcatParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.ConcatParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.ConcatParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.ConcatParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.ConcatParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.ConcatParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.ConcatParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.ConcatParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.ConcatParameter}
         *
         * <pre>
         * Message that stores parameters used by ConcatLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.ConcatParameter)
                caffe.Loadcaffe.ConcatParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_ConcatParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_ConcatParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.ConcatParameter.class, caffe.Loadcaffe.ConcatParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.ConcatParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                axis_ = 1;
                bitField0_ = (bitField0_ & ~0x00000001);
                concatDim_ = 1;
                bitField0_ = (bitField0_ & ~0x00000002);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_ConcatParameter_descriptor;
            }

            public caffe.Loadcaffe.ConcatParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.ConcatParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.ConcatParameter build() {
                caffe.Loadcaffe.ConcatParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.ConcatParameter buildPartial() {
                caffe.Loadcaffe.ConcatParameter result = new caffe.Loadcaffe.ConcatParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.axis_ = axis_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.concatDim_ = concatDim_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.ConcatParameter) {
                    return mergeFrom((caffe.Loadcaffe.ConcatParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.ConcatParameter other) {
                if (other == caffe.Loadcaffe.ConcatParameter.getDefaultInstance()) return this;
                if (other.hasAxis()) {
                    setAxis(other.getAxis());
                }
                if (other.hasConcatDim()) {
                    setConcatDim(other.getConcatDim());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.ConcatParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.ConcatParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private int axis_ = 1;
            /**
             * <code>optional int32 axis = 2 [default = 1];</code>
             *
             * <pre>
             * The axis along which to concatenate -- may be negative to index from the
             * end (e.g., -1 for the last axis).  Other axes must have the
             * same dimension for all the bottom blobs.
             * By default, ConcatLayer concatenates blobs along the "channels" axis (1).
             * </pre>
             */
            public boolean hasAxis() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional int32 axis = 2 [default = 1];</code>
             *
             * <pre>
             * The axis along which to concatenate -- may be negative to index from the
             * end (e.g., -1 for the last axis).  Other axes must have the
             * same dimension for all the bottom blobs.
             * By default, ConcatLayer concatenates blobs along the "channels" axis (1).
             * </pre>
             */
            public int getAxis() {
                return axis_;
            }
            /**
             * <code>optional int32 axis = 2 [default = 1];</code>
             *
             * <pre>
             * The axis along which to concatenate -- may be negative to index from the
             * end (e.g., -1 for the last axis).  Other axes must have the
             * same dimension for all the bottom blobs.
             * By default, ConcatLayer concatenates blobs along the "channels" axis (1).
             * </pre>
             */
            public Builder setAxis(int value) {
                bitField0_ |= 0x00000001;
                axis_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 axis = 2 [default = 1];</code>
             *
             * <pre>
             * The axis along which to concatenate -- may be negative to index from the
             * end (e.g., -1 for the last axis).  Other axes must have the
             * same dimension for all the bottom blobs.
             * By default, ConcatLayer concatenates blobs along the "channels" axis (1).
             * </pre>
             */
            public Builder clearAxis() {
                bitField0_ = (bitField0_ & ~0x00000001);
                axis_ = 1;
                onChanged();
                return this;
            }

            private int concatDim_ = 1;
            /**
             * <code>optional uint32 concat_dim = 1 [default = 1];</code>
             *
             * <pre>
             * DEPRECATED: alias for "axis" -- does not support negative indexing.
             * </pre>
             */
            public boolean hasConcatDim() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional uint32 concat_dim = 1 [default = 1];</code>
             *
             * <pre>
             * DEPRECATED: alias for "axis" -- does not support negative indexing.
             * </pre>
             */
            public int getConcatDim() {
                return concatDim_;
            }
            /**
             * <code>optional uint32 concat_dim = 1 [default = 1];</code>
             *
             * <pre>
             * DEPRECATED: alias for "axis" -- does not support negative indexing.
             * </pre>
             */
            public Builder setConcatDim(int value) {
                bitField0_ |= 0x00000002;
                concatDim_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 concat_dim = 1 [default = 1];</code>
             *
             * <pre>
             * DEPRECATED: alias for "axis" -- does not support negative indexing.
             * </pre>
             */
            public Builder clearConcatDim() {
                bitField0_ = (bitField0_ & ~0x00000002);
                concatDim_ = 1;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.ConcatParameter)
        }

        static {
            defaultInstance = new ConcatParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.ConcatParameter)
    }

    public interface ContrastiveLossParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.ContrastiveLossParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional float margin = 1 [default = 1];</code>
         *
         * <pre>
         *margin for dissimilar pair
         * </pre>
         */
        boolean hasMargin();
        /**
         * <code>optional float margin = 1 [default = 1];</code>
         *
         * <pre>
         *margin for dissimilar pair
         * </pre>
         */
        float getMargin();
    }
    /**
     * Protobuf type {@code caffe.ContrastiveLossParameter}
     *
     * <pre>
     * Message that stores parameters used by ContrastiveLossLayer
     * </pre>
     */
    public static final class ContrastiveLossParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.ContrastiveLossParameter)
            ContrastiveLossParameterOrBuilder {
        // Use ContrastiveLossParameter.newBuilder() to construct.
        private ContrastiveLossParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private ContrastiveLossParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final ContrastiveLossParameter defaultInstance;
        public static ContrastiveLossParameter getDefaultInstance() {
            return defaultInstance;
        }

        public ContrastiveLossParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private ContrastiveLossParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 13: {
                            bitField0_ |= 0x00000001;
                            margin_ = input.readFloat();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_ContrastiveLossParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_ContrastiveLossParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.ContrastiveLossParameter.class, caffe.Loadcaffe.ContrastiveLossParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<ContrastiveLossParameter> PARSER =
                new com.google.protobuf.AbstractParser<ContrastiveLossParameter>() {
                    public ContrastiveLossParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new ContrastiveLossParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<ContrastiveLossParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int MARGIN_FIELD_NUMBER = 1;
        private float margin_;
        /**
         * <code>optional float margin = 1 [default = 1];</code>
         *
         * <pre>
         *margin for dissimilar pair
         * </pre>
         */
        public boolean hasMargin() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional float margin = 1 [default = 1];</code>
         *
         * <pre>
         *margin for dissimilar pair
         * </pre>
         */
        public float getMargin() {
            return margin_;
        }

        private void initFields() {
            margin_ = 1F;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeFloat(1, margin_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(1, margin_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.ContrastiveLossParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.ContrastiveLossParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.ContrastiveLossParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.ContrastiveLossParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.ContrastiveLossParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.ContrastiveLossParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.ContrastiveLossParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.ContrastiveLossParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.ContrastiveLossParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.ContrastiveLossParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.ContrastiveLossParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.ContrastiveLossParameter}
         *
         * <pre>
         * Message that stores parameters used by ContrastiveLossLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.ContrastiveLossParameter)
                caffe.Loadcaffe.ContrastiveLossParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_ContrastiveLossParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_ContrastiveLossParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.ContrastiveLossParameter.class, caffe.Loadcaffe.ContrastiveLossParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.ContrastiveLossParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                margin_ = 1F;
                bitField0_ = (bitField0_ & ~0x00000001);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_ContrastiveLossParameter_descriptor;
            }

            public caffe.Loadcaffe.ContrastiveLossParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.ContrastiveLossParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.ContrastiveLossParameter build() {
                caffe.Loadcaffe.ContrastiveLossParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.ContrastiveLossParameter buildPartial() {
                caffe.Loadcaffe.ContrastiveLossParameter result = new caffe.Loadcaffe.ContrastiveLossParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.margin_ = margin_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.ContrastiveLossParameter) {
                    return mergeFrom((caffe.Loadcaffe.ContrastiveLossParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.ContrastiveLossParameter other) {
                if (other == caffe.Loadcaffe.ContrastiveLossParameter.getDefaultInstance()) return this;
                if (other.hasMargin()) {
                    setMargin(other.getMargin());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.ContrastiveLossParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.ContrastiveLossParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private float margin_ = 1F;
            /**
             * <code>optional float margin = 1 [default = 1];</code>
             *
             * <pre>
             *margin for dissimilar pair
             * </pre>
             */
            public boolean hasMargin() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional float margin = 1 [default = 1];</code>
             *
             * <pre>
             *margin for dissimilar pair
             * </pre>
             */
            public float getMargin() {
                return margin_;
            }
            /**
             * <code>optional float margin = 1 [default = 1];</code>
             *
             * <pre>
             *margin for dissimilar pair
             * </pre>
             */
            public Builder setMargin(float value) {
                bitField0_ |= 0x00000001;
                margin_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float margin = 1 [default = 1];</code>
             *
             * <pre>
             *margin for dissimilar pair
             * </pre>
             */
            public Builder clearMargin() {
                bitField0_ = (bitField0_ & ~0x00000001);
                margin_ = 1F;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.ContrastiveLossParameter)
        }

        static {
            defaultInstance = new ContrastiveLossParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.ContrastiveLossParameter)
    }

    public interface ConvolutionParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.ConvolutionParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional uint32 num_output = 1;</code>
         *
         * <pre>
         * The number of outputs for the layer
         * </pre>
         */
        boolean hasNumOutput();
        /**
         * <code>optional uint32 num_output = 1;</code>
         *
         * <pre>
         * The number of outputs for the layer
         * </pre>
         */
        int getNumOutput();

        /**
         * <code>optional bool bias_term = 2 [default = true];</code>
         *
         * <pre>
         * whether to have bias terms
         * </pre>
         */
        boolean hasBiasTerm();
        /**
         * <code>optional bool bias_term = 2 [default = true];</code>
         *
         * <pre>
         * whether to have bias terms
         * </pre>
         */
        boolean getBiasTerm();

        /**
         * <code>optional uint32 pad = 3 [default = 0];</code>
         *
         * <pre>
         * Pad, kernel size, and stride are all given as a single value for equal
         * dimensions in height and width or as Y, X pairs.
         * </pre>
         */
        boolean hasPad();
        /**
         * <code>optional uint32 pad = 3 [default = 0];</code>
         *
         * <pre>
         * Pad, kernel size, and stride are all given as a single value for equal
         * dimensions in height and width or as Y, X pairs.
         * </pre>
         */
        int getPad();

        /**
         * <code>optional uint32 pad_h = 9 [default = 0];</code>
         *
         * <pre>
         * The padding height
         * </pre>
         */
        boolean hasPadH();
        /**
         * <code>optional uint32 pad_h = 9 [default = 0];</code>
         *
         * <pre>
         * The padding height
         * </pre>
         */
        int getPadH();

        /**
         * <code>optional uint32 pad_w = 10 [default = 0];</code>
         *
         * <pre>
         * The padding width
         * </pre>
         */
        boolean hasPadW();
        /**
         * <code>optional uint32 pad_w = 10 [default = 0];</code>
         *
         * <pre>
         * The padding width
         * </pre>
         */
        int getPadW();

        /**
         * <code>optional uint32 kernel_size = 4;</code>
         *
         * <pre>
         * The kernel size (square)
         * </pre>
         */
        boolean hasKernelSize();
        /**
         * <code>optional uint32 kernel_size = 4;</code>
         *
         * <pre>
         * The kernel size (square)
         * </pre>
         */
        int getKernelSize();

        /**
         * <code>optional uint32 kernel_h = 11;</code>
         *
         * <pre>
         * The kernel height
         * </pre>
         */
        boolean hasKernelH();
        /**
         * <code>optional uint32 kernel_h = 11;</code>
         *
         * <pre>
         * The kernel height
         * </pre>
         */
        int getKernelH();

        /**
         * <code>optional uint32 kernel_w = 12;</code>
         *
         * <pre>
         * The kernel width
         * </pre>
         */
        boolean hasKernelW();
        /**
         * <code>optional uint32 kernel_w = 12;</code>
         *
         * <pre>
         * The kernel width
         * </pre>
         */
        int getKernelW();

        /**
         * <code>optional uint32 group = 5 [default = 1];</code>
         *
         * <pre>
         * The group size for group conv
         * </pre>
         */
        boolean hasGroup();
        /**
         * <code>optional uint32 group = 5 [default = 1];</code>
         *
         * <pre>
         * The group size for group conv
         * </pre>
         */
        int getGroup();

        /**
         * <code>optional uint32 stride = 6 [default = 1];</code>
         *
         * <pre>
         * The stride (equal in Y, X)
         * </pre>
         */
        boolean hasStride();
        /**
         * <code>optional uint32 stride = 6 [default = 1];</code>
         *
         * <pre>
         * The stride (equal in Y, X)
         * </pre>
         */
        int getStride();

        /**
         * <code>optional uint32 stride_h = 13;</code>
         *
         * <pre>
         * The stride height
         * </pre>
         */
        boolean hasStrideH();
        /**
         * <code>optional uint32 stride_h = 13;</code>
         *
         * <pre>
         * The stride height
         * </pre>
         */
        int getStrideH();

        /**
         * <code>optional uint32 stride_w = 14;</code>
         *
         * <pre>
         * The stride width
         * </pre>
         */
        boolean hasStrideW();
        /**
         * <code>optional uint32 stride_w = 14;</code>
         *
         * <pre>
         * The stride width
         * </pre>
         */
        int getStrideW();

        /**
         * <code>optional .caffe.FillerParameter weight_filler = 7;</code>
         *
         * <pre>
         * The filler for the weight
         * </pre>
         */
        boolean hasWeightFiller();
        /**
         * <code>optional .caffe.FillerParameter weight_filler = 7;</code>
         *
         * <pre>
         * The filler for the weight
         * </pre>
         */
        caffe.Loadcaffe.FillerParameter getWeightFiller();
        /**
         * <code>optional .caffe.FillerParameter weight_filler = 7;</code>
         *
         * <pre>
         * The filler for the weight
         * </pre>
         */
        caffe.Loadcaffe.FillerParameterOrBuilder getWeightFillerOrBuilder();

        /**
         * <code>optional .caffe.FillerParameter bias_filler = 8;</code>
         *
         * <pre>
         * The filler for the bias
         * </pre>
         */
        boolean hasBiasFiller();
        /**
         * <code>optional .caffe.FillerParameter bias_filler = 8;</code>
         *
         * <pre>
         * The filler for the bias
         * </pre>
         */
        caffe.Loadcaffe.FillerParameter getBiasFiller();
        /**
         * <code>optional .caffe.FillerParameter bias_filler = 8;</code>
         *
         * <pre>
         * The filler for the bias
         * </pre>
         */
        caffe.Loadcaffe.FillerParameterOrBuilder getBiasFillerOrBuilder();

        /**
         * <code>optional .caffe.ConvolutionParameter.Engine engine = 15 [default = DEFAULT];</code>
         */
        boolean hasEngine();
        /**
         * <code>optional .caffe.ConvolutionParameter.Engine engine = 15 [default = DEFAULT];</code>
         */
        caffe.Loadcaffe.ConvolutionParameter.Engine getEngine();
    }
    /**
     * Protobuf type {@code caffe.ConvolutionParameter}
     *
     * <pre>
     * Message that stores parameters used by ConvolutionLayer
     * </pre>
     */
    public static final class ConvolutionParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.ConvolutionParameter)
            ConvolutionParameterOrBuilder {
        // Use ConvolutionParameter.newBuilder() to construct.
        private ConvolutionParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private ConvolutionParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final ConvolutionParameter defaultInstance;
        public static ConvolutionParameter getDefaultInstance() {
            return defaultInstance;
        }

        public ConvolutionParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private ConvolutionParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            bitField0_ |= 0x00000001;
                            numOutput_ = input.readUInt32();
                            break;
                        }
                        case 16: {
                            bitField0_ |= 0x00000002;
                            biasTerm_ = input.readBool();
                            break;
                        }
                        case 24: {
                            bitField0_ |= 0x00000004;
                            pad_ = input.readUInt32();
                            break;
                        }
                        case 32: {
                            bitField0_ |= 0x00000020;
                            kernelSize_ = input.readUInt32();
                            break;
                        }
                        case 40: {
                            bitField0_ |= 0x00000100;
                            group_ = input.readUInt32();
                            break;
                        }
                        case 48: {
                            bitField0_ |= 0x00000200;
                            stride_ = input.readUInt32();
                            break;
                        }
                        case 58: {
                            caffe.Loadcaffe.FillerParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00001000) == 0x00001000)) {
                                subBuilder = weightFiller_.toBuilder();
                            }
                            weightFiller_ = input.readMessage(caffe.Loadcaffe.FillerParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(weightFiller_);
                                weightFiller_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00001000;
                            break;
                        }
                        case 66: {
                            caffe.Loadcaffe.FillerParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00002000) == 0x00002000)) {
                                subBuilder = biasFiller_.toBuilder();
                            }
                            biasFiller_ = input.readMessage(caffe.Loadcaffe.FillerParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(biasFiller_);
                                biasFiller_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00002000;
                            break;
                        }
                        case 72: {
                            bitField0_ |= 0x00000008;
                            padH_ = input.readUInt32();
                            break;
                        }
                        case 80: {
                            bitField0_ |= 0x00000010;
                            padW_ = input.readUInt32();
                            break;
                        }
                        case 88: {
                            bitField0_ |= 0x00000040;
                            kernelH_ = input.readUInt32();
                            break;
                        }
                        case 96: {
                            bitField0_ |= 0x00000080;
                            kernelW_ = input.readUInt32();
                            break;
                        }
                        case 104: {
                            bitField0_ |= 0x00000400;
                            strideH_ = input.readUInt32();
                            break;
                        }
                        case 112: {
                            bitField0_ |= 0x00000800;
                            strideW_ = input.readUInt32();
                            break;
                        }
                        case 120: {
                            int rawValue = input.readEnum();
                            caffe.Loadcaffe.ConvolutionParameter.Engine value = caffe.Loadcaffe.ConvolutionParameter.Engine.valueOf(rawValue);
                            if (value == null) {
                                unknownFields.mergeVarintField(15, rawValue);
                            } else {
                                bitField0_ |= 0x00004000;
                                engine_ = value;
                            }
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_ConvolutionParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_ConvolutionParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.ConvolutionParameter.class, caffe.Loadcaffe.ConvolutionParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<ConvolutionParameter> PARSER =
                new com.google.protobuf.AbstractParser<ConvolutionParameter>() {
                    public ConvolutionParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new ConvolutionParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<ConvolutionParameter> getParserForType() {
            return PARSER;
        }

        /**
         * Protobuf enum {@code caffe.ConvolutionParameter.Engine}
         */
        public enum Engine
                implements com.google.protobuf.ProtocolMessageEnum {
            /**
             * <code>DEFAULT = 0;</code>
             */
            DEFAULT(0, 0),
            /**
             * <code>CAFFE = 1;</code>
             */
            CAFFE(1, 1),
            /**
             * <code>CUDNN = 2;</code>
             */
            CUDNN(2, 2),
            ;

            /**
             * <code>DEFAULT = 0;</code>
             */
            public static final int DEFAULT_VALUE = 0;
            /**
             * <code>CAFFE = 1;</code>
             */
            public static final int CAFFE_VALUE = 1;
            /**
             * <code>CUDNN = 2;</code>
             */
            public static final int CUDNN_VALUE = 2;


            public final int getNumber() { return value; }

            public static Engine valueOf(int value) {
                switch (value) {
                    case 0: return DEFAULT;
                    case 1: return CAFFE;
                    case 2: return CUDNN;
                    default: return null;
                }
            }

            public static com.google.protobuf.Internal.EnumLiteMap<Engine>
            internalGetValueMap() {
                return internalValueMap;
            }
            private static com.google.protobuf.Internal.EnumLiteMap<Engine>
                    internalValueMap =
                    new com.google.protobuf.Internal.EnumLiteMap<Engine>() {
                        public Engine findValueByNumber(int number) {
                            return Engine.valueOf(number);
                        }
                    };

            public final com.google.protobuf.Descriptors.EnumValueDescriptor
            getValueDescriptor() {
                return getDescriptor().getValues().get(index);
            }
            public final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptorForType() {
                return getDescriptor();
            }
            public static final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptor() {
                return caffe.Loadcaffe.ConvolutionParameter.getDescriptor().getEnumTypes().get(0);
            }

            private static final Engine[] VALUES = values();

            public static Engine valueOf(
                    com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new java.lang.IllegalArgumentException(
                            "EnumValueDescriptor is not for this type.");
                }
                return VALUES[desc.getIndex()];
            }

            private final int index;
            private final int value;

            private Engine(int index, int value) {
                this.index = index;
                this.value = value;
            }

            // @@protoc_insertion_point(enum_scope:caffe.ConvolutionParameter.Engine)
        }

        private int bitField0_;
        public static final int NUM_OUTPUT_FIELD_NUMBER = 1;
        private int numOutput_;
        /**
         * <code>optional uint32 num_output = 1;</code>
         *
         * <pre>
         * The number of outputs for the layer
         * </pre>
         */
        public boolean hasNumOutput() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional uint32 num_output = 1;</code>
         *
         * <pre>
         * The number of outputs for the layer
         * </pre>
         */
        public int getNumOutput() {
            return numOutput_;
        }

        public static final int BIAS_TERM_FIELD_NUMBER = 2;
        private boolean biasTerm_;
        /**
         * <code>optional bool bias_term = 2 [default = true];</code>
         *
         * <pre>
         * whether to have bias terms
         * </pre>
         */
        public boolean hasBiasTerm() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional bool bias_term = 2 [default = true];</code>
         *
         * <pre>
         * whether to have bias terms
         * </pre>
         */
        public boolean getBiasTerm() {
            return biasTerm_;
        }

        public static final int PAD_FIELD_NUMBER = 3;
        private int pad_;
        /**
         * <code>optional uint32 pad = 3 [default = 0];</code>
         *
         * <pre>
         * Pad, kernel size, and stride are all given as a single value for equal
         * dimensions in height and width or as Y, X pairs.
         * </pre>
         */
        public boolean hasPad() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional uint32 pad = 3 [default = 0];</code>
         *
         * <pre>
         * Pad, kernel size, and stride are all given as a single value for equal
         * dimensions in height and width or as Y, X pairs.
         * </pre>
         */
        public int getPad() {
            return pad_;
        }

        public static final int PAD_H_FIELD_NUMBER = 9;
        private int padH_;
        /**
         * <code>optional uint32 pad_h = 9 [default = 0];</code>
         *
         * <pre>
         * The padding height
         * </pre>
         */
        public boolean hasPadH() {
            return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional uint32 pad_h = 9 [default = 0];</code>
         *
         * <pre>
         * The padding height
         * </pre>
         */
        public int getPadH() {
            return padH_;
        }

        public static final int PAD_W_FIELD_NUMBER = 10;
        private int padW_;
        /**
         * <code>optional uint32 pad_w = 10 [default = 0];</code>
         *
         * <pre>
         * The padding width
         * </pre>
         */
        public boolean hasPadW() {
            return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>optional uint32 pad_w = 10 [default = 0];</code>
         *
         * <pre>
         * The padding width
         * </pre>
         */
        public int getPadW() {
            return padW_;
        }

        public static final int KERNEL_SIZE_FIELD_NUMBER = 4;
        private int kernelSize_;
        /**
         * <code>optional uint32 kernel_size = 4;</code>
         *
         * <pre>
         * The kernel size (square)
         * </pre>
         */
        public boolean hasKernelSize() {
            return ((bitField0_ & 0x00000020) == 0x00000020);
        }
        /**
         * <code>optional uint32 kernel_size = 4;</code>
         *
         * <pre>
         * The kernel size (square)
         * </pre>
         */
        public int getKernelSize() {
            return kernelSize_;
        }

        public static final int KERNEL_H_FIELD_NUMBER = 11;
        private int kernelH_;
        /**
         * <code>optional uint32 kernel_h = 11;</code>
         *
         * <pre>
         * The kernel height
         * </pre>
         */
        public boolean hasKernelH() {
            return ((bitField0_ & 0x00000040) == 0x00000040);
        }
        /**
         * <code>optional uint32 kernel_h = 11;</code>
         *
         * <pre>
         * The kernel height
         * </pre>
         */
        public int getKernelH() {
            return kernelH_;
        }

        public static final int KERNEL_W_FIELD_NUMBER = 12;
        private int kernelW_;
        /**
         * <code>optional uint32 kernel_w = 12;</code>
         *
         * <pre>
         * The kernel width
         * </pre>
         */
        public boolean hasKernelW() {
            return ((bitField0_ & 0x00000080) == 0x00000080);
        }
        /**
         * <code>optional uint32 kernel_w = 12;</code>
         *
         * <pre>
         * The kernel width
         * </pre>
         */
        public int getKernelW() {
            return kernelW_;
        }

        public static final int GROUP_FIELD_NUMBER = 5;
        private int group_;
        /**
         * <code>optional uint32 group = 5 [default = 1];</code>
         *
         * <pre>
         * The group size for group conv
         * </pre>
         */
        public boolean hasGroup() {
            return ((bitField0_ & 0x00000100) == 0x00000100);
        }
        /**
         * <code>optional uint32 group = 5 [default = 1];</code>
         *
         * <pre>
         * The group size for group conv
         * </pre>
         */
        public int getGroup() {
            return group_;
        }

        public static final int STRIDE_FIELD_NUMBER = 6;
        private int stride_;
        /**
         * <code>optional uint32 stride = 6 [default = 1];</code>
         *
         * <pre>
         * The stride (equal in Y, X)
         * </pre>
         */
        public boolean hasStride() {
            return ((bitField0_ & 0x00000200) == 0x00000200);
        }
        /**
         * <code>optional uint32 stride = 6 [default = 1];</code>
         *
         * <pre>
         * The stride (equal in Y, X)
         * </pre>
         */
        public int getStride() {
            return stride_;
        }

        public static final int STRIDE_H_FIELD_NUMBER = 13;
        private int strideH_;
        /**
         * <code>optional uint32 stride_h = 13;</code>
         *
         * <pre>
         * The stride height
         * </pre>
         */
        public boolean hasStrideH() {
            return ((bitField0_ & 0x00000400) == 0x00000400);
        }
        /**
         * <code>optional uint32 stride_h = 13;</code>
         *
         * <pre>
         * The stride height
         * </pre>
         */
        public int getStrideH() {
            return strideH_;
        }

        public static final int STRIDE_W_FIELD_NUMBER = 14;
        private int strideW_;
        /**
         * <code>optional uint32 stride_w = 14;</code>
         *
         * <pre>
         * The stride width
         * </pre>
         */
        public boolean hasStrideW() {
            return ((bitField0_ & 0x00000800) == 0x00000800);
        }
        /**
         * <code>optional uint32 stride_w = 14;</code>
         *
         * <pre>
         * The stride width
         * </pre>
         */
        public int getStrideW() {
            return strideW_;
        }

        public static final int WEIGHT_FILLER_FIELD_NUMBER = 7;
        private caffe.Loadcaffe.FillerParameter weightFiller_;
        /**
         * <code>optional .caffe.FillerParameter weight_filler = 7;</code>
         *
         * <pre>
         * The filler for the weight
         * </pre>
         */
        public boolean hasWeightFiller() {
            return ((bitField0_ & 0x00001000) == 0x00001000);
        }
        /**
         * <code>optional .caffe.FillerParameter weight_filler = 7;</code>
         *
         * <pre>
         * The filler for the weight
         * </pre>
         */
        public caffe.Loadcaffe.FillerParameter getWeightFiller() {
            return weightFiller_;
        }
        /**
         * <code>optional .caffe.FillerParameter weight_filler = 7;</code>
         *
         * <pre>
         * The filler for the weight
         * </pre>
         */
        public caffe.Loadcaffe.FillerParameterOrBuilder getWeightFillerOrBuilder() {
            return weightFiller_;
        }

        public static final int BIAS_FILLER_FIELD_NUMBER = 8;
        private caffe.Loadcaffe.FillerParameter biasFiller_;
        /**
         * <code>optional .caffe.FillerParameter bias_filler = 8;</code>
         *
         * <pre>
         * The filler for the bias
         * </pre>
         */
        public boolean hasBiasFiller() {
            return ((bitField0_ & 0x00002000) == 0x00002000);
        }
        /**
         * <code>optional .caffe.FillerParameter bias_filler = 8;</code>
         *
         * <pre>
         * The filler for the bias
         * </pre>
         */
        public caffe.Loadcaffe.FillerParameter getBiasFiller() {
            return biasFiller_;
        }
        /**
         * <code>optional .caffe.FillerParameter bias_filler = 8;</code>
         *
         * <pre>
         * The filler for the bias
         * </pre>
         */
        public caffe.Loadcaffe.FillerParameterOrBuilder getBiasFillerOrBuilder() {
            return biasFiller_;
        }

        public static final int ENGINE_FIELD_NUMBER = 15;
        private caffe.Loadcaffe.ConvolutionParameter.Engine engine_;
        /**
         * <code>optional .caffe.ConvolutionParameter.Engine engine = 15 [default = DEFAULT];</code>
         */
        public boolean hasEngine() {
            return ((bitField0_ & 0x00004000) == 0x00004000);
        }
        /**
         * <code>optional .caffe.ConvolutionParameter.Engine engine = 15 [default = DEFAULT];</code>
         */
        public caffe.Loadcaffe.ConvolutionParameter.Engine getEngine() {
            return engine_;
        }

        private void initFields() {
            numOutput_ = 0;
            biasTerm_ = true;
            pad_ = 0;
            padH_ = 0;
            padW_ = 0;
            kernelSize_ = 0;
            kernelH_ = 0;
            kernelW_ = 0;
            group_ = 1;
            stride_ = 1;
            strideH_ = 0;
            strideW_ = 0;
            weightFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
            biasFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
            engine_ = caffe.Loadcaffe.ConvolutionParameter.Engine.DEFAULT;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeUInt32(1, numOutput_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeBool(2, biasTerm_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeUInt32(3, pad_);
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                output.writeUInt32(4, kernelSize_);
            }
            if (((bitField0_ & 0x00000100) == 0x00000100)) {
                output.writeUInt32(5, group_);
            }
            if (((bitField0_ & 0x00000200) == 0x00000200)) {
                output.writeUInt32(6, stride_);
            }
            if (((bitField0_ & 0x00001000) == 0x00001000)) {
                output.writeMessage(7, weightFiller_);
            }
            if (((bitField0_ & 0x00002000) == 0x00002000)) {
                output.writeMessage(8, biasFiller_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                output.writeUInt32(9, padH_);
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                output.writeUInt32(10, padW_);
            }
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                output.writeUInt32(11, kernelH_);
            }
            if (((bitField0_ & 0x00000080) == 0x00000080)) {
                output.writeUInt32(12, kernelW_);
            }
            if (((bitField0_ & 0x00000400) == 0x00000400)) {
                output.writeUInt32(13, strideH_);
            }
            if (((bitField0_ & 0x00000800) == 0x00000800)) {
                output.writeUInt32(14, strideW_);
            }
            if (((bitField0_ & 0x00004000) == 0x00004000)) {
                output.writeEnum(15, engine_.getNumber());
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(1, numOutput_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(2, biasTerm_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(3, pad_);
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(4, kernelSize_);
            }
            if (((bitField0_ & 0x00000100) == 0x00000100)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(5, group_);
            }
            if (((bitField0_ & 0x00000200) == 0x00000200)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(6, stride_);
            }
            if (((bitField0_ & 0x00001000) == 0x00001000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(7, weightFiller_);
            }
            if (((bitField0_ & 0x00002000) == 0x00002000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(8, biasFiller_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(9, padH_);
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(10, padW_);
            }
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(11, kernelH_);
            }
            if (((bitField0_ & 0x00000080) == 0x00000080)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(12, kernelW_);
            }
            if (((bitField0_ & 0x00000400) == 0x00000400)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(13, strideH_);
            }
            if (((bitField0_ & 0x00000800) == 0x00000800)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(14, strideW_);
            }
            if (((bitField0_ & 0x00004000) == 0x00004000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeEnumSize(15, engine_.getNumber());
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.ConvolutionParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.ConvolutionParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.ConvolutionParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.ConvolutionParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.ConvolutionParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.ConvolutionParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.ConvolutionParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.ConvolutionParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.ConvolutionParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.ConvolutionParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.ConvolutionParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.ConvolutionParameter}
         *
         * <pre>
         * Message that stores parameters used by ConvolutionLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.ConvolutionParameter)
                caffe.Loadcaffe.ConvolutionParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_ConvolutionParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_ConvolutionParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.ConvolutionParameter.class, caffe.Loadcaffe.ConvolutionParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.ConvolutionParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                    getWeightFillerFieldBuilder();
                    getBiasFillerFieldBuilder();
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                numOutput_ = 0;
                bitField0_ = (bitField0_ & ~0x00000001);
                biasTerm_ = true;
                bitField0_ = (bitField0_ & ~0x00000002);
                pad_ = 0;
                bitField0_ = (bitField0_ & ~0x00000004);
                padH_ = 0;
                bitField0_ = (bitField0_ & ~0x00000008);
                padW_ = 0;
                bitField0_ = (bitField0_ & ~0x00000010);
                kernelSize_ = 0;
                bitField0_ = (bitField0_ & ~0x00000020);
                kernelH_ = 0;
                bitField0_ = (bitField0_ & ~0x00000040);
                kernelW_ = 0;
                bitField0_ = (bitField0_ & ~0x00000080);
                group_ = 1;
                bitField0_ = (bitField0_ & ~0x00000100);
                stride_ = 1;
                bitField0_ = (bitField0_ & ~0x00000200);
                strideH_ = 0;
                bitField0_ = (bitField0_ & ~0x00000400);
                strideW_ = 0;
                bitField0_ = (bitField0_ & ~0x00000800);
                if (weightFillerBuilder_ == null) {
                    weightFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
                } else {
                    weightFillerBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00001000);
                if (biasFillerBuilder_ == null) {
                    biasFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
                } else {
                    biasFillerBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00002000);
                engine_ = caffe.Loadcaffe.ConvolutionParameter.Engine.DEFAULT;
                bitField0_ = (bitField0_ & ~0x00004000);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_ConvolutionParameter_descriptor;
            }

            public caffe.Loadcaffe.ConvolutionParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.ConvolutionParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.ConvolutionParameter build() {
                caffe.Loadcaffe.ConvolutionParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.ConvolutionParameter buildPartial() {
                caffe.Loadcaffe.ConvolutionParameter result = new caffe.Loadcaffe.ConvolutionParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.numOutput_ = numOutput_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.biasTerm_ = biasTerm_;
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000004;
                }
                result.pad_ = pad_;
                if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
                    to_bitField0_ |= 0x00000008;
                }
                result.padH_ = padH_;
                if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
                    to_bitField0_ |= 0x00000010;
                }
                result.padW_ = padW_;
                if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
                    to_bitField0_ |= 0x00000020;
                }
                result.kernelSize_ = kernelSize_;
                if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
                    to_bitField0_ |= 0x00000040;
                }
                result.kernelH_ = kernelH_;
                if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
                    to_bitField0_ |= 0x00000080;
                }
                result.kernelW_ = kernelW_;
                if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
                    to_bitField0_ |= 0x00000100;
                }
                result.group_ = group_;
                if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
                    to_bitField0_ |= 0x00000200;
                }
                result.stride_ = stride_;
                if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
                    to_bitField0_ |= 0x00000400;
                }
                result.strideH_ = strideH_;
                if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
                    to_bitField0_ |= 0x00000800;
                }
                result.strideW_ = strideW_;
                if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
                    to_bitField0_ |= 0x00001000;
                }
                if (weightFillerBuilder_ == null) {
                    result.weightFiller_ = weightFiller_;
                } else {
                    result.weightFiller_ = weightFillerBuilder_.build();
                }
                if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
                    to_bitField0_ |= 0x00002000;
                }
                if (biasFillerBuilder_ == null) {
                    result.biasFiller_ = biasFiller_;
                } else {
                    result.biasFiller_ = biasFillerBuilder_.build();
                }
                if (((from_bitField0_ & 0x00004000) == 0x00004000)) {
                    to_bitField0_ |= 0x00004000;
                }
                result.engine_ = engine_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.ConvolutionParameter) {
                    return mergeFrom((caffe.Loadcaffe.ConvolutionParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.ConvolutionParameter other) {
                if (other == caffe.Loadcaffe.ConvolutionParameter.getDefaultInstance()) return this;
                if (other.hasNumOutput()) {
                    setNumOutput(other.getNumOutput());
                }
                if (other.hasBiasTerm()) {
                    setBiasTerm(other.getBiasTerm());
                }
                if (other.hasPad()) {
                    setPad(other.getPad());
                }
                if (other.hasPadH()) {
                    setPadH(other.getPadH());
                }
                if (other.hasPadW()) {
                    setPadW(other.getPadW());
                }
                if (other.hasKernelSize()) {
                    setKernelSize(other.getKernelSize());
                }
                if (other.hasKernelH()) {
                    setKernelH(other.getKernelH());
                }
                if (other.hasKernelW()) {
                    setKernelW(other.getKernelW());
                }
                if (other.hasGroup()) {
                    setGroup(other.getGroup());
                }
                if (other.hasStride()) {
                    setStride(other.getStride());
                }
                if (other.hasStrideH()) {
                    setStrideH(other.getStrideH());
                }
                if (other.hasStrideW()) {
                    setStrideW(other.getStrideW());
                }
                if (other.hasWeightFiller()) {
                    mergeWeightFiller(other.getWeightFiller());
                }
                if (other.hasBiasFiller()) {
                    mergeBiasFiller(other.getBiasFiller());
                }
                if (other.hasEngine()) {
                    setEngine(other.getEngine());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.ConvolutionParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.ConvolutionParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private int numOutput_ ;
            /**
             * <code>optional uint32 num_output = 1;</code>
             *
             * <pre>
             * The number of outputs for the layer
             * </pre>
             */
            public boolean hasNumOutput() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional uint32 num_output = 1;</code>
             *
             * <pre>
             * The number of outputs for the layer
             * </pre>
             */
            public int getNumOutput() {
                return numOutput_;
            }
            /**
             * <code>optional uint32 num_output = 1;</code>
             *
             * <pre>
             * The number of outputs for the layer
             * </pre>
             */
            public Builder setNumOutput(int value) {
                bitField0_ |= 0x00000001;
                numOutput_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 num_output = 1;</code>
             *
             * <pre>
             * The number of outputs for the layer
             * </pre>
             */
            public Builder clearNumOutput() {
                bitField0_ = (bitField0_ & ~0x00000001);
                numOutput_ = 0;
                onChanged();
                return this;
            }

            private boolean biasTerm_ = true;
            /**
             * <code>optional bool bias_term = 2 [default = true];</code>
             *
             * <pre>
             * whether to have bias terms
             * </pre>
             */
            public boolean hasBiasTerm() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional bool bias_term = 2 [default = true];</code>
             *
             * <pre>
             * whether to have bias terms
             * </pre>
             */
            public boolean getBiasTerm() {
                return biasTerm_;
            }
            /**
             * <code>optional bool bias_term = 2 [default = true];</code>
             *
             * <pre>
             * whether to have bias terms
             * </pre>
             */
            public Builder setBiasTerm(boolean value) {
                bitField0_ |= 0x00000002;
                biasTerm_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool bias_term = 2 [default = true];</code>
             *
             * <pre>
             * whether to have bias terms
             * </pre>
             */
            public Builder clearBiasTerm() {
                bitField0_ = (bitField0_ & ~0x00000002);
                biasTerm_ = true;
                onChanged();
                return this;
            }

            private int pad_ ;
            /**
             * <code>optional uint32 pad = 3 [default = 0];</code>
             *
             * <pre>
             * Pad, kernel size, and stride are all given as a single value for equal
             * dimensions in height and width or as Y, X pairs.
             * </pre>
             */
            public boolean hasPad() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional uint32 pad = 3 [default = 0];</code>
             *
             * <pre>
             * Pad, kernel size, and stride are all given as a single value for equal
             * dimensions in height and width or as Y, X pairs.
             * </pre>
             */
            public int getPad() {
                return pad_;
            }
            /**
             * <code>optional uint32 pad = 3 [default = 0];</code>
             *
             * <pre>
             * Pad, kernel size, and stride are all given as a single value for equal
             * dimensions in height and width or as Y, X pairs.
             * </pre>
             */
            public Builder setPad(int value) {
                bitField0_ |= 0x00000004;
                pad_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 pad = 3 [default = 0];</code>
             *
             * <pre>
             * Pad, kernel size, and stride are all given as a single value for equal
             * dimensions in height and width or as Y, X pairs.
             * </pre>
             */
            public Builder clearPad() {
                bitField0_ = (bitField0_ & ~0x00000004);
                pad_ = 0;
                onChanged();
                return this;
            }

            private int padH_ ;
            /**
             * <code>optional uint32 pad_h = 9 [default = 0];</code>
             *
             * <pre>
             * The padding height
             * </pre>
             */
            public boolean hasPadH() {
                return ((bitField0_ & 0x00000008) == 0x00000008);
            }
            /**
             * <code>optional uint32 pad_h = 9 [default = 0];</code>
             *
             * <pre>
             * The padding height
             * </pre>
             */
            public int getPadH() {
                return padH_;
            }
            /**
             * <code>optional uint32 pad_h = 9 [default = 0];</code>
             *
             * <pre>
             * The padding height
             * </pre>
             */
            public Builder setPadH(int value) {
                bitField0_ |= 0x00000008;
                padH_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 pad_h = 9 [default = 0];</code>
             *
             * <pre>
             * The padding height
             * </pre>
             */
            public Builder clearPadH() {
                bitField0_ = (bitField0_ & ~0x00000008);
                padH_ = 0;
                onChanged();
                return this;
            }

            private int padW_ ;
            /**
             * <code>optional uint32 pad_w = 10 [default = 0];</code>
             *
             * <pre>
             * The padding width
             * </pre>
             */
            public boolean hasPadW() {
                return ((bitField0_ & 0x00000010) == 0x00000010);
            }
            /**
             * <code>optional uint32 pad_w = 10 [default = 0];</code>
             *
             * <pre>
             * The padding width
             * </pre>
             */
            public int getPadW() {
                return padW_;
            }
            /**
             * <code>optional uint32 pad_w = 10 [default = 0];</code>
             *
             * <pre>
             * The padding width
             * </pre>
             */
            public Builder setPadW(int value) {
                bitField0_ |= 0x00000010;
                padW_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 pad_w = 10 [default = 0];</code>
             *
             * <pre>
             * The padding width
             * </pre>
             */
            public Builder clearPadW() {
                bitField0_ = (bitField0_ & ~0x00000010);
                padW_ = 0;
                onChanged();
                return this;
            }

            private int kernelSize_ ;
            /**
             * <code>optional uint32 kernel_size = 4;</code>
             *
             * <pre>
             * The kernel size (square)
             * </pre>
             */
            public boolean hasKernelSize() {
                return ((bitField0_ & 0x00000020) == 0x00000020);
            }
            /**
             * <code>optional uint32 kernel_size = 4;</code>
             *
             * <pre>
             * The kernel size (square)
             * </pre>
             */
            public int getKernelSize() {
                return kernelSize_;
            }
            /**
             * <code>optional uint32 kernel_size = 4;</code>
             *
             * <pre>
             * The kernel size (square)
             * </pre>
             */
            public Builder setKernelSize(int value) {
                bitField0_ |= 0x00000020;
                kernelSize_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 kernel_size = 4;</code>
             *
             * <pre>
             * The kernel size (square)
             * </pre>
             */
            public Builder clearKernelSize() {
                bitField0_ = (bitField0_ & ~0x00000020);
                kernelSize_ = 0;
                onChanged();
                return this;
            }

            private int kernelH_ ;
            /**
             * <code>optional uint32 kernel_h = 11;</code>
             *
             * <pre>
             * The kernel height
             * </pre>
             */
            public boolean hasKernelH() {
                return ((bitField0_ & 0x00000040) == 0x00000040);
            }
            /**
             * <code>optional uint32 kernel_h = 11;</code>
             *
             * <pre>
             * The kernel height
             * </pre>
             */
            public int getKernelH() {
                return kernelH_;
            }
            /**
             * <code>optional uint32 kernel_h = 11;</code>
             *
             * <pre>
             * The kernel height
             * </pre>
             */
            public Builder setKernelH(int value) {
                bitField0_ |= 0x00000040;
                kernelH_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 kernel_h = 11;</code>
             *
             * <pre>
             * The kernel height
             * </pre>
             */
            public Builder clearKernelH() {
                bitField0_ = (bitField0_ & ~0x00000040);
                kernelH_ = 0;
                onChanged();
                return this;
            }

            private int kernelW_ ;
            /**
             * <code>optional uint32 kernel_w = 12;</code>
             *
             * <pre>
             * The kernel width
             * </pre>
             */
            public boolean hasKernelW() {
                return ((bitField0_ & 0x00000080) == 0x00000080);
            }
            /**
             * <code>optional uint32 kernel_w = 12;</code>
             *
             * <pre>
             * The kernel width
             * </pre>
             */
            public int getKernelW() {
                return kernelW_;
            }
            /**
             * <code>optional uint32 kernel_w = 12;</code>
             *
             * <pre>
             * The kernel width
             * </pre>
             */
            public Builder setKernelW(int value) {
                bitField0_ |= 0x00000080;
                kernelW_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 kernel_w = 12;</code>
             *
             * <pre>
             * The kernel width
             * </pre>
             */
            public Builder clearKernelW() {
                bitField0_ = (bitField0_ & ~0x00000080);
                kernelW_ = 0;
                onChanged();
                return this;
            }

            private int group_ = 1;
            /**
             * <code>optional uint32 group = 5 [default = 1];</code>
             *
             * <pre>
             * The group size for group conv
             * </pre>
             */
            public boolean hasGroup() {
                return ((bitField0_ & 0x00000100) == 0x00000100);
            }
            /**
             * <code>optional uint32 group = 5 [default = 1];</code>
             *
             * <pre>
             * The group size for group conv
             * </pre>
             */
            public int getGroup() {
                return group_;
            }
            /**
             * <code>optional uint32 group = 5 [default = 1];</code>
             *
             * <pre>
             * The group size for group conv
             * </pre>
             */
            public Builder setGroup(int value) {
                bitField0_ |= 0x00000100;
                group_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 group = 5 [default = 1];</code>
             *
             * <pre>
             * The group size for group conv
             * </pre>
             */
            public Builder clearGroup() {
                bitField0_ = (bitField0_ & ~0x00000100);
                group_ = 1;
                onChanged();
                return this;
            }

            private int stride_ = 1;
            /**
             * <code>optional uint32 stride = 6 [default = 1];</code>
             *
             * <pre>
             * The stride (equal in Y, X)
             * </pre>
             */
            public boolean hasStride() {
                return ((bitField0_ & 0x00000200) == 0x00000200);
            }
            /**
             * <code>optional uint32 stride = 6 [default = 1];</code>
             *
             * <pre>
             * The stride (equal in Y, X)
             * </pre>
             */
            public int getStride() {
                return stride_;
            }
            /**
             * <code>optional uint32 stride = 6 [default = 1];</code>
             *
             * <pre>
             * The stride (equal in Y, X)
             * </pre>
             */
            public Builder setStride(int value) {
                bitField0_ |= 0x00000200;
                stride_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 stride = 6 [default = 1];</code>
             *
             * <pre>
             * The stride (equal in Y, X)
             * </pre>
             */
            public Builder clearStride() {
                bitField0_ = (bitField0_ & ~0x00000200);
                stride_ = 1;
                onChanged();
                return this;
            }

            private int strideH_ ;
            /**
             * <code>optional uint32 stride_h = 13;</code>
             *
             * <pre>
             * The stride height
             * </pre>
             */
            public boolean hasStrideH() {
                return ((bitField0_ & 0x00000400) == 0x00000400);
            }
            /**
             * <code>optional uint32 stride_h = 13;</code>
             *
             * <pre>
             * The stride height
             * </pre>
             */
            public int getStrideH() {
                return strideH_;
            }
            /**
             * <code>optional uint32 stride_h = 13;</code>
             *
             * <pre>
             * The stride height
             * </pre>
             */
            public Builder setStrideH(int value) {
                bitField0_ |= 0x00000400;
                strideH_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 stride_h = 13;</code>
             *
             * <pre>
             * The stride height
             * </pre>
             */
            public Builder clearStrideH() {
                bitField0_ = (bitField0_ & ~0x00000400);
                strideH_ = 0;
                onChanged();
                return this;
            }

            private int strideW_ ;
            /**
             * <code>optional uint32 stride_w = 14;</code>
             *
             * <pre>
             * The stride width
             * </pre>
             */
            public boolean hasStrideW() {
                return ((bitField0_ & 0x00000800) == 0x00000800);
            }
            /**
             * <code>optional uint32 stride_w = 14;</code>
             *
             * <pre>
             * The stride width
             * </pre>
             */
            public int getStrideW() {
                return strideW_;
            }
            /**
             * <code>optional uint32 stride_w = 14;</code>
             *
             * <pre>
             * The stride width
             * </pre>
             */
            public Builder setStrideW(int value) {
                bitField0_ |= 0x00000800;
                strideW_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 stride_w = 14;</code>
             *
             * <pre>
             * The stride width
             * </pre>
             */
            public Builder clearStrideW() {
                bitField0_ = (bitField0_ & ~0x00000800);
                strideW_ = 0;
                onChanged();
                return this;
            }

            private caffe.Loadcaffe.FillerParameter weightFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder> weightFillerBuilder_;
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 7;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public boolean hasWeightFiller() {
                return ((bitField0_ & 0x00001000) == 0x00001000);
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 7;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameter getWeightFiller() {
                if (weightFillerBuilder_ == null) {
                    return weightFiller_;
                } else {
                    return weightFillerBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 7;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public Builder setWeightFiller(caffe.Loadcaffe.FillerParameter value) {
                if (weightFillerBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    weightFiller_ = value;
                    onChanged();
                } else {
                    weightFillerBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00001000;
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 7;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public Builder setWeightFiller(
                    caffe.Loadcaffe.FillerParameter.Builder builderForValue) {
                if (weightFillerBuilder_ == null) {
                    weightFiller_ = builderForValue.build();
                    onChanged();
                } else {
                    weightFillerBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00001000;
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 7;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public Builder mergeWeightFiller(caffe.Loadcaffe.FillerParameter value) {
                if (weightFillerBuilder_ == null) {
                    if (((bitField0_ & 0x00001000) == 0x00001000) &&
                            weightFiller_ != caffe.Loadcaffe.FillerParameter.getDefaultInstance()) {
                        weightFiller_ =
                                caffe.Loadcaffe.FillerParameter.newBuilder(weightFiller_).mergeFrom(value).buildPartial();
                    } else {
                        weightFiller_ = value;
                    }
                    onChanged();
                } else {
                    weightFillerBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00001000;
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 7;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public Builder clearWeightFiller() {
                if (weightFillerBuilder_ == null) {
                    weightFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
                    onChanged();
                } else {
                    weightFillerBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00001000);
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 7;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameter.Builder getWeightFillerBuilder() {
                bitField0_ |= 0x00001000;
                onChanged();
                return getWeightFillerFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 7;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameterOrBuilder getWeightFillerOrBuilder() {
                if (weightFillerBuilder_ != null) {
                    return weightFillerBuilder_.getMessageOrBuilder();
                } else {
                    return weightFiller_;
                }
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 7;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder>
            getWeightFillerFieldBuilder() {
                if (weightFillerBuilder_ == null) {
                    weightFillerBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder>(
                            getWeightFiller(),
                            getParentForChildren(),
                            isClean());
                    weightFiller_ = null;
                }
                return weightFillerBuilder_;
            }

            private caffe.Loadcaffe.FillerParameter biasFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder> biasFillerBuilder_;
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 8;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public boolean hasBiasFiller() {
                return ((bitField0_ & 0x00002000) == 0x00002000);
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 8;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameter getBiasFiller() {
                if (biasFillerBuilder_ == null) {
                    return biasFiller_;
                } else {
                    return biasFillerBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 8;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public Builder setBiasFiller(caffe.Loadcaffe.FillerParameter value) {
                if (biasFillerBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    biasFiller_ = value;
                    onChanged();
                } else {
                    biasFillerBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00002000;
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 8;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public Builder setBiasFiller(
                    caffe.Loadcaffe.FillerParameter.Builder builderForValue) {
                if (biasFillerBuilder_ == null) {
                    biasFiller_ = builderForValue.build();
                    onChanged();
                } else {
                    biasFillerBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00002000;
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 8;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public Builder mergeBiasFiller(caffe.Loadcaffe.FillerParameter value) {
                if (biasFillerBuilder_ == null) {
                    if (((bitField0_ & 0x00002000) == 0x00002000) &&
                            biasFiller_ != caffe.Loadcaffe.FillerParameter.getDefaultInstance()) {
                        biasFiller_ =
                                caffe.Loadcaffe.FillerParameter.newBuilder(biasFiller_).mergeFrom(value).buildPartial();
                    } else {
                        biasFiller_ = value;
                    }
                    onChanged();
                } else {
                    biasFillerBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00002000;
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 8;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public Builder clearBiasFiller() {
                if (biasFillerBuilder_ == null) {
                    biasFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
                    onChanged();
                } else {
                    biasFillerBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00002000);
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 8;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameter.Builder getBiasFillerBuilder() {
                bitField0_ |= 0x00002000;
                onChanged();
                return getBiasFillerFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 8;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameterOrBuilder getBiasFillerOrBuilder() {
                if (biasFillerBuilder_ != null) {
                    return biasFillerBuilder_.getMessageOrBuilder();
                } else {
                    return biasFiller_;
                }
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 8;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder>
            getBiasFillerFieldBuilder() {
                if (biasFillerBuilder_ == null) {
                    biasFillerBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder>(
                            getBiasFiller(),
                            getParentForChildren(),
                            isClean());
                    biasFiller_ = null;
                }
                return biasFillerBuilder_;
            }

            private caffe.Loadcaffe.ConvolutionParameter.Engine engine_ = caffe.Loadcaffe.ConvolutionParameter.Engine.DEFAULT;
            /**
             * <code>optional .caffe.ConvolutionParameter.Engine engine = 15 [default = DEFAULT];</code>
             */
            public boolean hasEngine() {
                return ((bitField0_ & 0x00004000) == 0x00004000);
            }
            /**
             * <code>optional .caffe.ConvolutionParameter.Engine engine = 15 [default = DEFAULT];</code>
             */
            public caffe.Loadcaffe.ConvolutionParameter.Engine getEngine() {
                return engine_;
            }
            /**
             * <code>optional .caffe.ConvolutionParameter.Engine engine = 15 [default = DEFAULT];</code>
             */
            public Builder setEngine(caffe.Loadcaffe.ConvolutionParameter.Engine value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00004000;
                engine_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional .caffe.ConvolutionParameter.Engine engine = 15 [default = DEFAULT];</code>
             */
            public Builder clearEngine() {
                bitField0_ = (bitField0_ & ~0x00004000);
                engine_ = caffe.Loadcaffe.ConvolutionParameter.Engine.DEFAULT;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.ConvolutionParameter)
        }

        static {
            defaultInstance = new ConvolutionParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.ConvolutionParameter)
    }

    public interface DataParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.DataParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        boolean hasSource();
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        java.lang.String getSource();
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        com.google.protobuf.ByteString
        getSourceBytes();

        /**
         * <code>optional uint32 batch_size = 4;</code>
         *
         * <pre>
         * Specify the batch size.
         * </pre>
         */
        boolean hasBatchSize();
        /**
         * <code>optional uint32 batch_size = 4;</code>
         *
         * <pre>
         * Specify the batch size.
         * </pre>
         */
        int getBatchSize();

        /**
         * <code>optional uint32 rand_skip = 7 [default = 0];</code>
         *
         * <pre>
         * The rand_skip variable is for the data layer to skip a few data points
         * to avoid all asynchronous sgd clients to start at the same point. The skip
         * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
         * be larger than the number of keys in the database.
         * </pre>
         */
        boolean hasRandSkip();
        /**
         * <code>optional uint32 rand_skip = 7 [default = 0];</code>
         *
         * <pre>
         * The rand_skip variable is for the data layer to skip a few data points
         * to avoid all asynchronous sgd clients to start at the same point. The skip
         * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
         * be larger than the number of keys in the database.
         * </pre>
         */
        int getRandSkip();

        /**
         * <code>optional .caffe.DataParameter.DB backend = 8 [default = LEVELDB];</code>
         */
        boolean hasBackend();
        /**
         * <code>optional .caffe.DataParameter.DB backend = 8 [default = LEVELDB];</code>
         */
        caffe.Loadcaffe.DataParameter.DB getBackend();

        /**
         * <code>optional float scale = 2 [default = 1];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. For data pre-processing, we can do
         * simple scaling and subtracting the data mean, if provided. Note that the
         * mean subtraction is always carried out before scaling.
         * </pre>
         */
        boolean hasScale();
        /**
         * <code>optional float scale = 2 [default = 1];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. For data pre-processing, we can do
         * simple scaling and subtracting the data mean, if provided. Note that the
         * mean subtraction is always carried out before scaling.
         * </pre>
         */
        float getScale();

        /**
         * <code>optional string mean_file = 3;</code>
         */
        boolean hasMeanFile();
        /**
         * <code>optional string mean_file = 3;</code>
         */
        java.lang.String getMeanFile();
        /**
         * <code>optional string mean_file = 3;</code>
         */
        com.google.protobuf.ByteString
        getMeanFileBytes();

        /**
         * <code>optional uint32 crop_size = 5 [default = 0];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. Specify if we would like to randomly
         * crop an image.
         * </pre>
         */
        boolean hasCropSize();
        /**
         * <code>optional uint32 crop_size = 5 [default = 0];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. Specify if we would like to randomly
         * crop an image.
         * </pre>
         */
        int getCropSize();

        /**
         * <code>optional bool mirror = 6 [default = false];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. Specify if we want to randomly mirror
         * data.
         * </pre>
         */
        boolean hasMirror();
        /**
         * <code>optional bool mirror = 6 [default = false];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. Specify if we want to randomly mirror
         * data.
         * </pre>
         */
        boolean getMirror();

        /**
         * <code>optional bool force_encoded_color = 9 [default = false];</code>
         *
         * <pre>
         * Force the encoded image to have 3 color channels
         * </pre>
         */
        boolean hasForceEncodedColor();
        /**
         * <code>optional bool force_encoded_color = 9 [default = false];</code>
         *
         * <pre>
         * Force the encoded image to have 3 color channels
         * </pre>
         */
        boolean getForceEncodedColor();
    }
    /**
     * Protobuf type {@code caffe.DataParameter}
     *
     * <pre>
     * Message that stores parameters used by DataLayer
     * </pre>
     */
    public static final class DataParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.DataParameter)
            DataParameterOrBuilder {
        // Use DataParameter.newBuilder() to construct.
        private DataParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private DataParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final DataParameter defaultInstance;
        public static DataParameter getDefaultInstance() {
            return defaultInstance;
        }

        public DataParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private DataParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 10: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000001;
                            source_ = bs;
                            break;
                        }
                        case 21: {
                            bitField0_ |= 0x00000010;
                            scale_ = input.readFloat();
                            break;
                        }
                        case 26: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000020;
                            meanFile_ = bs;
                            break;
                        }
                        case 32: {
                            bitField0_ |= 0x00000002;
                            batchSize_ = input.readUInt32();
                            break;
                        }
                        case 40: {
                            bitField0_ |= 0x00000040;
                            cropSize_ = input.readUInt32();
                            break;
                        }
                        case 48: {
                            bitField0_ |= 0x00000080;
                            mirror_ = input.readBool();
                            break;
                        }
                        case 56: {
                            bitField0_ |= 0x00000004;
                            randSkip_ = input.readUInt32();
                            break;
                        }
                        case 64: {
                            int rawValue = input.readEnum();
                            caffe.Loadcaffe.DataParameter.DB value = caffe.Loadcaffe.DataParameter.DB.valueOf(rawValue);
                            if (value == null) {
                                unknownFields.mergeVarintField(8, rawValue);
                            } else {
                                bitField0_ |= 0x00000008;
                                backend_ = value;
                            }
                            break;
                        }
                        case 72: {
                            bitField0_ |= 0x00000100;
                            forceEncodedColor_ = input.readBool();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_DataParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_DataParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.DataParameter.class, caffe.Loadcaffe.DataParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<DataParameter> PARSER =
                new com.google.protobuf.AbstractParser<DataParameter>() {
                    public DataParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new DataParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<DataParameter> getParserForType() {
            return PARSER;
        }

        /**
         * Protobuf enum {@code caffe.DataParameter.DB}
         */
        public enum DB
                implements com.google.protobuf.ProtocolMessageEnum {
            /**
             * <code>LEVELDB = 0;</code>
             */
            LEVELDB(0, 0),
            /**
             * <code>LMDB = 1;</code>
             */
            LMDB(1, 1),
            ;

            /**
             * <code>LEVELDB = 0;</code>
             */
            public static final int LEVELDB_VALUE = 0;
            /**
             * <code>LMDB = 1;</code>
             */
            public static final int LMDB_VALUE = 1;


            public final int getNumber() { return value; }

            public static DB valueOf(int value) {
                switch (value) {
                    case 0: return LEVELDB;
                    case 1: return LMDB;
                    default: return null;
                }
            }

            public static com.google.protobuf.Internal.EnumLiteMap<DB>
            internalGetValueMap() {
                return internalValueMap;
            }
            private static com.google.protobuf.Internal.EnumLiteMap<DB>
                    internalValueMap =
                    new com.google.protobuf.Internal.EnumLiteMap<DB>() {
                        public DB findValueByNumber(int number) {
                            return DB.valueOf(number);
                        }
                    };

            public final com.google.protobuf.Descriptors.EnumValueDescriptor
            getValueDescriptor() {
                return getDescriptor().getValues().get(index);
            }
            public final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptorForType() {
                return getDescriptor();
            }
            public static final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptor() {
                return caffe.Loadcaffe.DataParameter.getDescriptor().getEnumTypes().get(0);
            }

            private static final DB[] VALUES = values();

            public static DB valueOf(
                    com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new java.lang.IllegalArgumentException(
                            "EnumValueDescriptor is not for this type.");
                }
                return VALUES[desc.getIndex()];
            }

            private final int index;
            private final int value;

            private DB(int index, int value) {
                this.index = index;
                this.value = value;
            }

            // @@protoc_insertion_point(enum_scope:caffe.DataParameter.DB)
        }

        private int bitField0_;
        public static final int SOURCE_FIELD_NUMBER = 1;
        private java.lang.Object source_;
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        public boolean hasSource() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        public java.lang.String getSource() {
            java.lang.Object ref = source_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    source_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        public com.google.protobuf.ByteString
        getSourceBytes() {
            java.lang.Object ref = source_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                source_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int BATCH_SIZE_FIELD_NUMBER = 4;
        private int batchSize_;
        /**
         * <code>optional uint32 batch_size = 4;</code>
         *
         * <pre>
         * Specify the batch size.
         * </pre>
         */
        public boolean hasBatchSize() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional uint32 batch_size = 4;</code>
         *
         * <pre>
         * Specify the batch size.
         * </pre>
         */
        public int getBatchSize() {
            return batchSize_;
        }

        public static final int RAND_SKIP_FIELD_NUMBER = 7;
        private int randSkip_;
        /**
         * <code>optional uint32 rand_skip = 7 [default = 0];</code>
         *
         * <pre>
         * The rand_skip variable is for the data layer to skip a few data points
         * to avoid all asynchronous sgd clients to start at the same point. The skip
         * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
         * be larger than the number of keys in the database.
         * </pre>
         */
        public boolean hasRandSkip() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional uint32 rand_skip = 7 [default = 0];</code>
         *
         * <pre>
         * The rand_skip variable is for the data layer to skip a few data points
         * to avoid all asynchronous sgd clients to start at the same point. The skip
         * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
         * be larger than the number of keys in the database.
         * </pre>
         */
        public int getRandSkip() {
            return randSkip_;
        }

        public static final int BACKEND_FIELD_NUMBER = 8;
        private caffe.Loadcaffe.DataParameter.DB backend_;
        /**
         * <code>optional .caffe.DataParameter.DB backend = 8 [default = LEVELDB];</code>
         */
        public boolean hasBackend() {
            return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional .caffe.DataParameter.DB backend = 8 [default = LEVELDB];</code>
         */
        public caffe.Loadcaffe.DataParameter.DB getBackend() {
            return backend_;
        }

        public static final int SCALE_FIELD_NUMBER = 2;
        private float scale_;
        /**
         * <code>optional float scale = 2 [default = 1];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. For data pre-processing, we can do
         * simple scaling and subtracting the data mean, if provided. Note that the
         * mean subtraction is always carried out before scaling.
         * </pre>
         */
        public boolean hasScale() {
            return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>optional float scale = 2 [default = 1];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. For data pre-processing, we can do
         * simple scaling and subtracting the data mean, if provided. Note that the
         * mean subtraction is always carried out before scaling.
         * </pre>
         */
        public float getScale() {
            return scale_;
        }

        public static final int MEAN_FILE_FIELD_NUMBER = 3;
        private java.lang.Object meanFile_;
        /**
         * <code>optional string mean_file = 3;</code>
         */
        public boolean hasMeanFile() {
            return ((bitField0_ & 0x00000020) == 0x00000020);
        }
        /**
         * <code>optional string mean_file = 3;</code>
         */
        public java.lang.String getMeanFile() {
            java.lang.Object ref = meanFile_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    meanFile_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string mean_file = 3;</code>
         */
        public com.google.protobuf.ByteString
        getMeanFileBytes() {
            java.lang.Object ref = meanFile_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                meanFile_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int CROP_SIZE_FIELD_NUMBER = 5;
        private int cropSize_;
        /**
         * <code>optional uint32 crop_size = 5 [default = 0];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. Specify if we would like to randomly
         * crop an image.
         * </pre>
         */
        public boolean hasCropSize() {
            return ((bitField0_ & 0x00000040) == 0x00000040);
        }
        /**
         * <code>optional uint32 crop_size = 5 [default = 0];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. Specify if we would like to randomly
         * crop an image.
         * </pre>
         */
        public int getCropSize() {
            return cropSize_;
        }

        public static final int MIRROR_FIELD_NUMBER = 6;
        private boolean mirror_;
        /**
         * <code>optional bool mirror = 6 [default = false];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. Specify if we want to randomly mirror
         * data.
         * </pre>
         */
        public boolean hasMirror() {
            return ((bitField0_ & 0x00000080) == 0x00000080);
        }
        /**
         * <code>optional bool mirror = 6 [default = false];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. Specify if we want to randomly mirror
         * data.
         * </pre>
         */
        public boolean getMirror() {
            return mirror_;
        }

        public static final int FORCE_ENCODED_COLOR_FIELD_NUMBER = 9;
        private boolean forceEncodedColor_;
        /**
         * <code>optional bool force_encoded_color = 9 [default = false];</code>
         *
         * <pre>
         * Force the encoded image to have 3 color channels
         * </pre>
         */
        public boolean hasForceEncodedColor() {
            return ((bitField0_ & 0x00000100) == 0x00000100);
        }
        /**
         * <code>optional bool force_encoded_color = 9 [default = false];</code>
         *
         * <pre>
         * Force the encoded image to have 3 color channels
         * </pre>
         */
        public boolean getForceEncodedColor() {
            return forceEncodedColor_;
        }

        private void initFields() {
            source_ = "";
            batchSize_ = 0;
            randSkip_ = 0;
            backend_ = caffe.Loadcaffe.DataParameter.DB.LEVELDB;
            scale_ = 1F;
            meanFile_ = "";
            cropSize_ = 0;
            mirror_ = false;
            forceEncodedColor_ = false;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeBytes(1, getSourceBytes());
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                output.writeFloat(2, scale_);
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                output.writeBytes(3, getMeanFileBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeUInt32(4, batchSize_);
            }
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                output.writeUInt32(5, cropSize_);
            }
            if (((bitField0_ & 0x00000080) == 0x00000080)) {
                output.writeBool(6, mirror_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeUInt32(7, randSkip_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                output.writeEnum(8, backend_.getNumber());
            }
            if (((bitField0_ & 0x00000100) == 0x00000100)) {
                output.writeBool(9, forceEncodedColor_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(1, getSourceBytes());
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(2, scale_);
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(3, getMeanFileBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(4, batchSize_);
            }
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(5, cropSize_);
            }
            if (((bitField0_ & 0x00000080) == 0x00000080)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(6, mirror_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(7, randSkip_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeEnumSize(8, backend_.getNumber());
            }
            if (((bitField0_ & 0x00000100) == 0x00000100)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(9, forceEncodedColor_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.DataParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.DataParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.DataParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.DataParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.DataParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.DataParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.DataParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.DataParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.DataParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.DataParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.DataParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.DataParameter}
         *
         * <pre>
         * Message that stores parameters used by DataLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.DataParameter)
                caffe.Loadcaffe.DataParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_DataParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_DataParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.DataParameter.class, caffe.Loadcaffe.DataParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.DataParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                source_ = "";
                bitField0_ = (bitField0_ & ~0x00000001);
                batchSize_ = 0;
                bitField0_ = (bitField0_ & ~0x00000002);
                randSkip_ = 0;
                bitField0_ = (bitField0_ & ~0x00000004);
                backend_ = caffe.Loadcaffe.DataParameter.DB.LEVELDB;
                bitField0_ = (bitField0_ & ~0x00000008);
                scale_ = 1F;
                bitField0_ = (bitField0_ & ~0x00000010);
                meanFile_ = "";
                bitField0_ = (bitField0_ & ~0x00000020);
                cropSize_ = 0;
                bitField0_ = (bitField0_ & ~0x00000040);
                mirror_ = false;
                bitField0_ = (bitField0_ & ~0x00000080);
                forceEncodedColor_ = false;
                bitField0_ = (bitField0_ & ~0x00000100);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_DataParameter_descriptor;
            }

            public caffe.Loadcaffe.DataParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.DataParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.DataParameter build() {
                caffe.Loadcaffe.DataParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.DataParameter buildPartial() {
                caffe.Loadcaffe.DataParameter result = new caffe.Loadcaffe.DataParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.source_ = source_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.batchSize_ = batchSize_;
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000004;
                }
                result.randSkip_ = randSkip_;
                if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
                    to_bitField0_ |= 0x00000008;
                }
                result.backend_ = backend_;
                if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
                    to_bitField0_ |= 0x00000010;
                }
                result.scale_ = scale_;
                if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
                    to_bitField0_ |= 0x00000020;
                }
                result.meanFile_ = meanFile_;
                if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
                    to_bitField0_ |= 0x00000040;
                }
                result.cropSize_ = cropSize_;
                if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
                    to_bitField0_ |= 0x00000080;
                }
                result.mirror_ = mirror_;
                if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
                    to_bitField0_ |= 0x00000100;
                }
                result.forceEncodedColor_ = forceEncodedColor_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.DataParameter) {
                    return mergeFrom((caffe.Loadcaffe.DataParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.DataParameter other) {
                if (other == caffe.Loadcaffe.DataParameter.getDefaultInstance()) return this;
                if (other.hasSource()) {
                    bitField0_ |= 0x00000001;
                    source_ = other.source_;
                    onChanged();
                }
                if (other.hasBatchSize()) {
                    setBatchSize(other.getBatchSize());
                }
                if (other.hasRandSkip()) {
                    setRandSkip(other.getRandSkip());
                }
                if (other.hasBackend()) {
                    setBackend(other.getBackend());
                }
                if (other.hasScale()) {
                    setScale(other.getScale());
                }
                if (other.hasMeanFile()) {
                    bitField0_ |= 0x00000020;
                    meanFile_ = other.meanFile_;
                    onChanged();
                }
                if (other.hasCropSize()) {
                    setCropSize(other.getCropSize());
                }
                if (other.hasMirror()) {
                    setMirror(other.getMirror());
                }
                if (other.hasForceEncodedColor()) {
                    setForceEncodedColor(other.getForceEncodedColor());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.DataParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.DataParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private java.lang.Object source_ = "";
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public boolean hasSource() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public java.lang.String getSource() {
                java.lang.Object ref = source_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        source_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public com.google.protobuf.ByteString
            getSourceBytes() {
                java.lang.Object ref = source_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    source_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public Builder setSource(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                source_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public Builder clearSource() {
                bitField0_ = (bitField0_ & ~0x00000001);
                source_ = getDefaultInstance().getSource();
                onChanged();
                return this;
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public Builder setSourceBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                source_ = value;
                onChanged();
                return this;
            }

            private int batchSize_ ;
            /**
             * <code>optional uint32 batch_size = 4;</code>
             *
             * <pre>
             * Specify the batch size.
             * </pre>
             */
            public boolean hasBatchSize() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional uint32 batch_size = 4;</code>
             *
             * <pre>
             * Specify the batch size.
             * </pre>
             */
            public int getBatchSize() {
                return batchSize_;
            }
            /**
             * <code>optional uint32 batch_size = 4;</code>
             *
             * <pre>
             * Specify the batch size.
             * </pre>
             */
            public Builder setBatchSize(int value) {
                bitField0_ |= 0x00000002;
                batchSize_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 batch_size = 4;</code>
             *
             * <pre>
             * Specify the batch size.
             * </pre>
             */
            public Builder clearBatchSize() {
                bitField0_ = (bitField0_ & ~0x00000002);
                batchSize_ = 0;
                onChanged();
                return this;
            }

            private int randSkip_ ;
            /**
             * <code>optional uint32 rand_skip = 7 [default = 0];</code>
             *
             * <pre>
             * The rand_skip variable is for the data layer to skip a few data points
             * to avoid all asynchronous sgd clients to start at the same point. The skip
             * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
             * be larger than the number of keys in the database.
             * </pre>
             */
            public boolean hasRandSkip() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional uint32 rand_skip = 7 [default = 0];</code>
             *
             * <pre>
             * The rand_skip variable is for the data layer to skip a few data points
             * to avoid all asynchronous sgd clients to start at the same point. The skip
             * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
             * be larger than the number of keys in the database.
             * </pre>
             */
            public int getRandSkip() {
                return randSkip_;
            }
            /**
             * <code>optional uint32 rand_skip = 7 [default = 0];</code>
             *
             * <pre>
             * The rand_skip variable is for the data layer to skip a few data points
             * to avoid all asynchronous sgd clients to start at the same point. The skip
             * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
             * be larger than the number of keys in the database.
             * </pre>
             */
            public Builder setRandSkip(int value) {
                bitField0_ |= 0x00000004;
                randSkip_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 rand_skip = 7 [default = 0];</code>
             *
             * <pre>
             * The rand_skip variable is for the data layer to skip a few data points
             * to avoid all asynchronous sgd clients to start at the same point. The skip
             * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
             * be larger than the number of keys in the database.
             * </pre>
             */
            public Builder clearRandSkip() {
                bitField0_ = (bitField0_ & ~0x00000004);
                randSkip_ = 0;
                onChanged();
                return this;
            }

            private caffe.Loadcaffe.DataParameter.DB backend_ = caffe.Loadcaffe.DataParameter.DB.LEVELDB;
            /**
             * <code>optional .caffe.DataParameter.DB backend = 8 [default = LEVELDB];</code>
             */
            public boolean hasBackend() {
                return ((bitField0_ & 0x00000008) == 0x00000008);
            }
            /**
             * <code>optional .caffe.DataParameter.DB backend = 8 [default = LEVELDB];</code>
             */
            public caffe.Loadcaffe.DataParameter.DB getBackend() {
                return backend_;
            }
            /**
             * <code>optional .caffe.DataParameter.DB backend = 8 [default = LEVELDB];</code>
             */
            public Builder setBackend(caffe.Loadcaffe.DataParameter.DB value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000008;
                backend_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional .caffe.DataParameter.DB backend = 8 [default = LEVELDB];</code>
             */
            public Builder clearBackend() {
                bitField0_ = (bitField0_ & ~0x00000008);
                backend_ = caffe.Loadcaffe.DataParameter.DB.LEVELDB;
                onChanged();
                return this;
            }

            private float scale_ = 1F;
            /**
             * <code>optional float scale = 2 [default = 1];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. For data pre-processing, we can do
             * simple scaling and subtracting the data mean, if provided. Note that the
             * mean subtraction is always carried out before scaling.
             * </pre>
             */
            public boolean hasScale() {
                return ((bitField0_ & 0x00000010) == 0x00000010);
            }
            /**
             * <code>optional float scale = 2 [default = 1];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. For data pre-processing, we can do
             * simple scaling and subtracting the data mean, if provided. Note that the
             * mean subtraction is always carried out before scaling.
             * </pre>
             */
            public float getScale() {
                return scale_;
            }
            /**
             * <code>optional float scale = 2 [default = 1];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. For data pre-processing, we can do
             * simple scaling and subtracting the data mean, if provided. Note that the
             * mean subtraction is always carried out before scaling.
             * </pre>
             */
            public Builder setScale(float value) {
                bitField0_ |= 0x00000010;
                scale_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float scale = 2 [default = 1];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. For data pre-processing, we can do
             * simple scaling and subtracting the data mean, if provided. Note that the
             * mean subtraction is always carried out before scaling.
             * </pre>
             */
            public Builder clearScale() {
                bitField0_ = (bitField0_ & ~0x00000010);
                scale_ = 1F;
                onChanged();
                return this;
            }

            private java.lang.Object meanFile_ = "";
            /**
             * <code>optional string mean_file = 3;</code>
             */
            public boolean hasMeanFile() {
                return ((bitField0_ & 0x00000020) == 0x00000020);
            }
            /**
             * <code>optional string mean_file = 3;</code>
             */
            public java.lang.String getMeanFile() {
                java.lang.Object ref = meanFile_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        meanFile_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string mean_file = 3;</code>
             */
            public com.google.protobuf.ByteString
            getMeanFileBytes() {
                java.lang.Object ref = meanFile_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    meanFile_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string mean_file = 3;</code>
             */
            public Builder setMeanFile(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000020;
                meanFile_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string mean_file = 3;</code>
             */
            public Builder clearMeanFile() {
                bitField0_ = (bitField0_ & ~0x00000020);
                meanFile_ = getDefaultInstance().getMeanFile();
                onChanged();
                return this;
            }
            /**
             * <code>optional string mean_file = 3;</code>
             */
            public Builder setMeanFileBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000020;
                meanFile_ = value;
                onChanged();
                return this;
            }

            private int cropSize_ ;
            /**
             * <code>optional uint32 crop_size = 5 [default = 0];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. Specify if we would like to randomly
             * crop an image.
             * </pre>
             */
            public boolean hasCropSize() {
                return ((bitField0_ & 0x00000040) == 0x00000040);
            }
            /**
             * <code>optional uint32 crop_size = 5 [default = 0];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. Specify if we would like to randomly
             * crop an image.
             * </pre>
             */
            public int getCropSize() {
                return cropSize_;
            }
            /**
             * <code>optional uint32 crop_size = 5 [default = 0];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. Specify if we would like to randomly
             * crop an image.
             * </pre>
             */
            public Builder setCropSize(int value) {
                bitField0_ |= 0x00000040;
                cropSize_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 crop_size = 5 [default = 0];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. Specify if we would like to randomly
             * crop an image.
             * </pre>
             */
            public Builder clearCropSize() {
                bitField0_ = (bitField0_ & ~0x00000040);
                cropSize_ = 0;
                onChanged();
                return this;
            }

            private boolean mirror_ ;
            /**
             * <code>optional bool mirror = 6 [default = false];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. Specify if we want to randomly mirror
             * data.
             * </pre>
             */
            public boolean hasMirror() {
                return ((bitField0_ & 0x00000080) == 0x00000080);
            }
            /**
             * <code>optional bool mirror = 6 [default = false];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. Specify if we want to randomly mirror
             * data.
             * </pre>
             */
            public boolean getMirror() {
                return mirror_;
            }
            /**
             * <code>optional bool mirror = 6 [default = false];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. Specify if we want to randomly mirror
             * data.
             * </pre>
             */
            public Builder setMirror(boolean value) {
                bitField0_ |= 0x00000080;
                mirror_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool mirror = 6 [default = false];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. Specify if we want to randomly mirror
             * data.
             * </pre>
             */
            public Builder clearMirror() {
                bitField0_ = (bitField0_ & ~0x00000080);
                mirror_ = false;
                onChanged();
                return this;
            }

            private boolean forceEncodedColor_ ;
            /**
             * <code>optional bool force_encoded_color = 9 [default = false];</code>
             *
             * <pre>
             * Force the encoded image to have 3 color channels
             * </pre>
             */
            public boolean hasForceEncodedColor() {
                return ((bitField0_ & 0x00000100) == 0x00000100);
            }
            /**
             * <code>optional bool force_encoded_color = 9 [default = false];</code>
             *
             * <pre>
             * Force the encoded image to have 3 color channels
             * </pre>
             */
            public boolean getForceEncodedColor() {
                return forceEncodedColor_;
            }
            /**
             * <code>optional bool force_encoded_color = 9 [default = false];</code>
             *
             * <pre>
             * Force the encoded image to have 3 color channels
             * </pre>
             */
            public Builder setForceEncodedColor(boolean value) {
                bitField0_ |= 0x00000100;
                forceEncodedColor_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool force_encoded_color = 9 [default = false];</code>
             *
             * <pre>
             * Force the encoded image to have 3 color channels
             * </pre>
             */
            public Builder clearForceEncodedColor() {
                bitField0_ = (bitField0_ & ~0x00000100);
                forceEncodedColor_ = false;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.DataParameter)
        }

        static {
            defaultInstance = new DataParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.DataParameter)
    }

    public interface DropoutParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.DropoutParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional float dropout_ratio = 1 [default = 0.5];</code>
         *
         * <pre>
         * dropout ratio
         * </pre>
         */
        boolean hasDropoutRatio();
        /**
         * <code>optional float dropout_ratio = 1 [default = 0.5];</code>
         *
         * <pre>
         * dropout ratio
         * </pre>
         */
        float getDropoutRatio();
    }
    /**
     * Protobuf type {@code caffe.DropoutParameter}
     *
     * <pre>
     * Message that stores parameters used by DropoutLayer
     * </pre>
     */
    public static final class DropoutParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.DropoutParameter)
            DropoutParameterOrBuilder {
        // Use DropoutParameter.newBuilder() to construct.
        private DropoutParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private DropoutParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final DropoutParameter defaultInstance;
        public static DropoutParameter getDefaultInstance() {
            return defaultInstance;
        }

        public DropoutParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private DropoutParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 13: {
                            bitField0_ |= 0x00000001;
                            dropoutRatio_ = input.readFloat();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_DropoutParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_DropoutParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.DropoutParameter.class, caffe.Loadcaffe.DropoutParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<DropoutParameter> PARSER =
                new com.google.protobuf.AbstractParser<DropoutParameter>() {
                    public DropoutParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new DropoutParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<DropoutParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int DROPOUT_RATIO_FIELD_NUMBER = 1;
        private float dropoutRatio_;
        /**
         * <code>optional float dropout_ratio = 1 [default = 0.5];</code>
         *
         * <pre>
         * dropout ratio
         * </pre>
         */
        public boolean hasDropoutRatio() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional float dropout_ratio = 1 [default = 0.5];</code>
         *
         * <pre>
         * dropout ratio
         * </pre>
         */
        public float getDropoutRatio() {
            return dropoutRatio_;
        }

        private void initFields() {
            dropoutRatio_ = 0.5F;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeFloat(1, dropoutRatio_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(1, dropoutRatio_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.DropoutParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.DropoutParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.DropoutParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.DropoutParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.DropoutParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.DropoutParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.DropoutParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.DropoutParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.DropoutParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.DropoutParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.DropoutParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.DropoutParameter}
         *
         * <pre>
         * Message that stores parameters used by DropoutLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.DropoutParameter)
                caffe.Loadcaffe.DropoutParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_DropoutParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_DropoutParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.DropoutParameter.class, caffe.Loadcaffe.DropoutParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.DropoutParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                dropoutRatio_ = 0.5F;
                bitField0_ = (bitField0_ & ~0x00000001);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_DropoutParameter_descriptor;
            }

            public caffe.Loadcaffe.DropoutParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.DropoutParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.DropoutParameter build() {
                caffe.Loadcaffe.DropoutParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.DropoutParameter buildPartial() {
                caffe.Loadcaffe.DropoutParameter result = new caffe.Loadcaffe.DropoutParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.dropoutRatio_ = dropoutRatio_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.DropoutParameter) {
                    return mergeFrom((caffe.Loadcaffe.DropoutParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.DropoutParameter other) {
                if (other == caffe.Loadcaffe.DropoutParameter.getDefaultInstance()) return this;
                if (other.hasDropoutRatio()) {
                    setDropoutRatio(other.getDropoutRatio());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.DropoutParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.DropoutParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private float dropoutRatio_ = 0.5F;
            /**
             * <code>optional float dropout_ratio = 1 [default = 0.5];</code>
             *
             * <pre>
             * dropout ratio
             * </pre>
             */
            public boolean hasDropoutRatio() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional float dropout_ratio = 1 [default = 0.5];</code>
             *
             * <pre>
             * dropout ratio
             * </pre>
             */
            public float getDropoutRatio() {
                return dropoutRatio_;
            }
            /**
             * <code>optional float dropout_ratio = 1 [default = 0.5];</code>
             *
             * <pre>
             * dropout ratio
             * </pre>
             */
            public Builder setDropoutRatio(float value) {
                bitField0_ |= 0x00000001;
                dropoutRatio_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float dropout_ratio = 1 [default = 0.5];</code>
             *
             * <pre>
             * dropout ratio
             * </pre>
             */
            public Builder clearDropoutRatio() {
                bitField0_ = (bitField0_ & ~0x00000001);
                dropoutRatio_ = 0.5F;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.DropoutParameter)
        }

        static {
            defaultInstance = new DropoutParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.DropoutParameter)
    }

    public interface DummyDataParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.DummyDataParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
         *
         * <pre>
         * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
         * shape fields, and 0, 1 or N data_fillers.
         * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
         * If 1 data_filler is specified, it is applied to all top blobs.  If N are
         * specified, the ith is applied to the ith top blob.
         * </pre>
         */
        java.util.List<caffe.Loadcaffe.FillerParameter>
        getDataFillerList();
        /**
         * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
         *
         * <pre>
         * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
         * shape fields, and 0, 1 or N data_fillers.
         * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
         * If 1 data_filler is specified, it is applied to all top blobs.  If N are
         * specified, the ith is applied to the ith top blob.
         * </pre>
         */
        caffe.Loadcaffe.FillerParameter getDataFiller(int index);
        /**
         * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
         *
         * <pre>
         * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
         * shape fields, and 0, 1 or N data_fillers.
         * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
         * If 1 data_filler is specified, it is applied to all top blobs.  If N are
         * specified, the ith is applied to the ith top blob.
         * </pre>
         */
        int getDataFillerCount();
        /**
         * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
         *
         * <pre>
         * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
         * shape fields, and 0, 1 or N data_fillers.
         * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
         * If 1 data_filler is specified, it is applied to all top blobs.  If N are
         * specified, the ith is applied to the ith top blob.
         * </pre>
         */
        java.util.List<? extends caffe.Loadcaffe.FillerParameterOrBuilder>
        getDataFillerOrBuilderList();
        /**
         * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
         *
         * <pre>
         * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
         * shape fields, and 0, 1 or N data_fillers.
         * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
         * If 1 data_filler is specified, it is applied to all top blobs.  If N are
         * specified, the ith is applied to the ith top blob.
         * </pre>
         */
        caffe.Loadcaffe.FillerParameterOrBuilder getDataFillerOrBuilder(
                int index);

        /**
         * <code>repeated .caffe.BlobShape shape = 6;</code>
         */
        java.util.List<caffe.Loadcaffe.BlobShape>
        getShapeList();
        /**
         * <code>repeated .caffe.BlobShape shape = 6;</code>
         */
        caffe.Loadcaffe.BlobShape getShape(int index);
        /**
         * <code>repeated .caffe.BlobShape shape = 6;</code>
         */
        int getShapeCount();
        /**
         * <code>repeated .caffe.BlobShape shape = 6;</code>
         */
        java.util.List<? extends caffe.Loadcaffe.BlobShapeOrBuilder>
        getShapeOrBuilderList();
        /**
         * <code>repeated .caffe.BlobShape shape = 6;</code>
         */
        caffe.Loadcaffe.BlobShapeOrBuilder getShapeOrBuilder(
                int index);

        /**
         * <code>repeated uint32 num = 2;</code>
         *
         * <pre>
         * 4D dimensions -- deprecated.  Use "shape" instead.
         * </pre>
         */
        java.util.List<java.lang.Integer> getNumList();
        /**
         * <code>repeated uint32 num = 2;</code>
         *
         * <pre>
         * 4D dimensions -- deprecated.  Use "shape" instead.
         * </pre>
         */
        int getNumCount();
        /**
         * <code>repeated uint32 num = 2;</code>
         *
         * <pre>
         * 4D dimensions -- deprecated.  Use "shape" instead.
         * </pre>
         */
        int getNum(int index);

        /**
         * <code>repeated uint32 channels = 3;</code>
         */
        java.util.List<java.lang.Integer> getChannelsList();
        /**
         * <code>repeated uint32 channels = 3;</code>
         */
        int getChannelsCount();
        /**
         * <code>repeated uint32 channels = 3;</code>
         */
        int getChannels(int index);

        /**
         * <code>repeated uint32 height = 4;</code>
         */
        java.util.List<java.lang.Integer> getHeightList();
        /**
         * <code>repeated uint32 height = 4;</code>
         */
        int getHeightCount();
        /**
         * <code>repeated uint32 height = 4;</code>
         */
        int getHeight(int index);

        /**
         * <code>repeated uint32 width = 5;</code>
         */
        java.util.List<java.lang.Integer> getWidthList();
        /**
         * <code>repeated uint32 width = 5;</code>
         */
        int getWidthCount();
        /**
         * <code>repeated uint32 width = 5;</code>
         */
        int getWidth(int index);
    }
    /**
     * Protobuf type {@code caffe.DummyDataParameter}
     *
     * <pre>
     * Message that stores parameters used by DummyDataLayer.
     * DummyDataLayer fills any number of arbitrarily shaped blobs with random
     * (or constant) data generated by "Fillers" (see "message FillerParameter").
     * </pre>
     */
    public static final class DummyDataParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.DummyDataParameter)
            DummyDataParameterOrBuilder {
        // Use DummyDataParameter.newBuilder() to construct.
        private DummyDataParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private DummyDataParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final DummyDataParameter defaultInstance;
        public static DummyDataParameter getDefaultInstance() {
            return defaultInstance;
        }

        public DummyDataParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private DummyDataParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 10: {
                            if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                                dataFiller_ = new java.util.ArrayList<caffe.Loadcaffe.FillerParameter>();
                                mutable_bitField0_ |= 0x00000001;
                            }
                            dataFiller_.add(input.readMessage(caffe.Loadcaffe.FillerParameter.PARSER, extensionRegistry));
                            break;
                        }
                        case 16: {
                            if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                                num_ = new java.util.ArrayList<java.lang.Integer>();
                                mutable_bitField0_ |= 0x00000004;
                            }
                            num_.add(input.readUInt32());
                            break;
                        }
                        case 18: {
                            int length = input.readRawVarint32();
                            int limit = input.pushLimit(length);
                            if (!((mutable_bitField0_ & 0x00000004) == 0x00000004) && input.getBytesUntilLimit() > 0) {
                                num_ = new java.util.ArrayList<java.lang.Integer>();
                                mutable_bitField0_ |= 0x00000004;
                            }
                            while (input.getBytesUntilLimit() > 0) {
                                num_.add(input.readUInt32());
                            }
                            input.popLimit(limit);
                            break;
                        }
                        case 24: {
                            if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                                channels_ = new java.util.ArrayList<java.lang.Integer>();
                                mutable_bitField0_ |= 0x00000008;
                            }
                            channels_.add(input.readUInt32());
                            break;
                        }
                        case 26: {
                            int length = input.readRawVarint32();
                            int limit = input.pushLimit(length);
                            if (!((mutable_bitField0_ & 0x00000008) == 0x00000008) && input.getBytesUntilLimit() > 0) {
                                channels_ = new java.util.ArrayList<java.lang.Integer>();
                                mutable_bitField0_ |= 0x00000008;
                            }
                            while (input.getBytesUntilLimit() > 0) {
                                channels_.add(input.readUInt32());
                            }
                            input.popLimit(limit);
                            break;
                        }
                        case 32: {
                            if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                                height_ = new java.util.ArrayList<java.lang.Integer>();
                                mutable_bitField0_ |= 0x00000010;
                            }
                            height_.add(input.readUInt32());
                            break;
                        }
                        case 34: {
                            int length = input.readRawVarint32();
                            int limit = input.pushLimit(length);
                            if (!((mutable_bitField0_ & 0x00000010) == 0x00000010) && input.getBytesUntilLimit() > 0) {
                                height_ = new java.util.ArrayList<java.lang.Integer>();
                                mutable_bitField0_ |= 0x00000010;
                            }
                            while (input.getBytesUntilLimit() > 0) {
                                height_.add(input.readUInt32());
                            }
                            input.popLimit(limit);
                            break;
                        }
                        case 40: {
                            if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                                width_ = new java.util.ArrayList<java.lang.Integer>();
                                mutable_bitField0_ |= 0x00000020;
                            }
                            width_.add(input.readUInt32());
                            break;
                        }
                        case 42: {
                            int length = input.readRawVarint32();
                            int limit = input.pushLimit(length);
                            if (!((mutable_bitField0_ & 0x00000020) == 0x00000020) && input.getBytesUntilLimit() > 0) {
                                width_ = new java.util.ArrayList<java.lang.Integer>();
                                mutable_bitField0_ |= 0x00000020;
                            }
                            while (input.getBytesUntilLimit() > 0) {
                                width_.add(input.readUInt32());
                            }
                            input.popLimit(limit);
                            break;
                        }
                        case 50: {
                            if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                                shape_ = new java.util.ArrayList<caffe.Loadcaffe.BlobShape>();
                                mutable_bitField0_ |= 0x00000002;
                            }
                            shape_.add(input.readMessage(caffe.Loadcaffe.BlobShape.PARSER, extensionRegistry));
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                    dataFiller_ = java.util.Collections.unmodifiableList(dataFiller_);
                }
                if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                    num_ = java.util.Collections.unmodifiableList(num_);
                }
                if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                    channels_ = java.util.Collections.unmodifiableList(channels_);
                }
                if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                    height_ = java.util.Collections.unmodifiableList(height_);
                }
                if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                    width_ = java.util.Collections.unmodifiableList(width_);
                }
                if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                    shape_ = java.util.Collections.unmodifiableList(shape_);
                }
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_DummyDataParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_DummyDataParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.DummyDataParameter.class, caffe.Loadcaffe.DummyDataParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<DummyDataParameter> PARSER =
                new com.google.protobuf.AbstractParser<DummyDataParameter>() {
                    public DummyDataParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new DummyDataParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<DummyDataParameter> getParserForType() {
            return PARSER;
        }

        public static final int DATA_FILLER_FIELD_NUMBER = 1;
        private java.util.List<caffe.Loadcaffe.FillerParameter> dataFiller_;
        /**
         * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
         *
         * <pre>
         * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
         * shape fields, and 0, 1 or N data_fillers.
         * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
         * If 1 data_filler is specified, it is applied to all top blobs.  If N are
         * specified, the ith is applied to the ith top blob.
         * </pre>
         */
        public java.util.List<caffe.Loadcaffe.FillerParameter> getDataFillerList() {
            return dataFiller_;
        }
        /**
         * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
         *
         * <pre>
         * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
         * shape fields, and 0, 1 or N data_fillers.
         * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
         * If 1 data_filler is specified, it is applied to all top blobs.  If N are
         * specified, the ith is applied to the ith top blob.
         * </pre>
         */
        public java.util.List<? extends caffe.Loadcaffe.FillerParameterOrBuilder>
        getDataFillerOrBuilderList() {
            return dataFiller_;
        }
        /**
         * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
         *
         * <pre>
         * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
         * shape fields, and 0, 1 or N data_fillers.
         * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
         * If 1 data_filler is specified, it is applied to all top blobs.  If N are
         * specified, the ith is applied to the ith top blob.
         * </pre>
         */
        public int getDataFillerCount() {
            return dataFiller_.size();
        }
        /**
         * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
         *
         * <pre>
         * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
         * shape fields, and 0, 1 or N data_fillers.
         * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
         * If 1 data_filler is specified, it is applied to all top blobs.  If N are
         * specified, the ith is applied to the ith top blob.
         * </pre>
         */
        public caffe.Loadcaffe.FillerParameter getDataFiller(int index) {
            return dataFiller_.get(index);
        }
        /**
         * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
         *
         * <pre>
         * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
         * shape fields, and 0, 1 or N data_fillers.
         * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
         * If 1 data_filler is specified, it is applied to all top blobs.  If N are
         * specified, the ith is applied to the ith top blob.
         * </pre>
         */
        public caffe.Loadcaffe.FillerParameterOrBuilder getDataFillerOrBuilder(
                int index) {
            return dataFiller_.get(index);
        }

        public static final int SHAPE_FIELD_NUMBER = 6;
        private java.util.List<caffe.Loadcaffe.BlobShape> shape_;
        /**
         * <code>repeated .caffe.BlobShape shape = 6;</code>
         */
        public java.util.List<caffe.Loadcaffe.BlobShape> getShapeList() {
            return shape_;
        }
        /**
         * <code>repeated .caffe.BlobShape shape = 6;</code>
         */
        public java.util.List<? extends caffe.Loadcaffe.BlobShapeOrBuilder>
        getShapeOrBuilderList() {
            return shape_;
        }
        /**
         * <code>repeated .caffe.BlobShape shape = 6;</code>
         */
        public int getShapeCount() {
            return shape_.size();
        }
        /**
         * <code>repeated .caffe.BlobShape shape = 6;</code>
         */
        public caffe.Loadcaffe.BlobShape getShape(int index) {
            return shape_.get(index);
        }
        /**
         * <code>repeated .caffe.BlobShape shape = 6;</code>
         */
        public caffe.Loadcaffe.BlobShapeOrBuilder getShapeOrBuilder(
                int index) {
            return shape_.get(index);
        }

        public static final int NUM_FIELD_NUMBER = 2;
        private java.util.List<java.lang.Integer> num_;
        /**
         * <code>repeated uint32 num = 2;</code>
         *
         * <pre>
         * 4D dimensions -- deprecated.  Use "shape" instead.
         * </pre>
         */
        public java.util.List<java.lang.Integer>
        getNumList() {
            return num_;
        }
        /**
         * <code>repeated uint32 num = 2;</code>
         *
         * <pre>
         * 4D dimensions -- deprecated.  Use "shape" instead.
         * </pre>
         */
        public int getNumCount() {
            return num_.size();
        }
        /**
         * <code>repeated uint32 num = 2;</code>
         *
         * <pre>
         * 4D dimensions -- deprecated.  Use "shape" instead.
         * </pre>
         */
        public int getNum(int index) {
            return num_.get(index);
        }

        public static final int CHANNELS_FIELD_NUMBER = 3;
        private java.util.List<java.lang.Integer> channels_;
        /**
         * <code>repeated uint32 channels = 3;</code>
         */
        public java.util.List<java.lang.Integer>
        getChannelsList() {
            return channels_;
        }
        /**
         * <code>repeated uint32 channels = 3;</code>
         */
        public int getChannelsCount() {
            return channels_.size();
        }
        /**
         * <code>repeated uint32 channels = 3;</code>
         */
        public int getChannels(int index) {
            return channels_.get(index);
        }

        public static final int HEIGHT_FIELD_NUMBER = 4;
        private java.util.List<java.lang.Integer> height_;
        /**
         * <code>repeated uint32 height = 4;</code>
         */
        public java.util.List<java.lang.Integer>
        getHeightList() {
            return height_;
        }
        /**
         * <code>repeated uint32 height = 4;</code>
         */
        public int getHeightCount() {
            return height_.size();
        }
        /**
         * <code>repeated uint32 height = 4;</code>
         */
        public int getHeight(int index) {
            return height_.get(index);
        }

        public static final int WIDTH_FIELD_NUMBER = 5;
        private java.util.List<java.lang.Integer> width_;
        /**
         * <code>repeated uint32 width = 5;</code>
         */
        public java.util.List<java.lang.Integer>
        getWidthList() {
            return width_;
        }
        /**
         * <code>repeated uint32 width = 5;</code>
         */
        public int getWidthCount() {
            return width_.size();
        }
        /**
         * <code>repeated uint32 width = 5;</code>
         */
        public int getWidth(int index) {
            return width_.get(index);
        }

        private void initFields() {
            dataFiller_ = java.util.Collections.emptyList();
            shape_ = java.util.Collections.emptyList();
            num_ = java.util.Collections.emptyList();
            channels_ = java.util.Collections.emptyList();
            height_ = java.util.Collections.emptyList();
            width_ = java.util.Collections.emptyList();
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            for (int i = 0; i < dataFiller_.size(); i++) {
                output.writeMessage(1, dataFiller_.get(i));
            }
            for (int i = 0; i < num_.size(); i++) {
                output.writeUInt32(2, num_.get(i));
            }
            for (int i = 0; i < channels_.size(); i++) {
                output.writeUInt32(3, channels_.get(i));
            }
            for (int i = 0; i < height_.size(); i++) {
                output.writeUInt32(4, height_.get(i));
            }
            for (int i = 0; i < width_.size(); i++) {
                output.writeUInt32(5, width_.get(i));
            }
            for (int i = 0; i < shape_.size(); i++) {
                output.writeMessage(6, shape_.get(i));
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            for (int i = 0; i < dataFiller_.size(); i++) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(1, dataFiller_.get(i));
            }
            {
                int dataSize = 0;
                for (int i = 0; i < num_.size(); i++) {
                    dataSize += com.google.protobuf.CodedOutputStream
                            .computeUInt32SizeNoTag(num_.get(i));
                }
                size += dataSize;
                size += 1 * getNumList().size();
            }
            {
                int dataSize = 0;
                for (int i = 0; i < channels_.size(); i++) {
                    dataSize += com.google.protobuf.CodedOutputStream
                            .computeUInt32SizeNoTag(channels_.get(i));
                }
                size += dataSize;
                size += 1 * getChannelsList().size();
            }
            {
                int dataSize = 0;
                for (int i = 0; i < height_.size(); i++) {
                    dataSize += com.google.protobuf.CodedOutputStream
                            .computeUInt32SizeNoTag(height_.get(i));
                }
                size += dataSize;
                size += 1 * getHeightList().size();
            }
            {
                int dataSize = 0;
                for (int i = 0; i < width_.size(); i++) {
                    dataSize += com.google.protobuf.CodedOutputStream
                            .computeUInt32SizeNoTag(width_.get(i));
                }
                size += dataSize;
                size += 1 * getWidthList().size();
            }
            for (int i = 0; i < shape_.size(); i++) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(6, shape_.get(i));
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.DummyDataParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.DummyDataParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.DummyDataParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.DummyDataParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.DummyDataParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.DummyDataParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.DummyDataParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.DummyDataParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.DummyDataParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.DummyDataParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.DummyDataParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.DummyDataParameter}
         *
         * <pre>
         * Message that stores parameters used by DummyDataLayer.
         * DummyDataLayer fills any number of arbitrarily shaped blobs with random
         * (or constant) data generated by "Fillers" (see "message FillerParameter").
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.DummyDataParameter)
                caffe.Loadcaffe.DummyDataParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_DummyDataParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_DummyDataParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.DummyDataParameter.class, caffe.Loadcaffe.DummyDataParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.DummyDataParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                    getDataFillerFieldBuilder();
                    getShapeFieldBuilder();
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                if (dataFillerBuilder_ == null) {
                    dataFiller_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000001);
                } else {
                    dataFillerBuilder_.clear();
                }
                if (shapeBuilder_ == null) {
                    shape_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000002);
                } else {
                    shapeBuilder_.clear();
                }
                num_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000004);
                channels_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000008);
                height_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000010);
                width_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000020);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_DummyDataParameter_descriptor;
            }

            public caffe.Loadcaffe.DummyDataParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.DummyDataParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.DummyDataParameter build() {
                caffe.Loadcaffe.DummyDataParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.DummyDataParameter buildPartial() {
                caffe.Loadcaffe.DummyDataParameter result = new caffe.Loadcaffe.DummyDataParameter(this);
                int from_bitField0_ = bitField0_;
                if (dataFillerBuilder_ == null) {
                    if (((bitField0_ & 0x00000001) == 0x00000001)) {
                        dataFiller_ = java.util.Collections.unmodifiableList(dataFiller_);
                        bitField0_ = (bitField0_ & ~0x00000001);
                    }
                    result.dataFiller_ = dataFiller_;
                } else {
                    result.dataFiller_ = dataFillerBuilder_.build();
                }
                if (shapeBuilder_ == null) {
                    if (((bitField0_ & 0x00000002) == 0x00000002)) {
                        shape_ = java.util.Collections.unmodifiableList(shape_);
                        bitField0_ = (bitField0_ & ~0x00000002);
                    }
                    result.shape_ = shape_;
                } else {
                    result.shape_ = shapeBuilder_.build();
                }
                if (((bitField0_ & 0x00000004) == 0x00000004)) {
                    num_ = java.util.Collections.unmodifiableList(num_);
                    bitField0_ = (bitField0_ & ~0x00000004);
                }
                result.num_ = num_;
                if (((bitField0_ & 0x00000008) == 0x00000008)) {
                    channels_ = java.util.Collections.unmodifiableList(channels_);
                    bitField0_ = (bitField0_ & ~0x00000008);
                }
                result.channels_ = channels_;
                if (((bitField0_ & 0x00000010) == 0x00000010)) {
                    height_ = java.util.Collections.unmodifiableList(height_);
                    bitField0_ = (bitField0_ & ~0x00000010);
                }
                result.height_ = height_;
                if (((bitField0_ & 0x00000020) == 0x00000020)) {
                    width_ = java.util.Collections.unmodifiableList(width_);
                    bitField0_ = (bitField0_ & ~0x00000020);
                }
                result.width_ = width_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.DummyDataParameter) {
                    return mergeFrom((caffe.Loadcaffe.DummyDataParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.DummyDataParameter other) {
                if (other == caffe.Loadcaffe.DummyDataParameter.getDefaultInstance()) return this;
                if (dataFillerBuilder_ == null) {
                    if (!other.dataFiller_.isEmpty()) {
                        if (dataFiller_.isEmpty()) {
                            dataFiller_ = other.dataFiller_;
                            bitField0_ = (bitField0_ & ~0x00000001);
                        } else {
                            ensureDataFillerIsMutable();
                            dataFiller_.addAll(other.dataFiller_);
                        }
                        onChanged();
                    }
                } else {
                    if (!other.dataFiller_.isEmpty()) {
                        if (dataFillerBuilder_.isEmpty()) {
                            dataFillerBuilder_.dispose();
                            dataFillerBuilder_ = null;
                            dataFiller_ = other.dataFiller_;
                            bitField0_ = (bitField0_ & ~0x00000001);
                            dataFillerBuilder_ =
                                    com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                                            getDataFillerFieldBuilder() : null;
                        } else {
                            dataFillerBuilder_.addAllMessages(other.dataFiller_);
                        }
                    }
                }
                if (shapeBuilder_ == null) {
                    if (!other.shape_.isEmpty()) {
                        if (shape_.isEmpty()) {
                            shape_ = other.shape_;
                            bitField0_ = (bitField0_ & ~0x00000002);
                        } else {
                            ensureShapeIsMutable();
                            shape_.addAll(other.shape_);
                        }
                        onChanged();
                    }
                } else {
                    if (!other.shape_.isEmpty()) {
                        if (shapeBuilder_.isEmpty()) {
                            shapeBuilder_.dispose();
                            shapeBuilder_ = null;
                            shape_ = other.shape_;
                            bitField0_ = (bitField0_ & ~0x00000002);
                            shapeBuilder_ =
                                    com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                                            getShapeFieldBuilder() : null;
                        } else {
                            shapeBuilder_.addAllMessages(other.shape_);
                        }
                    }
                }
                if (!other.num_.isEmpty()) {
                    if (num_.isEmpty()) {
                        num_ = other.num_;
                        bitField0_ = (bitField0_ & ~0x00000004);
                    } else {
                        ensureNumIsMutable();
                        num_.addAll(other.num_);
                    }
                    onChanged();
                }
                if (!other.channels_.isEmpty()) {
                    if (channels_.isEmpty()) {
                        channels_ = other.channels_;
                        bitField0_ = (bitField0_ & ~0x00000008);
                    } else {
                        ensureChannelsIsMutable();
                        channels_.addAll(other.channels_);
                    }
                    onChanged();
                }
                if (!other.height_.isEmpty()) {
                    if (height_.isEmpty()) {
                        height_ = other.height_;
                        bitField0_ = (bitField0_ & ~0x00000010);
                    } else {
                        ensureHeightIsMutable();
                        height_.addAll(other.height_);
                    }
                    onChanged();
                }
                if (!other.width_.isEmpty()) {
                    if (width_.isEmpty()) {
                        width_ = other.width_;
                        bitField0_ = (bitField0_ & ~0x00000020);
                    } else {
                        ensureWidthIsMutable();
                        width_.addAll(other.width_);
                    }
                    onChanged();
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.DummyDataParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.DummyDataParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private java.util.List<caffe.Loadcaffe.FillerParameter> dataFiller_ =
                    java.util.Collections.emptyList();
            private void ensureDataFillerIsMutable() {
                if (!((bitField0_ & 0x00000001) == 0x00000001)) {
                    dataFiller_ = new java.util.ArrayList<caffe.Loadcaffe.FillerParameter>(dataFiller_);
                    bitField0_ |= 0x00000001;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder> dataFillerBuilder_;

            /**
             * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
             *
             * <pre>
             * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
             * shape fields, and 0, 1 or N data_fillers.
             * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
             * If 1 data_filler is specified, it is applied to all top blobs.  If N are
             * specified, the ith is applied to the ith top blob.
             * </pre>
             */
            public java.util.List<caffe.Loadcaffe.FillerParameter> getDataFillerList() {
                if (dataFillerBuilder_ == null) {
                    return java.util.Collections.unmodifiableList(dataFiller_);
                } else {
                    return dataFillerBuilder_.getMessageList();
                }
            }
            /**
             * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
             *
             * <pre>
             * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
             * shape fields, and 0, 1 or N data_fillers.
             * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
             * If 1 data_filler is specified, it is applied to all top blobs.  If N are
             * specified, the ith is applied to the ith top blob.
             * </pre>
             */
            public int getDataFillerCount() {
                if (dataFillerBuilder_ == null) {
                    return dataFiller_.size();
                } else {
                    return dataFillerBuilder_.getCount();
                }
            }
            /**
             * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
             *
             * <pre>
             * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
             * shape fields, and 0, 1 or N data_fillers.
             * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
             * If 1 data_filler is specified, it is applied to all top blobs.  If N are
             * specified, the ith is applied to the ith top blob.
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameter getDataFiller(int index) {
                if (dataFillerBuilder_ == null) {
                    return dataFiller_.get(index);
                } else {
                    return dataFillerBuilder_.getMessage(index);
                }
            }
            /**
             * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
             *
             * <pre>
             * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
             * shape fields, and 0, 1 or N data_fillers.
             * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
             * If 1 data_filler is specified, it is applied to all top blobs.  If N are
             * specified, the ith is applied to the ith top blob.
             * </pre>
             */
            public Builder setDataFiller(
                    int index, caffe.Loadcaffe.FillerParameter value) {
                if (dataFillerBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureDataFillerIsMutable();
                    dataFiller_.set(index, value);
                    onChanged();
                } else {
                    dataFillerBuilder_.setMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
             *
             * <pre>
             * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
             * shape fields, and 0, 1 or N data_fillers.
             * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
             * If 1 data_filler is specified, it is applied to all top blobs.  If N are
             * specified, the ith is applied to the ith top blob.
             * </pre>
             */
            public Builder setDataFiller(
                    int index, caffe.Loadcaffe.FillerParameter.Builder builderForValue) {
                if (dataFillerBuilder_ == null) {
                    ensureDataFillerIsMutable();
                    dataFiller_.set(index, builderForValue.build());
                    onChanged();
                } else {
                    dataFillerBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
             *
             * <pre>
             * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
             * shape fields, and 0, 1 or N data_fillers.
             * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
             * If 1 data_filler is specified, it is applied to all top blobs.  If N are
             * specified, the ith is applied to the ith top blob.
             * </pre>
             */
            public Builder addDataFiller(caffe.Loadcaffe.FillerParameter value) {
                if (dataFillerBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureDataFillerIsMutable();
                    dataFiller_.add(value);
                    onChanged();
                } else {
                    dataFillerBuilder_.addMessage(value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
             *
             * <pre>
             * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
             * shape fields, and 0, 1 or N data_fillers.
             * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
             * If 1 data_filler is specified, it is applied to all top blobs.  If N are
             * specified, the ith is applied to the ith top blob.
             * </pre>
             */
            public Builder addDataFiller(
                    int index, caffe.Loadcaffe.FillerParameter value) {
                if (dataFillerBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureDataFillerIsMutable();
                    dataFiller_.add(index, value);
                    onChanged();
                } else {
                    dataFillerBuilder_.addMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
             *
             * <pre>
             * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
             * shape fields, and 0, 1 or N data_fillers.
             * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
             * If 1 data_filler is specified, it is applied to all top blobs.  If N are
             * specified, the ith is applied to the ith top blob.
             * </pre>
             */
            public Builder addDataFiller(
                    caffe.Loadcaffe.FillerParameter.Builder builderForValue) {
                if (dataFillerBuilder_ == null) {
                    ensureDataFillerIsMutable();
                    dataFiller_.add(builderForValue.build());
                    onChanged();
                } else {
                    dataFillerBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
             *
             * <pre>
             * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
             * shape fields, and 0, 1 or N data_fillers.
             * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
             * If 1 data_filler is specified, it is applied to all top blobs.  If N are
             * specified, the ith is applied to the ith top blob.
             * </pre>
             */
            public Builder addDataFiller(
                    int index, caffe.Loadcaffe.FillerParameter.Builder builderForValue) {
                if (dataFillerBuilder_ == null) {
                    ensureDataFillerIsMutable();
                    dataFiller_.add(index, builderForValue.build());
                    onChanged();
                } else {
                    dataFillerBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
             *
             * <pre>
             * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
             * shape fields, and 0, 1 or N data_fillers.
             * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
             * If 1 data_filler is specified, it is applied to all top blobs.  If N are
             * specified, the ith is applied to the ith top blob.
             * </pre>
             */
            public Builder addAllDataFiller(
                    java.lang.Iterable<? extends caffe.Loadcaffe.FillerParameter> values) {
                if (dataFillerBuilder_ == null) {
                    ensureDataFillerIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(
                            values, dataFiller_);
                    onChanged();
                } else {
                    dataFillerBuilder_.addAllMessages(values);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
             *
             * <pre>
             * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
             * shape fields, and 0, 1 or N data_fillers.
             * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
             * If 1 data_filler is specified, it is applied to all top blobs.  If N are
             * specified, the ith is applied to the ith top blob.
             * </pre>
             */
            public Builder clearDataFiller() {
                if (dataFillerBuilder_ == null) {
                    dataFiller_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000001);
                    onChanged();
                } else {
                    dataFillerBuilder_.clear();
                }
                return this;
            }
            /**
             * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
             *
             * <pre>
             * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
             * shape fields, and 0, 1 or N data_fillers.
             * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
             * If 1 data_filler is specified, it is applied to all top blobs.  If N are
             * specified, the ith is applied to the ith top blob.
             * </pre>
             */
            public Builder removeDataFiller(int index) {
                if (dataFillerBuilder_ == null) {
                    ensureDataFillerIsMutable();
                    dataFiller_.remove(index);
                    onChanged();
                } else {
                    dataFillerBuilder_.remove(index);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
             *
             * <pre>
             * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
             * shape fields, and 0, 1 or N data_fillers.
             * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
             * If 1 data_filler is specified, it is applied to all top blobs.  If N are
             * specified, the ith is applied to the ith top blob.
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameter.Builder getDataFillerBuilder(
                    int index) {
                return getDataFillerFieldBuilder().getBuilder(index);
            }
            /**
             * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
             *
             * <pre>
             * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
             * shape fields, and 0, 1 or N data_fillers.
             * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
             * If 1 data_filler is specified, it is applied to all top blobs.  If N are
             * specified, the ith is applied to the ith top blob.
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameterOrBuilder getDataFillerOrBuilder(
                    int index) {
                if (dataFillerBuilder_ == null) {
                    return dataFiller_.get(index);  } else {
                    return dataFillerBuilder_.getMessageOrBuilder(index);
                }
            }
            /**
             * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
             *
             * <pre>
             * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
             * shape fields, and 0, 1 or N data_fillers.
             * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
             * If 1 data_filler is specified, it is applied to all top blobs.  If N are
             * specified, the ith is applied to the ith top blob.
             * </pre>
             */
            public java.util.List<? extends caffe.Loadcaffe.FillerParameterOrBuilder>
            getDataFillerOrBuilderList() {
                if (dataFillerBuilder_ != null) {
                    return dataFillerBuilder_.getMessageOrBuilderList();
                } else {
                    return java.util.Collections.unmodifiableList(dataFiller_);
                }
            }
            /**
             * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
             *
             * <pre>
             * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
             * shape fields, and 0, 1 or N data_fillers.
             * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
             * If 1 data_filler is specified, it is applied to all top blobs.  If N are
             * specified, the ith is applied to the ith top blob.
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameter.Builder addDataFillerBuilder() {
                return getDataFillerFieldBuilder().addBuilder(
                        caffe.Loadcaffe.FillerParameter.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
             *
             * <pre>
             * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
             * shape fields, and 0, 1 or N data_fillers.
             * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
             * If 1 data_filler is specified, it is applied to all top blobs.  If N are
             * specified, the ith is applied to the ith top blob.
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameter.Builder addDataFillerBuilder(
                    int index) {
                return getDataFillerFieldBuilder().addBuilder(
                        index, caffe.Loadcaffe.FillerParameter.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.FillerParameter data_filler = 1;</code>
             *
             * <pre>
             * This layer produces N &gt;= 1 top blobs.  DummyDataParameter must specify 1 or N
             * shape fields, and 0, 1 or N data_fillers.
             * If 0 data_fillers are specified, ConstantFiller with a value of 0 is used.
             * If 1 data_filler is specified, it is applied to all top blobs.  If N are
             * specified, the ith is applied to the ith top blob.
             * </pre>
             */
            public java.util.List<caffe.Loadcaffe.FillerParameter.Builder>
            getDataFillerBuilderList() {
                return getDataFillerFieldBuilder().getBuilderList();
            }
            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder>
            getDataFillerFieldBuilder() {
                if (dataFillerBuilder_ == null) {
                    dataFillerBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder>(
                            dataFiller_,
                            ((bitField0_ & 0x00000001) == 0x00000001),
                            getParentForChildren(),
                            isClean());
                    dataFiller_ = null;
                }
                return dataFillerBuilder_;
            }

            private java.util.List<caffe.Loadcaffe.BlobShape> shape_ =
                    java.util.Collections.emptyList();
            private void ensureShapeIsMutable() {
                if (!((bitField0_ & 0x00000002) == 0x00000002)) {
                    shape_ = new java.util.ArrayList<caffe.Loadcaffe.BlobShape>(shape_);
                    bitField0_ |= 0x00000002;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.BlobShape, caffe.Loadcaffe.BlobShape.Builder, caffe.Loadcaffe.BlobShapeOrBuilder> shapeBuilder_;

            /**
             * <code>repeated .caffe.BlobShape shape = 6;</code>
             */
            public java.util.List<caffe.Loadcaffe.BlobShape> getShapeList() {
                if (shapeBuilder_ == null) {
                    return java.util.Collections.unmodifiableList(shape_);
                } else {
                    return shapeBuilder_.getMessageList();
                }
            }
            /**
             * <code>repeated .caffe.BlobShape shape = 6;</code>
             */
            public int getShapeCount() {
                if (shapeBuilder_ == null) {
                    return shape_.size();
                } else {
                    return shapeBuilder_.getCount();
                }
            }
            /**
             * <code>repeated .caffe.BlobShape shape = 6;</code>
             */
            public caffe.Loadcaffe.BlobShape getShape(int index) {
                if (shapeBuilder_ == null) {
                    return shape_.get(index);
                } else {
                    return shapeBuilder_.getMessage(index);
                }
            }
            /**
             * <code>repeated .caffe.BlobShape shape = 6;</code>
             */
            public Builder setShape(
                    int index, caffe.Loadcaffe.BlobShape value) {
                if (shapeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureShapeIsMutable();
                    shape_.set(index, value);
                    onChanged();
                } else {
                    shapeBuilder_.setMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobShape shape = 6;</code>
             */
            public Builder setShape(
                    int index, caffe.Loadcaffe.BlobShape.Builder builderForValue) {
                if (shapeBuilder_ == null) {
                    ensureShapeIsMutable();
                    shape_.set(index, builderForValue.build());
                    onChanged();
                } else {
                    shapeBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobShape shape = 6;</code>
             */
            public Builder addShape(caffe.Loadcaffe.BlobShape value) {
                if (shapeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureShapeIsMutable();
                    shape_.add(value);
                    onChanged();
                } else {
                    shapeBuilder_.addMessage(value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobShape shape = 6;</code>
             */
            public Builder addShape(
                    int index, caffe.Loadcaffe.BlobShape value) {
                if (shapeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureShapeIsMutable();
                    shape_.add(index, value);
                    onChanged();
                } else {
                    shapeBuilder_.addMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobShape shape = 6;</code>
             */
            public Builder addShape(
                    caffe.Loadcaffe.BlobShape.Builder builderForValue) {
                if (shapeBuilder_ == null) {
                    ensureShapeIsMutable();
                    shape_.add(builderForValue.build());
                    onChanged();
                } else {
                    shapeBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobShape shape = 6;</code>
             */
            public Builder addShape(
                    int index, caffe.Loadcaffe.BlobShape.Builder builderForValue) {
                if (shapeBuilder_ == null) {
                    ensureShapeIsMutable();
                    shape_.add(index, builderForValue.build());
                    onChanged();
                } else {
                    shapeBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobShape shape = 6;</code>
             */
            public Builder addAllShape(
                    java.lang.Iterable<? extends caffe.Loadcaffe.BlobShape> values) {
                if (shapeBuilder_ == null) {
                    ensureShapeIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(
                            values, shape_);
                    onChanged();
                } else {
                    shapeBuilder_.addAllMessages(values);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobShape shape = 6;</code>
             */
            public Builder clearShape() {
                if (shapeBuilder_ == null) {
                    shape_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000002);
                    onChanged();
                } else {
                    shapeBuilder_.clear();
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobShape shape = 6;</code>
             */
            public Builder removeShape(int index) {
                if (shapeBuilder_ == null) {
                    ensureShapeIsMutable();
                    shape_.remove(index);
                    onChanged();
                } else {
                    shapeBuilder_.remove(index);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobShape shape = 6;</code>
             */
            public caffe.Loadcaffe.BlobShape.Builder getShapeBuilder(
                    int index) {
                return getShapeFieldBuilder().getBuilder(index);
            }
            /**
             * <code>repeated .caffe.BlobShape shape = 6;</code>
             */
            public caffe.Loadcaffe.BlobShapeOrBuilder getShapeOrBuilder(
                    int index) {
                if (shapeBuilder_ == null) {
                    return shape_.get(index);  } else {
                    return shapeBuilder_.getMessageOrBuilder(index);
                }
            }
            /**
             * <code>repeated .caffe.BlobShape shape = 6;</code>
             */
            public java.util.List<? extends caffe.Loadcaffe.BlobShapeOrBuilder>
            getShapeOrBuilderList() {
                if (shapeBuilder_ != null) {
                    return shapeBuilder_.getMessageOrBuilderList();
                } else {
                    return java.util.Collections.unmodifiableList(shape_);
                }
            }
            /**
             * <code>repeated .caffe.BlobShape shape = 6;</code>
             */
            public caffe.Loadcaffe.BlobShape.Builder addShapeBuilder() {
                return getShapeFieldBuilder().addBuilder(
                        caffe.Loadcaffe.BlobShape.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.BlobShape shape = 6;</code>
             */
            public caffe.Loadcaffe.BlobShape.Builder addShapeBuilder(
                    int index) {
                return getShapeFieldBuilder().addBuilder(
                        index, caffe.Loadcaffe.BlobShape.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.BlobShape shape = 6;</code>
             */
            public java.util.List<caffe.Loadcaffe.BlobShape.Builder>
            getShapeBuilderList() {
                return getShapeFieldBuilder().getBuilderList();
            }
            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.BlobShape, caffe.Loadcaffe.BlobShape.Builder, caffe.Loadcaffe.BlobShapeOrBuilder>
            getShapeFieldBuilder() {
                if (shapeBuilder_ == null) {
                    shapeBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            caffe.Loadcaffe.BlobShape, caffe.Loadcaffe.BlobShape.Builder, caffe.Loadcaffe.BlobShapeOrBuilder>(
                            shape_,
                            ((bitField0_ & 0x00000002) == 0x00000002),
                            getParentForChildren(),
                            isClean());
                    shape_ = null;
                }
                return shapeBuilder_;
            }

            private java.util.List<java.lang.Integer> num_ = java.util.Collections.emptyList();
            private void ensureNumIsMutable() {
                if (!((bitField0_ & 0x00000004) == 0x00000004)) {
                    num_ = new java.util.ArrayList<java.lang.Integer>(num_);
                    bitField0_ |= 0x00000004;
                }
            }
            /**
             * <code>repeated uint32 num = 2;</code>
             *
             * <pre>
             * 4D dimensions -- deprecated.  Use "shape" instead.
             * </pre>
             */
            public java.util.List<java.lang.Integer>
            getNumList() {
                return java.util.Collections.unmodifiableList(num_);
            }
            /**
             * <code>repeated uint32 num = 2;</code>
             *
             * <pre>
             * 4D dimensions -- deprecated.  Use "shape" instead.
             * </pre>
             */
            public int getNumCount() {
                return num_.size();
            }
            /**
             * <code>repeated uint32 num = 2;</code>
             *
             * <pre>
             * 4D dimensions -- deprecated.  Use "shape" instead.
             * </pre>
             */
            public int getNum(int index) {
                return num_.get(index);
            }
            /**
             * <code>repeated uint32 num = 2;</code>
             *
             * <pre>
             * 4D dimensions -- deprecated.  Use "shape" instead.
             * </pre>
             */
            public Builder setNum(
                    int index, int value) {
                ensureNumIsMutable();
                num_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated uint32 num = 2;</code>
             *
             * <pre>
             * 4D dimensions -- deprecated.  Use "shape" instead.
             * </pre>
             */
            public Builder addNum(int value) {
                ensureNumIsMutable();
                num_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated uint32 num = 2;</code>
             *
             * <pre>
             * 4D dimensions -- deprecated.  Use "shape" instead.
             * </pre>
             */
            public Builder addAllNum(
                    java.lang.Iterable<? extends java.lang.Integer> values) {
                ensureNumIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, num_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated uint32 num = 2;</code>
             *
             * <pre>
             * 4D dimensions -- deprecated.  Use "shape" instead.
             * </pre>
             */
            public Builder clearNum() {
                num_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000004);
                onChanged();
                return this;
            }

            private java.util.List<java.lang.Integer> channels_ = java.util.Collections.emptyList();
            private void ensureChannelsIsMutable() {
                if (!((bitField0_ & 0x00000008) == 0x00000008)) {
                    channels_ = new java.util.ArrayList<java.lang.Integer>(channels_);
                    bitField0_ |= 0x00000008;
                }
            }
            /**
             * <code>repeated uint32 channels = 3;</code>
             */
            public java.util.List<java.lang.Integer>
            getChannelsList() {
                return java.util.Collections.unmodifiableList(channels_);
            }
            /**
             * <code>repeated uint32 channels = 3;</code>
             */
            public int getChannelsCount() {
                return channels_.size();
            }
            /**
             * <code>repeated uint32 channels = 3;</code>
             */
            public int getChannels(int index) {
                return channels_.get(index);
            }
            /**
             * <code>repeated uint32 channels = 3;</code>
             */
            public Builder setChannels(
                    int index, int value) {
                ensureChannelsIsMutable();
                channels_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated uint32 channels = 3;</code>
             */
            public Builder addChannels(int value) {
                ensureChannelsIsMutable();
                channels_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated uint32 channels = 3;</code>
             */
            public Builder addAllChannels(
                    java.lang.Iterable<? extends java.lang.Integer> values) {
                ensureChannelsIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, channels_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated uint32 channels = 3;</code>
             */
            public Builder clearChannels() {
                channels_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000008);
                onChanged();
                return this;
            }

            private java.util.List<java.lang.Integer> height_ = java.util.Collections.emptyList();
            private void ensureHeightIsMutable() {
                if (!((bitField0_ & 0x00000010) == 0x00000010)) {
                    height_ = new java.util.ArrayList<java.lang.Integer>(height_);
                    bitField0_ |= 0x00000010;
                }
            }
            /**
             * <code>repeated uint32 height = 4;</code>
             */
            public java.util.List<java.lang.Integer>
            getHeightList() {
                return java.util.Collections.unmodifiableList(height_);
            }
            /**
             * <code>repeated uint32 height = 4;</code>
             */
            public int getHeightCount() {
                return height_.size();
            }
            /**
             * <code>repeated uint32 height = 4;</code>
             */
            public int getHeight(int index) {
                return height_.get(index);
            }
            /**
             * <code>repeated uint32 height = 4;</code>
             */
            public Builder setHeight(
                    int index, int value) {
                ensureHeightIsMutable();
                height_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated uint32 height = 4;</code>
             */
            public Builder addHeight(int value) {
                ensureHeightIsMutable();
                height_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated uint32 height = 4;</code>
             */
            public Builder addAllHeight(
                    java.lang.Iterable<? extends java.lang.Integer> values) {
                ensureHeightIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, height_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated uint32 height = 4;</code>
             */
            public Builder clearHeight() {
                height_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000010);
                onChanged();
                return this;
            }

            private java.util.List<java.lang.Integer> width_ = java.util.Collections.emptyList();
            private void ensureWidthIsMutable() {
                if (!((bitField0_ & 0x00000020) == 0x00000020)) {
                    width_ = new java.util.ArrayList<java.lang.Integer>(width_);
                    bitField0_ |= 0x00000020;
                }
            }
            /**
             * <code>repeated uint32 width = 5;</code>
             */
            public java.util.List<java.lang.Integer>
            getWidthList() {
                return java.util.Collections.unmodifiableList(width_);
            }
            /**
             * <code>repeated uint32 width = 5;</code>
             */
            public int getWidthCount() {
                return width_.size();
            }
            /**
             * <code>repeated uint32 width = 5;</code>
             */
            public int getWidth(int index) {
                return width_.get(index);
            }
            /**
             * <code>repeated uint32 width = 5;</code>
             */
            public Builder setWidth(
                    int index, int value) {
                ensureWidthIsMutable();
                width_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated uint32 width = 5;</code>
             */
            public Builder addWidth(int value) {
                ensureWidthIsMutable();
                width_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated uint32 width = 5;</code>
             */
            public Builder addAllWidth(
                    java.lang.Iterable<? extends java.lang.Integer> values) {
                ensureWidthIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, width_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated uint32 width = 5;</code>
             */
            public Builder clearWidth() {
                width_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000020);
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.DummyDataParameter)
        }

        static {
            defaultInstance = new DummyDataParameter(true);
            defaultInstance.initFields();
        }

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

    public interface EltwiseParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.EltwiseParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional .caffe.EltwiseParameter.EltwiseOp operation = 1 [default = SUM];</code>
         *
         * <pre>
         * element-wise operation
         * </pre>
         */
        boolean hasOperation();
        /**
         * <code>optional .caffe.EltwiseParameter.EltwiseOp operation = 1 [default = SUM];</code>
         *
         * <pre>
         * element-wise operation
         * </pre>
         */
        caffe.Loadcaffe.EltwiseParameter.EltwiseOp getOperation();

        /**
         * <code>repeated float coeff = 2;</code>
         *
         * <pre>
         * blob-wise coefficient for SUM operation
         * </pre>
         */
        java.util.List<java.lang.Float> getCoeffList();
        /**
         * <code>repeated float coeff = 2;</code>
         *
         * <pre>
         * blob-wise coefficient for SUM operation
         * </pre>
         */
        int getCoeffCount();
        /**
         * <code>repeated float coeff = 2;</code>
         *
         * <pre>
         * blob-wise coefficient for SUM operation
         * </pre>
         */
        float getCoeff(int index);

        /**
         * <code>optional bool stable_prod_grad = 3 [default = true];</code>
         *
         * <pre>
         * Whether to use an asymptotically slower (for &gt;2 inputs) but stabler method
         * of computing the gradient for the PROD operation. (No effect for SUM op.)
         * </pre>
         */
        boolean hasStableProdGrad();
        /**
         * <code>optional bool stable_prod_grad = 3 [default = true];</code>
         *
         * <pre>
         * Whether to use an asymptotically slower (for &gt;2 inputs) but stabler method
         * of computing the gradient for the PROD operation. (No effect for SUM op.)
         * </pre>
         */
        boolean getStableProdGrad();
    }
    /**
     * Protobuf type {@code caffe.EltwiseParameter}
     *
     * <pre>
     * Message that stores parameters used by EltwiseLayer
     * </pre>
     */
    public static final class EltwiseParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.EltwiseParameter)
            EltwiseParameterOrBuilder {
        // Use EltwiseParameter.newBuilder() to construct.
        private EltwiseParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private EltwiseParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final EltwiseParameter defaultInstance;
        public static EltwiseParameter getDefaultInstance() {
            return defaultInstance;
        }

        public EltwiseParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private EltwiseParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            int rawValue = input.readEnum();
                            caffe.Loadcaffe.EltwiseParameter.EltwiseOp value = caffe.Loadcaffe.EltwiseParameter.EltwiseOp.valueOf(rawValue);
                            if (value == null) {
                                unknownFields.mergeVarintField(1, rawValue);
                            } else {
                                bitField0_ |= 0x00000001;
                                operation_ = value;
                            }
                            break;
                        }
                        case 21: {
                            if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                                coeff_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x00000002;
                            }
                            coeff_.add(input.readFloat());
                            break;
                        }
                        case 18: {
                            int length = input.readRawVarint32();
                            int limit = input.pushLimit(length);
                            if (!((mutable_bitField0_ & 0x00000002) == 0x00000002) && input.getBytesUntilLimit() > 0) {
                                coeff_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x00000002;
                            }
                            while (input.getBytesUntilLimit() > 0) {
                                coeff_.add(input.readFloat());
                            }
                            input.popLimit(limit);
                            break;
                        }
                        case 24: {
                            bitField0_ |= 0x00000002;
                            stableProdGrad_ = input.readBool();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                    coeff_ = java.util.Collections.unmodifiableList(coeff_);
                }
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_EltwiseParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_EltwiseParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.EltwiseParameter.class, caffe.Loadcaffe.EltwiseParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<EltwiseParameter> PARSER =
                new com.google.protobuf.AbstractParser<EltwiseParameter>() {
                    public EltwiseParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new EltwiseParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<EltwiseParameter> getParserForType() {
            return PARSER;
        }

        /**
         * Protobuf enum {@code caffe.EltwiseParameter.EltwiseOp}
         */
        public enum EltwiseOp
                implements com.google.protobuf.ProtocolMessageEnum {
            /**
             * <code>PROD = 0;</code>
             */
            PROD(0, 0),
            /**
             * <code>SUM = 1;</code>
             */
            SUM(1, 1),
            /**
             * <code>MAX = 2;</code>
             */
            MAX(2, 2),
            ;

            /**
             * <code>PROD = 0;</code>
             */
            public static final int PROD_VALUE = 0;
            /**
             * <code>SUM = 1;</code>
             */
            public static final int SUM_VALUE = 1;
            /**
             * <code>MAX = 2;</code>
             */
            public static final int MAX_VALUE = 2;


            public final int getNumber() { return value; }

            public static EltwiseOp valueOf(int value) {
                switch (value) {
                    case 0: return PROD;
                    case 1: return SUM;
                    case 2: return MAX;
                    default: return null;
                }
            }

            public static com.google.protobuf.Internal.EnumLiteMap<EltwiseOp>
            internalGetValueMap() {
                return internalValueMap;
            }
            private static com.google.protobuf.Internal.EnumLiteMap<EltwiseOp>
                    internalValueMap =
                    new com.google.protobuf.Internal.EnumLiteMap<EltwiseOp>() {
                        public EltwiseOp findValueByNumber(int number) {
                            return EltwiseOp.valueOf(number);
                        }
                    };

            public final com.google.protobuf.Descriptors.EnumValueDescriptor
            getValueDescriptor() {
                return getDescriptor().getValues().get(index);
            }
            public final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptorForType() {
                return getDescriptor();
            }
            public static final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptor() {
                return caffe.Loadcaffe.EltwiseParameter.getDescriptor().getEnumTypes().get(0);
            }

            private static final EltwiseOp[] VALUES = values();

            public static EltwiseOp valueOf(
                    com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new java.lang.IllegalArgumentException(
                            "EnumValueDescriptor is not for this type.");
                }
                return VALUES[desc.getIndex()];
            }

            private final int index;
            private final int value;

            private EltwiseOp(int index, int value) {
                this.index = index;
                this.value = value;
            }

            // @@protoc_insertion_point(enum_scope:caffe.EltwiseParameter.EltwiseOp)
        }

        private int bitField0_;
        public static final int OPERATION_FIELD_NUMBER = 1;
        private caffe.Loadcaffe.EltwiseParameter.EltwiseOp operation_;
        /**
         * <code>optional .caffe.EltwiseParameter.EltwiseOp operation = 1 [default = SUM];</code>
         *
         * <pre>
         * element-wise operation
         * </pre>
         */
        public boolean hasOperation() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional .caffe.EltwiseParameter.EltwiseOp operation = 1 [default = SUM];</code>
         *
         * <pre>
         * element-wise operation
         * </pre>
         */
        public caffe.Loadcaffe.EltwiseParameter.EltwiseOp getOperation() {
            return operation_;
        }

        public static final int COEFF_FIELD_NUMBER = 2;
        private java.util.List<java.lang.Float> coeff_;
        /**
         * <code>repeated float coeff = 2;</code>
         *
         * <pre>
         * blob-wise coefficient for SUM operation
         * </pre>
         */
        public java.util.List<java.lang.Float>
        getCoeffList() {
            return coeff_;
        }
        /**
         * <code>repeated float coeff = 2;</code>
         *
         * <pre>
         * blob-wise coefficient for SUM operation
         * </pre>
         */
        public int getCoeffCount() {
            return coeff_.size();
        }
        /**
         * <code>repeated float coeff = 2;</code>
         *
         * <pre>
         * blob-wise coefficient for SUM operation
         * </pre>
         */
        public float getCoeff(int index) {
            return coeff_.get(index);
        }

        public static final int STABLE_PROD_GRAD_FIELD_NUMBER = 3;
        private boolean stableProdGrad_;
        /**
         * <code>optional bool stable_prod_grad = 3 [default = true];</code>
         *
         * <pre>
         * Whether to use an asymptotically slower (for &gt;2 inputs) but stabler method
         * of computing the gradient for the PROD operation. (No effect for SUM op.)
         * </pre>
         */
        public boolean hasStableProdGrad() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional bool stable_prod_grad = 3 [default = true];</code>
         *
         * <pre>
         * Whether to use an asymptotically slower (for &gt;2 inputs) but stabler method
         * of computing the gradient for the PROD operation. (No effect for SUM op.)
         * </pre>
         */
        public boolean getStableProdGrad() {
            return stableProdGrad_;
        }

        private void initFields() {
            operation_ = caffe.Loadcaffe.EltwiseParameter.EltwiseOp.SUM;
            coeff_ = java.util.Collections.emptyList();
            stableProdGrad_ = true;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeEnum(1, operation_.getNumber());
            }
            for (int i = 0; i < coeff_.size(); i++) {
                output.writeFloat(2, coeff_.get(i));
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeBool(3, stableProdGrad_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeEnumSize(1, operation_.getNumber());
            }
            {
                int dataSize = 0;
                dataSize = 4 * getCoeffList().size();
                size += dataSize;
                size += 1 * getCoeffList().size();
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(3, stableProdGrad_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.EltwiseParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.EltwiseParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.EltwiseParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.EltwiseParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.EltwiseParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.EltwiseParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.EltwiseParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.EltwiseParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.EltwiseParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.EltwiseParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.EltwiseParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.EltwiseParameter}
         *
         * <pre>
         * Message that stores parameters used by EltwiseLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.EltwiseParameter)
                caffe.Loadcaffe.EltwiseParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_EltwiseParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_EltwiseParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.EltwiseParameter.class, caffe.Loadcaffe.EltwiseParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.EltwiseParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                operation_ = caffe.Loadcaffe.EltwiseParameter.EltwiseOp.SUM;
                bitField0_ = (bitField0_ & ~0x00000001);
                coeff_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000002);
                stableProdGrad_ = true;
                bitField0_ = (bitField0_ & ~0x00000004);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_EltwiseParameter_descriptor;
            }

            public caffe.Loadcaffe.EltwiseParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.EltwiseParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.EltwiseParameter build() {
                caffe.Loadcaffe.EltwiseParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.EltwiseParameter buildPartial() {
                caffe.Loadcaffe.EltwiseParameter result = new caffe.Loadcaffe.EltwiseParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.operation_ = operation_;
                if (((bitField0_ & 0x00000002) == 0x00000002)) {
                    coeff_ = java.util.Collections.unmodifiableList(coeff_);
                    bitField0_ = (bitField0_ & ~0x00000002);
                }
                result.coeff_ = coeff_;
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.stableProdGrad_ = stableProdGrad_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.EltwiseParameter) {
                    return mergeFrom((caffe.Loadcaffe.EltwiseParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.EltwiseParameter other) {
                if (other == caffe.Loadcaffe.EltwiseParameter.getDefaultInstance()) return this;
                if (other.hasOperation()) {
                    setOperation(other.getOperation());
                }
                if (!other.coeff_.isEmpty()) {
                    if (coeff_.isEmpty()) {
                        coeff_ = other.coeff_;
                        bitField0_ = (bitField0_ & ~0x00000002);
                    } else {
                        ensureCoeffIsMutable();
                        coeff_.addAll(other.coeff_);
                    }
                    onChanged();
                }
                if (other.hasStableProdGrad()) {
                    setStableProdGrad(other.getStableProdGrad());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.EltwiseParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.EltwiseParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private caffe.Loadcaffe.EltwiseParameter.EltwiseOp operation_ = caffe.Loadcaffe.EltwiseParameter.EltwiseOp.SUM;
            /**
             * <code>optional .caffe.EltwiseParameter.EltwiseOp operation = 1 [default = SUM];</code>
             *
             * <pre>
             * element-wise operation
             * </pre>
             */
            public boolean hasOperation() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional .caffe.EltwiseParameter.EltwiseOp operation = 1 [default = SUM];</code>
             *
             * <pre>
             * element-wise operation
             * </pre>
             */
            public caffe.Loadcaffe.EltwiseParameter.EltwiseOp getOperation() {
                return operation_;
            }
            /**
             * <code>optional .caffe.EltwiseParameter.EltwiseOp operation = 1 [default = SUM];</code>
             *
             * <pre>
             * element-wise operation
             * </pre>
             */
            public Builder setOperation(caffe.Loadcaffe.EltwiseParameter.EltwiseOp value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                operation_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional .caffe.EltwiseParameter.EltwiseOp operation = 1 [default = SUM];</code>
             *
             * <pre>
             * element-wise operation
             * </pre>
             */
            public Builder clearOperation() {
                bitField0_ = (bitField0_ & ~0x00000001);
                operation_ = caffe.Loadcaffe.EltwiseParameter.EltwiseOp.SUM;
                onChanged();
                return this;
            }

            private java.util.List<java.lang.Float> coeff_ = java.util.Collections.emptyList();
            private void ensureCoeffIsMutable() {
                if (!((bitField0_ & 0x00000002) == 0x00000002)) {
                    coeff_ = new java.util.ArrayList<java.lang.Float>(coeff_);
                    bitField0_ |= 0x00000002;
                }
            }
            /**
             * <code>repeated float coeff = 2;</code>
             *
             * <pre>
             * blob-wise coefficient for SUM operation
             * </pre>
             */
            public java.util.List<java.lang.Float>
            getCoeffList() {
                return java.util.Collections.unmodifiableList(coeff_);
            }
            /**
             * <code>repeated float coeff = 2;</code>
             *
             * <pre>
             * blob-wise coefficient for SUM operation
             * </pre>
             */
            public int getCoeffCount() {
                return coeff_.size();
            }
            /**
             * <code>repeated float coeff = 2;</code>
             *
             * <pre>
             * blob-wise coefficient for SUM operation
             * </pre>
             */
            public float getCoeff(int index) {
                return coeff_.get(index);
            }
            /**
             * <code>repeated float coeff = 2;</code>
             *
             * <pre>
             * blob-wise coefficient for SUM operation
             * </pre>
             */
            public Builder setCoeff(
                    int index, float value) {
                ensureCoeffIsMutable();
                coeff_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float coeff = 2;</code>
             *
             * <pre>
             * blob-wise coefficient for SUM operation
             * </pre>
             */
            public Builder addCoeff(float value) {
                ensureCoeffIsMutable();
                coeff_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float coeff = 2;</code>
             *
             * <pre>
             * blob-wise coefficient for SUM operation
             * </pre>
             */
            public Builder addAllCoeff(
                    java.lang.Iterable<? extends java.lang.Float> values) {
                ensureCoeffIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, coeff_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float coeff = 2;</code>
             *
             * <pre>
             * blob-wise coefficient for SUM operation
             * </pre>
             */
            public Builder clearCoeff() {
                coeff_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000002);
                onChanged();
                return this;
            }

            private boolean stableProdGrad_ = true;
            /**
             * <code>optional bool stable_prod_grad = 3 [default = true];</code>
             *
             * <pre>
             * Whether to use an asymptotically slower (for &gt;2 inputs) but stabler method
             * of computing the gradient for the PROD operation. (No effect for SUM op.)
             * </pre>
             */
            public boolean hasStableProdGrad() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional bool stable_prod_grad = 3 [default = true];</code>
             *
             * <pre>
             * Whether to use an asymptotically slower (for &gt;2 inputs) but stabler method
             * of computing the gradient for the PROD operation. (No effect for SUM op.)
             * </pre>
             */
            public boolean getStableProdGrad() {
                return stableProdGrad_;
            }
            /**
             * <code>optional bool stable_prod_grad = 3 [default = true];</code>
             *
             * <pre>
             * Whether to use an asymptotically slower (for &gt;2 inputs) but stabler method
             * of computing the gradient for the PROD operation. (No effect for SUM op.)
             * </pre>
             */
            public Builder setStableProdGrad(boolean value) {
                bitField0_ |= 0x00000004;
                stableProdGrad_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool stable_prod_grad = 3 [default = true];</code>
             *
             * <pre>
             * Whether to use an asymptotically slower (for &gt;2 inputs) but stabler method
             * of computing the gradient for the PROD operation. (No effect for SUM op.)
             * </pre>
             */
            public Builder clearStableProdGrad() {
                bitField0_ = (bitField0_ & ~0x00000004);
                stableProdGrad_ = true;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.EltwiseParameter)
        }

        static {
            defaultInstance = new EltwiseParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.EltwiseParameter)
    }

    public interface ExpParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.ExpParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional float base = 1 [default = -1];</code>
         *
         * <pre>
         * ExpLayer computes outputs y = base ^ (shift + scale * x), for base &gt; 0.
         * Or if base is set to the default (-1), base is set to e,
         * so y = exp(shift + scale * x).
         * </pre>
         */
        boolean hasBase();
        /**
         * <code>optional float base = 1 [default = -1];</code>
         *
         * <pre>
         * ExpLayer computes outputs y = base ^ (shift + scale * x), for base &gt; 0.
         * Or if base is set to the default (-1), base is set to e,
         * so y = exp(shift + scale * x).
         * </pre>
         */
        float getBase();

        /**
         * <code>optional float scale = 2 [default = 1];</code>
         */
        boolean hasScale();
        /**
         * <code>optional float scale = 2 [default = 1];</code>
         */
        float getScale();

        /**
         * <code>optional float shift = 3 [default = 0];</code>
         */
        boolean hasShift();
        /**
         * <code>optional float shift = 3 [default = 0];</code>
         */
        float getShift();
    }
    /**
     * Protobuf type {@code caffe.ExpParameter}
     *
     * <pre>
     * Message that stores parameters used by ExpLayer
     * </pre>
     */
    public static final class ExpParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.ExpParameter)
            ExpParameterOrBuilder {
        // Use ExpParameter.newBuilder() to construct.
        private ExpParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private ExpParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final ExpParameter defaultInstance;
        public static ExpParameter getDefaultInstance() {
            return defaultInstance;
        }

        public ExpParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private ExpParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 13: {
                            bitField0_ |= 0x00000001;
                            base_ = input.readFloat();
                            break;
                        }
                        case 21: {
                            bitField0_ |= 0x00000002;
                            scale_ = input.readFloat();
                            break;
                        }
                        case 29: {
                            bitField0_ |= 0x00000004;
                            shift_ = input.readFloat();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_ExpParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_ExpParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.ExpParameter.class, caffe.Loadcaffe.ExpParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<ExpParameter> PARSER =
                new com.google.protobuf.AbstractParser<ExpParameter>() {
                    public ExpParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new ExpParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<ExpParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int BASE_FIELD_NUMBER = 1;
        private float base_;
        /**
         * <code>optional float base = 1 [default = -1];</code>
         *
         * <pre>
         * ExpLayer computes outputs y = base ^ (shift + scale * x), for base &gt; 0.
         * Or if base is set to the default (-1), base is set to e,
         * so y = exp(shift + scale * x).
         * </pre>
         */
        public boolean hasBase() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional float base = 1 [default = -1];</code>
         *
         * <pre>
         * ExpLayer computes outputs y = base ^ (shift + scale * x), for base &gt; 0.
         * Or if base is set to the default (-1), base is set to e,
         * so y = exp(shift + scale * x).
         * </pre>
         */
        public float getBase() {
            return base_;
        }

        public static final int SCALE_FIELD_NUMBER = 2;
        private float scale_;
        /**
         * <code>optional float scale = 2 [default = 1];</code>
         */
        public boolean hasScale() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional float scale = 2 [default = 1];</code>
         */
        public float getScale() {
            return scale_;
        }

        public static final int SHIFT_FIELD_NUMBER = 3;
        private float shift_;
        /**
         * <code>optional float shift = 3 [default = 0];</code>
         */
        public boolean hasShift() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional float shift = 3 [default = 0];</code>
         */
        public float getShift() {
            return shift_;
        }

        private void initFields() {
            base_ = -1F;
            scale_ = 1F;
            shift_ = 0F;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeFloat(1, base_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeFloat(2, scale_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeFloat(3, shift_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(1, base_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(2, scale_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(3, shift_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.ExpParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.ExpParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.ExpParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.ExpParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.ExpParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.ExpParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.ExpParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.ExpParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.ExpParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.ExpParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.ExpParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.ExpParameter}
         *
         * <pre>
         * Message that stores parameters used by ExpLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.ExpParameter)
                caffe.Loadcaffe.ExpParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_ExpParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_ExpParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.ExpParameter.class, caffe.Loadcaffe.ExpParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.ExpParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                base_ = -1F;
                bitField0_ = (bitField0_ & ~0x00000001);
                scale_ = 1F;
                bitField0_ = (bitField0_ & ~0x00000002);
                shift_ = 0F;
                bitField0_ = (bitField0_ & ~0x00000004);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_ExpParameter_descriptor;
            }

            public caffe.Loadcaffe.ExpParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.ExpParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.ExpParameter build() {
                caffe.Loadcaffe.ExpParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.ExpParameter buildPartial() {
                caffe.Loadcaffe.ExpParameter result = new caffe.Loadcaffe.ExpParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.base_ = base_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.scale_ = scale_;
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000004;
                }
                result.shift_ = shift_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.ExpParameter) {
                    return mergeFrom((caffe.Loadcaffe.ExpParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.ExpParameter other) {
                if (other == caffe.Loadcaffe.ExpParameter.getDefaultInstance()) return this;
                if (other.hasBase()) {
                    setBase(other.getBase());
                }
                if (other.hasScale()) {
                    setScale(other.getScale());
                }
                if (other.hasShift()) {
                    setShift(other.getShift());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.ExpParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.ExpParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private float base_ = -1F;
            /**
             * <code>optional float base = 1 [default = -1];</code>
             *
             * <pre>
             * ExpLayer computes outputs y = base ^ (shift + scale * x), for base &gt; 0.
             * Or if base is set to the default (-1), base is set to e,
             * so y = exp(shift + scale * x).
             * </pre>
             */
            public boolean hasBase() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional float base = 1 [default = -1];</code>
             *
             * <pre>
             * ExpLayer computes outputs y = base ^ (shift + scale * x), for base &gt; 0.
             * Or if base is set to the default (-1), base is set to e,
             * so y = exp(shift + scale * x).
             * </pre>
             */
            public float getBase() {
                return base_;
            }
            /**
             * <code>optional float base = 1 [default = -1];</code>
             *
             * <pre>
             * ExpLayer computes outputs y = base ^ (shift + scale * x), for base &gt; 0.
             * Or if base is set to the default (-1), base is set to e,
             * so y = exp(shift + scale * x).
             * </pre>
             */
            public Builder setBase(float value) {
                bitField0_ |= 0x00000001;
                base_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float base = 1 [default = -1];</code>
             *
             * <pre>
             * ExpLayer computes outputs y = base ^ (shift + scale * x), for base &gt; 0.
             * Or if base is set to the default (-1), base is set to e,
             * so y = exp(shift + scale * x).
             * </pre>
             */
            public Builder clearBase() {
                bitField0_ = (bitField0_ & ~0x00000001);
                base_ = -1F;
                onChanged();
                return this;
            }

            private float scale_ = 1F;
            /**
             * <code>optional float scale = 2 [default = 1];</code>
             */
            public boolean hasScale() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional float scale = 2 [default = 1];</code>
             */
            public float getScale() {
                return scale_;
            }
            /**
             * <code>optional float scale = 2 [default = 1];</code>
             */
            public Builder setScale(float value) {
                bitField0_ |= 0x00000002;
                scale_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float scale = 2 [default = 1];</code>
             */
            public Builder clearScale() {
                bitField0_ = (bitField0_ & ~0x00000002);
                scale_ = 1F;
                onChanged();
                return this;
            }

            private float shift_ ;
            /**
             * <code>optional float shift = 3 [default = 0];</code>
             */
            public boolean hasShift() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional float shift = 3 [default = 0];</code>
             */
            public float getShift() {
                return shift_;
            }
            /**
             * <code>optional float shift = 3 [default = 0];</code>
             */
            public Builder setShift(float value) {
                bitField0_ |= 0x00000004;
                shift_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float shift = 3 [default = 0];</code>
             */
            public Builder clearShift() {
                bitField0_ = (bitField0_ & ~0x00000004);
                shift_ = 0F;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.ExpParameter)
        }

        static {
            defaultInstance = new ExpParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.ExpParameter)
    }

    public interface HDF5DataParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.HDF5DataParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        boolean hasSource();
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        java.lang.String getSource();
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        com.google.protobuf.ByteString
        getSourceBytes();

        /**
         * <code>optional uint32 batch_size = 2;</code>
         *
         * <pre>
         * Specify the batch size.
         * </pre>
         */
        boolean hasBatchSize();
        /**
         * <code>optional uint32 batch_size = 2;</code>
         *
         * <pre>
         * Specify the batch size.
         * </pre>
         */
        int getBatchSize();

        /**
         * <code>optional bool shuffle = 3 [default = false];</code>
         *
         * <pre>
         * Specify whether to shuffle the data.
         * If shuffle == true, the ordering of the HDF5 files is shuffled,
         * and the ordering of data within any given HDF5 file is shuffled,
         * but data between different files are not interleaved; all of a file's
         * data are output (in a random order) before moving onto another file.
         * </pre>
         */
        boolean hasShuffle();
        /**
         * <code>optional bool shuffle = 3 [default = false];</code>
         *
         * <pre>
         * Specify whether to shuffle the data.
         * If shuffle == true, the ordering of the HDF5 files is shuffled,
         * and the ordering of data within any given HDF5 file is shuffled,
         * but data between different files are not interleaved; all of a file's
         * data are output (in a random order) before moving onto another file.
         * </pre>
         */
        boolean getShuffle();
    }
    /**
     * Protobuf type {@code caffe.HDF5DataParameter}
     *
     * <pre>
     * Message that stores parameters used by HDF5DataLayer
     * </pre>
     */
    public static final class HDF5DataParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.HDF5DataParameter)
            HDF5DataParameterOrBuilder {
        // Use HDF5DataParameter.newBuilder() to construct.
        private HDF5DataParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private HDF5DataParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final HDF5DataParameter defaultInstance;
        public static HDF5DataParameter getDefaultInstance() {
            return defaultInstance;
        }

        public HDF5DataParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private HDF5DataParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 10: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000001;
                            source_ = bs;
                            break;
                        }
                        case 16: {
                            bitField0_ |= 0x00000002;
                            batchSize_ = input.readUInt32();
                            break;
                        }
                        case 24: {
                            bitField0_ |= 0x00000004;
                            shuffle_ = input.readBool();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_HDF5DataParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_HDF5DataParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.HDF5DataParameter.class, caffe.Loadcaffe.HDF5DataParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<HDF5DataParameter> PARSER =
                new com.google.protobuf.AbstractParser<HDF5DataParameter>() {
                    public HDF5DataParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new HDF5DataParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<HDF5DataParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int SOURCE_FIELD_NUMBER = 1;
        private java.lang.Object source_;
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        public boolean hasSource() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        public java.lang.String getSource() {
            java.lang.Object ref = source_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    source_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        public com.google.protobuf.ByteString
        getSourceBytes() {
            java.lang.Object ref = source_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                source_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int BATCH_SIZE_FIELD_NUMBER = 2;
        private int batchSize_;
        /**
         * <code>optional uint32 batch_size = 2;</code>
         *
         * <pre>
         * Specify the batch size.
         * </pre>
         */
        public boolean hasBatchSize() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional uint32 batch_size = 2;</code>
         *
         * <pre>
         * Specify the batch size.
         * </pre>
         */
        public int getBatchSize() {
            return batchSize_;
        }

        public static final int SHUFFLE_FIELD_NUMBER = 3;
        private boolean shuffle_;
        /**
         * <code>optional bool shuffle = 3 [default = false];</code>
         *
         * <pre>
         * Specify whether to shuffle the data.
         * If shuffle == true, the ordering of the HDF5 files is shuffled,
         * and the ordering of data within any given HDF5 file is shuffled,
         * but data between different files are not interleaved; all of a file's
         * data are output (in a random order) before moving onto another file.
         * </pre>
         */
        public boolean hasShuffle() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional bool shuffle = 3 [default = false];</code>
         *
         * <pre>
         * Specify whether to shuffle the data.
         * If shuffle == true, the ordering of the HDF5 files is shuffled,
         * and the ordering of data within any given HDF5 file is shuffled,
         * but data between different files are not interleaved; all of a file's
         * data are output (in a random order) before moving onto another file.
         * </pre>
         */
        public boolean getShuffle() {
            return shuffle_;
        }

        private void initFields() {
            source_ = "";
            batchSize_ = 0;
            shuffle_ = false;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeBytes(1, getSourceBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeUInt32(2, batchSize_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeBool(3, shuffle_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(1, getSourceBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(2, batchSize_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(3, shuffle_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.HDF5DataParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.HDF5DataParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.HDF5DataParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.HDF5DataParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.HDF5DataParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.HDF5DataParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.HDF5DataParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.HDF5DataParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.HDF5DataParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.HDF5DataParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.HDF5DataParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.HDF5DataParameter}
         *
         * <pre>
         * Message that stores parameters used by HDF5DataLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.HDF5DataParameter)
                caffe.Loadcaffe.HDF5DataParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_HDF5DataParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_HDF5DataParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.HDF5DataParameter.class, caffe.Loadcaffe.HDF5DataParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.HDF5DataParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                source_ = "";
                bitField0_ = (bitField0_ & ~0x00000001);
                batchSize_ = 0;
                bitField0_ = (bitField0_ & ~0x00000002);
                shuffle_ = false;
                bitField0_ = (bitField0_ & ~0x00000004);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_HDF5DataParameter_descriptor;
            }

            public caffe.Loadcaffe.HDF5DataParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.HDF5DataParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.HDF5DataParameter build() {
                caffe.Loadcaffe.HDF5DataParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.HDF5DataParameter buildPartial() {
                caffe.Loadcaffe.HDF5DataParameter result = new caffe.Loadcaffe.HDF5DataParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.source_ = source_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.batchSize_ = batchSize_;
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000004;
                }
                result.shuffle_ = shuffle_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.HDF5DataParameter) {
                    return mergeFrom((caffe.Loadcaffe.HDF5DataParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.HDF5DataParameter other) {
                if (other == caffe.Loadcaffe.HDF5DataParameter.getDefaultInstance()) return this;
                if (other.hasSource()) {
                    bitField0_ |= 0x00000001;
                    source_ = other.source_;
                    onChanged();
                }
                if (other.hasBatchSize()) {
                    setBatchSize(other.getBatchSize());
                }
                if (other.hasShuffle()) {
                    setShuffle(other.getShuffle());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.HDF5DataParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.HDF5DataParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private java.lang.Object source_ = "";
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public boolean hasSource() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public java.lang.String getSource() {
                java.lang.Object ref = source_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        source_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public com.google.protobuf.ByteString
            getSourceBytes() {
                java.lang.Object ref = source_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    source_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public Builder setSource(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                source_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public Builder clearSource() {
                bitField0_ = (bitField0_ & ~0x00000001);
                source_ = getDefaultInstance().getSource();
                onChanged();
                return this;
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public Builder setSourceBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                source_ = value;
                onChanged();
                return this;
            }

            private int batchSize_ ;
            /**
             * <code>optional uint32 batch_size = 2;</code>
             *
             * <pre>
             * Specify the batch size.
             * </pre>
             */
            public boolean hasBatchSize() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional uint32 batch_size = 2;</code>
             *
             * <pre>
             * Specify the batch size.
             * </pre>
             */
            public int getBatchSize() {
                return batchSize_;
            }
            /**
             * <code>optional uint32 batch_size = 2;</code>
             *
             * <pre>
             * Specify the batch size.
             * </pre>
             */
            public Builder setBatchSize(int value) {
                bitField0_ |= 0x00000002;
                batchSize_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 batch_size = 2;</code>
             *
             * <pre>
             * Specify the batch size.
             * </pre>
             */
            public Builder clearBatchSize() {
                bitField0_ = (bitField0_ & ~0x00000002);
                batchSize_ = 0;
                onChanged();
                return this;
            }

            private boolean shuffle_ ;
            /**
             * <code>optional bool shuffle = 3 [default = false];</code>
             *
             * <pre>
             * Specify whether to shuffle the data.
             * If shuffle == true, the ordering of the HDF5 files is shuffled,
             * and the ordering of data within any given HDF5 file is shuffled,
             * but data between different files are not interleaved; all of a file's
             * data are output (in a random order) before moving onto another file.
             * </pre>
             */
            public boolean hasShuffle() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional bool shuffle = 3 [default = false];</code>
             *
             * <pre>
             * Specify whether to shuffle the data.
             * If shuffle == true, the ordering of the HDF5 files is shuffled,
             * and the ordering of data within any given HDF5 file is shuffled,
             * but data between different files are not interleaved; all of a file's
             * data are output (in a random order) before moving onto another file.
             * </pre>
             */
            public boolean getShuffle() {
                return shuffle_;
            }
            /**
             * <code>optional bool shuffle = 3 [default = false];</code>
             *
             * <pre>
             * Specify whether to shuffle the data.
             * If shuffle == true, the ordering of the HDF5 files is shuffled,
             * and the ordering of data within any given HDF5 file is shuffled,
             * but data between different files are not interleaved; all of a file's
             * data are output (in a random order) before moving onto another file.
             * </pre>
             */
            public Builder setShuffle(boolean value) {
                bitField0_ |= 0x00000004;
                shuffle_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool shuffle = 3 [default = false];</code>
             *
             * <pre>
             * Specify whether to shuffle the data.
             * If shuffle == true, the ordering of the HDF5 files is shuffled,
             * and the ordering of data within any given HDF5 file is shuffled,
             * but data between different files are not interleaved; all of a file's
             * data are output (in a random order) before moving onto another file.
             * </pre>
             */
            public Builder clearShuffle() {
                bitField0_ = (bitField0_ & ~0x00000004);
                shuffle_ = false;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.HDF5DataParameter)
        }

        static {
            defaultInstance = new HDF5DataParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.HDF5DataParameter)
    }

    public interface HDF5OutputParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.HDF5OutputParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional string file_name = 1;</code>
         */
        boolean hasFileName();
        /**
         * <code>optional string file_name = 1;</code>
         */
        java.lang.String getFileName();
        /**
         * <code>optional string file_name = 1;</code>
         */
        com.google.protobuf.ByteString
        getFileNameBytes();
    }
    /**
     * Protobuf type {@code caffe.HDF5OutputParameter}
     *
     * <pre>
     * Message that stores parameters used by HDF5OutputLayer
     * </pre>
     */
    public static final class HDF5OutputParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.HDF5OutputParameter)
            HDF5OutputParameterOrBuilder {
        // Use HDF5OutputParameter.newBuilder() to construct.
        private HDF5OutputParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private HDF5OutputParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final HDF5OutputParameter defaultInstance;
        public static HDF5OutputParameter getDefaultInstance() {
            return defaultInstance;
        }

        public HDF5OutputParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private HDF5OutputParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 10: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000001;
                            fileName_ = bs;
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_HDF5OutputParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_HDF5OutputParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.HDF5OutputParameter.class, caffe.Loadcaffe.HDF5OutputParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<HDF5OutputParameter> PARSER =
                new com.google.protobuf.AbstractParser<HDF5OutputParameter>() {
                    public HDF5OutputParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new HDF5OutputParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<HDF5OutputParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int FILE_NAME_FIELD_NUMBER = 1;
        private java.lang.Object fileName_;
        /**
         * <code>optional string file_name = 1;</code>
         */
        public boolean hasFileName() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string file_name = 1;</code>
         */
        public java.lang.String getFileName() {
            java.lang.Object ref = fileName_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    fileName_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string file_name = 1;</code>
         */
        public com.google.protobuf.ByteString
        getFileNameBytes() {
            java.lang.Object ref = fileName_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                fileName_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        private void initFields() {
            fileName_ = "";
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeBytes(1, getFileNameBytes());
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(1, getFileNameBytes());
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.HDF5OutputParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.HDF5OutputParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.HDF5OutputParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.HDF5OutputParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.HDF5OutputParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.HDF5OutputParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.HDF5OutputParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.HDF5OutputParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.HDF5OutputParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.HDF5OutputParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.HDF5OutputParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.HDF5OutputParameter}
         *
         * <pre>
         * Message that stores parameters used by HDF5OutputLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.HDF5OutputParameter)
                caffe.Loadcaffe.HDF5OutputParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_HDF5OutputParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_HDF5OutputParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.HDF5OutputParameter.class, caffe.Loadcaffe.HDF5OutputParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.HDF5OutputParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                fileName_ = "";
                bitField0_ = (bitField0_ & ~0x00000001);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_HDF5OutputParameter_descriptor;
            }

            public caffe.Loadcaffe.HDF5OutputParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.HDF5OutputParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.HDF5OutputParameter build() {
                caffe.Loadcaffe.HDF5OutputParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.HDF5OutputParameter buildPartial() {
                caffe.Loadcaffe.HDF5OutputParameter result = new caffe.Loadcaffe.HDF5OutputParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.fileName_ = fileName_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.HDF5OutputParameter) {
                    return mergeFrom((caffe.Loadcaffe.HDF5OutputParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.HDF5OutputParameter other) {
                if (other == caffe.Loadcaffe.HDF5OutputParameter.getDefaultInstance()) return this;
                if (other.hasFileName()) {
                    bitField0_ |= 0x00000001;
                    fileName_ = other.fileName_;
                    onChanged();
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.HDF5OutputParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.HDF5OutputParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private java.lang.Object fileName_ = "";
            /**
             * <code>optional string file_name = 1;</code>
             */
            public boolean hasFileName() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional string file_name = 1;</code>
             */
            public java.lang.String getFileName() {
                java.lang.Object ref = fileName_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        fileName_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string file_name = 1;</code>
             */
            public com.google.protobuf.ByteString
            getFileNameBytes() {
                java.lang.Object ref = fileName_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    fileName_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string file_name = 1;</code>
             */
            public Builder setFileName(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                fileName_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string file_name = 1;</code>
             */
            public Builder clearFileName() {
                bitField0_ = (bitField0_ & ~0x00000001);
                fileName_ = getDefaultInstance().getFileName();
                onChanged();
                return this;
            }
            /**
             * <code>optional string file_name = 1;</code>
             */
            public Builder setFileNameBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                fileName_ = value;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.HDF5OutputParameter)
        }

        static {
            defaultInstance = new HDF5OutputParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.HDF5OutputParameter)
    }

    public interface HingeLossParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.HingeLossParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional .caffe.HingeLossParameter.Norm norm = 1 [default = L1];</code>
         *
         * <pre>
         * Specify the Norm to use L1 or L2
         * </pre>
         */
        boolean hasNorm();
        /**
         * <code>optional .caffe.HingeLossParameter.Norm norm = 1 [default = L1];</code>
         *
         * <pre>
         * Specify the Norm to use L1 or L2
         * </pre>
         */
        caffe.Loadcaffe.HingeLossParameter.Norm getNorm();
    }
    /**
     * Protobuf type {@code caffe.HingeLossParameter}
     */
    public static final class HingeLossParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.HingeLossParameter)
            HingeLossParameterOrBuilder {
        // Use HingeLossParameter.newBuilder() to construct.
        private HingeLossParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private HingeLossParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final HingeLossParameter defaultInstance;
        public static HingeLossParameter getDefaultInstance() {
            return defaultInstance;
        }

        public HingeLossParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private HingeLossParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            int rawValue = input.readEnum();
                            caffe.Loadcaffe.HingeLossParameter.Norm value = caffe.Loadcaffe.HingeLossParameter.Norm.valueOf(rawValue);
                            if (value == null) {
                                unknownFields.mergeVarintField(1, rawValue);
                            } else {
                                bitField0_ |= 0x00000001;
                                norm_ = value;
                            }
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_HingeLossParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_HingeLossParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.HingeLossParameter.class, caffe.Loadcaffe.HingeLossParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<HingeLossParameter> PARSER =
                new com.google.protobuf.AbstractParser<HingeLossParameter>() {
                    public HingeLossParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new HingeLossParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<HingeLossParameter> getParserForType() {
            return PARSER;
        }

        /**
         * Protobuf enum {@code caffe.HingeLossParameter.Norm}
         */
        public enum Norm
                implements com.google.protobuf.ProtocolMessageEnum {
            /**
             * <code>L1 = 1;</code>
             */
            L1(0, 1),
            /**
             * <code>L2 = 2;</code>
             */
            L2(1, 2),
            ;

            /**
             * <code>L1 = 1;</code>
             */
            public static final int L1_VALUE = 1;
            /**
             * <code>L2 = 2;</code>
             */
            public static final int L2_VALUE = 2;


            public final int getNumber() { return value; }

            public static Norm valueOf(int value) {
                switch (value) {
                    case 1: return L1;
                    case 2: return L2;
                    default: return null;
                }
            }

            public static com.google.protobuf.Internal.EnumLiteMap<Norm>
            internalGetValueMap() {
                return internalValueMap;
            }
            private static com.google.protobuf.Internal.EnumLiteMap<Norm>
                    internalValueMap =
                    new com.google.protobuf.Internal.EnumLiteMap<Norm>() {
                        public Norm findValueByNumber(int number) {
                            return Norm.valueOf(number);
                        }
                    };

            public final com.google.protobuf.Descriptors.EnumValueDescriptor
            getValueDescriptor() {
                return getDescriptor().getValues().get(index);
            }
            public final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptorForType() {
                return getDescriptor();
            }
            public static final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptor() {
                return caffe.Loadcaffe.HingeLossParameter.getDescriptor().getEnumTypes().get(0);
            }

            private static final Norm[] VALUES = values();

            public static Norm valueOf(
                    com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new java.lang.IllegalArgumentException(
                            "EnumValueDescriptor is not for this type.");
                }
                return VALUES[desc.getIndex()];
            }

            private final int index;
            private final int value;

            private Norm(int index, int value) {
                this.index = index;
                this.value = value;
            }

            // @@protoc_insertion_point(enum_scope:caffe.HingeLossParameter.Norm)
        }

        private int bitField0_;
        public static final int NORM_FIELD_NUMBER = 1;
        private caffe.Loadcaffe.HingeLossParameter.Norm norm_;
        /**
         * <code>optional .caffe.HingeLossParameter.Norm norm = 1 [default = L1];</code>
         *
         * <pre>
         * Specify the Norm to use L1 or L2
         * </pre>
         */
        public boolean hasNorm() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional .caffe.HingeLossParameter.Norm norm = 1 [default = L1];</code>
         *
         * <pre>
         * Specify the Norm to use L1 or L2
         * </pre>
         */
        public caffe.Loadcaffe.HingeLossParameter.Norm getNorm() {
            return norm_;
        }

        private void initFields() {
            norm_ = caffe.Loadcaffe.HingeLossParameter.Norm.L1;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeEnum(1, norm_.getNumber());
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeEnumSize(1, norm_.getNumber());
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.HingeLossParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.HingeLossParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.HingeLossParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.HingeLossParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.HingeLossParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.HingeLossParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.HingeLossParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.HingeLossParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.HingeLossParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.HingeLossParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.HingeLossParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.HingeLossParameter}
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.HingeLossParameter)
                caffe.Loadcaffe.HingeLossParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_HingeLossParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_HingeLossParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.HingeLossParameter.class, caffe.Loadcaffe.HingeLossParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.HingeLossParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                norm_ = caffe.Loadcaffe.HingeLossParameter.Norm.L1;
                bitField0_ = (bitField0_ & ~0x00000001);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_HingeLossParameter_descriptor;
            }

            public caffe.Loadcaffe.HingeLossParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.HingeLossParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.HingeLossParameter build() {
                caffe.Loadcaffe.HingeLossParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.HingeLossParameter buildPartial() {
                caffe.Loadcaffe.HingeLossParameter result = new caffe.Loadcaffe.HingeLossParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.norm_ = norm_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.HingeLossParameter) {
                    return mergeFrom((caffe.Loadcaffe.HingeLossParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.HingeLossParameter other) {
                if (other == caffe.Loadcaffe.HingeLossParameter.getDefaultInstance()) return this;
                if (other.hasNorm()) {
                    setNorm(other.getNorm());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.HingeLossParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.HingeLossParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private caffe.Loadcaffe.HingeLossParameter.Norm norm_ = caffe.Loadcaffe.HingeLossParameter.Norm.L1;
            /**
             * <code>optional .caffe.HingeLossParameter.Norm norm = 1 [default = L1];</code>
             *
             * <pre>
             * Specify the Norm to use L1 or L2
             * </pre>
             */
            public boolean hasNorm() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional .caffe.HingeLossParameter.Norm norm = 1 [default = L1];</code>
             *
             * <pre>
             * Specify the Norm to use L1 or L2
             * </pre>
             */
            public caffe.Loadcaffe.HingeLossParameter.Norm getNorm() {
                return norm_;
            }
            /**
             * <code>optional .caffe.HingeLossParameter.Norm norm = 1 [default = L1];</code>
             *
             * <pre>
             * Specify the Norm to use L1 or L2
             * </pre>
             */
            public Builder setNorm(caffe.Loadcaffe.HingeLossParameter.Norm value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                norm_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional .caffe.HingeLossParameter.Norm norm = 1 [default = L1];</code>
             *
             * <pre>
             * Specify the Norm to use L1 or L2
             * </pre>
             */
            public Builder clearNorm() {
                bitField0_ = (bitField0_ & ~0x00000001);
                norm_ = caffe.Loadcaffe.HingeLossParameter.Norm.L1;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.HingeLossParameter)
        }

        static {
            defaultInstance = new HingeLossParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.HingeLossParameter)
    }

    public interface ImageDataParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.ImageDataParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        boolean hasSource();
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        java.lang.String getSource();
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        com.google.protobuf.ByteString
        getSourceBytes();

        /**
         * <code>optional uint32 batch_size = 4;</code>
         *
         * <pre>
         * Specify the batch size.
         * </pre>
         */
        boolean hasBatchSize();
        /**
         * <code>optional uint32 batch_size = 4;</code>
         *
         * <pre>
         * Specify the batch size.
         * </pre>
         */
        int getBatchSize();

        /**
         * <code>optional uint32 rand_skip = 7 [default = 0];</code>
         *
         * <pre>
         * The rand_skip variable is for the data layer to skip a few data points
         * to avoid all asynchronous sgd clients to start at the same point. The skip
         * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
         * be larger than the number of keys in the database.
         * </pre>
         */
        boolean hasRandSkip();
        /**
         * <code>optional uint32 rand_skip = 7 [default = 0];</code>
         *
         * <pre>
         * The rand_skip variable is for the data layer to skip a few data points
         * to avoid all asynchronous sgd clients to start at the same point. The skip
         * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
         * be larger than the number of keys in the database.
         * </pre>
         */
        int getRandSkip();

        /**
         * <code>optional bool shuffle = 8 [default = false];</code>
         *
         * <pre>
         * Whether or not ImageLayer should shuffle the list of files at every epoch.
         * </pre>
         */
        boolean hasShuffle();
        /**
         * <code>optional bool shuffle = 8 [default = false];</code>
         *
         * <pre>
         * Whether or not ImageLayer should shuffle the list of files at every epoch.
         * </pre>
         */
        boolean getShuffle();

        /**
         * <code>optional uint32 new_height = 9 [default = 0];</code>
         *
         * <pre>
         * It will also resize images if new_height or new_width are not zero.
         * </pre>
         */
        boolean hasNewHeight();
        /**
         * <code>optional uint32 new_height = 9 [default = 0];</code>
         *
         * <pre>
         * It will also resize images if new_height or new_width are not zero.
         * </pre>
         */
        int getNewHeight();

        /**
         * <code>optional uint32 new_width = 10 [default = 0];</code>
         */
        boolean hasNewWidth();
        /**
         * <code>optional uint32 new_width = 10 [default = 0];</code>
         */
        int getNewWidth();

        /**
         * <code>optional bool is_color = 11 [default = true];</code>
         *
         * <pre>
         * Specify if the images are color or gray
         * </pre>
         */
        boolean hasIsColor();
        /**
         * <code>optional bool is_color = 11 [default = true];</code>
         *
         * <pre>
         * Specify if the images are color or gray
         * </pre>
         */
        boolean getIsColor();

        /**
         * <code>optional float scale = 2 [default = 1];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. For data pre-processing, we can do
         * simple scaling and subtracting the data mean, if provided. Note that the
         * mean subtraction is always carried out before scaling.
         * </pre>
         */
        boolean hasScale();
        /**
         * <code>optional float scale = 2 [default = 1];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. For data pre-processing, we can do
         * simple scaling and subtracting the data mean, if provided. Note that the
         * mean subtraction is always carried out before scaling.
         * </pre>
         */
        float getScale();

        /**
         * <code>optional string mean_file = 3;</code>
         */
        boolean hasMeanFile();
        /**
         * <code>optional string mean_file = 3;</code>
         */
        java.lang.String getMeanFile();
        /**
         * <code>optional string mean_file = 3;</code>
         */
        com.google.protobuf.ByteString
        getMeanFileBytes();

        /**
         * <code>optional uint32 crop_size = 5 [default = 0];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. Specify if we would like to randomly
         * crop an image.
         * </pre>
         */
        boolean hasCropSize();
        /**
         * <code>optional uint32 crop_size = 5 [default = 0];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. Specify if we would like to randomly
         * crop an image.
         * </pre>
         */
        int getCropSize();

        /**
         * <code>optional bool mirror = 6 [default = false];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. Specify if we want to randomly mirror
         * data.
         * </pre>
         */
        boolean hasMirror();
        /**
         * <code>optional bool mirror = 6 [default = false];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. Specify if we want to randomly mirror
         * data.
         * </pre>
         */
        boolean getMirror();

        /**
         * <code>optional string root_folder = 12 [default = ""];</code>
         */
        boolean hasRootFolder();
        /**
         * <code>optional string root_folder = 12 [default = ""];</code>
         */
        java.lang.String getRootFolder();
        /**
         * <code>optional string root_folder = 12 [default = ""];</code>
         */
        com.google.protobuf.ByteString
        getRootFolderBytes();
    }
    /**
     * Protobuf type {@code caffe.ImageDataParameter}
     *
     * <pre>
     * Message that stores parameters used by ImageDataLayer
     * </pre>
     */
    public static final class ImageDataParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.ImageDataParameter)
            ImageDataParameterOrBuilder {
        // Use ImageDataParameter.newBuilder() to construct.
        private ImageDataParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private ImageDataParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final ImageDataParameter defaultInstance;
        public static ImageDataParameter getDefaultInstance() {
            return defaultInstance;
        }

        public ImageDataParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private ImageDataParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 10: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000001;
                            source_ = bs;
                            break;
                        }
                        case 21: {
                            bitField0_ |= 0x00000080;
                            scale_ = input.readFloat();
                            break;
                        }
                        case 26: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000100;
                            meanFile_ = bs;
                            break;
                        }
                        case 32: {
                            bitField0_ |= 0x00000002;
                            batchSize_ = input.readUInt32();
                            break;
                        }
                        case 40: {
                            bitField0_ |= 0x00000200;
                            cropSize_ = input.readUInt32();
                            break;
                        }
                        case 48: {
                            bitField0_ |= 0x00000400;
                            mirror_ = input.readBool();
                            break;
                        }
                        case 56: {
                            bitField0_ |= 0x00000004;
                            randSkip_ = input.readUInt32();
                            break;
                        }
                        case 64: {
                            bitField0_ |= 0x00000008;
                            shuffle_ = input.readBool();
                            break;
                        }
                        case 72: {
                            bitField0_ |= 0x00000010;
                            newHeight_ = input.readUInt32();
                            break;
                        }
                        case 80: {
                            bitField0_ |= 0x00000020;
                            newWidth_ = input.readUInt32();
                            break;
                        }
                        case 88: {
                            bitField0_ |= 0x00000040;
                            isColor_ = input.readBool();
                            break;
                        }
                        case 98: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000800;
                            rootFolder_ = bs;
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_ImageDataParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_ImageDataParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.ImageDataParameter.class, caffe.Loadcaffe.ImageDataParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<ImageDataParameter> PARSER =
                new com.google.protobuf.AbstractParser<ImageDataParameter>() {
                    public ImageDataParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new ImageDataParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<ImageDataParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int SOURCE_FIELD_NUMBER = 1;
        private java.lang.Object source_;
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        public boolean hasSource() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        public java.lang.String getSource() {
            java.lang.Object ref = source_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    source_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        public com.google.protobuf.ByteString
        getSourceBytes() {
            java.lang.Object ref = source_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                source_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int BATCH_SIZE_FIELD_NUMBER = 4;
        private int batchSize_;
        /**
         * <code>optional uint32 batch_size = 4;</code>
         *
         * <pre>
         * Specify the batch size.
         * </pre>
         */
        public boolean hasBatchSize() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional uint32 batch_size = 4;</code>
         *
         * <pre>
         * Specify the batch size.
         * </pre>
         */
        public int getBatchSize() {
            return batchSize_;
        }

        public static final int RAND_SKIP_FIELD_NUMBER = 7;
        private int randSkip_;
        /**
         * <code>optional uint32 rand_skip = 7 [default = 0];</code>
         *
         * <pre>
         * The rand_skip variable is for the data layer to skip a few data points
         * to avoid all asynchronous sgd clients to start at the same point. The skip
         * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
         * be larger than the number of keys in the database.
         * </pre>
         */
        public boolean hasRandSkip() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional uint32 rand_skip = 7 [default = 0];</code>
         *
         * <pre>
         * The rand_skip variable is for the data layer to skip a few data points
         * to avoid all asynchronous sgd clients to start at the same point. The skip
         * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
         * be larger than the number of keys in the database.
         * </pre>
         */
        public int getRandSkip() {
            return randSkip_;
        }

        public static final int SHUFFLE_FIELD_NUMBER = 8;
        private boolean shuffle_;
        /**
         * <code>optional bool shuffle = 8 [default = false];</code>
         *
         * <pre>
         * Whether or not ImageLayer should shuffle the list of files at every epoch.
         * </pre>
         */
        public boolean hasShuffle() {
            return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional bool shuffle = 8 [default = false];</code>
         *
         * <pre>
         * Whether or not ImageLayer should shuffle the list of files at every epoch.
         * </pre>
         */
        public boolean getShuffle() {
            return shuffle_;
        }

        public static final int NEW_HEIGHT_FIELD_NUMBER = 9;
        private int newHeight_;
        /**
         * <code>optional uint32 new_height = 9 [default = 0];</code>
         *
         * <pre>
         * It will also resize images if new_height or new_width are not zero.
         * </pre>
         */
        public boolean hasNewHeight() {
            return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>optional uint32 new_height = 9 [default = 0];</code>
         *
         * <pre>
         * It will also resize images if new_height or new_width are not zero.
         * </pre>
         */
        public int getNewHeight() {
            return newHeight_;
        }

        public static final int NEW_WIDTH_FIELD_NUMBER = 10;
        private int newWidth_;
        /**
         * <code>optional uint32 new_width = 10 [default = 0];</code>
         */
        public boolean hasNewWidth() {
            return ((bitField0_ & 0x00000020) == 0x00000020);
        }
        /**
         * <code>optional uint32 new_width = 10 [default = 0];</code>
         */
        public int getNewWidth() {
            return newWidth_;
        }

        public static final int IS_COLOR_FIELD_NUMBER = 11;
        private boolean isColor_;
        /**
         * <code>optional bool is_color = 11 [default = true];</code>
         *
         * <pre>
         * Specify if the images are color or gray
         * </pre>
         */
        public boolean hasIsColor() {
            return ((bitField0_ & 0x00000040) == 0x00000040);
        }
        /**
         * <code>optional bool is_color = 11 [default = true];</code>
         *
         * <pre>
         * Specify if the images are color or gray
         * </pre>
         */
        public boolean getIsColor() {
            return isColor_;
        }

        public static final int SCALE_FIELD_NUMBER = 2;
        private float scale_;
        /**
         * <code>optional float scale = 2 [default = 1];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. For data pre-processing, we can do
         * simple scaling and subtracting the data mean, if provided. Note that the
         * mean subtraction is always carried out before scaling.
         * </pre>
         */
        public boolean hasScale() {
            return ((bitField0_ & 0x00000080) == 0x00000080);
        }
        /**
         * <code>optional float scale = 2 [default = 1];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. For data pre-processing, we can do
         * simple scaling and subtracting the data mean, if provided. Note that the
         * mean subtraction is always carried out before scaling.
         * </pre>
         */
        public float getScale() {
            return scale_;
        }

        public static final int MEAN_FILE_FIELD_NUMBER = 3;
        private java.lang.Object meanFile_;
        /**
         * <code>optional string mean_file = 3;</code>
         */
        public boolean hasMeanFile() {
            return ((bitField0_ & 0x00000100) == 0x00000100);
        }
        /**
         * <code>optional string mean_file = 3;</code>
         */
        public java.lang.String getMeanFile() {
            java.lang.Object ref = meanFile_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    meanFile_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string mean_file = 3;</code>
         */
        public com.google.protobuf.ByteString
        getMeanFileBytes() {
            java.lang.Object ref = meanFile_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                meanFile_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int CROP_SIZE_FIELD_NUMBER = 5;
        private int cropSize_;
        /**
         * <code>optional uint32 crop_size = 5 [default = 0];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. Specify if we would like to randomly
         * crop an image.
         * </pre>
         */
        public boolean hasCropSize() {
            return ((bitField0_ & 0x00000200) == 0x00000200);
        }
        /**
         * <code>optional uint32 crop_size = 5 [default = 0];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. Specify if we would like to randomly
         * crop an image.
         * </pre>
         */
        public int getCropSize() {
            return cropSize_;
        }

        public static final int MIRROR_FIELD_NUMBER = 6;
        private boolean mirror_;
        /**
         * <code>optional bool mirror = 6 [default = false];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. Specify if we want to randomly mirror
         * data.
         * </pre>
         */
        public boolean hasMirror() {
            return ((bitField0_ & 0x00000400) == 0x00000400);
        }
        /**
         * <code>optional bool mirror = 6 [default = false];</code>
         *
         * <pre>
         * DEPRECATED. See TransformationParameter. Specify if we want to randomly mirror
         * data.
         * </pre>
         */
        public boolean getMirror() {
            return mirror_;
        }

        public static final int ROOT_FOLDER_FIELD_NUMBER = 12;
        private java.lang.Object rootFolder_;
        /**
         * <code>optional string root_folder = 12 [default = ""];</code>
         */
        public boolean hasRootFolder() {
            return ((bitField0_ & 0x00000800) == 0x00000800);
        }
        /**
         * <code>optional string root_folder = 12 [default = ""];</code>
         */
        public java.lang.String getRootFolder() {
            java.lang.Object ref = rootFolder_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    rootFolder_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string root_folder = 12 [default = ""];</code>
         */
        public com.google.protobuf.ByteString
        getRootFolderBytes() {
            java.lang.Object ref = rootFolder_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                rootFolder_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        private void initFields() {
            source_ = "";
            batchSize_ = 0;
            randSkip_ = 0;
            shuffle_ = false;
            newHeight_ = 0;
            newWidth_ = 0;
            isColor_ = true;
            scale_ = 1F;
            meanFile_ = "";
            cropSize_ = 0;
            mirror_ = false;
            rootFolder_ = "";
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeBytes(1, getSourceBytes());
            }
            if (((bitField0_ & 0x00000080) == 0x00000080)) {
                output.writeFloat(2, scale_);
            }
            if (((bitField0_ & 0x00000100) == 0x00000100)) {
                output.writeBytes(3, getMeanFileBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeUInt32(4, batchSize_);
            }
            if (((bitField0_ & 0x00000200) == 0x00000200)) {
                output.writeUInt32(5, cropSize_);
            }
            if (((bitField0_ & 0x00000400) == 0x00000400)) {
                output.writeBool(6, mirror_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeUInt32(7, randSkip_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                output.writeBool(8, shuffle_);
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                output.writeUInt32(9, newHeight_);
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                output.writeUInt32(10, newWidth_);
            }
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                output.writeBool(11, isColor_);
            }
            if (((bitField0_ & 0x00000800) == 0x00000800)) {
                output.writeBytes(12, getRootFolderBytes());
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(1, getSourceBytes());
            }
            if (((bitField0_ & 0x00000080) == 0x00000080)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(2, scale_);
            }
            if (((bitField0_ & 0x00000100) == 0x00000100)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(3, getMeanFileBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(4, batchSize_);
            }
            if (((bitField0_ & 0x00000200) == 0x00000200)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(5, cropSize_);
            }
            if (((bitField0_ & 0x00000400) == 0x00000400)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(6, mirror_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(7, randSkip_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(8, shuffle_);
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(9, newHeight_);
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(10, newWidth_);
            }
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(11, isColor_);
            }
            if (((bitField0_ & 0x00000800) == 0x00000800)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(12, getRootFolderBytes());
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.ImageDataParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.ImageDataParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.ImageDataParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.ImageDataParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.ImageDataParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.ImageDataParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.ImageDataParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.ImageDataParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.ImageDataParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.ImageDataParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.ImageDataParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.ImageDataParameter}
         *
         * <pre>
         * Message that stores parameters used by ImageDataLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.ImageDataParameter)
                caffe.Loadcaffe.ImageDataParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_ImageDataParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_ImageDataParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.ImageDataParameter.class, caffe.Loadcaffe.ImageDataParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.ImageDataParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                source_ = "";
                bitField0_ = (bitField0_ & ~0x00000001);
                batchSize_ = 0;
                bitField0_ = (bitField0_ & ~0x00000002);
                randSkip_ = 0;
                bitField0_ = (bitField0_ & ~0x00000004);
                shuffle_ = false;
                bitField0_ = (bitField0_ & ~0x00000008);
                newHeight_ = 0;
                bitField0_ = (bitField0_ & ~0x00000010);
                newWidth_ = 0;
                bitField0_ = (bitField0_ & ~0x00000020);
                isColor_ = true;
                bitField0_ = (bitField0_ & ~0x00000040);
                scale_ = 1F;
                bitField0_ = (bitField0_ & ~0x00000080);
                meanFile_ = "";
                bitField0_ = (bitField0_ & ~0x00000100);
                cropSize_ = 0;
                bitField0_ = (bitField0_ & ~0x00000200);
                mirror_ = false;
                bitField0_ = (bitField0_ & ~0x00000400);
                rootFolder_ = "";
                bitField0_ = (bitField0_ & ~0x00000800);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_ImageDataParameter_descriptor;
            }

            public caffe.Loadcaffe.ImageDataParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.ImageDataParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.ImageDataParameter build() {
                caffe.Loadcaffe.ImageDataParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.ImageDataParameter buildPartial() {
                caffe.Loadcaffe.ImageDataParameter result = new caffe.Loadcaffe.ImageDataParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.source_ = source_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.batchSize_ = batchSize_;
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000004;
                }
                result.randSkip_ = randSkip_;
                if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
                    to_bitField0_ |= 0x00000008;
                }
                result.shuffle_ = shuffle_;
                if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
                    to_bitField0_ |= 0x00000010;
                }
                result.newHeight_ = newHeight_;
                if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
                    to_bitField0_ |= 0x00000020;
                }
                result.newWidth_ = newWidth_;
                if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
                    to_bitField0_ |= 0x00000040;
                }
                result.isColor_ = isColor_;
                if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
                    to_bitField0_ |= 0x00000080;
                }
                result.scale_ = scale_;
                if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
                    to_bitField0_ |= 0x00000100;
                }
                result.meanFile_ = meanFile_;
                if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
                    to_bitField0_ |= 0x00000200;
                }
                result.cropSize_ = cropSize_;
                if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
                    to_bitField0_ |= 0x00000400;
                }
                result.mirror_ = mirror_;
                if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
                    to_bitField0_ |= 0x00000800;
                }
                result.rootFolder_ = rootFolder_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.ImageDataParameter) {
                    return mergeFrom((caffe.Loadcaffe.ImageDataParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.ImageDataParameter other) {
                if (other == caffe.Loadcaffe.ImageDataParameter.getDefaultInstance()) return this;
                if (other.hasSource()) {
                    bitField0_ |= 0x00000001;
                    source_ = other.source_;
                    onChanged();
                }
                if (other.hasBatchSize()) {
                    setBatchSize(other.getBatchSize());
                }
                if (other.hasRandSkip()) {
                    setRandSkip(other.getRandSkip());
                }
                if (other.hasShuffle()) {
                    setShuffle(other.getShuffle());
                }
                if (other.hasNewHeight()) {
                    setNewHeight(other.getNewHeight());
                }
                if (other.hasNewWidth()) {
                    setNewWidth(other.getNewWidth());
                }
                if (other.hasIsColor()) {
                    setIsColor(other.getIsColor());
                }
                if (other.hasScale()) {
                    setScale(other.getScale());
                }
                if (other.hasMeanFile()) {
                    bitField0_ |= 0x00000100;
                    meanFile_ = other.meanFile_;
                    onChanged();
                }
                if (other.hasCropSize()) {
                    setCropSize(other.getCropSize());
                }
                if (other.hasMirror()) {
                    setMirror(other.getMirror());
                }
                if (other.hasRootFolder()) {
                    bitField0_ |= 0x00000800;
                    rootFolder_ = other.rootFolder_;
                    onChanged();
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.ImageDataParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.ImageDataParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private java.lang.Object source_ = "";
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public boolean hasSource() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public java.lang.String getSource() {
                java.lang.Object ref = source_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        source_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public com.google.protobuf.ByteString
            getSourceBytes() {
                java.lang.Object ref = source_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    source_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public Builder setSource(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                source_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public Builder clearSource() {
                bitField0_ = (bitField0_ & ~0x00000001);
                source_ = getDefaultInstance().getSource();
                onChanged();
                return this;
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public Builder setSourceBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                source_ = value;
                onChanged();
                return this;
            }

            private int batchSize_ ;
            /**
             * <code>optional uint32 batch_size = 4;</code>
             *
             * <pre>
             * Specify the batch size.
             * </pre>
             */
            public boolean hasBatchSize() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional uint32 batch_size = 4;</code>
             *
             * <pre>
             * Specify the batch size.
             * </pre>
             */
            public int getBatchSize() {
                return batchSize_;
            }
            /**
             * <code>optional uint32 batch_size = 4;</code>
             *
             * <pre>
             * Specify the batch size.
             * </pre>
             */
            public Builder setBatchSize(int value) {
                bitField0_ |= 0x00000002;
                batchSize_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 batch_size = 4;</code>
             *
             * <pre>
             * Specify the batch size.
             * </pre>
             */
            public Builder clearBatchSize() {
                bitField0_ = (bitField0_ & ~0x00000002);
                batchSize_ = 0;
                onChanged();
                return this;
            }

            private int randSkip_ ;
            /**
             * <code>optional uint32 rand_skip = 7 [default = 0];</code>
             *
             * <pre>
             * The rand_skip variable is for the data layer to skip a few data points
             * to avoid all asynchronous sgd clients to start at the same point. The skip
             * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
             * be larger than the number of keys in the database.
             * </pre>
             */
            public boolean hasRandSkip() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional uint32 rand_skip = 7 [default = 0];</code>
             *
             * <pre>
             * The rand_skip variable is for the data layer to skip a few data points
             * to avoid all asynchronous sgd clients to start at the same point. The skip
             * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
             * be larger than the number of keys in the database.
             * </pre>
             */
            public int getRandSkip() {
                return randSkip_;
            }
            /**
             * <code>optional uint32 rand_skip = 7 [default = 0];</code>
             *
             * <pre>
             * The rand_skip variable is for the data layer to skip a few data points
             * to avoid all asynchronous sgd clients to start at the same point. The skip
             * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
             * be larger than the number of keys in the database.
             * </pre>
             */
            public Builder setRandSkip(int value) {
                bitField0_ |= 0x00000004;
                randSkip_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 rand_skip = 7 [default = 0];</code>
             *
             * <pre>
             * The rand_skip variable is for the data layer to skip a few data points
             * to avoid all asynchronous sgd clients to start at the same point. The skip
             * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
             * be larger than the number of keys in the database.
             * </pre>
             */
            public Builder clearRandSkip() {
                bitField0_ = (bitField0_ & ~0x00000004);
                randSkip_ = 0;
                onChanged();
                return this;
            }

            private boolean shuffle_ ;
            /**
             * <code>optional bool shuffle = 8 [default = false];</code>
             *
             * <pre>
             * Whether or not ImageLayer should shuffle the list of files at every epoch.
             * </pre>
             */
            public boolean hasShuffle() {
                return ((bitField0_ & 0x00000008) == 0x00000008);
            }
            /**
             * <code>optional bool shuffle = 8 [default = false];</code>
             *
             * <pre>
             * Whether or not ImageLayer should shuffle the list of files at every epoch.
             * </pre>
             */
            public boolean getShuffle() {
                return shuffle_;
            }
            /**
             * <code>optional bool shuffle = 8 [default = false];</code>
             *
             * <pre>
             * Whether or not ImageLayer should shuffle the list of files at every epoch.
             * </pre>
             */
            public Builder setShuffle(boolean value) {
                bitField0_ |= 0x00000008;
                shuffle_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool shuffle = 8 [default = false];</code>
             *
             * <pre>
             * Whether or not ImageLayer should shuffle the list of files at every epoch.
             * </pre>
             */
            public Builder clearShuffle() {
                bitField0_ = (bitField0_ & ~0x00000008);
                shuffle_ = false;
                onChanged();
                return this;
            }

            private int newHeight_ ;
            /**
             * <code>optional uint32 new_height = 9 [default = 0];</code>
             *
             * <pre>
             * It will also resize images if new_height or new_width are not zero.
             * </pre>
             */
            public boolean hasNewHeight() {
                return ((bitField0_ & 0x00000010) == 0x00000010);
            }
            /**
             * <code>optional uint32 new_height = 9 [default = 0];</code>
             *
             * <pre>
             * It will also resize images if new_height or new_width are not zero.
             * </pre>
             */
            public int getNewHeight() {
                return newHeight_;
            }
            /**
             * <code>optional uint32 new_height = 9 [default = 0];</code>
             *
             * <pre>
             * It will also resize images if new_height or new_width are not zero.
             * </pre>
             */
            public Builder setNewHeight(int value) {
                bitField0_ |= 0x00000010;
                newHeight_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 new_height = 9 [default = 0];</code>
             *
             * <pre>
             * It will also resize images if new_height or new_width are not zero.
             * </pre>
             */
            public Builder clearNewHeight() {
                bitField0_ = (bitField0_ & ~0x00000010);
                newHeight_ = 0;
                onChanged();
                return this;
            }

            private int newWidth_ ;
            /**
             * <code>optional uint32 new_width = 10 [default = 0];</code>
             */
            public boolean hasNewWidth() {
                return ((bitField0_ & 0x00000020) == 0x00000020);
            }
            /**
             * <code>optional uint32 new_width = 10 [default = 0];</code>
             */
            public int getNewWidth() {
                return newWidth_;
            }
            /**
             * <code>optional uint32 new_width = 10 [default = 0];</code>
             */
            public Builder setNewWidth(int value) {
                bitField0_ |= 0x00000020;
                newWidth_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 new_width = 10 [default = 0];</code>
             */
            public Builder clearNewWidth() {
                bitField0_ = (bitField0_ & ~0x00000020);
                newWidth_ = 0;
                onChanged();
                return this;
            }

            private boolean isColor_ = true;
            /**
             * <code>optional bool is_color = 11 [default = true];</code>
             *
             * <pre>
             * Specify if the images are color or gray
             * </pre>
             */
            public boolean hasIsColor() {
                return ((bitField0_ & 0x00000040) == 0x00000040);
            }
            /**
             * <code>optional bool is_color = 11 [default = true];</code>
             *
             * <pre>
             * Specify if the images are color or gray
             * </pre>
             */
            public boolean getIsColor() {
                return isColor_;
            }
            /**
             * <code>optional bool is_color = 11 [default = true];</code>
             *
             * <pre>
             * Specify if the images are color or gray
             * </pre>
             */
            public Builder setIsColor(boolean value) {
                bitField0_ |= 0x00000040;
                isColor_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool is_color = 11 [default = true];</code>
             *
             * <pre>
             * Specify if the images are color or gray
             * </pre>
             */
            public Builder clearIsColor() {
                bitField0_ = (bitField0_ & ~0x00000040);
                isColor_ = true;
                onChanged();
                return this;
            }

            private float scale_ = 1F;
            /**
             * <code>optional float scale = 2 [default = 1];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. For data pre-processing, we can do
             * simple scaling and subtracting the data mean, if provided. Note that the
             * mean subtraction is always carried out before scaling.
             * </pre>
             */
            public boolean hasScale() {
                return ((bitField0_ & 0x00000080) == 0x00000080);
            }
            /**
             * <code>optional float scale = 2 [default = 1];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. For data pre-processing, we can do
             * simple scaling and subtracting the data mean, if provided. Note that the
             * mean subtraction is always carried out before scaling.
             * </pre>
             */
            public float getScale() {
                return scale_;
            }
            /**
             * <code>optional float scale = 2 [default = 1];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. For data pre-processing, we can do
             * simple scaling and subtracting the data mean, if provided. Note that the
             * mean subtraction is always carried out before scaling.
             * </pre>
             */
            public Builder setScale(float value) {
                bitField0_ |= 0x00000080;
                scale_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float scale = 2 [default = 1];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. For data pre-processing, we can do
             * simple scaling and subtracting the data mean, if provided. Note that the
             * mean subtraction is always carried out before scaling.
             * </pre>
             */
            public Builder clearScale() {
                bitField0_ = (bitField0_ & ~0x00000080);
                scale_ = 1F;
                onChanged();
                return this;
            }

            private java.lang.Object meanFile_ = "";
            /**
             * <code>optional string mean_file = 3;</code>
             */
            public boolean hasMeanFile() {
                return ((bitField0_ & 0x00000100) == 0x00000100);
            }
            /**
             * <code>optional string mean_file = 3;</code>
             */
            public java.lang.String getMeanFile() {
                java.lang.Object ref = meanFile_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        meanFile_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string mean_file = 3;</code>
             */
            public com.google.protobuf.ByteString
            getMeanFileBytes() {
                java.lang.Object ref = meanFile_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    meanFile_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string mean_file = 3;</code>
             */
            public Builder setMeanFile(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000100;
                meanFile_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string mean_file = 3;</code>
             */
            public Builder clearMeanFile() {
                bitField0_ = (bitField0_ & ~0x00000100);
                meanFile_ = getDefaultInstance().getMeanFile();
                onChanged();
                return this;
            }
            /**
             * <code>optional string mean_file = 3;</code>
             */
            public Builder setMeanFileBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000100;
                meanFile_ = value;
                onChanged();
                return this;
            }

            private int cropSize_ ;
            /**
             * <code>optional uint32 crop_size = 5 [default = 0];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. Specify if we would like to randomly
             * crop an image.
             * </pre>
             */
            public boolean hasCropSize() {
                return ((bitField0_ & 0x00000200) == 0x00000200);
            }
            /**
             * <code>optional uint32 crop_size = 5 [default = 0];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. Specify if we would like to randomly
             * crop an image.
             * </pre>
             */
            public int getCropSize() {
                return cropSize_;
            }
            /**
             * <code>optional uint32 crop_size = 5 [default = 0];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. Specify if we would like to randomly
             * crop an image.
             * </pre>
             */
            public Builder setCropSize(int value) {
                bitField0_ |= 0x00000200;
                cropSize_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 crop_size = 5 [default = 0];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. Specify if we would like to randomly
             * crop an image.
             * </pre>
             */
            public Builder clearCropSize() {
                bitField0_ = (bitField0_ & ~0x00000200);
                cropSize_ = 0;
                onChanged();
                return this;
            }

            private boolean mirror_ ;
            /**
             * <code>optional bool mirror = 6 [default = false];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. Specify if we want to randomly mirror
             * data.
             * </pre>
             */
            public boolean hasMirror() {
                return ((bitField0_ & 0x00000400) == 0x00000400);
            }
            /**
             * <code>optional bool mirror = 6 [default = false];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. Specify if we want to randomly mirror
             * data.
             * </pre>
             */
            public boolean getMirror() {
                return mirror_;
            }
            /**
             * <code>optional bool mirror = 6 [default = false];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. Specify if we want to randomly mirror
             * data.
             * </pre>
             */
            public Builder setMirror(boolean value) {
                bitField0_ |= 0x00000400;
                mirror_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool mirror = 6 [default = false];</code>
             *
             * <pre>
             * DEPRECATED. See TransformationParameter. Specify if we want to randomly mirror
             * data.
             * </pre>
             */
            public Builder clearMirror() {
                bitField0_ = (bitField0_ & ~0x00000400);
                mirror_ = false;
                onChanged();
                return this;
            }

            private java.lang.Object rootFolder_ = "";
            /**
             * <code>optional string root_folder = 12 [default = ""];</code>
             */
            public boolean hasRootFolder() {
                return ((bitField0_ & 0x00000800) == 0x00000800);
            }
            /**
             * <code>optional string root_folder = 12 [default = ""];</code>
             */
            public java.lang.String getRootFolder() {
                java.lang.Object ref = rootFolder_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        rootFolder_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string root_folder = 12 [default = ""];</code>
             */
            public com.google.protobuf.ByteString
            getRootFolderBytes() {
                java.lang.Object ref = rootFolder_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    rootFolder_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string root_folder = 12 [default = ""];</code>
             */
            public Builder setRootFolder(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000800;
                rootFolder_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string root_folder = 12 [default = ""];</code>
             */
            public Builder clearRootFolder() {
                bitField0_ = (bitField0_ & ~0x00000800);
                rootFolder_ = getDefaultInstance().getRootFolder();
                onChanged();
                return this;
            }
            /**
             * <code>optional string root_folder = 12 [default = ""];</code>
             */
            public Builder setRootFolderBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000800;
                rootFolder_ = value;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.ImageDataParameter)
        }

        static {
            defaultInstance = new ImageDataParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.ImageDataParameter)
    }

    public interface InfogainLossParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.InfogainLossParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the infogain matrix source.
         * </pre>
         */
        boolean hasSource();
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the infogain matrix source.
         * </pre>
         */
        java.lang.String getSource();
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the infogain matrix source.
         * </pre>
         */
        com.google.protobuf.ByteString
        getSourceBytes();
    }
    /**
     * Protobuf type {@code caffe.InfogainLossParameter}
     *
     * <pre>
     * Message that stores parameters InfogainLossLayer
     * </pre>
     */
    public static final class InfogainLossParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.InfogainLossParameter)
            InfogainLossParameterOrBuilder {
        // Use InfogainLossParameter.newBuilder() to construct.
        private InfogainLossParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private InfogainLossParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final InfogainLossParameter defaultInstance;
        public static InfogainLossParameter getDefaultInstance() {
            return defaultInstance;
        }

        public InfogainLossParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private InfogainLossParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 10: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000001;
                            source_ = bs;
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_InfogainLossParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_InfogainLossParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.InfogainLossParameter.class, caffe.Loadcaffe.InfogainLossParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<InfogainLossParameter> PARSER =
                new com.google.protobuf.AbstractParser<InfogainLossParameter>() {
                    public InfogainLossParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new InfogainLossParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<InfogainLossParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int SOURCE_FIELD_NUMBER = 1;
        private java.lang.Object source_;
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the infogain matrix source.
         * </pre>
         */
        public boolean hasSource() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the infogain matrix source.
         * </pre>
         */
        public java.lang.String getSource() {
            java.lang.Object ref = source_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    source_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the infogain matrix source.
         * </pre>
         */
        public com.google.protobuf.ByteString
        getSourceBytes() {
            java.lang.Object ref = source_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                source_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        private void initFields() {
            source_ = "";
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeBytes(1, getSourceBytes());
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(1, getSourceBytes());
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.InfogainLossParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.InfogainLossParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.InfogainLossParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.InfogainLossParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.InfogainLossParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.InfogainLossParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.InfogainLossParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.InfogainLossParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.InfogainLossParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.InfogainLossParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.InfogainLossParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.InfogainLossParameter}
         *
         * <pre>
         * Message that stores parameters InfogainLossLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.InfogainLossParameter)
                caffe.Loadcaffe.InfogainLossParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_InfogainLossParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_InfogainLossParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.InfogainLossParameter.class, caffe.Loadcaffe.InfogainLossParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.InfogainLossParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                source_ = "";
                bitField0_ = (bitField0_ & ~0x00000001);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_InfogainLossParameter_descriptor;
            }

            public caffe.Loadcaffe.InfogainLossParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.InfogainLossParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.InfogainLossParameter build() {
                caffe.Loadcaffe.InfogainLossParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.InfogainLossParameter buildPartial() {
                caffe.Loadcaffe.InfogainLossParameter result = new caffe.Loadcaffe.InfogainLossParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.source_ = source_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.InfogainLossParameter) {
                    return mergeFrom((caffe.Loadcaffe.InfogainLossParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.InfogainLossParameter other) {
                if (other == caffe.Loadcaffe.InfogainLossParameter.getDefaultInstance()) return this;
                if (other.hasSource()) {
                    bitField0_ |= 0x00000001;
                    source_ = other.source_;
                    onChanged();
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.InfogainLossParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.InfogainLossParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private java.lang.Object source_ = "";
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the infogain matrix source.
             * </pre>
             */
            public boolean hasSource() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the infogain matrix source.
             * </pre>
             */
            public java.lang.String getSource() {
                java.lang.Object ref = source_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        source_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the infogain matrix source.
             * </pre>
             */
            public com.google.protobuf.ByteString
            getSourceBytes() {
                java.lang.Object ref = source_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    source_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the infogain matrix source.
             * </pre>
             */
            public Builder setSource(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                source_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the infogain matrix source.
             * </pre>
             */
            public Builder clearSource() {
                bitField0_ = (bitField0_ & ~0x00000001);
                source_ = getDefaultInstance().getSource();
                onChanged();
                return this;
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the infogain matrix source.
             * </pre>
             */
            public Builder setSourceBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                source_ = value;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.InfogainLossParameter)
        }

        static {
            defaultInstance = new InfogainLossParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.InfogainLossParameter)
    }

    public interface InnerProductParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.InnerProductParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional uint32 num_output = 1;</code>
         *
         * <pre>
         * The number of outputs for the layer
         * </pre>
         */
        boolean hasNumOutput();
        /**
         * <code>optional uint32 num_output = 1;</code>
         *
         * <pre>
         * The number of outputs for the layer
         * </pre>
         */
        int getNumOutput();

        /**
         * <code>optional bool bias_term = 2 [default = true];</code>
         *
         * <pre>
         * whether to have bias terms
         * </pre>
         */
        boolean hasBiasTerm();
        /**
         * <code>optional bool bias_term = 2 [default = true];</code>
         *
         * <pre>
         * whether to have bias terms
         * </pre>
         */
        boolean getBiasTerm();

        /**
         * <code>optional .caffe.FillerParameter weight_filler = 3;</code>
         *
         * <pre>
         * The filler for the weight
         * </pre>
         */
        boolean hasWeightFiller();
        /**
         * <code>optional .caffe.FillerParameter weight_filler = 3;</code>
         *
         * <pre>
         * The filler for the weight
         * </pre>
         */
        caffe.Loadcaffe.FillerParameter getWeightFiller();
        /**
         * <code>optional .caffe.FillerParameter weight_filler = 3;</code>
         *
         * <pre>
         * The filler for the weight
         * </pre>
         */
        caffe.Loadcaffe.FillerParameterOrBuilder getWeightFillerOrBuilder();

        /**
         * <code>optional .caffe.FillerParameter bias_filler = 4;</code>
         *
         * <pre>
         * The filler for the bias
         * </pre>
         */
        boolean hasBiasFiller();
        /**
         * <code>optional .caffe.FillerParameter bias_filler = 4;</code>
         *
         * <pre>
         * The filler for the bias
         * </pre>
         */
        caffe.Loadcaffe.FillerParameter getBiasFiller();
        /**
         * <code>optional .caffe.FillerParameter bias_filler = 4;</code>
         *
         * <pre>
         * The filler for the bias
         * </pre>
         */
        caffe.Loadcaffe.FillerParameterOrBuilder getBiasFillerOrBuilder();

        /**
         * <code>optional int32 axis = 5 [default = 1];</code>
         *
         * <pre>
         * The first axis to be lumped into a single inner product computation;
         * all preceding axes are retained in the output.
         * May be negative to index from the end (e.g., -1 for the last axis).
         * </pre>
         */
        boolean hasAxis();
        /**
         * <code>optional int32 axis = 5 [default = 1];</code>
         *
         * <pre>
         * The first axis to be lumped into a single inner product computation;
         * all preceding axes are retained in the output.
         * May be negative to index from the end (e.g., -1 for the last axis).
         * </pre>
         */
        int getAxis();
    }
    /**
     * Protobuf type {@code caffe.InnerProductParameter}
     *
     * <pre>
     * Message that stores parameters used by InnerProductLayer
     * </pre>
     */
    public static final class InnerProductParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.InnerProductParameter)
            InnerProductParameterOrBuilder {
        // Use InnerProductParameter.newBuilder() to construct.
        private InnerProductParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private InnerProductParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final InnerProductParameter defaultInstance;
        public static InnerProductParameter getDefaultInstance() {
            return defaultInstance;
        }

        public InnerProductParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private InnerProductParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            bitField0_ |= 0x00000001;
                            numOutput_ = input.readUInt32();
                            break;
                        }
                        case 16: {
                            bitField0_ |= 0x00000002;
                            biasTerm_ = input.readBool();
                            break;
                        }
                        case 26: {
                            caffe.Loadcaffe.FillerParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                                subBuilder = weightFiller_.toBuilder();
                            }
                            weightFiller_ = input.readMessage(caffe.Loadcaffe.FillerParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(weightFiller_);
                                weightFiller_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000004;
                            break;
                        }
                        case 34: {
                            caffe.Loadcaffe.FillerParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                                subBuilder = biasFiller_.toBuilder();
                            }
                            biasFiller_ = input.readMessage(caffe.Loadcaffe.FillerParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(biasFiller_);
                                biasFiller_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000008;
                            break;
                        }
                        case 40: {
                            bitField0_ |= 0x00000010;
                            axis_ = input.readInt32();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_InnerProductParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_InnerProductParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.InnerProductParameter.class, caffe.Loadcaffe.InnerProductParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<InnerProductParameter> PARSER =
                new com.google.protobuf.AbstractParser<InnerProductParameter>() {
                    public InnerProductParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new InnerProductParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<InnerProductParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int NUM_OUTPUT_FIELD_NUMBER = 1;
        private int numOutput_;
        /**
         * <code>optional uint32 num_output = 1;</code>
         *
         * <pre>
         * The number of outputs for the layer
         * </pre>
         */
        public boolean hasNumOutput() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional uint32 num_output = 1;</code>
         *
         * <pre>
         * The number of outputs for the layer
         * </pre>
         */
        public int getNumOutput() {
            return numOutput_;
        }

        public static final int BIAS_TERM_FIELD_NUMBER = 2;
        private boolean biasTerm_;
        /**
         * <code>optional bool bias_term = 2 [default = true];</code>
         *
         * <pre>
         * whether to have bias terms
         * </pre>
         */
        public boolean hasBiasTerm() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional bool bias_term = 2 [default = true];</code>
         *
         * <pre>
         * whether to have bias terms
         * </pre>
         */
        public boolean getBiasTerm() {
            return biasTerm_;
        }

        public static final int WEIGHT_FILLER_FIELD_NUMBER = 3;
        private caffe.Loadcaffe.FillerParameter weightFiller_;
        /**
         * <code>optional .caffe.FillerParameter weight_filler = 3;</code>
         *
         * <pre>
         * The filler for the weight
         * </pre>
         */
        public boolean hasWeightFiller() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional .caffe.FillerParameter weight_filler = 3;</code>
         *
         * <pre>
         * The filler for the weight
         * </pre>
         */
        public caffe.Loadcaffe.FillerParameter getWeightFiller() {
            return weightFiller_;
        }
        /**
         * <code>optional .caffe.FillerParameter weight_filler = 3;</code>
         *
         * <pre>
         * The filler for the weight
         * </pre>
         */
        public caffe.Loadcaffe.FillerParameterOrBuilder getWeightFillerOrBuilder() {
            return weightFiller_;
        }

        public static final int BIAS_FILLER_FIELD_NUMBER = 4;
        private caffe.Loadcaffe.FillerParameter biasFiller_;
        /**
         * <code>optional .caffe.FillerParameter bias_filler = 4;</code>
         *
         * <pre>
         * The filler for the bias
         * </pre>
         */
        public boolean hasBiasFiller() {
            return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional .caffe.FillerParameter bias_filler = 4;</code>
         *
         * <pre>
         * The filler for the bias
         * </pre>
         */
        public caffe.Loadcaffe.FillerParameter getBiasFiller() {
            return biasFiller_;
        }
        /**
         * <code>optional .caffe.FillerParameter bias_filler = 4;</code>
         *
         * <pre>
         * The filler for the bias
         * </pre>
         */
        public caffe.Loadcaffe.FillerParameterOrBuilder getBiasFillerOrBuilder() {
            return biasFiller_;
        }

        public static final int AXIS_FIELD_NUMBER = 5;
        private int axis_;
        /**
         * <code>optional int32 axis = 5 [default = 1];</code>
         *
         * <pre>
         * The first axis to be lumped into a single inner product computation;
         * all preceding axes are retained in the output.
         * May be negative to index from the end (e.g., -1 for the last axis).
         * </pre>
         */
        public boolean hasAxis() {
            return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>optional int32 axis = 5 [default = 1];</code>
         *
         * <pre>
         * The first axis to be lumped into a single inner product computation;
         * all preceding axes are retained in the output.
         * May be negative to index from the end (e.g., -1 for the last axis).
         * </pre>
         */
        public int getAxis() {
            return axis_;
        }

        private void initFields() {
            numOutput_ = 0;
            biasTerm_ = true;
            weightFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
            biasFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
            axis_ = 1;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeUInt32(1, numOutput_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeBool(2, biasTerm_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeMessage(3, weightFiller_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                output.writeMessage(4, biasFiller_);
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                output.writeInt32(5, axis_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(1, numOutput_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(2, biasTerm_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(3, weightFiller_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(4, biasFiller_);
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(5, axis_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.InnerProductParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.InnerProductParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.InnerProductParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.InnerProductParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.InnerProductParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.InnerProductParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.InnerProductParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.InnerProductParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.InnerProductParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.InnerProductParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.InnerProductParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.InnerProductParameter}
         *
         * <pre>
         * Message that stores parameters used by InnerProductLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.InnerProductParameter)
                caffe.Loadcaffe.InnerProductParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_InnerProductParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_InnerProductParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.InnerProductParameter.class, caffe.Loadcaffe.InnerProductParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.InnerProductParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                    getWeightFillerFieldBuilder();
                    getBiasFillerFieldBuilder();
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                numOutput_ = 0;
                bitField0_ = (bitField0_ & ~0x00000001);
                biasTerm_ = true;
                bitField0_ = (bitField0_ & ~0x00000002);
                if (weightFillerBuilder_ == null) {
                    weightFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
                } else {
                    weightFillerBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000004);
                if (biasFillerBuilder_ == null) {
                    biasFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
                } else {
                    biasFillerBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000008);
                axis_ = 1;
                bitField0_ = (bitField0_ & ~0x00000010);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_InnerProductParameter_descriptor;
            }

            public caffe.Loadcaffe.InnerProductParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.InnerProductParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.InnerProductParameter build() {
                caffe.Loadcaffe.InnerProductParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.InnerProductParameter buildPartial() {
                caffe.Loadcaffe.InnerProductParameter result = new caffe.Loadcaffe.InnerProductParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.numOutput_ = numOutput_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.biasTerm_ = biasTerm_;
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000004;
                }
                if (weightFillerBuilder_ == null) {
                    result.weightFiller_ = weightFiller_;
                } else {
                    result.weightFiller_ = weightFillerBuilder_.build();
                }
                if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
                    to_bitField0_ |= 0x00000008;
                }
                if (biasFillerBuilder_ == null) {
                    result.biasFiller_ = biasFiller_;
                } else {
                    result.biasFiller_ = biasFillerBuilder_.build();
                }
                if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
                    to_bitField0_ |= 0x00000010;
                }
                result.axis_ = axis_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.InnerProductParameter) {
                    return mergeFrom((caffe.Loadcaffe.InnerProductParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.InnerProductParameter other) {
                if (other == caffe.Loadcaffe.InnerProductParameter.getDefaultInstance()) return this;
                if (other.hasNumOutput()) {
                    setNumOutput(other.getNumOutput());
                }
                if (other.hasBiasTerm()) {
                    setBiasTerm(other.getBiasTerm());
                }
                if (other.hasWeightFiller()) {
                    mergeWeightFiller(other.getWeightFiller());
                }
                if (other.hasBiasFiller()) {
                    mergeBiasFiller(other.getBiasFiller());
                }
                if (other.hasAxis()) {
                    setAxis(other.getAxis());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.InnerProductParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.InnerProductParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private int numOutput_ ;
            /**
             * <code>optional uint32 num_output = 1;</code>
             *
             * <pre>
             * The number of outputs for the layer
             * </pre>
             */
            public boolean hasNumOutput() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional uint32 num_output = 1;</code>
             *
             * <pre>
             * The number of outputs for the layer
             * </pre>
             */
            public int getNumOutput() {
                return numOutput_;
            }
            /**
             * <code>optional uint32 num_output = 1;</code>
             *
             * <pre>
             * The number of outputs for the layer
             * </pre>
             */
            public Builder setNumOutput(int value) {
                bitField0_ |= 0x00000001;
                numOutput_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 num_output = 1;</code>
             *
             * <pre>
             * The number of outputs for the layer
             * </pre>
             */
            public Builder clearNumOutput() {
                bitField0_ = (bitField0_ & ~0x00000001);
                numOutput_ = 0;
                onChanged();
                return this;
            }

            private boolean biasTerm_ = true;
            /**
             * <code>optional bool bias_term = 2 [default = true];</code>
             *
             * <pre>
             * whether to have bias terms
             * </pre>
             */
            public boolean hasBiasTerm() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional bool bias_term = 2 [default = true];</code>
             *
             * <pre>
             * whether to have bias terms
             * </pre>
             */
            public boolean getBiasTerm() {
                return biasTerm_;
            }
            /**
             * <code>optional bool bias_term = 2 [default = true];</code>
             *
             * <pre>
             * whether to have bias terms
             * </pre>
             */
            public Builder setBiasTerm(boolean value) {
                bitField0_ |= 0x00000002;
                biasTerm_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool bias_term = 2 [default = true];</code>
             *
             * <pre>
             * whether to have bias terms
             * </pre>
             */
            public Builder clearBiasTerm() {
                bitField0_ = (bitField0_ & ~0x00000002);
                biasTerm_ = true;
                onChanged();
                return this;
            }

            private caffe.Loadcaffe.FillerParameter weightFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder> weightFillerBuilder_;
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 3;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public boolean hasWeightFiller() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 3;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameter getWeightFiller() {
                if (weightFillerBuilder_ == null) {
                    return weightFiller_;
                } else {
                    return weightFillerBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 3;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public Builder setWeightFiller(caffe.Loadcaffe.FillerParameter value) {
                if (weightFillerBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    weightFiller_ = value;
                    onChanged();
                } else {
                    weightFillerBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00000004;
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 3;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public Builder setWeightFiller(
                    caffe.Loadcaffe.FillerParameter.Builder builderForValue) {
                if (weightFillerBuilder_ == null) {
                    weightFiller_ = builderForValue.build();
                    onChanged();
                } else {
                    weightFillerBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00000004;
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 3;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public Builder mergeWeightFiller(caffe.Loadcaffe.FillerParameter value) {
                if (weightFillerBuilder_ == null) {
                    if (((bitField0_ & 0x00000004) == 0x00000004) &&
                            weightFiller_ != caffe.Loadcaffe.FillerParameter.getDefaultInstance()) {
                        weightFiller_ =
                                caffe.Loadcaffe.FillerParameter.newBuilder(weightFiller_).mergeFrom(value).buildPartial();
                    } else {
                        weightFiller_ = value;
                    }
                    onChanged();
                } else {
                    weightFillerBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00000004;
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 3;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public Builder clearWeightFiller() {
                if (weightFillerBuilder_ == null) {
                    weightFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
                    onChanged();
                } else {
                    weightFillerBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000004);
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 3;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameter.Builder getWeightFillerBuilder() {
                bitField0_ |= 0x00000004;
                onChanged();
                return getWeightFillerFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 3;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameterOrBuilder getWeightFillerOrBuilder() {
                if (weightFillerBuilder_ != null) {
                    return weightFillerBuilder_.getMessageOrBuilder();
                } else {
                    return weightFiller_;
                }
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 3;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder>
            getWeightFillerFieldBuilder() {
                if (weightFillerBuilder_ == null) {
                    weightFillerBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder>(
                            getWeightFiller(),
                            getParentForChildren(),
                            isClean());
                    weightFiller_ = null;
                }
                return weightFillerBuilder_;
            }

            private caffe.Loadcaffe.FillerParameter biasFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder> biasFillerBuilder_;
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 4;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public boolean hasBiasFiller() {
                return ((bitField0_ & 0x00000008) == 0x00000008);
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 4;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameter getBiasFiller() {
                if (biasFillerBuilder_ == null) {
                    return biasFiller_;
                } else {
                    return biasFillerBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 4;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public Builder setBiasFiller(caffe.Loadcaffe.FillerParameter value) {
                if (biasFillerBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    biasFiller_ = value;
                    onChanged();
                } else {
                    biasFillerBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00000008;
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 4;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public Builder setBiasFiller(
                    caffe.Loadcaffe.FillerParameter.Builder builderForValue) {
                if (biasFillerBuilder_ == null) {
                    biasFiller_ = builderForValue.build();
                    onChanged();
                } else {
                    biasFillerBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00000008;
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 4;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public Builder mergeBiasFiller(caffe.Loadcaffe.FillerParameter value) {
                if (biasFillerBuilder_ == null) {
                    if (((bitField0_ & 0x00000008) == 0x00000008) &&
                            biasFiller_ != caffe.Loadcaffe.FillerParameter.getDefaultInstance()) {
                        biasFiller_ =
                                caffe.Loadcaffe.FillerParameter.newBuilder(biasFiller_).mergeFrom(value).buildPartial();
                    } else {
                        biasFiller_ = value;
                    }
                    onChanged();
                } else {
                    biasFillerBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00000008;
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 4;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public Builder clearBiasFiller() {
                if (biasFillerBuilder_ == null) {
                    biasFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
                    onChanged();
                } else {
                    biasFillerBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000008);
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 4;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameter.Builder getBiasFillerBuilder() {
                bitField0_ |= 0x00000008;
                onChanged();
                return getBiasFillerFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 4;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameterOrBuilder getBiasFillerOrBuilder() {
                if (biasFillerBuilder_ != null) {
                    return biasFillerBuilder_.getMessageOrBuilder();
                } else {
                    return biasFiller_;
                }
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 4;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder>
            getBiasFillerFieldBuilder() {
                if (biasFillerBuilder_ == null) {
                    biasFillerBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder>(
                            getBiasFiller(),
                            getParentForChildren(),
                            isClean());
                    biasFiller_ = null;
                }
                return biasFillerBuilder_;
            }

            private int axis_ = 1;
            /**
             * <code>optional int32 axis = 5 [default = 1];</code>
             *
             * <pre>
             * The first axis to be lumped into a single inner product computation;
             * all preceding axes are retained in the output.
             * May be negative to index from the end (e.g., -1 for the last axis).
             * </pre>
             */
            public boolean hasAxis() {
                return ((bitField0_ & 0x00000010) == 0x00000010);
            }
            /**
             * <code>optional int32 axis = 5 [default = 1];</code>
             *
             * <pre>
             * The first axis to be lumped into a single inner product computation;
             * all preceding axes are retained in the output.
             * May be negative to index from the end (e.g., -1 for the last axis).
             * </pre>
             */
            public int getAxis() {
                return axis_;
            }
            /**
             * <code>optional int32 axis = 5 [default = 1];</code>
             *
             * <pre>
             * The first axis to be lumped into a single inner product computation;
             * all preceding axes are retained in the output.
             * May be negative to index from the end (e.g., -1 for the last axis).
             * </pre>
             */
            public Builder setAxis(int value) {
                bitField0_ |= 0x00000010;
                axis_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 axis = 5 [default = 1];</code>
             *
             * <pre>
             * The first axis to be lumped into a single inner product computation;
             * all preceding axes are retained in the output.
             * May be negative to index from the end (e.g., -1 for the last axis).
             * </pre>
             */
            public Builder clearAxis() {
                bitField0_ = (bitField0_ & ~0x00000010);
                axis_ = 1;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.InnerProductParameter)
        }

        static {
            defaultInstance = new InnerProductParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.InnerProductParameter)
    }

    public interface LRNParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.LRNParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional uint32 local_size = 1 [default = 5];</code>
         */
        boolean hasLocalSize();
        /**
         * <code>optional uint32 local_size = 1 [default = 5];</code>
         */
        int getLocalSize();

        /**
         * <code>optional float alpha = 2 [default = 1];</code>
         */
        boolean hasAlpha();
        /**
         * <code>optional float alpha = 2 [default = 1];</code>
         */
        float getAlpha();

        /**
         * <code>optional float beta = 3 [default = 0.75];</code>
         */
        boolean hasBeta();
        /**
         * <code>optional float beta = 3 [default = 0.75];</code>
         */
        float getBeta();

        /**
         * <code>optional .caffe.LRNParameter.NormRegion norm_region = 4 [default = ACROSS_CHANNELS];</code>
         */
        boolean hasNormRegion();
        /**
         * <code>optional .caffe.LRNParameter.NormRegion norm_region = 4 [default = ACROSS_CHANNELS];</code>
         */
        caffe.Loadcaffe.LRNParameter.NormRegion getNormRegion();

        /**
         * <code>optional float k = 5 [default = 1];</code>
         */
        boolean hasK();
        /**
         * <code>optional float k = 5 [default = 1];</code>
         */
        float getK();
    }
    /**
     * Protobuf type {@code caffe.LRNParameter}
     *
     * <pre>
     * Message that stores parameters used by LRNLayer
     * </pre>
     */
    public static final class LRNParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.LRNParameter)
            LRNParameterOrBuilder {
        // Use LRNParameter.newBuilder() to construct.
        private LRNParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private LRNParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final LRNParameter defaultInstance;
        public static LRNParameter getDefaultInstance() {
            return defaultInstance;
        }

        public LRNParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private LRNParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            bitField0_ |= 0x00000001;
                            localSize_ = input.readUInt32();
                            break;
                        }
                        case 21: {
                            bitField0_ |= 0x00000002;
                            alpha_ = input.readFloat();
                            break;
                        }
                        case 29: {
                            bitField0_ |= 0x00000004;
                            beta_ = input.readFloat();
                            break;
                        }
                        case 32: {
                            int rawValue = input.readEnum();
                            caffe.Loadcaffe.LRNParameter.NormRegion value = caffe.Loadcaffe.LRNParameter.NormRegion.valueOf(rawValue);
                            if (value == null) {
                                unknownFields.mergeVarintField(4, rawValue);
                            } else {
                                bitField0_ |= 0x00000008;
                                normRegion_ = value;
                            }
                            break;
                        }
                        case 45: {
                            bitField0_ |= 0x00000010;
                            k_ = input.readFloat();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_LRNParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_LRNParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.LRNParameter.class, caffe.Loadcaffe.LRNParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<LRNParameter> PARSER =
                new com.google.protobuf.AbstractParser<LRNParameter>() {
                    public LRNParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new LRNParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<LRNParameter> getParserForType() {
            return PARSER;
        }

        /**
         * Protobuf enum {@code caffe.LRNParameter.NormRegion}
         */
        public enum NormRegion
                implements com.google.protobuf.ProtocolMessageEnum {
            /**
             * <code>ACROSS_CHANNELS = 0;</code>
             */
            ACROSS_CHANNELS(0, 0),
            /**
             * <code>WITHIN_CHANNEL = 1;</code>
             */
            WITHIN_CHANNEL(1, 1),
            ;

            /**
             * <code>ACROSS_CHANNELS = 0;</code>
             */
            public static final int ACROSS_CHANNELS_VALUE = 0;
            /**
             * <code>WITHIN_CHANNEL = 1;</code>
             */
            public static final int WITHIN_CHANNEL_VALUE = 1;


            public final int getNumber() { return value; }

            public static NormRegion valueOf(int value) {
                switch (value) {
                    case 0: return ACROSS_CHANNELS;
                    case 1: return WITHIN_CHANNEL;
                    default: return null;
                }
            }

            public static com.google.protobuf.Internal.EnumLiteMap<NormRegion>
            internalGetValueMap() {
                return internalValueMap;
            }
            private static com.google.protobuf.Internal.EnumLiteMap<NormRegion>
                    internalValueMap =
                    new com.google.protobuf.Internal.EnumLiteMap<NormRegion>() {
                        public NormRegion findValueByNumber(int number) {
                            return NormRegion.valueOf(number);
                        }
                    };

            public final com.google.protobuf.Descriptors.EnumValueDescriptor
            getValueDescriptor() {
                return getDescriptor().getValues().get(index);
            }
            public final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptorForType() {
                return getDescriptor();
            }
            public static final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptor() {
                return caffe.Loadcaffe.LRNParameter.getDescriptor().getEnumTypes().get(0);
            }

            private static final NormRegion[] VALUES = values();

            public static NormRegion valueOf(
                    com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new java.lang.IllegalArgumentException(
                            "EnumValueDescriptor is not for this type.");
                }
                return VALUES[desc.getIndex()];
            }

            private final int index;
            private final int value;

            private NormRegion(int index, int value) {
                this.index = index;
                this.value = value;
            }

            // @@protoc_insertion_point(enum_scope:caffe.LRNParameter.NormRegion)
        }

        private int bitField0_;
        public static final int LOCAL_SIZE_FIELD_NUMBER = 1;
        private int localSize_;
        /**
         * <code>optional uint32 local_size = 1 [default = 5];</code>
         */
        public boolean hasLocalSize() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional uint32 local_size = 1 [default = 5];</code>
         */
        public int getLocalSize() {
            return localSize_;
        }

        public static final int ALPHA_FIELD_NUMBER = 2;
        private float alpha_;
        /**
         * <code>optional float alpha = 2 [default = 1];</code>
         */
        public boolean hasAlpha() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional float alpha = 2 [default = 1];</code>
         */
        public float getAlpha() {
            return alpha_;
        }

        public static final int BETA_FIELD_NUMBER = 3;
        private float beta_;
        /**
         * <code>optional float beta = 3 [default = 0.75];</code>
         */
        public boolean hasBeta() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional float beta = 3 [default = 0.75];</code>
         */
        public float getBeta() {
            return beta_;
        }

        public static final int NORM_REGION_FIELD_NUMBER = 4;
        private caffe.Loadcaffe.LRNParameter.NormRegion normRegion_;
        /**
         * <code>optional .caffe.LRNParameter.NormRegion norm_region = 4 [default = ACROSS_CHANNELS];</code>
         */
        public boolean hasNormRegion() {
            return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional .caffe.LRNParameter.NormRegion norm_region = 4 [default = ACROSS_CHANNELS];</code>
         */
        public caffe.Loadcaffe.LRNParameter.NormRegion getNormRegion() {
            return normRegion_;
        }

        public static final int K_FIELD_NUMBER = 5;
        private float k_;
        /**
         * <code>optional float k = 5 [default = 1];</code>
         */
        public boolean hasK() {
            return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>optional float k = 5 [default = 1];</code>
         */
        public float getK() {
            return k_;
        }

        private void initFields() {
            localSize_ = 5;
            alpha_ = 1F;
            beta_ = 0.75F;
            normRegion_ = caffe.Loadcaffe.LRNParameter.NormRegion.ACROSS_CHANNELS;
            k_ = 1F;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeUInt32(1, localSize_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeFloat(2, alpha_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeFloat(3, beta_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                output.writeEnum(4, normRegion_.getNumber());
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                output.writeFloat(5, k_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(1, localSize_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(2, alpha_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(3, beta_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeEnumSize(4, normRegion_.getNumber());
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(5, k_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.LRNParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.LRNParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.LRNParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.LRNParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.LRNParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.LRNParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.LRNParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.LRNParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.LRNParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.LRNParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.LRNParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.LRNParameter}
         *
         * <pre>
         * Message that stores parameters used by LRNLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.LRNParameter)
                caffe.Loadcaffe.LRNParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_LRNParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_LRNParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.LRNParameter.class, caffe.Loadcaffe.LRNParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.LRNParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                localSize_ = 5;
                bitField0_ = (bitField0_ & ~0x00000001);
                alpha_ = 1F;
                bitField0_ = (bitField0_ & ~0x00000002);
                beta_ = 0.75F;
                bitField0_ = (bitField0_ & ~0x00000004);
                normRegion_ = caffe.Loadcaffe.LRNParameter.NormRegion.ACROSS_CHANNELS;
                bitField0_ = (bitField0_ & ~0x00000008);
                k_ = 1F;
                bitField0_ = (bitField0_ & ~0x00000010);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_LRNParameter_descriptor;
            }

            public caffe.Loadcaffe.LRNParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.LRNParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.LRNParameter build() {
                caffe.Loadcaffe.LRNParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.LRNParameter buildPartial() {
                caffe.Loadcaffe.LRNParameter result = new caffe.Loadcaffe.LRNParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.localSize_ = localSize_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.alpha_ = alpha_;
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000004;
                }
                result.beta_ = beta_;
                if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
                    to_bitField0_ |= 0x00000008;
                }
                result.normRegion_ = normRegion_;
                if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
                    to_bitField0_ |= 0x00000010;
                }
                result.k_ = k_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.LRNParameter) {
                    return mergeFrom((caffe.Loadcaffe.LRNParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.LRNParameter other) {
                if (other == caffe.Loadcaffe.LRNParameter.getDefaultInstance()) return this;
                if (other.hasLocalSize()) {
                    setLocalSize(other.getLocalSize());
                }
                if (other.hasAlpha()) {
                    setAlpha(other.getAlpha());
                }
                if (other.hasBeta()) {
                    setBeta(other.getBeta());
                }
                if (other.hasNormRegion()) {
                    setNormRegion(other.getNormRegion());
                }
                if (other.hasK()) {
                    setK(other.getK());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.LRNParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.LRNParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private int localSize_ = 5;
            /**
             * <code>optional uint32 local_size = 1 [default = 5];</code>
             */
            public boolean hasLocalSize() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional uint32 local_size = 1 [default = 5];</code>
             */
            public int getLocalSize() {
                return localSize_;
            }
            /**
             * <code>optional uint32 local_size = 1 [default = 5];</code>
             */
            public Builder setLocalSize(int value) {
                bitField0_ |= 0x00000001;
                localSize_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 local_size = 1 [default = 5];</code>
             */
            public Builder clearLocalSize() {
                bitField0_ = (bitField0_ & ~0x00000001);
                localSize_ = 5;
                onChanged();
                return this;
            }

            private float alpha_ = 1F;
            /**
             * <code>optional float alpha = 2 [default = 1];</code>
             */
            public boolean hasAlpha() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional float alpha = 2 [default = 1];</code>
             */
            public float getAlpha() {
                return alpha_;
            }
            /**
             * <code>optional float alpha = 2 [default = 1];</code>
             */
            public Builder setAlpha(float value) {
                bitField0_ |= 0x00000002;
                alpha_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float alpha = 2 [default = 1];</code>
             */
            public Builder clearAlpha() {
                bitField0_ = (bitField0_ & ~0x00000002);
                alpha_ = 1F;
                onChanged();
                return this;
            }

            private float beta_ = 0.75F;
            /**
             * <code>optional float beta = 3 [default = 0.75];</code>
             */
            public boolean hasBeta() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional float beta = 3 [default = 0.75];</code>
             */
            public float getBeta() {
                return beta_;
            }
            /**
             * <code>optional float beta = 3 [default = 0.75];</code>
             */
            public Builder setBeta(float value) {
                bitField0_ |= 0x00000004;
                beta_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float beta = 3 [default = 0.75];</code>
             */
            public Builder clearBeta() {
                bitField0_ = (bitField0_ & ~0x00000004);
                beta_ = 0.75F;
                onChanged();
                return this;
            }

            private caffe.Loadcaffe.LRNParameter.NormRegion normRegion_ = caffe.Loadcaffe.LRNParameter.NormRegion.ACROSS_CHANNELS;
            /**
             * <code>optional .caffe.LRNParameter.NormRegion norm_region = 4 [default = ACROSS_CHANNELS];</code>
             */
            public boolean hasNormRegion() {
                return ((bitField0_ & 0x00000008) == 0x00000008);
            }
            /**
             * <code>optional .caffe.LRNParameter.NormRegion norm_region = 4 [default = ACROSS_CHANNELS];</code>
             */
            public caffe.Loadcaffe.LRNParameter.NormRegion getNormRegion() {
                return normRegion_;
            }
            /**
             * <code>optional .caffe.LRNParameter.NormRegion norm_region = 4 [default = ACROSS_CHANNELS];</code>
             */
            public Builder setNormRegion(caffe.Loadcaffe.LRNParameter.NormRegion value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000008;
                normRegion_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional .caffe.LRNParameter.NormRegion norm_region = 4 [default = ACROSS_CHANNELS];</code>
             */
            public Builder clearNormRegion() {
                bitField0_ = (bitField0_ & ~0x00000008);
                normRegion_ = caffe.Loadcaffe.LRNParameter.NormRegion.ACROSS_CHANNELS;
                onChanged();
                return this;
            }

            private float k_ = 1F;
            /**
             * <code>optional float k = 5 [default = 1];</code>
             */
            public boolean hasK() {
                return ((bitField0_ & 0x00000010) == 0x00000010);
            }
            /**
             * <code>optional float k = 5 [default = 1];</code>
             */
            public float getK() {
                return k_;
            }
            /**
             * <code>optional float k = 5 [default = 1];</code>
             */
            public Builder setK(float value) {
                bitField0_ |= 0x00000010;
                k_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float k = 5 [default = 1];</code>
             */
            public Builder clearK() {
                bitField0_ = (bitField0_ & ~0x00000010);
                k_ = 1F;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.LRNParameter)
        }

        static {
            defaultInstance = new LRNParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.LRNParameter)
    }

    public interface MemoryDataParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.MemoryDataParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional uint32 batch_size = 1;</code>
         */
        boolean hasBatchSize();
        /**
         * <code>optional uint32 batch_size = 1;</code>
         */
        int getBatchSize();

        /**
         * <code>optional uint32 channels = 2;</code>
         */
        boolean hasChannels();
        /**
         * <code>optional uint32 channels = 2;</code>
         */
        int getChannels();

        /**
         * <code>optional uint32 height = 3;</code>
         */
        boolean hasHeight();
        /**
         * <code>optional uint32 height = 3;</code>
         */
        int getHeight();

        /**
         * <code>optional uint32 width = 4;</code>
         */
        boolean hasWidth();
        /**
         * <code>optional uint32 width = 4;</code>
         */
        int getWidth();
    }
    /**
     * Protobuf type {@code caffe.MemoryDataParameter}
     *
     * <pre>
     * Message that stores parameters used by MemoryDataLayer
     * </pre>
     */
    public static final class MemoryDataParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.MemoryDataParameter)
            MemoryDataParameterOrBuilder {
        // Use MemoryDataParameter.newBuilder() to construct.
        private MemoryDataParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private MemoryDataParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final MemoryDataParameter defaultInstance;
        public static MemoryDataParameter getDefaultInstance() {
            return defaultInstance;
        }

        public MemoryDataParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private MemoryDataParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            bitField0_ |= 0x00000001;
                            batchSize_ = input.readUInt32();
                            break;
                        }
                        case 16: {
                            bitField0_ |= 0x00000002;
                            channels_ = input.readUInt32();
                            break;
                        }
                        case 24: {
                            bitField0_ |= 0x00000004;
                            height_ = input.readUInt32();
                            break;
                        }
                        case 32: {
                            bitField0_ |= 0x00000008;
                            width_ = input.readUInt32();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_MemoryDataParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_MemoryDataParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.MemoryDataParameter.class, caffe.Loadcaffe.MemoryDataParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<MemoryDataParameter> PARSER =
                new com.google.protobuf.AbstractParser<MemoryDataParameter>() {
                    public MemoryDataParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new MemoryDataParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<MemoryDataParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int BATCH_SIZE_FIELD_NUMBER = 1;
        private int batchSize_;
        /**
         * <code>optional uint32 batch_size = 1;</code>
         */
        public boolean hasBatchSize() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional uint32 batch_size = 1;</code>
         */
        public int getBatchSize() {
            return batchSize_;
        }

        public static final int CHANNELS_FIELD_NUMBER = 2;
        private int channels_;
        /**
         * <code>optional uint32 channels = 2;</code>
         */
        public boolean hasChannels() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional uint32 channels = 2;</code>
         */
        public int getChannels() {
            return channels_;
        }

        public static final int HEIGHT_FIELD_NUMBER = 3;
        private int height_;
        /**
         * <code>optional uint32 height = 3;</code>
         */
        public boolean hasHeight() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional uint32 height = 3;</code>
         */
        public int getHeight() {
            return height_;
        }

        public static final int WIDTH_FIELD_NUMBER = 4;
        private int width_;
        /**
         * <code>optional uint32 width = 4;</code>
         */
        public boolean hasWidth() {
            return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional uint32 width = 4;</code>
         */
        public int getWidth() {
            return width_;
        }

        private void initFields() {
            batchSize_ = 0;
            channels_ = 0;
            height_ = 0;
            width_ = 0;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeUInt32(1, batchSize_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeUInt32(2, channels_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeUInt32(3, height_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                output.writeUInt32(4, width_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(1, batchSize_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(2, channels_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(3, height_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(4, width_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.MemoryDataParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.MemoryDataParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.MemoryDataParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.MemoryDataParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.MemoryDataParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.MemoryDataParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.MemoryDataParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.MemoryDataParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.MemoryDataParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.MemoryDataParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.MemoryDataParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.MemoryDataParameter}
         *
         * <pre>
         * Message that stores parameters used by MemoryDataLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.MemoryDataParameter)
                caffe.Loadcaffe.MemoryDataParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_MemoryDataParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_MemoryDataParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.MemoryDataParameter.class, caffe.Loadcaffe.MemoryDataParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.MemoryDataParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                batchSize_ = 0;
                bitField0_ = (bitField0_ & ~0x00000001);
                channels_ = 0;
                bitField0_ = (bitField0_ & ~0x00000002);
                height_ = 0;
                bitField0_ = (bitField0_ & ~0x00000004);
                width_ = 0;
                bitField0_ = (bitField0_ & ~0x00000008);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_MemoryDataParameter_descriptor;
            }

            public caffe.Loadcaffe.MemoryDataParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.MemoryDataParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.MemoryDataParameter build() {
                caffe.Loadcaffe.MemoryDataParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.MemoryDataParameter buildPartial() {
                caffe.Loadcaffe.MemoryDataParameter result = new caffe.Loadcaffe.MemoryDataParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.batchSize_ = batchSize_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.channels_ = channels_;
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000004;
                }
                result.height_ = height_;
                if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
                    to_bitField0_ |= 0x00000008;
                }
                result.width_ = width_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.MemoryDataParameter) {
                    return mergeFrom((caffe.Loadcaffe.MemoryDataParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.MemoryDataParameter other) {
                if (other == caffe.Loadcaffe.MemoryDataParameter.getDefaultInstance()) return this;
                if (other.hasBatchSize()) {
                    setBatchSize(other.getBatchSize());
                }
                if (other.hasChannels()) {
                    setChannels(other.getChannels());
                }
                if (other.hasHeight()) {
                    setHeight(other.getHeight());
                }
                if (other.hasWidth()) {
                    setWidth(other.getWidth());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.MemoryDataParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.MemoryDataParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private int batchSize_ ;
            /**
             * <code>optional uint32 batch_size = 1;</code>
             */
            public boolean hasBatchSize() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional uint32 batch_size = 1;</code>
             */
            public int getBatchSize() {
                return batchSize_;
            }
            /**
             * <code>optional uint32 batch_size = 1;</code>
             */
            public Builder setBatchSize(int value) {
                bitField0_ |= 0x00000001;
                batchSize_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 batch_size = 1;</code>
             */
            public Builder clearBatchSize() {
                bitField0_ = (bitField0_ & ~0x00000001);
                batchSize_ = 0;
                onChanged();
                return this;
            }

            private int channels_ ;
            /**
             * <code>optional uint32 channels = 2;</code>
             */
            public boolean hasChannels() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional uint32 channels = 2;</code>
             */
            public int getChannels() {
                return channels_;
            }
            /**
             * <code>optional uint32 channels = 2;</code>
             */
            public Builder setChannels(int value) {
                bitField0_ |= 0x00000002;
                channels_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 channels = 2;</code>
             */
            public Builder clearChannels() {
                bitField0_ = (bitField0_ & ~0x00000002);
                channels_ = 0;
                onChanged();
                return this;
            }

            private int height_ ;
            /**
             * <code>optional uint32 height = 3;</code>
             */
            public boolean hasHeight() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional uint32 height = 3;</code>
             */
            public int getHeight() {
                return height_;
            }
            /**
             * <code>optional uint32 height = 3;</code>
             */
            public Builder setHeight(int value) {
                bitField0_ |= 0x00000004;
                height_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 height = 3;</code>
             */
            public Builder clearHeight() {
                bitField0_ = (bitField0_ & ~0x00000004);
                height_ = 0;
                onChanged();
                return this;
            }

            private int width_ ;
            /**
             * <code>optional uint32 width = 4;</code>
             */
            public boolean hasWidth() {
                return ((bitField0_ & 0x00000008) == 0x00000008);
            }
            /**
             * <code>optional uint32 width = 4;</code>
             */
            public int getWidth() {
                return width_;
            }
            /**
             * <code>optional uint32 width = 4;</code>
             */
            public Builder setWidth(int value) {
                bitField0_ |= 0x00000008;
                width_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 width = 4;</code>
             */
            public Builder clearWidth() {
                bitField0_ = (bitField0_ & ~0x00000008);
                width_ = 0;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.MemoryDataParameter)
        }

        static {
            defaultInstance = new MemoryDataParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.MemoryDataParameter)
    }

    public interface MVNParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.MVNParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional bool normalize_variance = 1 [default = true];</code>
         *
         * <pre>
         * This parameter can be set to false to normalize mean only
         * </pre>
         */
        boolean hasNormalizeVariance();
        /**
         * <code>optional bool normalize_variance = 1 [default = true];</code>
         *
         * <pre>
         * This parameter can be set to false to normalize mean only
         * </pre>
         */
        boolean getNormalizeVariance();

        /**
         * <code>optional bool across_channels = 2 [default = false];</code>
         *
         * <pre>
         * This parameter can be set to true to perform DNN-like MVN
         * </pre>
         */
        boolean hasAcrossChannels();
        /**
         * <code>optional bool across_channels = 2 [default = false];</code>
         *
         * <pre>
         * This parameter can be set to true to perform DNN-like MVN
         * </pre>
         */
        boolean getAcrossChannels();
    }
    /**
     * Protobuf type {@code caffe.MVNParameter}
     *
     * <pre>
     * Message that stores parameters used by MVNLayer
     * </pre>
     */
    public static final class MVNParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.MVNParameter)
            MVNParameterOrBuilder {
        // Use MVNParameter.newBuilder() to construct.
        private MVNParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private MVNParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final MVNParameter defaultInstance;
        public static MVNParameter getDefaultInstance() {
            return defaultInstance;
        }

        public MVNParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private MVNParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            bitField0_ |= 0x00000001;
                            normalizeVariance_ = input.readBool();
                            break;
                        }
                        case 16: {
                            bitField0_ |= 0x00000002;
                            acrossChannels_ = input.readBool();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_MVNParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_MVNParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.MVNParameter.class, caffe.Loadcaffe.MVNParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<MVNParameter> PARSER =
                new com.google.protobuf.AbstractParser<MVNParameter>() {
                    public MVNParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new MVNParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<MVNParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int NORMALIZE_VARIANCE_FIELD_NUMBER = 1;
        private boolean normalizeVariance_;
        /**
         * <code>optional bool normalize_variance = 1 [default = true];</code>
         *
         * <pre>
         * This parameter can be set to false to normalize mean only
         * </pre>
         */
        public boolean hasNormalizeVariance() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional bool normalize_variance = 1 [default = true];</code>
         *
         * <pre>
         * This parameter can be set to false to normalize mean only
         * </pre>
         */
        public boolean getNormalizeVariance() {
            return normalizeVariance_;
        }

        public static final int ACROSS_CHANNELS_FIELD_NUMBER = 2;
        private boolean acrossChannels_;
        /**
         * <code>optional bool across_channels = 2 [default = false];</code>
         *
         * <pre>
         * This parameter can be set to true to perform DNN-like MVN
         * </pre>
         */
        public boolean hasAcrossChannels() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional bool across_channels = 2 [default = false];</code>
         *
         * <pre>
         * This parameter can be set to true to perform DNN-like MVN
         * </pre>
         */
        public boolean getAcrossChannels() {
            return acrossChannels_;
        }

        private void initFields() {
            normalizeVariance_ = true;
            acrossChannels_ = false;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeBool(1, normalizeVariance_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeBool(2, acrossChannels_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(1, normalizeVariance_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(2, acrossChannels_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.MVNParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.MVNParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.MVNParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.MVNParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.MVNParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.MVNParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.MVNParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.MVNParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.MVNParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.MVNParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.MVNParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.MVNParameter}
         *
         * <pre>
         * Message that stores parameters used by MVNLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.MVNParameter)
                caffe.Loadcaffe.MVNParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_MVNParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_MVNParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.MVNParameter.class, caffe.Loadcaffe.MVNParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.MVNParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                normalizeVariance_ = true;
                bitField0_ = (bitField0_ & ~0x00000001);
                acrossChannels_ = false;
                bitField0_ = (bitField0_ & ~0x00000002);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_MVNParameter_descriptor;
            }

            public caffe.Loadcaffe.MVNParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.MVNParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.MVNParameter build() {
                caffe.Loadcaffe.MVNParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.MVNParameter buildPartial() {
                caffe.Loadcaffe.MVNParameter result = new caffe.Loadcaffe.MVNParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.normalizeVariance_ = normalizeVariance_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.acrossChannels_ = acrossChannels_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.MVNParameter) {
                    return mergeFrom((caffe.Loadcaffe.MVNParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.MVNParameter other) {
                if (other == caffe.Loadcaffe.MVNParameter.getDefaultInstance()) return this;
                if (other.hasNormalizeVariance()) {
                    setNormalizeVariance(other.getNormalizeVariance());
                }
                if (other.hasAcrossChannels()) {
                    setAcrossChannels(other.getAcrossChannels());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.MVNParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.MVNParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private boolean normalizeVariance_ = true;
            /**
             * <code>optional bool normalize_variance = 1 [default = true];</code>
             *
             * <pre>
             * This parameter can be set to false to normalize mean only
             * </pre>
             */
            public boolean hasNormalizeVariance() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional bool normalize_variance = 1 [default = true];</code>
             *
             * <pre>
             * This parameter can be set to false to normalize mean only
             * </pre>
             */
            public boolean getNormalizeVariance() {
                return normalizeVariance_;
            }
            /**
             * <code>optional bool normalize_variance = 1 [default = true];</code>
             *
             * <pre>
             * This parameter can be set to false to normalize mean only
             * </pre>
             */
            public Builder setNormalizeVariance(boolean value) {
                bitField0_ |= 0x00000001;
                normalizeVariance_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool normalize_variance = 1 [default = true];</code>
             *
             * <pre>
             * This parameter can be set to false to normalize mean only
             * </pre>
             */
            public Builder clearNormalizeVariance() {
                bitField0_ = (bitField0_ & ~0x00000001);
                normalizeVariance_ = true;
                onChanged();
                return this;
            }

            private boolean acrossChannels_ ;
            /**
             * <code>optional bool across_channels = 2 [default = false];</code>
             *
             * <pre>
             * This parameter can be set to true to perform DNN-like MVN
             * </pre>
             */
            public boolean hasAcrossChannels() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional bool across_channels = 2 [default = false];</code>
             *
             * <pre>
             * This parameter can be set to true to perform DNN-like MVN
             * </pre>
             */
            public boolean getAcrossChannels() {
                return acrossChannels_;
            }
            /**
             * <code>optional bool across_channels = 2 [default = false];</code>
             *
             * <pre>
             * This parameter can be set to true to perform DNN-like MVN
             * </pre>
             */
            public Builder setAcrossChannels(boolean value) {
                bitField0_ |= 0x00000002;
                acrossChannels_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool across_channels = 2 [default = false];</code>
             *
             * <pre>
             * This parameter can be set to true to perform DNN-like MVN
             * </pre>
             */
            public Builder clearAcrossChannels() {
                bitField0_ = (bitField0_ & ~0x00000002);
                acrossChannels_ = false;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.MVNParameter)
        }

        static {
            defaultInstance = new MVNParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.MVNParameter)
    }

    public interface PoolingParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.PoolingParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional .caffe.PoolingParameter.PoolMethod pool = 1 [default = MAX];</code>
         *
         * <pre>
         * The pooling method
         * </pre>
         */
        boolean hasPool();
        /**
         * <code>optional .caffe.PoolingParameter.PoolMethod pool = 1 [default = MAX];</code>
         *
         * <pre>
         * The pooling method
         * </pre>
         */
        caffe.Loadcaffe.PoolingParameter.PoolMethod getPool();

        /**
         * <code>optional uint32 pad = 4 [default = 0];</code>
         *
         * <pre>
         * Pad, kernel size, and stride are all given as a single value for equal
         * dimensions in height and width or as Y, X pairs.
         * </pre>
         */
        boolean hasPad();
        /**
         * <code>optional uint32 pad = 4 [default = 0];</code>
         *
         * <pre>
         * Pad, kernel size, and stride are all given as a single value for equal
         * dimensions in height and width or as Y, X pairs.
         * </pre>
         */
        int getPad();

        /**
         * <code>optional uint32 pad_h = 9 [default = 0];</code>
         *
         * <pre>
         * The padding height
         * </pre>
         */
        boolean hasPadH();
        /**
         * <code>optional uint32 pad_h = 9 [default = 0];</code>
         *
         * <pre>
         * The padding height
         * </pre>
         */
        int getPadH();

        /**
         * <code>optional uint32 pad_w = 10 [default = 0];</code>
         *
         * <pre>
         * The padding width
         * </pre>
         */
        boolean hasPadW();
        /**
         * <code>optional uint32 pad_w = 10 [default = 0];</code>
         *
         * <pre>
         * The padding width
         * </pre>
         */
        int getPadW();

        /**
         * <code>optional uint32 kernel_size = 2;</code>
         *
         * <pre>
         * The kernel size (square)
         * </pre>
         */
        boolean hasKernelSize();
        /**
         * <code>optional uint32 kernel_size = 2;</code>
         *
         * <pre>
         * The kernel size (square)
         * </pre>
         */
        int getKernelSize();

        /**
         * <code>optional uint32 kernel_h = 5;</code>
         *
         * <pre>
         * The kernel height
         * </pre>
         */
        boolean hasKernelH();
        /**
         * <code>optional uint32 kernel_h = 5;</code>
         *
         * <pre>
         * The kernel height
         * </pre>
         */
        int getKernelH();

        /**
         * <code>optional uint32 kernel_w = 6;</code>
         *
         * <pre>
         * The kernel width
         * </pre>
         */
        boolean hasKernelW();
        /**
         * <code>optional uint32 kernel_w = 6;</code>
         *
         * <pre>
         * The kernel width
         * </pre>
         */
        int getKernelW();

        /**
         * <code>optional uint32 stride = 3 [default = 1];</code>
         *
         * <pre>
         * The stride (equal in Y, X)
         * </pre>
         */
        boolean hasStride();
        /**
         * <code>optional uint32 stride = 3 [default = 1];</code>
         *
         * <pre>
         * The stride (equal in Y, X)
         * </pre>
         */
        int getStride();

        /**
         * <code>optional uint32 stride_h = 7;</code>
         *
         * <pre>
         * The stride height
         * </pre>
         */
        boolean hasStrideH();
        /**
         * <code>optional uint32 stride_h = 7;</code>
         *
         * <pre>
         * The stride height
         * </pre>
         */
        int getStrideH();

        /**
         * <code>optional uint32 stride_w = 8;</code>
         *
         * <pre>
         * The stride width
         * </pre>
         */
        boolean hasStrideW();
        /**
         * <code>optional uint32 stride_w = 8;</code>
         *
         * <pre>
         * The stride width
         * </pre>
         */
        int getStrideW();

        /**
         * <code>optional .caffe.PoolingParameter.Engine engine = 11 [default = DEFAULT];</code>
         */
        boolean hasEngine();
        /**
         * <code>optional .caffe.PoolingParameter.Engine engine = 11 [default = DEFAULT];</code>
         */
        caffe.Loadcaffe.PoolingParameter.Engine getEngine();

        /**
         * <code>optional bool global_pooling = 12 [default = false];</code>
         *
         * <pre>
         * If global_pooling then it will pool over the size of the bottom by doing
         * kernel_h = bottom-&gt;height and kernel_w = bottom-&gt;width
         * </pre>
         */
        boolean hasGlobalPooling();
        /**
         * <code>optional bool global_pooling = 12 [default = false];</code>
         *
         * <pre>
         * If global_pooling then it will pool over the size of the bottom by doing
         * kernel_h = bottom-&gt;height and kernel_w = bottom-&gt;width
         * </pre>
         */
        boolean getGlobalPooling();
    }
    /**
     * Protobuf type {@code caffe.PoolingParameter}
     *
     * <pre>
     * Message that stores parameters used by PoolingLayer
     * </pre>
     */
    public static final class PoolingParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.PoolingParameter)
            PoolingParameterOrBuilder {
        // Use PoolingParameter.newBuilder() to construct.
        private PoolingParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private PoolingParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final PoolingParameter defaultInstance;
        public static PoolingParameter getDefaultInstance() {
            return defaultInstance;
        }

        public PoolingParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private PoolingParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            int rawValue = input.readEnum();
                            caffe.Loadcaffe.PoolingParameter.PoolMethod value = caffe.Loadcaffe.PoolingParameter.PoolMethod.valueOf(rawValue);
                            if (value == null) {
                                unknownFields.mergeVarintField(1, rawValue);
                            } else {
                                bitField0_ |= 0x00000001;
                                pool_ = value;
                            }
                            break;
                        }
                        case 16: {
                            bitField0_ |= 0x00000010;
                            kernelSize_ = input.readUInt32();
                            break;
                        }
                        case 24: {
                            bitField0_ |= 0x00000080;
                            stride_ = input.readUInt32();
                            break;
                        }
                        case 32: {
                            bitField0_ |= 0x00000002;
                            pad_ = input.readUInt32();
                            break;
                        }
                        case 40: {
                            bitField0_ |= 0x00000020;
                            kernelH_ = input.readUInt32();
                            break;
                        }
                        case 48: {
                            bitField0_ |= 0x00000040;
                            kernelW_ = input.readUInt32();
                            break;
                        }
                        case 56: {
                            bitField0_ |= 0x00000100;
                            strideH_ = input.readUInt32();
                            break;
                        }
                        case 64: {
                            bitField0_ |= 0x00000200;
                            strideW_ = input.readUInt32();
                            break;
                        }
                        case 72: {
                            bitField0_ |= 0x00000004;
                            padH_ = input.readUInt32();
                            break;
                        }
                        case 80: {
                            bitField0_ |= 0x00000008;
                            padW_ = input.readUInt32();
                            break;
                        }
                        case 88: {
                            int rawValue = input.readEnum();
                            caffe.Loadcaffe.PoolingParameter.Engine value = caffe.Loadcaffe.PoolingParameter.Engine.valueOf(rawValue);
                            if (value == null) {
                                unknownFields.mergeVarintField(11, rawValue);
                            } else {
                                bitField0_ |= 0x00000400;
                                engine_ = value;
                            }
                            break;
                        }
                        case 96: {
                            bitField0_ |= 0x00000800;
                            globalPooling_ = input.readBool();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_PoolingParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_PoolingParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.PoolingParameter.class, caffe.Loadcaffe.PoolingParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<PoolingParameter> PARSER =
                new com.google.protobuf.AbstractParser<PoolingParameter>() {
                    public PoolingParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new PoolingParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<PoolingParameter> getParserForType() {
            return PARSER;
        }

        /**
         * Protobuf enum {@code caffe.PoolingParameter.PoolMethod}
         */
        public enum PoolMethod
                implements com.google.protobuf.ProtocolMessageEnum {
            /**
             * <code>MAX = 0;</code>
             */
            MAX(0, 0),
            /**
             * <code>AVE = 1;</code>
             */
            AVE(1, 1),
            /**
             * <code>STOCHASTIC = 2;</code>
             */
            STOCHASTIC(2, 2),
            ;

            /**
             * <code>MAX = 0;</code>
             */
            public static final int MAX_VALUE = 0;
            /**
             * <code>AVE = 1;</code>
             */
            public static final int AVE_VALUE = 1;
            /**
             * <code>STOCHASTIC = 2;</code>
             */
            public static final int STOCHASTIC_VALUE = 2;


            public final int getNumber() { return value; }

            public static PoolMethod valueOf(int value) {
                switch (value) {
                    case 0: return MAX;
                    case 1: return AVE;
                    case 2: return STOCHASTIC;
                    default: return null;
                }
            }

            public static com.google.protobuf.Internal.EnumLiteMap<PoolMethod>
            internalGetValueMap() {
                return internalValueMap;
            }
            private static com.google.protobuf.Internal.EnumLiteMap<PoolMethod>
                    internalValueMap =
                    new com.google.protobuf.Internal.EnumLiteMap<PoolMethod>() {
                        public PoolMethod findValueByNumber(int number) {
                            return PoolMethod.valueOf(number);
                        }
                    };

            public final com.google.protobuf.Descriptors.EnumValueDescriptor
            getValueDescriptor() {
                return getDescriptor().getValues().get(index);
            }
            public final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptorForType() {
                return getDescriptor();
            }
            public static final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptor() {
                return caffe.Loadcaffe.PoolingParameter.getDescriptor().getEnumTypes().get(0);
            }

            private static final PoolMethod[] VALUES = values();

            public static PoolMethod valueOf(
                    com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new java.lang.IllegalArgumentException(
                            "EnumValueDescriptor is not for this type.");
                }
                return VALUES[desc.getIndex()];
            }

            private final int index;
            private final int value;

            private PoolMethod(int index, int value) {
                this.index = index;
                this.value = value;
            }

            // @@protoc_insertion_point(enum_scope:caffe.PoolingParameter.PoolMethod)
        }

        /**
         * Protobuf enum {@code caffe.PoolingParameter.Engine}
         */
        public enum Engine
                implements com.google.protobuf.ProtocolMessageEnum {
            /**
             * <code>DEFAULT = 0;</code>
             */
            DEFAULT(0, 0),
            /**
             * <code>CAFFE = 1;</code>
             */
            CAFFE(1, 1),
            /**
             * <code>CUDNN = 2;</code>
             */
            CUDNN(2, 2),
            ;

            /**
             * <code>DEFAULT = 0;</code>
             */
            public static final int DEFAULT_VALUE = 0;
            /**
             * <code>CAFFE = 1;</code>
             */
            public static final int CAFFE_VALUE = 1;
            /**
             * <code>CUDNN = 2;</code>
             */
            public static final int CUDNN_VALUE = 2;


            public final int getNumber() { return value; }

            public static Engine valueOf(int value) {
                switch (value) {
                    case 0: return DEFAULT;
                    case 1: return CAFFE;
                    case 2: return CUDNN;
                    default: return null;
                }
            }

            public static com.google.protobuf.Internal.EnumLiteMap<Engine>
            internalGetValueMap() {
                return internalValueMap;
            }
            private static com.google.protobuf.Internal.EnumLiteMap<Engine>
                    internalValueMap =
                    new com.google.protobuf.Internal.EnumLiteMap<Engine>() {
                        public Engine findValueByNumber(int number) {
                            return Engine.valueOf(number);
                        }
                    };

            public final com.google.protobuf.Descriptors.EnumValueDescriptor
            getValueDescriptor() {
                return getDescriptor().getValues().get(index);
            }
            public final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptorForType() {
                return getDescriptor();
            }
            public static final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptor() {
                return caffe.Loadcaffe.PoolingParameter.getDescriptor().getEnumTypes().get(1);
            }

            private static final Engine[] VALUES = values();

            public static Engine valueOf(
                    com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new java.lang.IllegalArgumentException(
                            "EnumValueDescriptor is not for this type.");
                }
                return VALUES[desc.getIndex()];
            }

            private final int index;
            private final int value;

            private Engine(int index, int value) {
                this.index = index;
                this.value = value;
            }

            // @@protoc_insertion_point(enum_scope:caffe.PoolingParameter.Engine)
        }

        private int bitField0_;
        public static final int POOL_FIELD_NUMBER = 1;
        private caffe.Loadcaffe.PoolingParameter.PoolMethod pool_;
        /**
         * <code>optional .caffe.PoolingParameter.PoolMethod pool = 1 [default = MAX];</code>
         *
         * <pre>
         * The pooling method
         * </pre>
         */
        public boolean hasPool() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional .caffe.PoolingParameter.PoolMethod pool = 1 [default = MAX];</code>
         *
         * <pre>
         * The pooling method
         * </pre>
         */
        public caffe.Loadcaffe.PoolingParameter.PoolMethod getPool() {
            return pool_;
        }

        public static final int PAD_FIELD_NUMBER = 4;
        private int pad_;
        /**
         * <code>optional uint32 pad = 4 [default = 0];</code>
         *
         * <pre>
         * Pad, kernel size, and stride are all given as a single value for equal
         * dimensions in height and width or as Y, X pairs.
         * </pre>
         */
        public boolean hasPad() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional uint32 pad = 4 [default = 0];</code>
         *
         * <pre>
         * Pad, kernel size, and stride are all given as a single value for equal
         * dimensions in height and width or as Y, X pairs.
         * </pre>
         */
        public int getPad() {
            return pad_;
        }

        public static final int PAD_H_FIELD_NUMBER = 9;
        private int padH_;
        /**
         * <code>optional uint32 pad_h = 9 [default = 0];</code>
         *
         * <pre>
         * The padding height
         * </pre>
         */
        public boolean hasPadH() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional uint32 pad_h = 9 [default = 0];</code>
         *
         * <pre>
         * The padding height
         * </pre>
         */
        public int getPadH() {
            return padH_;
        }

        public static final int PAD_W_FIELD_NUMBER = 10;
        private int padW_;
        /**
         * <code>optional uint32 pad_w = 10 [default = 0];</code>
         *
         * <pre>
         * The padding width
         * </pre>
         */
        public boolean hasPadW() {
            return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional uint32 pad_w = 10 [default = 0];</code>
         *
         * <pre>
         * The padding width
         * </pre>
         */
        public int getPadW() {
            return padW_;
        }

        public static final int KERNEL_SIZE_FIELD_NUMBER = 2;
        private int kernelSize_;
        /**
         * <code>optional uint32 kernel_size = 2;</code>
         *
         * <pre>
         * The kernel size (square)
         * </pre>
         */
        public boolean hasKernelSize() {
            return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>optional uint32 kernel_size = 2;</code>
         *
         * <pre>
         * The kernel size (square)
         * </pre>
         */
        public int getKernelSize() {
            return kernelSize_;
        }

        public static final int KERNEL_H_FIELD_NUMBER = 5;
        private int kernelH_;
        /**
         * <code>optional uint32 kernel_h = 5;</code>
         *
         * <pre>
         * The kernel height
         * </pre>
         */
        public boolean hasKernelH() {
            return ((bitField0_ & 0x00000020) == 0x00000020);
        }
        /**
         * <code>optional uint32 kernel_h = 5;</code>
         *
         * <pre>
         * The kernel height
         * </pre>
         */
        public int getKernelH() {
            return kernelH_;
        }

        public static final int KERNEL_W_FIELD_NUMBER = 6;
        private int kernelW_;
        /**
         * <code>optional uint32 kernel_w = 6;</code>
         *
         * <pre>
         * The kernel width
         * </pre>
         */
        public boolean hasKernelW() {
            return ((bitField0_ & 0x00000040) == 0x00000040);
        }
        /**
         * <code>optional uint32 kernel_w = 6;</code>
         *
         * <pre>
         * The kernel width
         * </pre>
         */
        public int getKernelW() {
            return kernelW_;
        }

        public static final int STRIDE_FIELD_NUMBER = 3;
        private int stride_;
        /**
         * <code>optional uint32 stride = 3 [default = 1];</code>
         *
         * <pre>
         * The stride (equal in Y, X)
         * </pre>
         */
        public boolean hasStride() {
            return ((bitField0_ & 0x00000080) == 0x00000080);
        }
        /**
         * <code>optional uint32 stride = 3 [default = 1];</code>
         *
         * <pre>
         * The stride (equal in Y, X)
         * </pre>
         */
        public int getStride() {
            return stride_;
        }

        public static final int STRIDE_H_FIELD_NUMBER = 7;
        private int strideH_;
        /**
         * <code>optional uint32 stride_h = 7;</code>
         *
         * <pre>
         * The stride height
         * </pre>
         */
        public boolean hasStrideH() {
            return ((bitField0_ & 0x00000100) == 0x00000100);
        }
        /**
         * <code>optional uint32 stride_h = 7;</code>
         *
         * <pre>
         * The stride height
         * </pre>
         */
        public int getStrideH() {
            return strideH_;
        }

        public static final int STRIDE_W_FIELD_NUMBER = 8;
        private int strideW_;
        /**
         * <code>optional uint32 stride_w = 8;</code>
         *
         * <pre>
         * The stride width
         * </pre>
         */
        public boolean hasStrideW() {
            return ((bitField0_ & 0x00000200) == 0x00000200);
        }
        /**
         * <code>optional uint32 stride_w = 8;</code>
         *
         * <pre>
         * The stride width
         * </pre>
         */
        public int getStrideW() {
            return strideW_;
        }

        public static final int ENGINE_FIELD_NUMBER = 11;
        private caffe.Loadcaffe.PoolingParameter.Engine engine_;
        /**
         * <code>optional .caffe.PoolingParameter.Engine engine = 11 [default = DEFAULT];</code>
         */
        public boolean hasEngine() {
            return ((bitField0_ & 0x00000400) == 0x00000400);
        }
        /**
         * <code>optional .caffe.PoolingParameter.Engine engine = 11 [default = DEFAULT];</code>
         */
        public caffe.Loadcaffe.PoolingParameter.Engine getEngine() {
            return engine_;
        }

        public static final int GLOBAL_POOLING_FIELD_NUMBER = 12;
        private boolean globalPooling_;
        /**
         * <code>optional bool global_pooling = 12 [default = false];</code>
         *
         * <pre>
         * If global_pooling then it will pool over the size of the bottom by doing
         * kernel_h = bottom-&gt;height and kernel_w = bottom-&gt;width
         * </pre>
         */
        public boolean hasGlobalPooling() {
            return ((bitField0_ & 0x00000800) == 0x00000800);
        }
        /**
         * <code>optional bool global_pooling = 12 [default = false];</code>
         *
         * <pre>
         * If global_pooling then it will pool over the size of the bottom by doing
         * kernel_h = bottom-&gt;height and kernel_w = bottom-&gt;width
         * </pre>
         */
        public boolean getGlobalPooling() {
            return globalPooling_;
        }

        private void initFields() {
            pool_ = caffe.Loadcaffe.PoolingParameter.PoolMethod.MAX;
            pad_ = 0;
            padH_ = 0;
            padW_ = 0;
            kernelSize_ = 0;
            kernelH_ = 0;
            kernelW_ = 0;
            stride_ = 1;
            strideH_ = 0;
            strideW_ = 0;
            engine_ = caffe.Loadcaffe.PoolingParameter.Engine.DEFAULT;
            globalPooling_ = false;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeEnum(1, pool_.getNumber());
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                output.writeUInt32(2, kernelSize_);
            }
            if (((bitField0_ & 0x00000080) == 0x00000080)) {
                output.writeUInt32(3, stride_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeUInt32(4, pad_);
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                output.writeUInt32(5, kernelH_);
            }
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                output.writeUInt32(6, kernelW_);
            }
            if (((bitField0_ & 0x00000100) == 0x00000100)) {
                output.writeUInt32(7, strideH_);
            }
            if (((bitField0_ & 0x00000200) == 0x00000200)) {
                output.writeUInt32(8, strideW_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeUInt32(9, padH_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                output.writeUInt32(10, padW_);
            }
            if (((bitField0_ & 0x00000400) == 0x00000400)) {
                output.writeEnum(11, engine_.getNumber());
            }
            if (((bitField0_ & 0x00000800) == 0x00000800)) {
                output.writeBool(12, globalPooling_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeEnumSize(1, pool_.getNumber());
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(2, kernelSize_);
            }
            if (((bitField0_ & 0x00000080) == 0x00000080)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(3, stride_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(4, pad_);
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(5, kernelH_);
            }
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(6, kernelW_);
            }
            if (((bitField0_ & 0x00000100) == 0x00000100)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(7, strideH_);
            }
            if (((bitField0_ & 0x00000200) == 0x00000200)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(8, strideW_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(9, padH_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(10, padW_);
            }
            if (((bitField0_ & 0x00000400) == 0x00000400)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeEnumSize(11, engine_.getNumber());
            }
            if (((bitField0_ & 0x00000800) == 0x00000800)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(12, globalPooling_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.PoolingParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.PoolingParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.PoolingParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.PoolingParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.PoolingParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.PoolingParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.PoolingParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.PoolingParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.PoolingParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.PoolingParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.PoolingParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.PoolingParameter}
         *
         * <pre>
         * Message that stores parameters used by PoolingLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.PoolingParameter)
                caffe.Loadcaffe.PoolingParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_PoolingParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_PoolingParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.PoolingParameter.class, caffe.Loadcaffe.PoolingParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.PoolingParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                pool_ = caffe.Loadcaffe.PoolingParameter.PoolMethod.MAX;
                bitField0_ = (bitField0_ & ~0x00000001);
                pad_ = 0;
                bitField0_ = (bitField0_ & ~0x00000002);
                padH_ = 0;
                bitField0_ = (bitField0_ & ~0x00000004);
                padW_ = 0;
                bitField0_ = (bitField0_ & ~0x00000008);
                kernelSize_ = 0;
                bitField0_ = (bitField0_ & ~0x00000010);
                kernelH_ = 0;
                bitField0_ = (bitField0_ & ~0x00000020);
                kernelW_ = 0;
                bitField0_ = (bitField0_ & ~0x00000040);
                stride_ = 1;
                bitField0_ = (bitField0_ & ~0x00000080);
                strideH_ = 0;
                bitField0_ = (bitField0_ & ~0x00000100);
                strideW_ = 0;
                bitField0_ = (bitField0_ & ~0x00000200);
                engine_ = caffe.Loadcaffe.PoolingParameter.Engine.DEFAULT;
                bitField0_ = (bitField0_ & ~0x00000400);
                globalPooling_ = false;
                bitField0_ = (bitField0_ & ~0x00000800);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_PoolingParameter_descriptor;
            }

            public caffe.Loadcaffe.PoolingParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.PoolingParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.PoolingParameter build() {
                caffe.Loadcaffe.PoolingParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.PoolingParameter buildPartial() {
                caffe.Loadcaffe.PoolingParameter result = new caffe.Loadcaffe.PoolingParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.pool_ = pool_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.pad_ = pad_;
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000004;
                }
                result.padH_ = padH_;
                if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
                    to_bitField0_ |= 0x00000008;
                }
                result.padW_ = padW_;
                if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
                    to_bitField0_ |= 0x00000010;
                }
                result.kernelSize_ = kernelSize_;
                if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
                    to_bitField0_ |= 0x00000020;
                }
                result.kernelH_ = kernelH_;
                if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
                    to_bitField0_ |= 0x00000040;
                }
                result.kernelW_ = kernelW_;
                if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
                    to_bitField0_ |= 0x00000080;
                }
                result.stride_ = stride_;
                if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
                    to_bitField0_ |= 0x00000100;
                }
                result.strideH_ = strideH_;
                if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
                    to_bitField0_ |= 0x00000200;
                }
                result.strideW_ = strideW_;
                if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
                    to_bitField0_ |= 0x00000400;
                }
                result.engine_ = engine_;
                if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
                    to_bitField0_ |= 0x00000800;
                }
                result.globalPooling_ = globalPooling_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.PoolingParameter) {
                    return mergeFrom((caffe.Loadcaffe.PoolingParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.PoolingParameter other) {
                if (other == caffe.Loadcaffe.PoolingParameter.getDefaultInstance()) return this;
                if (other.hasPool()) {
                    setPool(other.getPool());
                }
                if (other.hasPad()) {
                    setPad(other.getPad());
                }
                if (other.hasPadH()) {
                    setPadH(other.getPadH());
                }
                if (other.hasPadW()) {
                    setPadW(other.getPadW());
                }
                if (other.hasKernelSize()) {
                    setKernelSize(other.getKernelSize());
                }
                if (other.hasKernelH()) {
                    setKernelH(other.getKernelH());
                }
                if (other.hasKernelW()) {
                    setKernelW(other.getKernelW());
                }
                if (other.hasStride()) {
                    setStride(other.getStride());
                }
                if (other.hasStrideH()) {
                    setStrideH(other.getStrideH());
                }
                if (other.hasStrideW()) {
                    setStrideW(other.getStrideW());
                }
                if (other.hasEngine()) {
                    setEngine(other.getEngine());
                }
                if (other.hasGlobalPooling()) {
                    setGlobalPooling(other.getGlobalPooling());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.PoolingParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.PoolingParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private caffe.Loadcaffe.PoolingParameter.PoolMethod pool_ = caffe.Loadcaffe.PoolingParameter.PoolMethod.MAX;
            /**
             * <code>optional .caffe.PoolingParameter.PoolMethod pool = 1 [default = MAX];</code>
             *
             * <pre>
             * The pooling method
             * </pre>
             */
            public boolean hasPool() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional .caffe.PoolingParameter.PoolMethod pool = 1 [default = MAX];</code>
             *
             * <pre>
             * The pooling method
             * </pre>
             */
            public caffe.Loadcaffe.PoolingParameter.PoolMethod getPool() {
                return pool_;
            }
            /**
             * <code>optional .caffe.PoolingParameter.PoolMethod pool = 1 [default = MAX];</code>
             *
             * <pre>
             * The pooling method
             * </pre>
             */
            public Builder setPool(caffe.Loadcaffe.PoolingParameter.PoolMethod value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                pool_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional .caffe.PoolingParameter.PoolMethod pool = 1 [default = MAX];</code>
             *
             * <pre>
             * The pooling method
             * </pre>
             */
            public Builder clearPool() {
                bitField0_ = (bitField0_ & ~0x00000001);
                pool_ = caffe.Loadcaffe.PoolingParameter.PoolMethod.MAX;
                onChanged();
                return this;
            }

            private int pad_ ;
            /**
             * <code>optional uint32 pad = 4 [default = 0];</code>
             *
             * <pre>
             * Pad, kernel size, and stride are all given as a single value for equal
             * dimensions in height and width or as Y, X pairs.
             * </pre>
             */
            public boolean hasPad() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional uint32 pad = 4 [default = 0];</code>
             *
             * <pre>
             * Pad, kernel size, and stride are all given as a single value for equal
             * dimensions in height and width or as Y, X pairs.
             * </pre>
             */
            public int getPad() {
                return pad_;
            }
            /**
             * <code>optional uint32 pad = 4 [default = 0];</code>
             *
             * <pre>
             * Pad, kernel size, and stride are all given as a single value for equal
             * dimensions in height and width or as Y, X pairs.
             * </pre>
             */
            public Builder setPad(int value) {
                bitField0_ |= 0x00000002;
                pad_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 pad = 4 [default = 0];</code>
             *
             * <pre>
             * Pad, kernel size, and stride are all given as a single value for equal
             * dimensions in height and width or as Y, X pairs.
             * </pre>
             */
            public Builder clearPad() {
                bitField0_ = (bitField0_ & ~0x00000002);
                pad_ = 0;
                onChanged();
                return this;
            }

            private int padH_ ;
            /**
             * <code>optional uint32 pad_h = 9 [default = 0];</code>
             *
             * <pre>
             * The padding height
             * </pre>
             */
            public boolean hasPadH() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional uint32 pad_h = 9 [default = 0];</code>
             *
             * <pre>
             * The padding height
             * </pre>
             */
            public int getPadH() {
                return padH_;
            }
            /**
             * <code>optional uint32 pad_h = 9 [default = 0];</code>
             *
             * <pre>
             * The padding height
             * </pre>
             */
            public Builder setPadH(int value) {
                bitField0_ |= 0x00000004;
                padH_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 pad_h = 9 [default = 0];</code>
             *
             * <pre>
             * The padding height
             * </pre>
             */
            public Builder clearPadH() {
                bitField0_ = (bitField0_ & ~0x00000004);
                padH_ = 0;
                onChanged();
                return this;
            }

            private int padW_ ;
            /**
             * <code>optional uint32 pad_w = 10 [default = 0];</code>
             *
             * <pre>
             * The padding width
             * </pre>
             */
            public boolean hasPadW() {
                return ((bitField0_ & 0x00000008) == 0x00000008);
            }
            /**
             * <code>optional uint32 pad_w = 10 [default = 0];</code>
             *
             * <pre>
             * The padding width
             * </pre>
             */
            public int getPadW() {
                return padW_;
            }
            /**
             * <code>optional uint32 pad_w = 10 [default = 0];</code>
             *
             * <pre>
             * The padding width
             * </pre>
             */
            public Builder setPadW(int value) {
                bitField0_ |= 0x00000008;
                padW_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 pad_w = 10 [default = 0];</code>
             *
             * <pre>
             * The padding width
             * </pre>
             */
            public Builder clearPadW() {
                bitField0_ = (bitField0_ & ~0x00000008);
                padW_ = 0;
                onChanged();
                return this;
            }

            private int kernelSize_ ;
            /**
             * <code>optional uint32 kernel_size = 2;</code>
             *
             * <pre>
             * The kernel size (square)
             * </pre>
             */
            public boolean hasKernelSize() {
                return ((bitField0_ & 0x00000010) == 0x00000010);
            }
            /**
             * <code>optional uint32 kernel_size = 2;</code>
             *
             * <pre>
             * The kernel size (square)
             * </pre>
             */
            public int getKernelSize() {
                return kernelSize_;
            }
            /**
             * <code>optional uint32 kernel_size = 2;</code>
             *
             * <pre>
             * The kernel size (square)
             * </pre>
             */
            public Builder setKernelSize(int value) {
                bitField0_ |= 0x00000010;
                kernelSize_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 kernel_size = 2;</code>
             *
             * <pre>
             * The kernel size (square)
             * </pre>
             */
            public Builder clearKernelSize() {
                bitField0_ = (bitField0_ & ~0x00000010);
                kernelSize_ = 0;
                onChanged();
                return this;
            }

            private int kernelH_ ;
            /**
             * <code>optional uint32 kernel_h = 5;</code>
             *
             * <pre>
             * The kernel height
             * </pre>
             */
            public boolean hasKernelH() {
                return ((bitField0_ & 0x00000020) == 0x00000020);
            }
            /**
             * <code>optional uint32 kernel_h = 5;</code>
             *
             * <pre>
             * The kernel height
             * </pre>
             */
            public int getKernelH() {
                return kernelH_;
            }
            /**
             * <code>optional uint32 kernel_h = 5;</code>
             *
             * <pre>
             * The kernel height
             * </pre>
             */
            public Builder setKernelH(int value) {
                bitField0_ |= 0x00000020;
                kernelH_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 kernel_h = 5;</code>
             *
             * <pre>
             * The kernel height
             * </pre>
             */
            public Builder clearKernelH() {
                bitField0_ = (bitField0_ & ~0x00000020);
                kernelH_ = 0;
                onChanged();
                return this;
            }

            private int kernelW_ ;
            /**
             * <code>optional uint32 kernel_w = 6;</code>
             *
             * <pre>
             * The kernel width
             * </pre>
             */
            public boolean hasKernelW() {
                return ((bitField0_ & 0x00000040) == 0x00000040);
            }
            /**
             * <code>optional uint32 kernel_w = 6;</code>
             *
             * <pre>
             * The kernel width
             * </pre>
             */
            public int getKernelW() {
                return kernelW_;
            }
            /**
             * <code>optional uint32 kernel_w = 6;</code>
             *
             * <pre>
             * The kernel width
             * </pre>
             */
            public Builder setKernelW(int value) {
                bitField0_ |= 0x00000040;
                kernelW_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 kernel_w = 6;</code>
             *
             * <pre>
             * The kernel width
             * </pre>
             */
            public Builder clearKernelW() {
                bitField0_ = (bitField0_ & ~0x00000040);
                kernelW_ = 0;
                onChanged();
                return this;
            }

            private int stride_ = 1;
            /**
             * <code>optional uint32 stride = 3 [default = 1];</code>
             *
             * <pre>
             * The stride (equal in Y, X)
             * </pre>
             */
            public boolean hasStride() {
                return ((bitField0_ & 0x00000080) == 0x00000080);
            }
            /**
             * <code>optional uint32 stride = 3 [default = 1];</code>
             *
             * <pre>
             * The stride (equal in Y, X)
             * </pre>
             */
            public int getStride() {
                return stride_;
            }
            /**
             * <code>optional uint32 stride = 3 [default = 1];</code>
             *
             * <pre>
             * The stride (equal in Y, X)
             * </pre>
             */
            public Builder setStride(int value) {
                bitField0_ |= 0x00000080;
                stride_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 stride = 3 [default = 1];</code>
             *
             * <pre>
             * The stride (equal in Y, X)
             * </pre>
             */
            public Builder clearStride() {
                bitField0_ = (bitField0_ & ~0x00000080);
                stride_ = 1;
                onChanged();
                return this;
            }

            private int strideH_ ;
            /**
             * <code>optional uint32 stride_h = 7;</code>
             *
             * <pre>
             * The stride height
             * </pre>
             */
            public boolean hasStrideH() {
                return ((bitField0_ & 0x00000100) == 0x00000100);
            }
            /**
             * <code>optional uint32 stride_h = 7;</code>
             *
             * <pre>
             * The stride height
             * </pre>
             */
            public int getStrideH() {
                return strideH_;
            }
            /**
             * <code>optional uint32 stride_h = 7;</code>
             *
             * <pre>
             * The stride height
             * </pre>
             */
            public Builder setStrideH(int value) {
                bitField0_ |= 0x00000100;
                strideH_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 stride_h = 7;</code>
             *
             * <pre>
             * The stride height
             * </pre>
             */
            public Builder clearStrideH() {
                bitField0_ = (bitField0_ & ~0x00000100);
                strideH_ = 0;
                onChanged();
                return this;
            }

            private int strideW_ ;
            /**
             * <code>optional uint32 stride_w = 8;</code>
             *
             * <pre>
             * The stride width
             * </pre>
             */
            public boolean hasStrideW() {
                return ((bitField0_ & 0x00000200) == 0x00000200);
            }
            /**
             * <code>optional uint32 stride_w = 8;</code>
             *
             * <pre>
             * The stride width
             * </pre>
             */
            public int getStrideW() {
                return strideW_;
            }
            /**
             * <code>optional uint32 stride_w = 8;</code>
             *
             * <pre>
             * The stride width
             * </pre>
             */
            public Builder setStrideW(int value) {
                bitField0_ |= 0x00000200;
                strideW_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 stride_w = 8;</code>
             *
             * <pre>
             * The stride width
             * </pre>
             */
            public Builder clearStrideW() {
                bitField0_ = (bitField0_ & ~0x00000200);
                strideW_ = 0;
                onChanged();
                return this;
            }

            private caffe.Loadcaffe.PoolingParameter.Engine engine_ = caffe.Loadcaffe.PoolingParameter.Engine.DEFAULT;
            /**
             * <code>optional .caffe.PoolingParameter.Engine engine = 11 [default = DEFAULT];</code>
             */
            public boolean hasEngine() {
                return ((bitField0_ & 0x00000400) == 0x00000400);
            }
            /**
             * <code>optional .caffe.PoolingParameter.Engine engine = 11 [default = DEFAULT];</code>
             */
            public caffe.Loadcaffe.PoolingParameter.Engine getEngine() {
                return engine_;
            }
            /**
             * <code>optional .caffe.PoolingParameter.Engine engine = 11 [default = DEFAULT];</code>
             */
            public Builder setEngine(caffe.Loadcaffe.PoolingParameter.Engine value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000400;
                engine_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional .caffe.PoolingParameter.Engine engine = 11 [default = DEFAULT];</code>
             */
            public Builder clearEngine() {
                bitField0_ = (bitField0_ & ~0x00000400);
                engine_ = caffe.Loadcaffe.PoolingParameter.Engine.DEFAULT;
                onChanged();
                return this;
            }

            private boolean globalPooling_ ;
            /**
             * <code>optional bool global_pooling = 12 [default = false];</code>
             *
             * <pre>
             * If global_pooling then it will pool over the size of the bottom by doing
             * kernel_h = bottom-&gt;height and kernel_w = bottom-&gt;width
             * </pre>
             */
            public boolean hasGlobalPooling() {
                return ((bitField0_ & 0x00000800) == 0x00000800);
            }
            /**
             * <code>optional bool global_pooling = 12 [default = false];</code>
             *
             * <pre>
             * If global_pooling then it will pool over the size of the bottom by doing
             * kernel_h = bottom-&gt;height and kernel_w = bottom-&gt;width
             * </pre>
             */
            public boolean getGlobalPooling() {
                return globalPooling_;
            }
            /**
             * <code>optional bool global_pooling = 12 [default = false];</code>
             *
             * <pre>
             * If global_pooling then it will pool over the size of the bottom by doing
             * kernel_h = bottom-&gt;height and kernel_w = bottom-&gt;width
             * </pre>
             */
            public Builder setGlobalPooling(boolean value) {
                bitField0_ |= 0x00000800;
                globalPooling_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool global_pooling = 12 [default = false];</code>
             *
             * <pre>
             * If global_pooling then it will pool over the size of the bottom by doing
             * kernel_h = bottom-&gt;height and kernel_w = bottom-&gt;width
             * </pre>
             */
            public Builder clearGlobalPooling() {
                bitField0_ = (bitField0_ & ~0x00000800);
                globalPooling_ = false;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.PoolingParameter)
        }

        static {
            defaultInstance = new PoolingParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.PoolingParameter)
    }

    public interface PowerParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.PowerParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional float power = 1 [default = 1];</code>
         *
         * <pre>
         * PowerLayer computes outputs y = (shift + scale * x) ^ power.
         * </pre>
         */
        boolean hasPower();
        /**
         * <code>optional float power = 1 [default = 1];</code>
         *
         * <pre>
         * PowerLayer computes outputs y = (shift + scale * x) ^ power.
         * </pre>
         */
        float getPower();

        /**
         * <code>optional float scale = 2 [default = 1];</code>
         */
        boolean hasScale();
        /**
         * <code>optional float scale = 2 [default = 1];</code>
         */
        float getScale();

        /**
         * <code>optional float shift = 3 [default = 0];</code>
         */
        boolean hasShift();
        /**
         * <code>optional float shift = 3 [default = 0];</code>
         */
        float getShift();
    }
    /**
     * Protobuf type {@code caffe.PowerParameter}
     *
     * <pre>
     * Message that stores parameters used by PowerLayer
     * </pre>
     */
    public static final class PowerParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.PowerParameter)
            PowerParameterOrBuilder {
        // Use PowerParameter.newBuilder() to construct.
        private PowerParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private PowerParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final PowerParameter defaultInstance;
        public static PowerParameter getDefaultInstance() {
            return defaultInstance;
        }

        public PowerParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private PowerParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 13: {
                            bitField0_ |= 0x00000001;
                            power_ = input.readFloat();
                            break;
                        }
                        case 21: {
                            bitField0_ |= 0x00000002;
                            scale_ = input.readFloat();
                            break;
                        }
                        case 29: {
                            bitField0_ |= 0x00000004;
                            shift_ = input.readFloat();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_PowerParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_PowerParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.PowerParameter.class, caffe.Loadcaffe.PowerParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<PowerParameter> PARSER =
                new com.google.protobuf.AbstractParser<PowerParameter>() {
                    public PowerParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new PowerParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<PowerParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int POWER_FIELD_NUMBER = 1;
        private float power_;
        /**
         * <code>optional float power = 1 [default = 1];</code>
         *
         * <pre>
         * PowerLayer computes outputs y = (shift + scale * x) ^ power.
         * </pre>
         */
        public boolean hasPower() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional float power = 1 [default = 1];</code>
         *
         * <pre>
         * PowerLayer computes outputs y = (shift + scale * x) ^ power.
         * </pre>
         */
        public float getPower() {
            return power_;
        }

        public static final int SCALE_FIELD_NUMBER = 2;
        private float scale_;
        /**
         * <code>optional float scale = 2 [default = 1];</code>
         */
        public boolean hasScale() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional float scale = 2 [default = 1];</code>
         */
        public float getScale() {
            return scale_;
        }

        public static final int SHIFT_FIELD_NUMBER = 3;
        private float shift_;
        /**
         * <code>optional float shift = 3 [default = 0];</code>
         */
        public boolean hasShift() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional float shift = 3 [default = 0];</code>
         */
        public float getShift() {
            return shift_;
        }

        private void initFields() {
            power_ = 1F;
            scale_ = 1F;
            shift_ = 0F;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeFloat(1, power_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeFloat(2, scale_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeFloat(3, shift_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(1, power_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(2, scale_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(3, shift_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.PowerParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.PowerParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.PowerParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.PowerParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.PowerParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.PowerParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.PowerParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.PowerParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.PowerParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.PowerParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.PowerParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.PowerParameter}
         *
         * <pre>
         * Message that stores parameters used by PowerLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.PowerParameter)
                caffe.Loadcaffe.PowerParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_PowerParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_PowerParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.PowerParameter.class, caffe.Loadcaffe.PowerParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.PowerParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                power_ = 1F;
                bitField0_ = (bitField0_ & ~0x00000001);
                scale_ = 1F;
                bitField0_ = (bitField0_ & ~0x00000002);
                shift_ = 0F;
                bitField0_ = (bitField0_ & ~0x00000004);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_PowerParameter_descriptor;
            }

            public caffe.Loadcaffe.PowerParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.PowerParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.PowerParameter build() {
                caffe.Loadcaffe.PowerParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.PowerParameter buildPartial() {
                caffe.Loadcaffe.PowerParameter result = new caffe.Loadcaffe.PowerParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.power_ = power_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.scale_ = scale_;
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000004;
                }
                result.shift_ = shift_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.PowerParameter) {
                    return mergeFrom((caffe.Loadcaffe.PowerParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.PowerParameter other) {
                if (other == caffe.Loadcaffe.PowerParameter.getDefaultInstance()) return this;
                if (other.hasPower()) {
                    setPower(other.getPower());
                }
                if (other.hasScale()) {
                    setScale(other.getScale());
                }
                if (other.hasShift()) {
                    setShift(other.getShift());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.PowerParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.PowerParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private float power_ = 1F;
            /**
             * <code>optional float power = 1 [default = 1];</code>
             *
             * <pre>
             * PowerLayer computes outputs y = (shift + scale * x) ^ power.
             * </pre>
             */
            public boolean hasPower() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional float power = 1 [default = 1];</code>
             *
             * <pre>
             * PowerLayer computes outputs y = (shift + scale * x) ^ power.
             * </pre>
             */
            public float getPower() {
                return power_;
            }
            /**
             * <code>optional float power = 1 [default = 1];</code>
             *
             * <pre>
             * PowerLayer computes outputs y = (shift + scale * x) ^ power.
             * </pre>
             */
            public Builder setPower(float value) {
                bitField0_ |= 0x00000001;
                power_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float power = 1 [default = 1];</code>
             *
             * <pre>
             * PowerLayer computes outputs y = (shift + scale * x) ^ power.
             * </pre>
             */
            public Builder clearPower() {
                bitField0_ = (bitField0_ & ~0x00000001);
                power_ = 1F;
                onChanged();
                return this;
            }

            private float scale_ = 1F;
            /**
             * <code>optional float scale = 2 [default = 1];</code>
             */
            public boolean hasScale() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional float scale = 2 [default = 1];</code>
             */
            public float getScale() {
                return scale_;
            }
            /**
             * <code>optional float scale = 2 [default = 1];</code>
             */
            public Builder setScale(float value) {
                bitField0_ |= 0x00000002;
                scale_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float scale = 2 [default = 1];</code>
             */
            public Builder clearScale() {
                bitField0_ = (bitField0_ & ~0x00000002);
                scale_ = 1F;
                onChanged();
                return this;
            }

            private float shift_ ;
            /**
             * <code>optional float shift = 3 [default = 0];</code>
             */
            public boolean hasShift() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional float shift = 3 [default = 0];</code>
             */
            public float getShift() {
                return shift_;
            }
            /**
             * <code>optional float shift = 3 [default = 0];</code>
             */
            public Builder setShift(float value) {
                bitField0_ |= 0x00000004;
                shift_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float shift = 3 [default = 0];</code>
             */
            public Builder clearShift() {
                bitField0_ = (bitField0_ & ~0x00000004);
                shift_ = 0F;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.PowerParameter)
        }

        static {
            defaultInstance = new PowerParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.PowerParameter)
    }

    public interface PythonParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.PythonParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional string module = 1;</code>
         */
        boolean hasModule();
        /**
         * <code>optional string module = 1;</code>
         */
        java.lang.String getModule();
        /**
         * <code>optional string module = 1;</code>
         */
        com.google.protobuf.ByteString
        getModuleBytes();

        /**
         * <code>optional string layer = 2;</code>
         */
        boolean hasLayer();
        /**
         * <code>optional string layer = 2;</code>
         */
        java.lang.String getLayer();
        /**
         * <code>optional string layer = 2;</code>
         */
        com.google.protobuf.ByteString
        getLayerBytes();
    }
    /**
     * Protobuf type {@code caffe.PythonParameter}
     *
     * <pre>
     * Message that stores parameters used by PythonLayer
     * </pre>
     */
    public static final class PythonParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.PythonParameter)
            PythonParameterOrBuilder {
        // Use PythonParameter.newBuilder() to construct.
        private PythonParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private PythonParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final PythonParameter defaultInstance;
        public static PythonParameter getDefaultInstance() {
            return defaultInstance;
        }

        public PythonParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private PythonParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 10: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000001;
                            module_ = bs;
                            break;
                        }
                        case 18: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000002;
                            layer_ = bs;
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_PythonParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_PythonParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.PythonParameter.class, caffe.Loadcaffe.PythonParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<PythonParameter> PARSER =
                new com.google.protobuf.AbstractParser<PythonParameter>() {
                    public PythonParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new PythonParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<PythonParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int MODULE_FIELD_NUMBER = 1;
        private java.lang.Object module_;
        /**
         * <code>optional string module = 1;</code>
         */
        public boolean hasModule() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string module = 1;</code>
         */
        public java.lang.String getModule() {
            java.lang.Object ref = module_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    module_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string module = 1;</code>
         */
        public com.google.protobuf.ByteString
        getModuleBytes() {
            java.lang.Object ref = module_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                module_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int LAYER_FIELD_NUMBER = 2;
        private java.lang.Object layer_;
        /**
         * <code>optional string layer = 2;</code>
         */
        public boolean hasLayer() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional string layer = 2;</code>
         */
        public java.lang.String getLayer() {
            java.lang.Object ref = layer_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    layer_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string layer = 2;</code>
         */
        public com.google.protobuf.ByteString
        getLayerBytes() {
            java.lang.Object ref = layer_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                layer_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        private void initFields() {
            module_ = "";
            layer_ = "";
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeBytes(1, getModuleBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeBytes(2, getLayerBytes());
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(1, getModuleBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(2, getLayerBytes());
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.PythonParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.PythonParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.PythonParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.PythonParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.PythonParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.PythonParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.PythonParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.PythonParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.PythonParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.PythonParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.PythonParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.PythonParameter}
         *
         * <pre>
         * Message that stores parameters used by PythonLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.PythonParameter)
                caffe.Loadcaffe.PythonParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_PythonParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_PythonParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.PythonParameter.class, caffe.Loadcaffe.PythonParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.PythonParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                module_ = "";
                bitField0_ = (bitField0_ & ~0x00000001);
                layer_ = "";
                bitField0_ = (bitField0_ & ~0x00000002);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_PythonParameter_descriptor;
            }

            public caffe.Loadcaffe.PythonParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.PythonParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.PythonParameter build() {
                caffe.Loadcaffe.PythonParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.PythonParameter buildPartial() {
                caffe.Loadcaffe.PythonParameter result = new caffe.Loadcaffe.PythonParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.module_ = module_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.layer_ = layer_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.PythonParameter) {
                    return mergeFrom((caffe.Loadcaffe.PythonParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.PythonParameter other) {
                if (other == caffe.Loadcaffe.PythonParameter.getDefaultInstance()) return this;
                if (other.hasModule()) {
                    bitField0_ |= 0x00000001;
                    module_ = other.module_;
                    onChanged();
                }
                if (other.hasLayer()) {
                    bitField0_ |= 0x00000002;
                    layer_ = other.layer_;
                    onChanged();
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.PythonParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.PythonParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private java.lang.Object module_ = "";
            /**
             * <code>optional string module = 1;</code>
             */
            public boolean hasModule() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional string module = 1;</code>
             */
            public java.lang.String getModule() {
                java.lang.Object ref = module_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        module_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string module = 1;</code>
             */
            public com.google.protobuf.ByteString
            getModuleBytes() {
                java.lang.Object ref = module_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    module_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string module = 1;</code>
             */
            public Builder setModule(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                module_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string module = 1;</code>
             */
            public Builder clearModule() {
                bitField0_ = (bitField0_ & ~0x00000001);
                module_ = getDefaultInstance().getModule();
                onChanged();
                return this;
            }
            /**
             * <code>optional string module = 1;</code>
             */
            public Builder setModuleBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                module_ = value;
                onChanged();
                return this;
            }

            private java.lang.Object layer_ = "";
            /**
             * <code>optional string layer = 2;</code>
             */
            public boolean hasLayer() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional string layer = 2;</code>
             */
            public java.lang.String getLayer() {
                java.lang.Object ref = layer_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        layer_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string layer = 2;</code>
             */
            public com.google.protobuf.ByteString
            getLayerBytes() {
                java.lang.Object ref = layer_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    layer_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string layer = 2;</code>
             */
            public Builder setLayer(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000002;
                layer_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string layer = 2;</code>
             */
            public Builder clearLayer() {
                bitField0_ = (bitField0_ & ~0x00000002);
                layer_ = getDefaultInstance().getLayer();
                onChanged();
                return this;
            }
            /**
             * <code>optional string layer = 2;</code>
             */
            public Builder setLayerBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000002;
                layer_ = value;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.PythonParameter)
        }

        static {
            defaultInstance = new PythonParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.PythonParameter)
    }

    public interface ReLUParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.ReLUParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional float negative_slope = 1 [default = 0];</code>
         *
         * <pre>
         * Allow non-zero slope for negative inputs to speed up optimization
         * Described in:
         * Maas, A. L., Hannun, A. Y., &amp; Ng, A. Y. (2013). Rectifier nonlinearities
         * improve neural network acoustic models. In ICML Workshop on Deep Learning
         * for Audio, Speech, and Language Processing.
         * </pre>
         */
        boolean hasNegativeSlope();
        /**
         * <code>optional float negative_slope = 1 [default = 0];</code>
         *
         * <pre>
         * Allow non-zero slope for negative inputs to speed up optimization
         * Described in:
         * Maas, A. L., Hannun, A. Y., &amp; Ng, A. Y. (2013). Rectifier nonlinearities
         * improve neural network acoustic models. In ICML Workshop on Deep Learning
         * for Audio, Speech, and Language Processing.
         * </pre>
         */
        float getNegativeSlope();

        /**
         * <code>optional .caffe.ReLUParameter.Engine engine = 2 [default = DEFAULT];</code>
         */
        boolean hasEngine();
        /**
         * <code>optional .caffe.ReLUParameter.Engine engine = 2 [default = DEFAULT];</code>
         */
        caffe.Loadcaffe.ReLUParameter.Engine getEngine();
    }
    /**
     * Protobuf type {@code caffe.ReLUParameter}
     *
     * <pre>
     * Message that stores parameters used by ReLULayer
     * </pre>
     */
    public static final class ReLUParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.ReLUParameter)
            ReLUParameterOrBuilder {
        // Use ReLUParameter.newBuilder() to construct.
        private ReLUParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private ReLUParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final ReLUParameter defaultInstance;
        public static ReLUParameter getDefaultInstance() {
            return defaultInstance;
        }

        public ReLUParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private ReLUParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 13: {
                            bitField0_ |= 0x00000001;
                            negativeSlope_ = input.readFloat();
                            break;
                        }
                        case 16: {
                            int rawValue = input.readEnum();
                            caffe.Loadcaffe.ReLUParameter.Engine value = caffe.Loadcaffe.ReLUParameter.Engine.valueOf(rawValue);
                            if (value == null) {
                                unknownFields.mergeVarintField(2, rawValue);
                            } else {
                                bitField0_ |= 0x00000002;
                                engine_ = value;
                            }
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_ReLUParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_ReLUParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.ReLUParameter.class, caffe.Loadcaffe.ReLUParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<ReLUParameter> PARSER =
                new com.google.protobuf.AbstractParser<ReLUParameter>() {
                    public ReLUParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new ReLUParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<ReLUParameter> getParserForType() {
            return PARSER;
        }

        /**
         * Protobuf enum {@code caffe.ReLUParameter.Engine}
         */
        public enum Engine
                implements com.google.protobuf.ProtocolMessageEnum {
            /**
             * <code>DEFAULT = 0;</code>
             */
            DEFAULT(0, 0),
            /**
             * <code>CAFFE = 1;</code>
             */
            CAFFE(1, 1),
            /**
             * <code>CUDNN = 2;</code>
             */
            CUDNN(2, 2),
            ;

            /**
             * <code>DEFAULT = 0;</code>
             */
            public static final int DEFAULT_VALUE = 0;
            /**
             * <code>CAFFE = 1;</code>
             */
            public static final int CAFFE_VALUE = 1;
            /**
             * <code>CUDNN = 2;</code>
             */
            public static final int CUDNN_VALUE = 2;


            public final int getNumber() { return value; }

            public static Engine valueOf(int value) {
                switch (value) {
                    case 0: return DEFAULT;
                    case 1: return CAFFE;
                    case 2: return CUDNN;
                    default: return null;
                }
            }

            public static com.google.protobuf.Internal.EnumLiteMap<Engine>
            internalGetValueMap() {
                return internalValueMap;
            }
            private static com.google.protobuf.Internal.EnumLiteMap<Engine>
                    internalValueMap =
                    new com.google.protobuf.Internal.EnumLiteMap<Engine>() {
                        public Engine findValueByNumber(int number) {
                            return Engine.valueOf(number);
                        }
                    };

            public final com.google.protobuf.Descriptors.EnumValueDescriptor
            getValueDescriptor() {
                return getDescriptor().getValues().get(index);
            }
            public final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptorForType() {
                return getDescriptor();
            }
            public static final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptor() {
                return caffe.Loadcaffe.ReLUParameter.getDescriptor().getEnumTypes().get(0);
            }

            private static final Engine[] VALUES = values();

            public static Engine valueOf(
                    com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new java.lang.IllegalArgumentException(
                            "EnumValueDescriptor is not for this type.");
                }
                return VALUES[desc.getIndex()];
            }

            private final int index;
            private final int value;

            private Engine(int index, int value) {
                this.index = index;
                this.value = value;
            }

            // @@protoc_insertion_point(enum_scope:caffe.ReLUParameter.Engine)
        }

        private int bitField0_;
        public static final int NEGATIVE_SLOPE_FIELD_NUMBER = 1;
        private float negativeSlope_;
        /**
         * <code>optional float negative_slope = 1 [default = 0];</code>
         *
         * <pre>
         * Allow non-zero slope for negative inputs to speed up optimization
         * Described in:
         * Maas, A. L., Hannun, A. Y., &amp; Ng, A. Y. (2013). Rectifier nonlinearities
         * improve neural network acoustic models. In ICML Workshop on Deep Learning
         * for Audio, Speech, and Language Processing.
         * </pre>
         */
        public boolean hasNegativeSlope() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional float negative_slope = 1 [default = 0];</code>
         *
         * <pre>
         * Allow non-zero slope for negative inputs to speed up optimization
         * Described in:
         * Maas, A. L., Hannun, A. Y., &amp; Ng, A. Y. (2013). Rectifier nonlinearities
         * improve neural network acoustic models. In ICML Workshop on Deep Learning
         * for Audio, Speech, and Language Processing.
         * </pre>
         */
        public float getNegativeSlope() {
            return negativeSlope_;
        }

        public static final int ENGINE_FIELD_NUMBER = 2;
        private caffe.Loadcaffe.ReLUParameter.Engine engine_;
        /**
         * <code>optional .caffe.ReLUParameter.Engine engine = 2 [default = DEFAULT];</code>
         */
        public boolean hasEngine() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional .caffe.ReLUParameter.Engine engine = 2 [default = DEFAULT];</code>
         */
        public caffe.Loadcaffe.ReLUParameter.Engine getEngine() {
            return engine_;
        }

        private void initFields() {
            negativeSlope_ = 0F;
            engine_ = caffe.Loadcaffe.ReLUParameter.Engine.DEFAULT;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeFloat(1, negativeSlope_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeEnum(2, engine_.getNumber());
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(1, negativeSlope_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeEnumSize(2, engine_.getNumber());
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.ReLUParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.ReLUParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.ReLUParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.ReLUParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.ReLUParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.ReLUParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.ReLUParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.ReLUParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.ReLUParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.ReLUParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.ReLUParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.ReLUParameter}
         *
         * <pre>
         * Message that stores parameters used by ReLULayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.ReLUParameter)
                caffe.Loadcaffe.ReLUParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_ReLUParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_ReLUParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.ReLUParameter.class, caffe.Loadcaffe.ReLUParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.ReLUParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                negativeSlope_ = 0F;
                bitField0_ = (bitField0_ & ~0x00000001);
                engine_ = caffe.Loadcaffe.ReLUParameter.Engine.DEFAULT;
                bitField0_ = (bitField0_ & ~0x00000002);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_ReLUParameter_descriptor;
            }

            public caffe.Loadcaffe.ReLUParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.ReLUParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.ReLUParameter build() {
                caffe.Loadcaffe.ReLUParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.ReLUParameter buildPartial() {
                caffe.Loadcaffe.ReLUParameter result = new caffe.Loadcaffe.ReLUParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.negativeSlope_ = negativeSlope_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.engine_ = engine_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.ReLUParameter) {
                    return mergeFrom((caffe.Loadcaffe.ReLUParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.ReLUParameter other) {
                if (other == caffe.Loadcaffe.ReLUParameter.getDefaultInstance()) return this;
                if (other.hasNegativeSlope()) {
                    setNegativeSlope(other.getNegativeSlope());
                }
                if (other.hasEngine()) {
                    setEngine(other.getEngine());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.ReLUParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.ReLUParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private float negativeSlope_ ;
            /**
             * <code>optional float negative_slope = 1 [default = 0];</code>
             *
             * <pre>
             * Allow non-zero slope for negative inputs to speed up optimization
             * Described in:
             * Maas, A. L., Hannun, A. Y., &amp; Ng, A. Y. (2013). Rectifier nonlinearities
             * improve neural network acoustic models. In ICML Workshop on Deep Learning
             * for Audio, Speech, and Language Processing.
             * </pre>
             */
            public boolean hasNegativeSlope() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional float negative_slope = 1 [default = 0];</code>
             *
             * <pre>
             * Allow non-zero slope for negative inputs to speed up optimization
             * Described in:
             * Maas, A. L., Hannun, A. Y., &amp; Ng, A. Y. (2013). Rectifier nonlinearities
             * improve neural network acoustic models. In ICML Workshop on Deep Learning
             * for Audio, Speech, and Language Processing.
             * </pre>
             */
            public float getNegativeSlope() {
                return negativeSlope_;
            }
            /**
             * <code>optional float negative_slope = 1 [default = 0];</code>
             *
             * <pre>
             * Allow non-zero slope for negative inputs to speed up optimization
             * Described in:
             * Maas, A. L., Hannun, A. Y., &amp; Ng, A. Y. (2013). Rectifier nonlinearities
             * improve neural network acoustic models. In ICML Workshop on Deep Learning
             * for Audio, Speech, and Language Processing.
             * </pre>
             */
            public Builder setNegativeSlope(float value) {
                bitField0_ |= 0x00000001;
                negativeSlope_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float negative_slope = 1 [default = 0];</code>
             *
             * <pre>
             * Allow non-zero slope for negative inputs to speed up optimization
             * Described in:
             * Maas, A. L., Hannun, A. Y., &amp; Ng, A. Y. (2013). Rectifier nonlinearities
             * improve neural network acoustic models. In ICML Workshop on Deep Learning
             * for Audio, Speech, and Language Processing.
             * </pre>
             */
            public Builder clearNegativeSlope() {
                bitField0_ = (bitField0_ & ~0x00000001);
                negativeSlope_ = 0F;
                onChanged();
                return this;
            }

            private caffe.Loadcaffe.ReLUParameter.Engine engine_ = caffe.Loadcaffe.ReLUParameter.Engine.DEFAULT;
            /**
             * <code>optional .caffe.ReLUParameter.Engine engine = 2 [default = DEFAULT];</code>
             */
            public boolean hasEngine() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional .caffe.ReLUParameter.Engine engine = 2 [default = DEFAULT];</code>
             */
            public caffe.Loadcaffe.ReLUParameter.Engine getEngine() {
                return engine_;
            }
            /**
             * <code>optional .caffe.ReLUParameter.Engine engine = 2 [default = DEFAULT];</code>
             */
            public Builder setEngine(caffe.Loadcaffe.ReLUParameter.Engine value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000002;
                engine_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional .caffe.ReLUParameter.Engine engine = 2 [default = DEFAULT];</code>
             */
            public Builder clearEngine() {
                bitField0_ = (bitField0_ & ~0x00000002);
                engine_ = caffe.Loadcaffe.ReLUParameter.Engine.DEFAULT;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.ReLUParameter)
        }

        static {
            defaultInstance = new ReLUParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.ReLUParameter)
    }

    public interface SigmoidParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.SigmoidParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional .caffe.SigmoidParameter.Engine engine = 1 [default = DEFAULT];</code>
         */
        boolean hasEngine();
        /**
         * <code>optional .caffe.SigmoidParameter.Engine engine = 1 [default = DEFAULT];</code>
         */
        caffe.Loadcaffe.SigmoidParameter.Engine getEngine();
    }
    /**
     * Protobuf type {@code caffe.SigmoidParameter}
     *
     * <pre>
     * Message that stores parameters used by SigmoidLayer
     * </pre>
     */
    public static final class SigmoidParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.SigmoidParameter)
            SigmoidParameterOrBuilder {
        // Use SigmoidParameter.newBuilder() to construct.
        private SigmoidParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private SigmoidParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final SigmoidParameter defaultInstance;
        public static SigmoidParameter getDefaultInstance() {
            return defaultInstance;
        }

        public SigmoidParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private SigmoidParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            int rawValue = input.readEnum();
                            caffe.Loadcaffe.SigmoidParameter.Engine value = caffe.Loadcaffe.SigmoidParameter.Engine.valueOf(rawValue);
                            if (value == null) {
                                unknownFields.mergeVarintField(1, rawValue);
                            } else {
                                bitField0_ |= 0x00000001;
                                engine_ = value;
                            }
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_SigmoidParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_SigmoidParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.SigmoidParameter.class, caffe.Loadcaffe.SigmoidParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<SigmoidParameter> PARSER =
                new com.google.protobuf.AbstractParser<SigmoidParameter>() {
                    public SigmoidParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new SigmoidParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<SigmoidParameter> getParserForType() {
            return PARSER;
        }

        /**
         * Protobuf enum {@code caffe.SigmoidParameter.Engine}
         */
        public enum Engine
                implements com.google.protobuf.ProtocolMessageEnum {
            /**
             * <code>DEFAULT = 0;</code>
             */
            DEFAULT(0, 0),
            /**
             * <code>CAFFE = 1;</code>
             */
            CAFFE(1, 1),
            /**
             * <code>CUDNN = 2;</code>
             */
            CUDNN(2, 2),
            ;

            /**
             * <code>DEFAULT = 0;</code>
             */
            public static final int DEFAULT_VALUE = 0;
            /**
             * <code>CAFFE = 1;</code>
             */
            public static final int CAFFE_VALUE = 1;
            /**
             * <code>CUDNN = 2;</code>
             */
            public static final int CUDNN_VALUE = 2;


            public final int getNumber() { return value; }

            public static Engine valueOf(int value) {
                switch (value) {
                    case 0: return DEFAULT;
                    case 1: return CAFFE;
                    case 2: return CUDNN;
                    default: return null;
                }
            }

            public static com.google.protobuf.Internal.EnumLiteMap<Engine>
            internalGetValueMap() {
                return internalValueMap;
            }
            private static com.google.protobuf.Internal.EnumLiteMap<Engine>
                    internalValueMap =
                    new com.google.protobuf.Internal.EnumLiteMap<Engine>() {
                        public Engine findValueByNumber(int number) {
                            return Engine.valueOf(number);
                        }
                    };

            public final com.google.protobuf.Descriptors.EnumValueDescriptor
            getValueDescriptor() {
                return getDescriptor().getValues().get(index);
            }
            public final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptorForType() {
                return getDescriptor();
            }
            public static final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptor() {
                return caffe.Loadcaffe.SigmoidParameter.getDescriptor().getEnumTypes().get(0);
            }

            private static final Engine[] VALUES = values();

            public static Engine valueOf(
                    com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new java.lang.IllegalArgumentException(
                            "EnumValueDescriptor is not for this type.");
                }
                return VALUES[desc.getIndex()];
            }

            private final int index;
            private final int value;

            private Engine(int index, int value) {
                this.index = index;
                this.value = value;
            }

            // @@protoc_insertion_point(enum_scope:caffe.SigmoidParameter.Engine)
        }

        private int bitField0_;
        public static final int ENGINE_FIELD_NUMBER = 1;
        private caffe.Loadcaffe.SigmoidParameter.Engine engine_;
        /**
         * <code>optional .caffe.SigmoidParameter.Engine engine = 1 [default = DEFAULT];</code>
         */
        public boolean hasEngine() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional .caffe.SigmoidParameter.Engine engine = 1 [default = DEFAULT];</code>
         */
        public caffe.Loadcaffe.SigmoidParameter.Engine getEngine() {
            return engine_;
        }

        private void initFields() {
            engine_ = caffe.Loadcaffe.SigmoidParameter.Engine.DEFAULT;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeEnum(1, engine_.getNumber());
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeEnumSize(1, engine_.getNumber());
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.SigmoidParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.SigmoidParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.SigmoidParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.SigmoidParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.SigmoidParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.SigmoidParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.SigmoidParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.SigmoidParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.SigmoidParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.SigmoidParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.SigmoidParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.SigmoidParameter}
         *
         * <pre>
         * Message that stores parameters used by SigmoidLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.SigmoidParameter)
                caffe.Loadcaffe.SigmoidParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_SigmoidParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_SigmoidParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.SigmoidParameter.class, caffe.Loadcaffe.SigmoidParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.SigmoidParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                engine_ = caffe.Loadcaffe.SigmoidParameter.Engine.DEFAULT;
                bitField0_ = (bitField0_ & ~0x00000001);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_SigmoidParameter_descriptor;
            }

            public caffe.Loadcaffe.SigmoidParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.SigmoidParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.SigmoidParameter build() {
                caffe.Loadcaffe.SigmoidParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.SigmoidParameter buildPartial() {
                caffe.Loadcaffe.SigmoidParameter result = new caffe.Loadcaffe.SigmoidParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.engine_ = engine_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.SigmoidParameter) {
                    return mergeFrom((caffe.Loadcaffe.SigmoidParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.SigmoidParameter other) {
                if (other == caffe.Loadcaffe.SigmoidParameter.getDefaultInstance()) return this;
                if (other.hasEngine()) {
                    setEngine(other.getEngine());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.SigmoidParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.SigmoidParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private caffe.Loadcaffe.SigmoidParameter.Engine engine_ = caffe.Loadcaffe.SigmoidParameter.Engine.DEFAULT;
            /**
             * <code>optional .caffe.SigmoidParameter.Engine engine = 1 [default = DEFAULT];</code>
             */
            public boolean hasEngine() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional .caffe.SigmoidParameter.Engine engine = 1 [default = DEFAULT];</code>
             */
            public caffe.Loadcaffe.SigmoidParameter.Engine getEngine() {
                return engine_;
            }
            /**
             * <code>optional .caffe.SigmoidParameter.Engine engine = 1 [default = DEFAULT];</code>
             */
            public Builder setEngine(caffe.Loadcaffe.SigmoidParameter.Engine value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                engine_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional .caffe.SigmoidParameter.Engine engine = 1 [default = DEFAULT];</code>
             */
            public Builder clearEngine() {
                bitField0_ = (bitField0_ & ~0x00000001);
                engine_ = caffe.Loadcaffe.SigmoidParameter.Engine.DEFAULT;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.SigmoidParameter)
        }

        static {
            defaultInstance = new SigmoidParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.SigmoidParameter)
    }

    public interface SliceParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.SliceParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional int32 axis = 3 [default = 1];</code>
         *
         * <pre>
         * The axis along which to slice -- may be negative to index from the end
         * (e.g., -1 for the last axis).
         * By default, SliceLayer concatenates blobs along the "channels" axis (1).
         * </pre>
         */
        boolean hasAxis();
        /**
         * <code>optional int32 axis = 3 [default = 1];</code>
         *
         * <pre>
         * The axis along which to slice -- may be negative to index from the end
         * (e.g., -1 for the last axis).
         * By default, SliceLayer concatenates blobs along the "channels" axis (1).
         * </pre>
         */
        int getAxis();

        /**
         * <code>repeated uint32 slice_point = 2;</code>
         */
        java.util.List<java.lang.Integer> getSlicePointList();
        /**
         * <code>repeated uint32 slice_point = 2;</code>
         */
        int getSlicePointCount();
        /**
         * <code>repeated uint32 slice_point = 2;</code>
         */
        int getSlicePoint(int index);

        /**
         * <code>optional uint32 slice_dim = 1 [default = 1];</code>
         *
         * <pre>
         * DEPRECATED: alias for "axis" -- does not support negative indexing.
         * </pre>
         */
        boolean hasSliceDim();
        /**
         * <code>optional uint32 slice_dim = 1 [default = 1];</code>
         *
         * <pre>
         * DEPRECATED: alias for "axis" -- does not support negative indexing.
         * </pre>
         */
        int getSliceDim();
    }
    /**
     * Protobuf type {@code caffe.SliceParameter}
     *
     * <pre>
     * Message that stores parameters used by SliceLayer
     * </pre>
     */
    public static final class SliceParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.SliceParameter)
            SliceParameterOrBuilder {
        // Use SliceParameter.newBuilder() to construct.
        private SliceParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private SliceParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final SliceParameter defaultInstance;
        public static SliceParameter getDefaultInstance() {
            return defaultInstance;
        }

        public SliceParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private SliceParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            bitField0_ |= 0x00000002;
                            sliceDim_ = input.readUInt32();
                            break;
                        }
                        case 16: {
                            if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                                slicePoint_ = new java.util.ArrayList<java.lang.Integer>();
                                mutable_bitField0_ |= 0x00000002;
                            }
                            slicePoint_.add(input.readUInt32());
                            break;
                        }
                        case 18: {
                            int length = input.readRawVarint32();
                            int limit = input.pushLimit(length);
                            if (!((mutable_bitField0_ & 0x00000002) == 0x00000002) && input.getBytesUntilLimit() > 0) {
                                slicePoint_ = new java.util.ArrayList<java.lang.Integer>();
                                mutable_bitField0_ |= 0x00000002;
                            }
                            while (input.getBytesUntilLimit() > 0) {
                                slicePoint_.add(input.readUInt32());
                            }
                            input.popLimit(limit);
                            break;
                        }
                        case 24: {
                            bitField0_ |= 0x00000001;
                            axis_ = input.readInt32();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                    slicePoint_ = java.util.Collections.unmodifiableList(slicePoint_);
                }
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_SliceParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_SliceParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.SliceParameter.class, caffe.Loadcaffe.SliceParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<SliceParameter> PARSER =
                new com.google.protobuf.AbstractParser<SliceParameter>() {
                    public SliceParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new SliceParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<SliceParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int AXIS_FIELD_NUMBER = 3;
        private int axis_;
        /**
         * <code>optional int32 axis = 3 [default = 1];</code>
         *
         * <pre>
         * The axis along which to slice -- may be negative to index from the end
         * (e.g., -1 for the last axis).
         * By default, SliceLayer concatenates blobs along the "channels" axis (1).
         * </pre>
         */
        public boolean hasAxis() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional int32 axis = 3 [default = 1];</code>
         *
         * <pre>
         * The axis along which to slice -- may be negative to index from the end
         * (e.g., -1 for the last axis).
         * By default, SliceLayer concatenates blobs along the "channels" axis (1).
         * </pre>
         */
        public int getAxis() {
            return axis_;
        }

        public static final int SLICE_POINT_FIELD_NUMBER = 2;
        private java.util.List<java.lang.Integer> slicePoint_;
        /**
         * <code>repeated uint32 slice_point = 2;</code>
         */
        public java.util.List<java.lang.Integer>
        getSlicePointList() {
            return slicePoint_;
        }
        /**
         * <code>repeated uint32 slice_point = 2;</code>
         */
        public int getSlicePointCount() {
            return slicePoint_.size();
        }
        /**
         * <code>repeated uint32 slice_point = 2;</code>
         */
        public int getSlicePoint(int index) {
            return slicePoint_.get(index);
        }

        public static final int SLICE_DIM_FIELD_NUMBER = 1;
        private int sliceDim_;
        /**
         * <code>optional uint32 slice_dim = 1 [default = 1];</code>
         *
         * <pre>
         * DEPRECATED: alias for "axis" -- does not support negative indexing.
         * </pre>
         */
        public boolean hasSliceDim() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional uint32 slice_dim = 1 [default = 1];</code>
         *
         * <pre>
         * DEPRECATED: alias for "axis" -- does not support negative indexing.
         * </pre>
         */
        public int getSliceDim() {
            return sliceDim_;
        }

        private void initFields() {
            axis_ = 1;
            slicePoint_ = java.util.Collections.emptyList();
            sliceDim_ = 1;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeUInt32(1, sliceDim_);
            }
            for (int i = 0; i < slicePoint_.size(); i++) {
                output.writeUInt32(2, slicePoint_.get(i));
            }
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeInt32(3, axis_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(1, sliceDim_);
            }
            {
                int dataSize = 0;
                for (int i = 0; i < slicePoint_.size(); i++) {
                    dataSize += com.google.protobuf.CodedOutputStream
                            .computeUInt32SizeNoTag(slicePoint_.get(i));
                }
                size += dataSize;
                size += 1 * getSlicePointList().size();
            }
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(3, axis_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.SliceParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.SliceParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.SliceParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.SliceParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.SliceParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.SliceParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.SliceParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.SliceParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.SliceParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.SliceParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.SliceParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.SliceParameter}
         *
         * <pre>
         * Message that stores parameters used by SliceLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.SliceParameter)
                caffe.Loadcaffe.SliceParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_SliceParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_SliceParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.SliceParameter.class, caffe.Loadcaffe.SliceParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.SliceParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                axis_ = 1;
                bitField0_ = (bitField0_ & ~0x00000001);
                slicePoint_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000002);
                sliceDim_ = 1;
                bitField0_ = (bitField0_ & ~0x00000004);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_SliceParameter_descriptor;
            }

            public caffe.Loadcaffe.SliceParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.SliceParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.SliceParameter build() {
                caffe.Loadcaffe.SliceParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.SliceParameter buildPartial() {
                caffe.Loadcaffe.SliceParameter result = new caffe.Loadcaffe.SliceParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.axis_ = axis_;
                if (((bitField0_ & 0x00000002) == 0x00000002)) {
                    slicePoint_ = java.util.Collections.unmodifiableList(slicePoint_);
                    bitField0_ = (bitField0_ & ~0x00000002);
                }
                result.slicePoint_ = slicePoint_;
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.sliceDim_ = sliceDim_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.SliceParameter) {
                    return mergeFrom((caffe.Loadcaffe.SliceParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.SliceParameter other) {
                if (other == caffe.Loadcaffe.SliceParameter.getDefaultInstance()) return this;
                if (other.hasAxis()) {
                    setAxis(other.getAxis());
                }
                if (!other.slicePoint_.isEmpty()) {
                    if (slicePoint_.isEmpty()) {
                        slicePoint_ = other.slicePoint_;
                        bitField0_ = (bitField0_ & ~0x00000002);
                    } else {
                        ensureSlicePointIsMutable();
                        slicePoint_.addAll(other.slicePoint_);
                    }
                    onChanged();
                }
                if (other.hasSliceDim()) {
                    setSliceDim(other.getSliceDim());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.SliceParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.SliceParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private int axis_ = 1;
            /**
             * <code>optional int32 axis = 3 [default = 1];</code>
             *
             * <pre>
             * The axis along which to slice -- may be negative to index from the end
             * (e.g., -1 for the last axis).
             * By default, SliceLayer concatenates blobs along the "channels" axis (1).
             * </pre>
             */
            public boolean hasAxis() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional int32 axis = 3 [default = 1];</code>
             *
             * <pre>
             * The axis along which to slice -- may be negative to index from the end
             * (e.g., -1 for the last axis).
             * By default, SliceLayer concatenates blobs along the "channels" axis (1).
             * </pre>
             */
            public int getAxis() {
                return axis_;
            }
            /**
             * <code>optional int32 axis = 3 [default = 1];</code>
             *
             * <pre>
             * The axis along which to slice -- may be negative to index from the end
             * (e.g., -1 for the last axis).
             * By default, SliceLayer concatenates blobs along the "channels" axis (1).
             * </pre>
             */
            public Builder setAxis(int value) {
                bitField0_ |= 0x00000001;
                axis_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 axis = 3 [default = 1];</code>
             *
             * <pre>
             * The axis along which to slice -- may be negative to index from the end
             * (e.g., -1 for the last axis).
             * By default, SliceLayer concatenates blobs along the "channels" axis (1).
             * </pre>
             */
            public Builder clearAxis() {
                bitField0_ = (bitField0_ & ~0x00000001);
                axis_ = 1;
                onChanged();
                return this;
            }

            private java.util.List<java.lang.Integer> slicePoint_ = java.util.Collections.emptyList();
            private void ensureSlicePointIsMutable() {
                if (!((bitField0_ & 0x00000002) == 0x00000002)) {
                    slicePoint_ = new java.util.ArrayList<java.lang.Integer>(slicePoint_);
                    bitField0_ |= 0x00000002;
                }
            }
            /**
             * <code>repeated uint32 slice_point = 2;</code>
             */
            public java.util.List<java.lang.Integer>
            getSlicePointList() {
                return java.util.Collections.unmodifiableList(slicePoint_);
            }
            /**
             * <code>repeated uint32 slice_point = 2;</code>
             */
            public int getSlicePointCount() {
                return slicePoint_.size();
            }
            /**
             * <code>repeated uint32 slice_point = 2;</code>
             */
            public int getSlicePoint(int index) {
                return slicePoint_.get(index);
            }
            /**
             * <code>repeated uint32 slice_point = 2;</code>
             */
            public Builder setSlicePoint(
                    int index, int value) {
                ensureSlicePointIsMutable();
                slicePoint_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated uint32 slice_point = 2;</code>
             */
            public Builder addSlicePoint(int value) {
                ensureSlicePointIsMutable();
                slicePoint_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated uint32 slice_point = 2;</code>
             */
            public Builder addAllSlicePoint(
                    java.lang.Iterable<? extends java.lang.Integer> values) {
                ensureSlicePointIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, slicePoint_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated uint32 slice_point = 2;</code>
             */
            public Builder clearSlicePoint() {
                slicePoint_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000002);
                onChanged();
                return this;
            }

            private int sliceDim_ = 1;
            /**
             * <code>optional uint32 slice_dim = 1 [default = 1];</code>
             *
             * <pre>
             * DEPRECATED: alias for "axis" -- does not support negative indexing.
             * </pre>
             */
            public boolean hasSliceDim() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional uint32 slice_dim = 1 [default = 1];</code>
             *
             * <pre>
             * DEPRECATED: alias for "axis" -- does not support negative indexing.
             * </pre>
             */
            public int getSliceDim() {
                return sliceDim_;
            }
            /**
             * <code>optional uint32 slice_dim = 1 [default = 1];</code>
             *
             * <pre>
             * DEPRECATED: alias for "axis" -- does not support negative indexing.
             * </pre>
             */
            public Builder setSliceDim(int value) {
                bitField0_ |= 0x00000004;
                sliceDim_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 slice_dim = 1 [default = 1];</code>
             *
             * <pre>
             * DEPRECATED: alias for "axis" -- does not support negative indexing.
             * </pre>
             */
            public Builder clearSliceDim() {
                bitField0_ = (bitField0_ & ~0x00000004);
                sliceDim_ = 1;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.SliceParameter)
        }

        static {
            defaultInstance = new SliceParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.SliceParameter)
    }

    public interface SoftmaxParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.SoftmaxParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional .caffe.SoftmaxParameter.Engine engine = 1 [default = DEFAULT];</code>
         */
        boolean hasEngine();
        /**
         * <code>optional .caffe.SoftmaxParameter.Engine engine = 1 [default = DEFAULT];</code>
         */
        caffe.Loadcaffe.SoftmaxParameter.Engine getEngine();

        /**
         * <code>optional int32 axis = 2 [default = 1];</code>
         *
         * <pre>
         * The axis along which to perform the softmax -- may be negative to index
         * from the end (e.g., -1 for the last axis).
         * Any other axes will be evaluated as independent softmaxes.
         * </pre>
         */
        boolean hasAxis();
        /**
         * <code>optional int32 axis = 2 [default = 1];</code>
         *
         * <pre>
         * The axis along which to perform the softmax -- may be negative to index
         * from the end (e.g., -1 for the last axis).
         * Any other axes will be evaluated as independent softmaxes.
         * </pre>
         */
        int getAxis();
    }
    /**
     * Protobuf type {@code caffe.SoftmaxParameter}
     *
     * <pre>
     * Message that stores parameters used by SoftmaxLayer, SoftmaxWithLossLayer
     * </pre>
     */
    public static final class SoftmaxParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.SoftmaxParameter)
            SoftmaxParameterOrBuilder {
        // Use SoftmaxParameter.newBuilder() to construct.
        private SoftmaxParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private SoftmaxParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final SoftmaxParameter defaultInstance;
        public static SoftmaxParameter getDefaultInstance() {
            return defaultInstance;
        }

        public SoftmaxParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private SoftmaxParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            int rawValue = input.readEnum();
                            caffe.Loadcaffe.SoftmaxParameter.Engine value = caffe.Loadcaffe.SoftmaxParameter.Engine.valueOf(rawValue);
                            if (value == null) {
                                unknownFields.mergeVarintField(1, rawValue);
                            } else {
                                bitField0_ |= 0x00000001;
                                engine_ = value;
                            }
                            break;
                        }
                        case 16: {
                            bitField0_ |= 0x00000002;
                            axis_ = input.readInt32();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_SoftmaxParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_SoftmaxParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.SoftmaxParameter.class, caffe.Loadcaffe.SoftmaxParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<SoftmaxParameter> PARSER =
                new com.google.protobuf.AbstractParser<SoftmaxParameter>() {
                    public SoftmaxParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new SoftmaxParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<SoftmaxParameter> getParserForType() {
            return PARSER;
        }

        /**
         * Protobuf enum {@code caffe.SoftmaxParameter.Engine}
         */
        public enum Engine
                implements com.google.protobuf.ProtocolMessageEnum {
            /**
             * <code>DEFAULT = 0;</code>
             */
            DEFAULT(0, 0),
            /**
             * <code>CAFFE = 1;</code>
             */
            CAFFE(1, 1),
            /**
             * <code>CUDNN = 2;</code>
             */
            CUDNN(2, 2),
            ;

            /**
             * <code>DEFAULT = 0;</code>
             */
            public static final int DEFAULT_VALUE = 0;
            /**
             * <code>CAFFE = 1;</code>
             */
            public static final int CAFFE_VALUE = 1;
            /**
             * <code>CUDNN = 2;</code>
             */
            public static final int CUDNN_VALUE = 2;


            public final int getNumber() { return value; }

            public static Engine valueOf(int value) {
                switch (value) {
                    case 0: return DEFAULT;
                    case 1: return CAFFE;
                    case 2: return CUDNN;
                    default: return null;
                }
            }

            public static com.google.protobuf.Internal.EnumLiteMap<Engine>
            internalGetValueMap() {
                return internalValueMap;
            }
            private static com.google.protobuf.Internal.EnumLiteMap<Engine>
                    internalValueMap =
                    new com.google.protobuf.Internal.EnumLiteMap<Engine>() {
                        public Engine findValueByNumber(int number) {
                            return Engine.valueOf(number);
                        }
                    };

            public final com.google.protobuf.Descriptors.EnumValueDescriptor
            getValueDescriptor() {
                return getDescriptor().getValues().get(index);
            }
            public final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptorForType() {
                return getDescriptor();
            }
            public static final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptor() {
                return caffe.Loadcaffe.SoftmaxParameter.getDescriptor().getEnumTypes().get(0);
            }

            private static final Engine[] VALUES = values();

            public static Engine valueOf(
                    com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new java.lang.IllegalArgumentException(
                            "EnumValueDescriptor is not for this type.");
                }
                return VALUES[desc.getIndex()];
            }

            private final int index;
            private final int value;

            private Engine(int index, int value) {
                this.index = index;
                this.value = value;
            }

            // @@protoc_insertion_point(enum_scope:caffe.SoftmaxParameter.Engine)
        }

        private int bitField0_;
        public static final int ENGINE_FIELD_NUMBER = 1;
        private caffe.Loadcaffe.SoftmaxParameter.Engine engine_;
        /**
         * <code>optional .caffe.SoftmaxParameter.Engine engine = 1 [default = DEFAULT];</code>
         */
        public boolean hasEngine() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional .caffe.SoftmaxParameter.Engine engine = 1 [default = DEFAULT];</code>
         */
        public caffe.Loadcaffe.SoftmaxParameter.Engine getEngine() {
            return engine_;
        }

        public static final int AXIS_FIELD_NUMBER = 2;
        private int axis_;
        /**
         * <code>optional int32 axis = 2 [default = 1];</code>
         *
         * <pre>
         * The axis along which to perform the softmax -- may be negative to index
         * from the end (e.g., -1 for the last axis).
         * Any other axes will be evaluated as independent softmaxes.
         * </pre>
         */
        public boolean hasAxis() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional int32 axis = 2 [default = 1];</code>
         *
         * <pre>
         * The axis along which to perform the softmax -- may be negative to index
         * from the end (e.g., -1 for the last axis).
         * Any other axes will be evaluated as independent softmaxes.
         * </pre>
         */
        public int getAxis() {
            return axis_;
        }

        private void initFields() {
            engine_ = caffe.Loadcaffe.SoftmaxParameter.Engine.DEFAULT;
            axis_ = 1;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeEnum(1, engine_.getNumber());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeInt32(2, axis_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeEnumSize(1, engine_.getNumber());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(2, axis_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.SoftmaxParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.SoftmaxParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.SoftmaxParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.SoftmaxParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.SoftmaxParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.SoftmaxParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.SoftmaxParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.SoftmaxParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.SoftmaxParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.SoftmaxParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.SoftmaxParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.SoftmaxParameter}
         *
         * <pre>
         * Message that stores parameters used by SoftmaxLayer, SoftmaxWithLossLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.SoftmaxParameter)
                caffe.Loadcaffe.SoftmaxParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_SoftmaxParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_SoftmaxParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.SoftmaxParameter.class, caffe.Loadcaffe.SoftmaxParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.SoftmaxParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                engine_ = caffe.Loadcaffe.SoftmaxParameter.Engine.DEFAULT;
                bitField0_ = (bitField0_ & ~0x00000001);
                axis_ = 1;
                bitField0_ = (bitField0_ & ~0x00000002);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_SoftmaxParameter_descriptor;
            }

            public caffe.Loadcaffe.SoftmaxParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.SoftmaxParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.SoftmaxParameter build() {
                caffe.Loadcaffe.SoftmaxParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.SoftmaxParameter buildPartial() {
                caffe.Loadcaffe.SoftmaxParameter result = new caffe.Loadcaffe.SoftmaxParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.engine_ = engine_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.axis_ = axis_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.SoftmaxParameter) {
                    return mergeFrom((caffe.Loadcaffe.SoftmaxParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.SoftmaxParameter other) {
                if (other == caffe.Loadcaffe.SoftmaxParameter.getDefaultInstance()) return this;
                if (other.hasEngine()) {
                    setEngine(other.getEngine());
                }
                if (other.hasAxis()) {
                    setAxis(other.getAxis());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.SoftmaxParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.SoftmaxParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private caffe.Loadcaffe.SoftmaxParameter.Engine engine_ = caffe.Loadcaffe.SoftmaxParameter.Engine.DEFAULT;
            /**
             * <code>optional .caffe.SoftmaxParameter.Engine engine = 1 [default = DEFAULT];</code>
             */
            public boolean hasEngine() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional .caffe.SoftmaxParameter.Engine engine = 1 [default = DEFAULT];</code>
             */
            public caffe.Loadcaffe.SoftmaxParameter.Engine getEngine() {
                return engine_;
            }
            /**
             * <code>optional .caffe.SoftmaxParameter.Engine engine = 1 [default = DEFAULT];</code>
             */
            public Builder setEngine(caffe.Loadcaffe.SoftmaxParameter.Engine value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                engine_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional .caffe.SoftmaxParameter.Engine engine = 1 [default = DEFAULT];</code>
             */
            public Builder clearEngine() {
                bitField0_ = (bitField0_ & ~0x00000001);
                engine_ = caffe.Loadcaffe.SoftmaxParameter.Engine.DEFAULT;
                onChanged();
                return this;
            }

            private int axis_ = 1;
            /**
             * <code>optional int32 axis = 2 [default = 1];</code>
             *
             * <pre>
             * The axis along which to perform the softmax -- may be negative to index
             * from the end (e.g., -1 for the last axis).
             * Any other axes will be evaluated as independent softmaxes.
             * </pre>
             */
            public boolean hasAxis() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional int32 axis = 2 [default = 1];</code>
             *
             * <pre>
             * The axis along which to perform the softmax -- may be negative to index
             * from the end (e.g., -1 for the last axis).
             * Any other axes will be evaluated as independent softmaxes.
             * </pre>
             */
            public int getAxis() {
                return axis_;
            }
            /**
             * <code>optional int32 axis = 2 [default = 1];</code>
             *
             * <pre>
             * The axis along which to perform the softmax -- may be negative to index
             * from the end (e.g., -1 for the last axis).
             * Any other axes will be evaluated as independent softmaxes.
             * </pre>
             */
            public Builder setAxis(int value) {
                bitField0_ |= 0x00000002;
                axis_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 axis = 2 [default = 1];</code>
             *
             * <pre>
             * The axis along which to perform the softmax -- may be negative to index
             * from the end (e.g., -1 for the last axis).
             * Any other axes will be evaluated as independent softmaxes.
             * </pre>
             */
            public Builder clearAxis() {
                bitField0_ = (bitField0_ & ~0x00000002);
                axis_ = 1;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.SoftmaxParameter)
        }

        static {
            defaultInstance = new SoftmaxParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.SoftmaxParameter)
    }

    public interface TanHParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.TanHParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional .caffe.TanHParameter.Engine engine = 1 [default = DEFAULT];</code>
         */
        boolean hasEngine();
        /**
         * <code>optional .caffe.TanHParameter.Engine engine = 1 [default = DEFAULT];</code>
         */
        caffe.Loadcaffe.TanHParameter.Engine getEngine();
    }
    /**
     * Protobuf type {@code caffe.TanHParameter}
     *
     * <pre>
     * Message that stores parameters used by TanHLayer
     * </pre>
     */
    public static final class TanHParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.TanHParameter)
            TanHParameterOrBuilder {
        // Use TanHParameter.newBuilder() to construct.
        private TanHParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private TanHParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final TanHParameter defaultInstance;
        public static TanHParameter getDefaultInstance() {
            return defaultInstance;
        }

        public TanHParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private TanHParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 8: {
                            int rawValue = input.readEnum();
                            caffe.Loadcaffe.TanHParameter.Engine value = caffe.Loadcaffe.TanHParameter.Engine.valueOf(rawValue);
                            if (value == null) {
                                unknownFields.mergeVarintField(1, rawValue);
                            } else {
                                bitField0_ |= 0x00000001;
                                engine_ = value;
                            }
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_TanHParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_TanHParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.TanHParameter.class, caffe.Loadcaffe.TanHParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<TanHParameter> PARSER =
                new com.google.protobuf.AbstractParser<TanHParameter>() {
                    public TanHParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new TanHParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<TanHParameter> getParserForType() {
            return PARSER;
        }

        /**
         * Protobuf enum {@code caffe.TanHParameter.Engine}
         */
        public enum Engine
                implements com.google.protobuf.ProtocolMessageEnum {
            /**
             * <code>DEFAULT = 0;</code>
             */
            DEFAULT(0, 0),
            /**
             * <code>CAFFE = 1;</code>
             */
            CAFFE(1, 1),
            /**
             * <code>CUDNN = 2;</code>
             */
            CUDNN(2, 2),
            ;

            /**
             * <code>DEFAULT = 0;</code>
             */
            public static final int DEFAULT_VALUE = 0;
            /**
             * <code>CAFFE = 1;</code>
             */
            public static final int CAFFE_VALUE = 1;
            /**
             * <code>CUDNN = 2;</code>
             */
            public static final int CUDNN_VALUE = 2;


            public final int getNumber() { return value; }

            public static Engine valueOf(int value) {
                switch (value) {
                    case 0: return DEFAULT;
                    case 1: return CAFFE;
                    case 2: return CUDNN;
                    default: return null;
                }
            }

            public static com.google.protobuf.Internal.EnumLiteMap<Engine>
            internalGetValueMap() {
                return internalValueMap;
            }
            private static com.google.protobuf.Internal.EnumLiteMap<Engine>
                    internalValueMap =
                    new com.google.protobuf.Internal.EnumLiteMap<Engine>() {
                        public Engine findValueByNumber(int number) {
                            return Engine.valueOf(number);
                        }
                    };

            public final com.google.protobuf.Descriptors.EnumValueDescriptor
            getValueDescriptor() {
                return getDescriptor().getValues().get(index);
            }
            public final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptorForType() {
                return getDescriptor();
            }
            public static final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptor() {
                return caffe.Loadcaffe.TanHParameter.getDescriptor().getEnumTypes().get(0);
            }

            private static final Engine[] VALUES = values();

            public static Engine valueOf(
                    com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new java.lang.IllegalArgumentException(
                            "EnumValueDescriptor is not for this type.");
                }
                return VALUES[desc.getIndex()];
            }

            private final int index;
            private final int value;

            private Engine(int index, int value) {
                this.index = index;
                this.value = value;
            }

            // @@protoc_insertion_point(enum_scope:caffe.TanHParameter.Engine)
        }

        private int bitField0_;
        public static final int ENGINE_FIELD_NUMBER = 1;
        private caffe.Loadcaffe.TanHParameter.Engine engine_;
        /**
         * <code>optional .caffe.TanHParameter.Engine engine = 1 [default = DEFAULT];</code>
         */
        public boolean hasEngine() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional .caffe.TanHParameter.Engine engine = 1 [default = DEFAULT];</code>
         */
        public caffe.Loadcaffe.TanHParameter.Engine getEngine() {
            return engine_;
        }

        private void initFields() {
            engine_ = caffe.Loadcaffe.TanHParameter.Engine.DEFAULT;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeEnum(1, engine_.getNumber());
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeEnumSize(1, engine_.getNumber());
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.TanHParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.TanHParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.TanHParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.TanHParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.TanHParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.TanHParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.TanHParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.TanHParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.TanHParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.TanHParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.TanHParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.TanHParameter}
         *
         * <pre>
         * Message that stores parameters used by TanHLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.TanHParameter)
                caffe.Loadcaffe.TanHParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_TanHParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_TanHParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.TanHParameter.class, caffe.Loadcaffe.TanHParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.TanHParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                engine_ = caffe.Loadcaffe.TanHParameter.Engine.DEFAULT;
                bitField0_ = (bitField0_ & ~0x00000001);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_TanHParameter_descriptor;
            }

            public caffe.Loadcaffe.TanHParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.TanHParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.TanHParameter build() {
                caffe.Loadcaffe.TanHParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.TanHParameter buildPartial() {
                caffe.Loadcaffe.TanHParameter result = new caffe.Loadcaffe.TanHParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.engine_ = engine_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.TanHParameter) {
                    return mergeFrom((caffe.Loadcaffe.TanHParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.TanHParameter other) {
                if (other == caffe.Loadcaffe.TanHParameter.getDefaultInstance()) return this;
                if (other.hasEngine()) {
                    setEngine(other.getEngine());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.TanHParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.TanHParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private caffe.Loadcaffe.TanHParameter.Engine engine_ = caffe.Loadcaffe.TanHParameter.Engine.DEFAULT;
            /**
             * <code>optional .caffe.TanHParameter.Engine engine = 1 [default = DEFAULT];</code>
             */
            public boolean hasEngine() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional .caffe.TanHParameter.Engine engine = 1 [default = DEFAULT];</code>
             */
            public caffe.Loadcaffe.TanHParameter.Engine getEngine() {
                return engine_;
            }
            /**
             * <code>optional .caffe.TanHParameter.Engine engine = 1 [default = DEFAULT];</code>
             */
            public Builder setEngine(caffe.Loadcaffe.TanHParameter.Engine value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                engine_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional .caffe.TanHParameter.Engine engine = 1 [default = DEFAULT];</code>
             */
            public Builder clearEngine() {
                bitField0_ = (bitField0_ & ~0x00000001);
                engine_ = caffe.Loadcaffe.TanHParameter.Engine.DEFAULT;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.TanHParameter)
        }

        static {
            defaultInstance = new TanHParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.TanHParameter)
    }

    public interface ThresholdParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.ThresholdParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional float threshold = 1 [default = 0];</code>
         *
         * <pre>
         * Strictly positive values
         * </pre>
         */
        boolean hasThreshold();
        /**
         * <code>optional float threshold = 1 [default = 0];</code>
         *
         * <pre>
         * Strictly positive values
         * </pre>
         */
        float getThreshold();
    }
    /**
     * Protobuf type {@code caffe.ThresholdParameter}
     *
     * <pre>
     * Message that stores parameters used by ThresholdLayer
     * </pre>
     */
    public static final class ThresholdParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.ThresholdParameter)
            ThresholdParameterOrBuilder {
        // Use ThresholdParameter.newBuilder() to construct.
        private ThresholdParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private ThresholdParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final ThresholdParameter defaultInstance;
        public static ThresholdParameter getDefaultInstance() {
            return defaultInstance;
        }

        public ThresholdParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private ThresholdParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 13: {
                            bitField0_ |= 0x00000001;
                            threshold_ = input.readFloat();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_ThresholdParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_ThresholdParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.ThresholdParameter.class, caffe.Loadcaffe.ThresholdParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<ThresholdParameter> PARSER =
                new com.google.protobuf.AbstractParser<ThresholdParameter>() {
                    public ThresholdParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new ThresholdParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<ThresholdParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int THRESHOLD_FIELD_NUMBER = 1;
        private float threshold_;
        /**
         * <code>optional float threshold = 1 [default = 0];</code>
         *
         * <pre>
         * Strictly positive values
         * </pre>
         */
        public boolean hasThreshold() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional float threshold = 1 [default = 0];</code>
         *
         * <pre>
         * Strictly positive values
         * </pre>
         */
        public float getThreshold() {
            return threshold_;
        }

        private void initFields() {
            threshold_ = 0F;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeFloat(1, threshold_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(1, threshold_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.ThresholdParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.ThresholdParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.ThresholdParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.ThresholdParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.ThresholdParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.ThresholdParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.ThresholdParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.ThresholdParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.ThresholdParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.ThresholdParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.ThresholdParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.ThresholdParameter}
         *
         * <pre>
         * Message that stores parameters used by ThresholdLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.ThresholdParameter)
                caffe.Loadcaffe.ThresholdParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_ThresholdParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_ThresholdParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.ThresholdParameter.class, caffe.Loadcaffe.ThresholdParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.ThresholdParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                threshold_ = 0F;
                bitField0_ = (bitField0_ & ~0x00000001);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_ThresholdParameter_descriptor;
            }

            public caffe.Loadcaffe.ThresholdParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.ThresholdParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.ThresholdParameter build() {
                caffe.Loadcaffe.ThresholdParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.ThresholdParameter buildPartial() {
                caffe.Loadcaffe.ThresholdParameter result = new caffe.Loadcaffe.ThresholdParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.threshold_ = threshold_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.ThresholdParameter) {
                    return mergeFrom((caffe.Loadcaffe.ThresholdParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.ThresholdParameter other) {
                if (other == caffe.Loadcaffe.ThresholdParameter.getDefaultInstance()) return this;
                if (other.hasThreshold()) {
                    setThreshold(other.getThreshold());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.ThresholdParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.ThresholdParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private float threshold_ ;
            /**
             * <code>optional float threshold = 1 [default = 0];</code>
             *
             * <pre>
             * Strictly positive values
             * </pre>
             */
            public boolean hasThreshold() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional float threshold = 1 [default = 0];</code>
             *
             * <pre>
             * Strictly positive values
             * </pre>
             */
            public float getThreshold() {
                return threshold_;
            }
            /**
             * <code>optional float threshold = 1 [default = 0];</code>
             *
             * <pre>
             * Strictly positive values
             * </pre>
             */
            public Builder setThreshold(float value) {
                bitField0_ |= 0x00000001;
                threshold_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float threshold = 1 [default = 0];</code>
             *
             * <pre>
             * Strictly positive values
             * </pre>
             */
            public Builder clearThreshold() {
                bitField0_ = (bitField0_ & ~0x00000001);
                threshold_ = 0F;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.ThresholdParameter)
        }

        static {
            defaultInstance = new ThresholdParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.ThresholdParameter)
    }

    public interface WindowDataParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.WindowDataParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        boolean hasSource();
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        java.lang.String getSource();
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        com.google.protobuf.ByteString
        getSourceBytes();

        /**
         * <code>optional float scale = 2 [default = 1];</code>
         *
         * <pre>
         * For data pre-processing, we can do simple scaling and subtracting the
         * data mean, if provided. Note that the mean subtraction is always carried
         * out before scaling.
         * </pre>
         */
        boolean hasScale();
        /**
         * <code>optional float scale = 2 [default = 1];</code>
         *
         * <pre>
         * For data pre-processing, we can do simple scaling and subtracting the
         * data mean, if provided. Note that the mean subtraction is always carried
         * out before scaling.
         * </pre>
         */
        float getScale();

        /**
         * <code>optional string mean_file = 3;</code>
         */
        boolean hasMeanFile();
        /**
         * <code>optional string mean_file = 3;</code>
         */
        java.lang.String getMeanFile();
        /**
         * <code>optional string mean_file = 3;</code>
         */
        com.google.protobuf.ByteString
        getMeanFileBytes();

        /**
         * <code>optional uint32 batch_size = 4;</code>
         *
         * <pre>
         * Specify the batch size.
         * </pre>
         */
        boolean hasBatchSize();
        /**
         * <code>optional uint32 batch_size = 4;</code>
         *
         * <pre>
         * Specify the batch size.
         * </pre>
         */
        int getBatchSize();

        /**
         * <code>optional uint32 crop_size = 5 [default = 0];</code>
         *
         * <pre>
         * Specify if we would like to randomly crop an image.
         * </pre>
         */
        boolean hasCropSize();
        /**
         * <code>optional uint32 crop_size = 5 [default = 0];</code>
         *
         * <pre>
         * Specify if we would like to randomly crop an image.
         * </pre>
         */
        int getCropSize();

        /**
         * <code>optional bool mirror = 6 [default = false];</code>
         *
         * <pre>
         * Specify if we want to randomly mirror data.
         * </pre>
         */
        boolean hasMirror();
        /**
         * <code>optional bool mirror = 6 [default = false];</code>
         *
         * <pre>
         * Specify if we want to randomly mirror data.
         * </pre>
         */
        boolean getMirror();

        /**
         * <code>optional float fg_threshold = 7 [default = 0.5];</code>
         *
         * <pre>
         * Foreground (object) overlap threshold
         * </pre>
         */
        boolean hasFgThreshold();
        /**
         * <code>optional float fg_threshold = 7 [default = 0.5];</code>
         *
         * <pre>
         * Foreground (object) overlap threshold
         * </pre>
         */
        float getFgThreshold();

        /**
         * <code>optional float bg_threshold = 8 [default = 0.5];</code>
         *
         * <pre>
         * Background (non-object) overlap threshold
         * </pre>
         */
        boolean hasBgThreshold();
        /**
         * <code>optional float bg_threshold = 8 [default = 0.5];</code>
         *
         * <pre>
         * Background (non-object) overlap threshold
         * </pre>
         */
        float getBgThreshold();

        /**
         * <code>optional float fg_fraction = 9 [default = 0.25];</code>
         *
         * <pre>
         * Fraction of batch that should be foreground objects
         * </pre>
         */
        boolean hasFgFraction();
        /**
         * <code>optional float fg_fraction = 9 [default = 0.25];</code>
         *
         * <pre>
         * Fraction of batch that should be foreground objects
         * </pre>
         */
        float getFgFraction();

        /**
         * <code>optional uint32 context_pad = 10 [default = 0];</code>
         *
         * <pre>
         * Amount of contextual padding to add around a window
         * (used only by the window_data_layer)
         * </pre>
         */
        boolean hasContextPad();
        /**
         * <code>optional uint32 context_pad = 10 [default = 0];</code>
         *
         * <pre>
         * Amount of contextual padding to add around a window
         * (used only by the window_data_layer)
         * </pre>
         */
        int getContextPad();

        /**
         * <code>optional string crop_mode = 11 [default = "warp"];</code>
         *
         * <pre>
         * Mode for cropping out a detection window
         * warp: cropped window is warped to a fixed size and aspect ratio
         * square: the tightest square around the window is cropped
         * </pre>
         */
        boolean hasCropMode();
        /**
         * <code>optional string crop_mode = 11 [default = "warp"];</code>
         *
         * <pre>
         * Mode for cropping out a detection window
         * warp: cropped window is warped to a fixed size and aspect ratio
         * square: the tightest square around the window is cropped
         * </pre>
         */
        java.lang.String getCropMode();
        /**
         * <code>optional string crop_mode = 11 [default = "warp"];</code>
         *
         * <pre>
         * Mode for cropping out a detection window
         * warp: cropped window is warped to a fixed size and aspect ratio
         * square: the tightest square around the window is cropped
         * </pre>
         */
        com.google.protobuf.ByteString
        getCropModeBytes();

        /**
         * <code>optional bool cache_images = 12 [default = false];</code>
         *
         * <pre>
         * cache_images: will load all images in memory for faster access
         * </pre>
         */
        boolean hasCacheImages();
        /**
         * <code>optional bool cache_images = 12 [default = false];</code>
         *
         * <pre>
         * cache_images: will load all images in memory for faster access
         * </pre>
         */
        boolean getCacheImages();

        /**
         * <code>optional string root_folder = 13 [default = ""];</code>
         *
         * <pre>
         * append root_folder to locate images
         * </pre>
         */
        boolean hasRootFolder();
        /**
         * <code>optional string root_folder = 13 [default = ""];</code>
         *
         * <pre>
         * append root_folder to locate images
         * </pre>
         */
        java.lang.String getRootFolder();
        /**
         * <code>optional string root_folder = 13 [default = ""];</code>
         *
         * <pre>
         * append root_folder to locate images
         * </pre>
         */
        com.google.protobuf.ByteString
        getRootFolderBytes();
    }
    /**
     * Protobuf type {@code caffe.WindowDataParameter}
     *
     * <pre>
     * Message that stores parameters used by WindowDataLayer
     * </pre>
     */
    public static final class WindowDataParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.WindowDataParameter)
            WindowDataParameterOrBuilder {
        // Use WindowDataParameter.newBuilder() to construct.
        private WindowDataParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private WindowDataParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final WindowDataParameter defaultInstance;
        public static WindowDataParameter getDefaultInstance() {
            return defaultInstance;
        }

        public WindowDataParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private WindowDataParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 10: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000001;
                            source_ = bs;
                            break;
                        }
                        case 21: {
                            bitField0_ |= 0x00000002;
                            scale_ = input.readFloat();
                            break;
                        }
                        case 26: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000004;
                            meanFile_ = bs;
                            break;
                        }
                        case 32: {
                            bitField0_ |= 0x00000008;
                            batchSize_ = input.readUInt32();
                            break;
                        }
                        case 40: {
                            bitField0_ |= 0x00000010;
                            cropSize_ = input.readUInt32();
                            break;
                        }
                        case 48: {
                            bitField0_ |= 0x00000020;
                            mirror_ = input.readBool();
                            break;
                        }
                        case 61: {
                            bitField0_ |= 0x00000040;
                            fgThreshold_ = input.readFloat();
                            break;
                        }
                        case 69: {
                            bitField0_ |= 0x00000080;
                            bgThreshold_ = input.readFloat();
                            break;
                        }
                        case 77: {
                            bitField0_ |= 0x00000100;
                            fgFraction_ = input.readFloat();
                            break;
                        }
                        case 80: {
                            bitField0_ |= 0x00000200;
                            contextPad_ = input.readUInt32();
                            break;
                        }
                        case 90: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000400;
                            cropMode_ = bs;
                            break;
                        }
                        case 96: {
                            bitField0_ |= 0x00000800;
                            cacheImages_ = input.readBool();
                            break;
                        }
                        case 106: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00001000;
                            rootFolder_ = bs;
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_WindowDataParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_WindowDataParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.WindowDataParameter.class, caffe.Loadcaffe.WindowDataParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<WindowDataParameter> PARSER =
                new com.google.protobuf.AbstractParser<WindowDataParameter>() {
                    public WindowDataParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new WindowDataParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<WindowDataParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int SOURCE_FIELD_NUMBER = 1;
        private java.lang.Object source_;
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        public boolean hasSource() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        public java.lang.String getSource() {
            java.lang.Object ref = source_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    source_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string source = 1;</code>
         *
         * <pre>
         * Specify the data source.
         * </pre>
         */
        public com.google.protobuf.ByteString
        getSourceBytes() {
            java.lang.Object ref = source_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                source_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int SCALE_FIELD_NUMBER = 2;
        private float scale_;
        /**
         * <code>optional float scale = 2 [default = 1];</code>
         *
         * <pre>
         * For data pre-processing, we can do simple scaling and subtracting the
         * data mean, if provided. Note that the mean subtraction is always carried
         * out before scaling.
         * </pre>
         */
        public boolean hasScale() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional float scale = 2 [default = 1];</code>
         *
         * <pre>
         * For data pre-processing, we can do simple scaling and subtracting the
         * data mean, if provided. Note that the mean subtraction is always carried
         * out before scaling.
         * </pre>
         */
        public float getScale() {
            return scale_;
        }

        public static final int MEAN_FILE_FIELD_NUMBER = 3;
        private java.lang.Object meanFile_;
        /**
         * <code>optional string mean_file = 3;</code>
         */
        public boolean hasMeanFile() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional string mean_file = 3;</code>
         */
        public java.lang.String getMeanFile() {
            java.lang.Object ref = meanFile_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    meanFile_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string mean_file = 3;</code>
         */
        public com.google.protobuf.ByteString
        getMeanFileBytes() {
            java.lang.Object ref = meanFile_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                meanFile_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int BATCH_SIZE_FIELD_NUMBER = 4;
        private int batchSize_;
        /**
         * <code>optional uint32 batch_size = 4;</code>
         *
         * <pre>
         * Specify the batch size.
         * </pre>
         */
        public boolean hasBatchSize() {
            return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional uint32 batch_size = 4;</code>
         *
         * <pre>
         * Specify the batch size.
         * </pre>
         */
        public int getBatchSize() {
            return batchSize_;
        }

        public static final int CROP_SIZE_FIELD_NUMBER = 5;
        private int cropSize_;
        /**
         * <code>optional uint32 crop_size = 5 [default = 0];</code>
         *
         * <pre>
         * Specify if we would like to randomly crop an image.
         * </pre>
         */
        public boolean hasCropSize() {
            return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>optional uint32 crop_size = 5 [default = 0];</code>
         *
         * <pre>
         * Specify if we would like to randomly crop an image.
         * </pre>
         */
        public int getCropSize() {
            return cropSize_;
        }

        public static final int MIRROR_FIELD_NUMBER = 6;
        private boolean mirror_;
        /**
         * <code>optional bool mirror = 6 [default = false];</code>
         *
         * <pre>
         * Specify if we want to randomly mirror data.
         * </pre>
         */
        public boolean hasMirror() {
            return ((bitField0_ & 0x00000020) == 0x00000020);
        }
        /**
         * <code>optional bool mirror = 6 [default = false];</code>
         *
         * <pre>
         * Specify if we want to randomly mirror data.
         * </pre>
         */
        public boolean getMirror() {
            return mirror_;
        }

        public static final int FG_THRESHOLD_FIELD_NUMBER = 7;
        private float fgThreshold_;
        /**
         * <code>optional float fg_threshold = 7 [default = 0.5];</code>
         *
         * <pre>
         * Foreground (object) overlap threshold
         * </pre>
         */
        public boolean hasFgThreshold() {
            return ((bitField0_ & 0x00000040) == 0x00000040);
        }
        /**
         * <code>optional float fg_threshold = 7 [default = 0.5];</code>
         *
         * <pre>
         * Foreground (object) overlap threshold
         * </pre>
         */
        public float getFgThreshold() {
            return fgThreshold_;
        }

        public static final int BG_THRESHOLD_FIELD_NUMBER = 8;
        private float bgThreshold_;
        /**
         * <code>optional float bg_threshold = 8 [default = 0.5];</code>
         *
         * <pre>
         * Background (non-object) overlap threshold
         * </pre>
         */
        public boolean hasBgThreshold() {
            return ((bitField0_ & 0x00000080) == 0x00000080);
        }
        /**
         * <code>optional float bg_threshold = 8 [default = 0.5];</code>
         *
         * <pre>
         * Background (non-object) overlap threshold
         * </pre>
         */
        public float getBgThreshold() {
            return bgThreshold_;
        }

        public static final int FG_FRACTION_FIELD_NUMBER = 9;
        private float fgFraction_;
        /**
         * <code>optional float fg_fraction = 9 [default = 0.25];</code>
         *
         * <pre>
         * Fraction of batch that should be foreground objects
         * </pre>
         */
        public boolean hasFgFraction() {
            return ((bitField0_ & 0x00000100) == 0x00000100);
        }
        /**
         * <code>optional float fg_fraction = 9 [default = 0.25];</code>
         *
         * <pre>
         * Fraction of batch that should be foreground objects
         * </pre>
         */
        public float getFgFraction() {
            return fgFraction_;
        }

        public static final int CONTEXT_PAD_FIELD_NUMBER = 10;
        private int contextPad_;
        /**
         * <code>optional uint32 context_pad = 10 [default = 0];</code>
         *
         * <pre>
         * Amount of contextual padding to add around a window
         * (used only by the window_data_layer)
         * </pre>
         */
        public boolean hasContextPad() {
            return ((bitField0_ & 0x00000200) == 0x00000200);
        }
        /**
         * <code>optional uint32 context_pad = 10 [default = 0];</code>
         *
         * <pre>
         * Amount of contextual padding to add around a window
         * (used only by the window_data_layer)
         * </pre>
         */
        public int getContextPad() {
            return contextPad_;
        }

        public static final int CROP_MODE_FIELD_NUMBER = 11;
        private java.lang.Object cropMode_;
        /**
         * <code>optional string crop_mode = 11 [default = "warp"];</code>
         *
         * <pre>
         * Mode for cropping out a detection window
         * warp: cropped window is warped to a fixed size and aspect ratio
         * square: the tightest square around the window is cropped
         * </pre>
         */
        public boolean hasCropMode() {
            return ((bitField0_ & 0x00000400) == 0x00000400);
        }
        /**
         * <code>optional string crop_mode = 11 [default = "warp"];</code>
         *
         * <pre>
         * Mode for cropping out a detection window
         * warp: cropped window is warped to a fixed size and aspect ratio
         * square: the tightest square around the window is cropped
         * </pre>
         */
        public java.lang.String getCropMode() {
            java.lang.Object ref = cropMode_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    cropMode_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string crop_mode = 11 [default = "warp"];</code>
         *
         * <pre>
         * Mode for cropping out a detection window
         * warp: cropped window is warped to a fixed size and aspect ratio
         * square: the tightest square around the window is cropped
         * </pre>
         */
        public com.google.protobuf.ByteString
        getCropModeBytes() {
            java.lang.Object ref = cropMode_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                cropMode_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int CACHE_IMAGES_FIELD_NUMBER = 12;
        private boolean cacheImages_;
        /**
         * <code>optional bool cache_images = 12 [default = false];</code>
         *
         * <pre>
         * cache_images: will load all images in memory for faster access
         * </pre>
         */
        public boolean hasCacheImages() {
            return ((bitField0_ & 0x00000800) == 0x00000800);
        }
        /**
         * <code>optional bool cache_images = 12 [default = false];</code>
         *
         * <pre>
         * cache_images: will load all images in memory for faster access
         * </pre>
         */
        public boolean getCacheImages() {
            return cacheImages_;
        }

        public static final int ROOT_FOLDER_FIELD_NUMBER = 13;
        private java.lang.Object rootFolder_;
        /**
         * <code>optional string root_folder = 13 [default = ""];</code>
         *
         * <pre>
         * append root_folder to locate images
         * </pre>
         */
        public boolean hasRootFolder() {
            return ((bitField0_ & 0x00001000) == 0x00001000);
        }
        /**
         * <code>optional string root_folder = 13 [default = ""];</code>
         *
         * <pre>
         * append root_folder to locate images
         * </pre>
         */
        public java.lang.String getRootFolder() {
            java.lang.Object ref = rootFolder_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    rootFolder_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string root_folder = 13 [default = ""];</code>
         *
         * <pre>
         * append root_folder to locate images
         * </pre>
         */
        public com.google.protobuf.ByteString
        getRootFolderBytes() {
            java.lang.Object ref = rootFolder_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                rootFolder_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        private void initFields() {
            source_ = "";
            scale_ = 1F;
            meanFile_ = "";
            batchSize_ = 0;
            cropSize_ = 0;
            mirror_ = false;
            fgThreshold_ = 0.5F;
            bgThreshold_ = 0.5F;
            fgFraction_ = 0.25F;
            contextPad_ = 0;
            cropMode_ = "warp";
            cacheImages_ = false;
            rootFolder_ = "";
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeBytes(1, getSourceBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeFloat(2, scale_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeBytes(3, getMeanFileBytes());
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                output.writeUInt32(4, batchSize_);
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                output.writeUInt32(5, cropSize_);
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                output.writeBool(6, mirror_);
            }
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                output.writeFloat(7, fgThreshold_);
            }
            if (((bitField0_ & 0x00000080) == 0x00000080)) {
                output.writeFloat(8, bgThreshold_);
            }
            if (((bitField0_ & 0x00000100) == 0x00000100)) {
                output.writeFloat(9, fgFraction_);
            }
            if (((bitField0_ & 0x00000200) == 0x00000200)) {
                output.writeUInt32(10, contextPad_);
            }
            if (((bitField0_ & 0x00000400) == 0x00000400)) {
                output.writeBytes(11, getCropModeBytes());
            }
            if (((bitField0_ & 0x00000800) == 0x00000800)) {
                output.writeBool(12, cacheImages_);
            }
            if (((bitField0_ & 0x00001000) == 0x00001000)) {
                output.writeBytes(13, getRootFolderBytes());
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(1, getSourceBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(2, scale_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(3, getMeanFileBytes());
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(4, batchSize_);
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(5, cropSize_);
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(6, mirror_);
            }
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(7, fgThreshold_);
            }
            if (((bitField0_ & 0x00000080) == 0x00000080)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(8, bgThreshold_);
            }
            if (((bitField0_ & 0x00000100) == 0x00000100)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(9, fgFraction_);
            }
            if (((bitField0_ & 0x00000200) == 0x00000200)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(10, contextPad_);
            }
            if (((bitField0_ & 0x00000400) == 0x00000400)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(11, getCropModeBytes());
            }
            if (((bitField0_ & 0x00000800) == 0x00000800)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(12, cacheImages_);
            }
            if (((bitField0_ & 0x00001000) == 0x00001000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(13, getRootFolderBytes());
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.WindowDataParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.WindowDataParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.WindowDataParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.WindowDataParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.WindowDataParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.WindowDataParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.WindowDataParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.WindowDataParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.WindowDataParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.WindowDataParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.WindowDataParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.WindowDataParameter}
         *
         * <pre>
         * Message that stores parameters used by WindowDataLayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.WindowDataParameter)
                caffe.Loadcaffe.WindowDataParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_WindowDataParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_WindowDataParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.WindowDataParameter.class, caffe.Loadcaffe.WindowDataParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.WindowDataParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                source_ = "";
                bitField0_ = (bitField0_ & ~0x00000001);
                scale_ = 1F;
                bitField0_ = (bitField0_ & ~0x00000002);
                meanFile_ = "";
                bitField0_ = (bitField0_ & ~0x00000004);
                batchSize_ = 0;
                bitField0_ = (bitField0_ & ~0x00000008);
                cropSize_ = 0;
                bitField0_ = (bitField0_ & ~0x00000010);
                mirror_ = false;
                bitField0_ = (bitField0_ & ~0x00000020);
                fgThreshold_ = 0.5F;
                bitField0_ = (bitField0_ & ~0x00000040);
                bgThreshold_ = 0.5F;
                bitField0_ = (bitField0_ & ~0x00000080);
                fgFraction_ = 0.25F;
                bitField0_ = (bitField0_ & ~0x00000100);
                contextPad_ = 0;
                bitField0_ = (bitField0_ & ~0x00000200);
                cropMode_ = "warp";
                bitField0_ = (bitField0_ & ~0x00000400);
                cacheImages_ = false;
                bitField0_ = (bitField0_ & ~0x00000800);
                rootFolder_ = "";
                bitField0_ = (bitField0_ & ~0x00001000);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_WindowDataParameter_descriptor;
            }

            public caffe.Loadcaffe.WindowDataParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.WindowDataParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.WindowDataParameter build() {
                caffe.Loadcaffe.WindowDataParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.WindowDataParameter buildPartial() {
                caffe.Loadcaffe.WindowDataParameter result = new caffe.Loadcaffe.WindowDataParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.source_ = source_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.scale_ = scale_;
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000004;
                }
                result.meanFile_ = meanFile_;
                if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
                    to_bitField0_ |= 0x00000008;
                }
                result.batchSize_ = batchSize_;
                if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
                    to_bitField0_ |= 0x00000010;
                }
                result.cropSize_ = cropSize_;
                if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
                    to_bitField0_ |= 0x00000020;
                }
                result.mirror_ = mirror_;
                if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
                    to_bitField0_ |= 0x00000040;
                }
                result.fgThreshold_ = fgThreshold_;
                if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
                    to_bitField0_ |= 0x00000080;
                }
                result.bgThreshold_ = bgThreshold_;
                if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
                    to_bitField0_ |= 0x00000100;
                }
                result.fgFraction_ = fgFraction_;
                if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
                    to_bitField0_ |= 0x00000200;
                }
                result.contextPad_ = contextPad_;
                if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
                    to_bitField0_ |= 0x00000400;
                }
                result.cropMode_ = cropMode_;
                if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
                    to_bitField0_ |= 0x00000800;
                }
                result.cacheImages_ = cacheImages_;
                if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
                    to_bitField0_ |= 0x00001000;
                }
                result.rootFolder_ = rootFolder_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.WindowDataParameter) {
                    return mergeFrom((caffe.Loadcaffe.WindowDataParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.WindowDataParameter other) {
                if (other == caffe.Loadcaffe.WindowDataParameter.getDefaultInstance()) return this;
                if (other.hasSource()) {
                    bitField0_ |= 0x00000001;
                    source_ = other.source_;
                    onChanged();
                }
                if (other.hasScale()) {
                    setScale(other.getScale());
                }
                if (other.hasMeanFile()) {
                    bitField0_ |= 0x00000004;
                    meanFile_ = other.meanFile_;
                    onChanged();
                }
                if (other.hasBatchSize()) {
                    setBatchSize(other.getBatchSize());
                }
                if (other.hasCropSize()) {
                    setCropSize(other.getCropSize());
                }
                if (other.hasMirror()) {
                    setMirror(other.getMirror());
                }
                if (other.hasFgThreshold()) {
                    setFgThreshold(other.getFgThreshold());
                }
                if (other.hasBgThreshold()) {
                    setBgThreshold(other.getBgThreshold());
                }
                if (other.hasFgFraction()) {
                    setFgFraction(other.getFgFraction());
                }
                if (other.hasContextPad()) {
                    setContextPad(other.getContextPad());
                }
                if (other.hasCropMode()) {
                    bitField0_ |= 0x00000400;
                    cropMode_ = other.cropMode_;
                    onChanged();
                }
                if (other.hasCacheImages()) {
                    setCacheImages(other.getCacheImages());
                }
                if (other.hasRootFolder()) {
                    bitField0_ |= 0x00001000;
                    rootFolder_ = other.rootFolder_;
                    onChanged();
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.WindowDataParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.WindowDataParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private java.lang.Object source_ = "";
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public boolean hasSource() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public java.lang.String getSource() {
                java.lang.Object ref = source_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        source_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public com.google.protobuf.ByteString
            getSourceBytes() {
                java.lang.Object ref = source_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    source_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public Builder setSource(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                source_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public Builder clearSource() {
                bitField0_ = (bitField0_ & ~0x00000001);
                source_ = getDefaultInstance().getSource();
                onChanged();
                return this;
            }
            /**
             * <code>optional string source = 1;</code>
             *
             * <pre>
             * Specify the data source.
             * </pre>
             */
            public Builder setSourceBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                source_ = value;
                onChanged();
                return this;
            }

            private float scale_ = 1F;
            /**
             * <code>optional float scale = 2 [default = 1];</code>
             *
             * <pre>
             * For data pre-processing, we can do simple scaling and subtracting the
             * data mean, if provided. Note that the mean subtraction is always carried
             * out before scaling.
             * </pre>
             */
            public boolean hasScale() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional float scale = 2 [default = 1];</code>
             *
             * <pre>
             * For data pre-processing, we can do simple scaling and subtracting the
             * data mean, if provided. Note that the mean subtraction is always carried
             * out before scaling.
             * </pre>
             */
            public float getScale() {
                return scale_;
            }
            /**
             * <code>optional float scale = 2 [default = 1];</code>
             *
             * <pre>
             * For data pre-processing, we can do simple scaling and subtracting the
             * data mean, if provided. Note that the mean subtraction is always carried
             * out before scaling.
             * </pre>
             */
            public Builder setScale(float value) {
                bitField0_ |= 0x00000002;
                scale_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float scale = 2 [default = 1];</code>
             *
             * <pre>
             * For data pre-processing, we can do simple scaling and subtracting the
             * data mean, if provided. Note that the mean subtraction is always carried
             * out before scaling.
             * </pre>
             */
            public Builder clearScale() {
                bitField0_ = (bitField0_ & ~0x00000002);
                scale_ = 1F;
                onChanged();
                return this;
            }

            private java.lang.Object meanFile_ = "";
            /**
             * <code>optional string mean_file = 3;</code>
             */
            public boolean hasMeanFile() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional string mean_file = 3;</code>
             */
            public java.lang.String getMeanFile() {
                java.lang.Object ref = meanFile_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        meanFile_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string mean_file = 3;</code>
             */
            public com.google.protobuf.ByteString
            getMeanFileBytes() {
                java.lang.Object ref = meanFile_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    meanFile_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string mean_file = 3;</code>
             */
            public Builder setMeanFile(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000004;
                meanFile_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string mean_file = 3;</code>
             */
            public Builder clearMeanFile() {
                bitField0_ = (bitField0_ & ~0x00000004);
                meanFile_ = getDefaultInstance().getMeanFile();
                onChanged();
                return this;
            }
            /**
             * <code>optional string mean_file = 3;</code>
             */
            public Builder setMeanFileBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000004;
                meanFile_ = value;
                onChanged();
                return this;
            }

            private int batchSize_ ;
            /**
             * <code>optional uint32 batch_size = 4;</code>
             *
             * <pre>
             * Specify the batch size.
             * </pre>
             */
            public boolean hasBatchSize() {
                return ((bitField0_ & 0x00000008) == 0x00000008);
            }
            /**
             * <code>optional uint32 batch_size = 4;</code>
             *
             * <pre>
             * Specify the batch size.
             * </pre>
             */
            public int getBatchSize() {
                return batchSize_;
            }
            /**
             * <code>optional uint32 batch_size = 4;</code>
             *
             * <pre>
             * Specify the batch size.
             * </pre>
             */
            public Builder setBatchSize(int value) {
                bitField0_ |= 0x00000008;
                batchSize_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 batch_size = 4;</code>
             *
             * <pre>
             * Specify the batch size.
             * </pre>
             */
            public Builder clearBatchSize() {
                bitField0_ = (bitField0_ & ~0x00000008);
                batchSize_ = 0;
                onChanged();
                return this;
            }

            private int cropSize_ ;
            /**
             * <code>optional uint32 crop_size = 5 [default = 0];</code>
             *
             * <pre>
             * Specify if we would like to randomly crop an image.
             * </pre>
             */
            public boolean hasCropSize() {
                return ((bitField0_ & 0x00000010) == 0x00000010);
            }
            /**
             * <code>optional uint32 crop_size = 5 [default = 0];</code>
             *
             * <pre>
             * Specify if we would like to randomly crop an image.
             * </pre>
             */
            public int getCropSize() {
                return cropSize_;
            }
            /**
             * <code>optional uint32 crop_size = 5 [default = 0];</code>
             *
             * <pre>
             * Specify if we would like to randomly crop an image.
             * </pre>
             */
            public Builder setCropSize(int value) {
                bitField0_ |= 0x00000010;
                cropSize_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 crop_size = 5 [default = 0];</code>
             *
             * <pre>
             * Specify if we would like to randomly crop an image.
             * </pre>
             */
            public Builder clearCropSize() {
                bitField0_ = (bitField0_ & ~0x00000010);
                cropSize_ = 0;
                onChanged();
                return this;
            }

            private boolean mirror_ ;
            /**
             * <code>optional bool mirror = 6 [default = false];</code>
             *
             * <pre>
             * Specify if we want to randomly mirror data.
             * </pre>
             */
            public boolean hasMirror() {
                return ((bitField0_ & 0x00000020) == 0x00000020);
            }
            /**
             * <code>optional bool mirror = 6 [default = false];</code>
             *
             * <pre>
             * Specify if we want to randomly mirror data.
             * </pre>
             */
            public boolean getMirror() {
                return mirror_;
            }
            /**
             * <code>optional bool mirror = 6 [default = false];</code>
             *
             * <pre>
             * Specify if we want to randomly mirror data.
             * </pre>
             */
            public Builder setMirror(boolean value) {
                bitField0_ |= 0x00000020;
                mirror_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool mirror = 6 [default = false];</code>
             *
             * <pre>
             * Specify if we want to randomly mirror data.
             * </pre>
             */
            public Builder clearMirror() {
                bitField0_ = (bitField0_ & ~0x00000020);
                mirror_ = false;
                onChanged();
                return this;
            }

            private float fgThreshold_ = 0.5F;
            /**
             * <code>optional float fg_threshold = 7 [default = 0.5];</code>
             *
             * <pre>
             * Foreground (object) overlap threshold
             * </pre>
             */
            public boolean hasFgThreshold() {
                return ((bitField0_ & 0x00000040) == 0x00000040);
            }
            /**
             * <code>optional float fg_threshold = 7 [default = 0.5];</code>
             *
             * <pre>
             * Foreground (object) overlap threshold
             * </pre>
             */
            public float getFgThreshold() {
                return fgThreshold_;
            }
            /**
             * <code>optional float fg_threshold = 7 [default = 0.5];</code>
             *
             * <pre>
             * Foreground (object) overlap threshold
             * </pre>
             */
            public Builder setFgThreshold(float value) {
                bitField0_ |= 0x00000040;
                fgThreshold_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float fg_threshold = 7 [default = 0.5];</code>
             *
             * <pre>
             * Foreground (object) overlap threshold
             * </pre>
             */
            public Builder clearFgThreshold() {
                bitField0_ = (bitField0_ & ~0x00000040);
                fgThreshold_ = 0.5F;
                onChanged();
                return this;
            }

            private float bgThreshold_ = 0.5F;
            /**
             * <code>optional float bg_threshold = 8 [default = 0.5];</code>
             *
             * <pre>
             * Background (non-object) overlap threshold
             * </pre>
             */
            public boolean hasBgThreshold() {
                return ((bitField0_ & 0x00000080) == 0x00000080);
            }
            /**
             * <code>optional float bg_threshold = 8 [default = 0.5];</code>
             *
             * <pre>
             * Background (non-object) overlap threshold
             * </pre>
             */
            public float getBgThreshold() {
                return bgThreshold_;
            }
            /**
             * <code>optional float bg_threshold = 8 [default = 0.5];</code>
             *
             * <pre>
             * Background (non-object) overlap threshold
             * </pre>
             */
            public Builder setBgThreshold(float value) {
                bitField0_ |= 0x00000080;
                bgThreshold_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float bg_threshold = 8 [default = 0.5];</code>
             *
             * <pre>
             * Background (non-object) overlap threshold
             * </pre>
             */
            public Builder clearBgThreshold() {
                bitField0_ = (bitField0_ & ~0x00000080);
                bgThreshold_ = 0.5F;
                onChanged();
                return this;
            }

            private float fgFraction_ = 0.25F;
            /**
             * <code>optional float fg_fraction = 9 [default = 0.25];</code>
             *
             * <pre>
             * Fraction of batch that should be foreground objects
             * </pre>
             */
            public boolean hasFgFraction() {
                return ((bitField0_ & 0x00000100) == 0x00000100);
            }
            /**
             * <code>optional float fg_fraction = 9 [default = 0.25];</code>
             *
             * <pre>
             * Fraction of batch that should be foreground objects
             * </pre>
             */
            public float getFgFraction() {
                return fgFraction_;
            }
            /**
             * <code>optional float fg_fraction = 9 [default = 0.25];</code>
             *
             * <pre>
             * Fraction of batch that should be foreground objects
             * </pre>
             */
            public Builder setFgFraction(float value) {
                bitField0_ |= 0x00000100;
                fgFraction_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float fg_fraction = 9 [default = 0.25];</code>
             *
             * <pre>
             * Fraction of batch that should be foreground objects
             * </pre>
             */
            public Builder clearFgFraction() {
                bitField0_ = (bitField0_ & ~0x00000100);
                fgFraction_ = 0.25F;
                onChanged();
                return this;
            }

            private int contextPad_ ;
            /**
             * <code>optional uint32 context_pad = 10 [default = 0];</code>
             *
             * <pre>
             * Amount of contextual padding to add around a window
             * (used only by the window_data_layer)
             * </pre>
             */
            public boolean hasContextPad() {
                return ((bitField0_ & 0x00000200) == 0x00000200);
            }
            /**
             * <code>optional uint32 context_pad = 10 [default = 0];</code>
             *
             * <pre>
             * Amount of contextual padding to add around a window
             * (used only by the window_data_layer)
             * </pre>
             */
            public int getContextPad() {
                return contextPad_;
            }
            /**
             * <code>optional uint32 context_pad = 10 [default = 0];</code>
             *
             * <pre>
             * Amount of contextual padding to add around a window
             * (used only by the window_data_layer)
             * </pre>
             */
            public Builder setContextPad(int value) {
                bitField0_ |= 0x00000200;
                contextPad_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 context_pad = 10 [default = 0];</code>
             *
             * <pre>
             * Amount of contextual padding to add around a window
             * (used only by the window_data_layer)
             * </pre>
             */
            public Builder clearContextPad() {
                bitField0_ = (bitField0_ & ~0x00000200);
                contextPad_ = 0;
                onChanged();
                return this;
            }

            private java.lang.Object cropMode_ = "warp";
            /**
             * <code>optional string crop_mode = 11 [default = "warp"];</code>
             *
             * <pre>
             * Mode for cropping out a detection window
             * warp: cropped window is warped to a fixed size and aspect ratio
             * square: the tightest square around the window is cropped
             * </pre>
             */
            public boolean hasCropMode() {
                return ((bitField0_ & 0x00000400) == 0x00000400);
            }
            /**
             * <code>optional string crop_mode = 11 [default = "warp"];</code>
             *
             * <pre>
             * Mode for cropping out a detection window
             * warp: cropped window is warped to a fixed size and aspect ratio
             * square: the tightest square around the window is cropped
             * </pre>
             */
            public java.lang.String getCropMode() {
                java.lang.Object ref = cropMode_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        cropMode_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string crop_mode = 11 [default = "warp"];</code>
             *
             * <pre>
             * Mode for cropping out a detection window
             * warp: cropped window is warped to a fixed size and aspect ratio
             * square: the tightest square around the window is cropped
             * </pre>
             */
            public com.google.protobuf.ByteString
            getCropModeBytes() {
                java.lang.Object ref = cropMode_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    cropMode_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string crop_mode = 11 [default = "warp"];</code>
             *
             * <pre>
             * Mode for cropping out a detection window
             * warp: cropped window is warped to a fixed size and aspect ratio
             * square: the tightest square around the window is cropped
             * </pre>
             */
            public Builder setCropMode(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000400;
                cropMode_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string crop_mode = 11 [default = "warp"];</code>
             *
             * <pre>
             * Mode for cropping out a detection window
             * warp: cropped window is warped to a fixed size and aspect ratio
             * square: the tightest square around the window is cropped
             * </pre>
             */
            public Builder clearCropMode() {
                bitField0_ = (bitField0_ & ~0x00000400);
                cropMode_ = getDefaultInstance().getCropMode();
                onChanged();
                return this;
            }
            /**
             * <code>optional string crop_mode = 11 [default = "warp"];</code>
             *
             * <pre>
             * Mode for cropping out a detection window
             * warp: cropped window is warped to a fixed size and aspect ratio
             * square: the tightest square around the window is cropped
             * </pre>
             */
            public Builder setCropModeBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000400;
                cropMode_ = value;
                onChanged();
                return this;
            }

            private boolean cacheImages_ ;
            /**
             * <code>optional bool cache_images = 12 [default = false];</code>
             *
             * <pre>
             * cache_images: will load all images in memory for faster access
             * </pre>
             */
            public boolean hasCacheImages() {
                return ((bitField0_ & 0x00000800) == 0x00000800);
            }
            /**
             * <code>optional bool cache_images = 12 [default = false];</code>
             *
             * <pre>
             * cache_images: will load all images in memory for faster access
             * </pre>
             */
            public boolean getCacheImages() {
                return cacheImages_;
            }
            /**
             * <code>optional bool cache_images = 12 [default = false];</code>
             *
             * <pre>
             * cache_images: will load all images in memory for faster access
             * </pre>
             */
            public Builder setCacheImages(boolean value) {
                bitField0_ |= 0x00000800;
                cacheImages_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool cache_images = 12 [default = false];</code>
             *
             * <pre>
             * cache_images: will load all images in memory for faster access
             * </pre>
             */
            public Builder clearCacheImages() {
                bitField0_ = (bitField0_ & ~0x00000800);
                cacheImages_ = false;
                onChanged();
                return this;
            }

            private java.lang.Object rootFolder_ = "";
            /**
             * <code>optional string root_folder = 13 [default = ""];</code>
             *
             * <pre>
             * append root_folder to locate images
             * </pre>
             */
            public boolean hasRootFolder() {
                return ((bitField0_ & 0x00001000) == 0x00001000);
            }
            /**
             * <code>optional string root_folder = 13 [default = ""];</code>
             *
             * <pre>
             * append root_folder to locate images
             * </pre>
             */
            public java.lang.String getRootFolder() {
                java.lang.Object ref = rootFolder_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        rootFolder_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string root_folder = 13 [default = ""];</code>
             *
             * <pre>
             * append root_folder to locate images
             * </pre>
             */
            public com.google.protobuf.ByteString
            getRootFolderBytes() {
                java.lang.Object ref = rootFolder_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    rootFolder_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string root_folder = 13 [default = ""];</code>
             *
             * <pre>
             * append root_folder to locate images
             * </pre>
             */
            public Builder setRootFolder(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00001000;
                rootFolder_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string root_folder = 13 [default = ""];</code>
             *
             * <pre>
             * append root_folder to locate images
             * </pre>
             */
            public Builder clearRootFolder() {
                bitField0_ = (bitField0_ & ~0x00001000);
                rootFolder_ = getDefaultInstance().getRootFolder();
                onChanged();
                return this;
            }
            /**
             * <code>optional string root_folder = 13 [default = ""];</code>
             *
             * <pre>
             * append root_folder to locate images
             * </pre>
             */
            public Builder setRootFolderBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00001000;
                rootFolder_ = value;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.WindowDataParameter)
        }

        static {
            defaultInstance = new WindowDataParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.WindowDataParameter)
    }

    public interface V1LayerParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.V1LayerParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>repeated string bottom = 2;</code>
         */
        com.google.protobuf.ProtocolStringList
        getBottomList();
        /**
         * <code>repeated string bottom = 2;</code>
         */
        int getBottomCount();
        /**
         * <code>repeated string bottom = 2;</code>
         */
        java.lang.String getBottom(int index);
        /**
         * <code>repeated string bottom = 2;</code>
         */
        com.google.protobuf.ByteString
        getBottomBytes(int index);

        /**
         * <code>repeated string top = 3;</code>
         */
        com.google.protobuf.ProtocolStringList
        getTopList();
        /**
         * <code>repeated string top = 3;</code>
         */
        int getTopCount();
        /**
         * <code>repeated string top = 3;</code>
         */
        java.lang.String getTop(int index);
        /**
         * <code>repeated string top = 3;</code>
         */
        com.google.protobuf.ByteString
        getTopBytes(int index);

        /**
         * <code>optional string name = 4;</code>
         */
        boolean hasName();
        /**
         * <code>optional string name = 4;</code>
         */
        java.lang.String getName();
        /**
         * <code>optional string name = 4;</code>
         */
        com.google.protobuf.ByteString
        getNameBytes();

        /**
         * <code>repeated .caffe.NetStateRule include = 32;</code>
         */
        java.util.List<caffe.Loadcaffe.NetStateRule>
        getIncludeList();
        /**
         * <code>repeated .caffe.NetStateRule include = 32;</code>
         */
        caffe.Loadcaffe.NetStateRule getInclude(int index);
        /**
         * <code>repeated .caffe.NetStateRule include = 32;</code>
         */
        int getIncludeCount();
        /**
         * <code>repeated .caffe.NetStateRule include = 32;</code>
         */
        java.util.List<? extends caffe.Loadcaffe.NetStateRuleOrBuilder>
        getIncludeOrBuilderList();
        /**
         * <code>repeated .caffe.NetStateRule include = 32;</code>
         */
        caffe.Loadcaffe.NetStateRuleOrBuilder getIncludeOrBuilder(
                int index);

        /**
         * <code>repeated .caffe.NetStateRule exclude = 33;</code>
         */
        java.util.List<caffe.Loadcaffe.NetStateRule>
        getExcludeList();
        /**
         * <code>repeated .caffe.NetStateRule exclude = 33;</code>
         */
        caffe.Loadcaffe.NetStateRule getExclude(int index);
        /**
         * <code>repeated .caffe.NetStateRule exclude = 33;</code>
         */
        int getExcludeCount();
        /**
         * <code>repeated .caffe.NetStateRule exclude = 33;</code>
         */
        java.util.List<? extends caffe.Loadcaffe.NetStateRuleOrBuilder>
        getExcludeOrBuilderList();
        /**
         * <code>repeated .caffe.NetStateRule exclude = 33;</code>
         */
        caffe.Loadcaffe.NetStateRuleOrBuilder getExcludeOrBuilder(
                int index);

        /**
         * <code>optional .caffe.V1LayerParameter.LayerType type = 5;</code>
         */
        boolean hasType();
        /**
         * <code>optional .caffe.V1LayerParameter.LayerType type = 5;</code>
         */
        caffe.Loadcaffe.V1LayerParameter.LayerType getType();

        /**
         * <code>repeated .caffe.BlobProto blobs = 6;</code>
         */
        java.util.List<caffe.Loadcaffe.BlobProto>
        getBlobsList();
        /**
         * <code>repeated .caffe.BlobProto blobs = 6;</code>
         */
        caffe.Loadcaffe.BlobProto getBlobs(int index);
        /**
         * <code>repeated .caffe.BlobProto blobs = 6;</code>
         */
        int getBlobsCount();
        /**
         * <code>repeated .caffe.BlobProto blobs = 6;</code>
         */
        java.util.List<? extends caffe.Loadcaffe.BlobProtoOrBuilder>
        getBlobsOrBuilderList();
        /**
         * <code>repeated .caffe.BlobProto blobs = 6;</code>
         */
        caffe.Loadcaffe.BlobProtoOrBuilder getBlobsOrBuilder(
                int index);

        /**
         * <code>repeated string param = 1001;</code>
         */
        com.google.protobuf.ProtocolStringList
        getParamList();
        /**
         * <code>repeated string param = 1001;</code>
         */
        int getParamCount();
        /**
         * <code>repeated string param = 1001;</code>
         */
        java.lang.String getParam(int index);
        /**
         * <code>repeated string param = 1001;</code>
         */
        com.google.protobuf.ByteString
        getParamBytes(int index);

        /**
         * <code>repeated .caffe.V1LayerParameter.DimCheckMode blob_share_mode = 1002;</code>
         */
        java.util.List<caffe.Loadcaffe.V1LayerParameter.DimCheckMode> getBlobShareModeList();
        /**
         * <code>repeated .caffe.V1LayerParameter.DimCheckMode blob_share_mode = 1002;</code>
         */
        int getBlobShareModeCount();
        /**
         * <code>repeated .caffe.V1LayerParameter.DimCheckMode blob_share_mode = 1002;</code>
         */
        caffe.Loadcaffe.V1LayerParameter.DimCheckMode getBlobShareMode(int index);

        /**
         * <code>repeated float blobs_lr = 7;</code>
         */
        java.util.List<java.lang.Float> getBlobsLrList();
        /**
         * <code>repeated float blobs_lr = 7;</code>
         */
        int getBlobsLrCount();
        /**
         * <code>repeated float blobs_lr = 7;</code>
         */
        float getBlobsLr(int index);

        /**
         * <code>repeated float weight_decay = 8;</code>
         */
        java.util.List<java.lang.Float> getWeightDecayList();
        /**
         * <code>repeated float weight_decay = 8;</code>
         */
        int getWeightDecayCount();
        /**
         * <code>repeated float weight_decay = 8;</code>
         */
        float getWeightDecay(int index);

        /**
         * <code>repeated float loss_weight = 35;</code>
         */
        java.util.List<java.lang.Float> getLossWeightList();
        /**
         * <code>repeated float loss_weight = 35;</code>
         */
        int getLossWeightCount();
        /**
         * <code>repeated float loss_weight = 35;</code>
         */
        float getLossWeight(int index);

        /**
         * <code>optional .caffe.AccuracyParameter accuracy_param = 27;</code>
         */
        boolean hasAccuracyParam();
        /**
         * <code>optional .caffe.AccuracyParameter accuracy_param = 27;</code>
         */
        caffe.Loadcaffe.AccuracyParameter getAccuracyParam();
        /**
         * <code>optional .caffe.AccuracyParameter accuracy_param = 27;</code>
         */
        caffe.Loadcaffe.AccuracyParameterOrBuilder getAccuracyParamOrBuilder();

        /**
         * <code>optional .caffe.ArgMaxParameter argmax_param = 23;</code>
         */
        boolean hasArgmaxParam();
        /**
         * <code>optional .caffe.ArgMaxParameter argmax_param = 23;</code>
         */
        caffe.Loadcaffe.ArgMaxParameter getArgmaxParam();
        /**
         * <code>optional .caffe.ArgMaxParameter argmax_param = 23;</code>
         */
        caffe.Loadcaffe.ArgMaxParameterOrBuilder getArgmaxParamOrBuilder();

        /**
         * <code>optional .caffe.ConcatParameter concat_param = 9;</code>
         */
        boolean hasConcatParam();
        /**
         * <code>optional .caffe.ConcatParameter concat_param = 9;</code>
         */
        caffe.Loadcaffe.ConcatParameter getConcatParam();
        /**
         * <code>optional .caffe.ConcatParameter concat_param = 9;</code>
         */
        caffe.Loadcaffe.ConcatParameterOrBuilder getConcatParamOrBuilder();

        /**
         * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 40;</code>
         */
        boolean hasContrastiveLossParam();
        /**
         * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 40;</code>
         */
        caffe.Loadcaffe.ContrastiveLossParameter getContrastiveLossParam();
        /**
         * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 40;</code>
         */
        caffe.Loadcaffe.ContrastiveLossParameterOrBuilder getContrastiveLossParamOrBuilder();

        /**
         * <code>optional .caffe.ConvolutionParameter convolution_param = 10;</code>
         */
        boolean hasConvolutionParam();
        /**
         * <code>optional .caffe.ConvolutionParameter convolution_param = 10;</code>
         */
        caffe.Loadcaffe.ConvolutionParameter getConvolutionParam();
        /**
         * <code>optional .caffe.ConvolutionParameter convolution_param = 10;</code>
         */
        caffe.Loadcaffe.ConvolutionParameterOrBuilder getConvolutionParamOrBuilder();

        /**
         * <code>optional .caffe.DataParameter data_param = 11;</code>
         */
        boolean hasDataParam();
        /**
         * <code>optional .caffe.DataParameter data_param = 11;</code>
         */
        caffe.Loadcaffe.DataParameter getDataParam();
        /**
         * <code>optional .caffe.DataParameter data_param = 11;</code>
         */
        caffe.Loadcaffe.DataParameterOrBuilder getDataParamOrBuilder();

        /**
         * <code>optional .caffe.DropoutParameter dropout_param = 12;</code>
         */
        boolean hasDropoutParam();
        /**
         * <code>optional .caffe.DropoutParameter dropout_param = 12;</code>
         */
        caffe.Loadcaffe.DropoutParameter getDropoutParam();
        /**
         * <code>optional .caffe.DropoutParameter dropout_param = 12;</code>
         */
        caffe.Loadcaffe.DropoutParameterOrBuilder getDropoutParamOrBuilder();

        /**
         * <code>optional .caffe.DummyDataParameter dummy_data_param = 26;</code>
         */
        boolean hasDummyDataParam();
        /**
         * <code>optional .caffe.DummyDataParameter dummy_data_param = 26;</code>
         */
        caffe.Loadcaffe.DummyDataParameter getDummyDataParam();
        /**
         * <code>optional .caffe.DummyDataParameter dummy_data_param = 26;</code>
         */
        caffe.Loadcaffe.DummyDataParameterOrBuilder getDummyDataParamOrBuilder();

        /**
         * <code>optional .caffe.EltwiseParameter eltwise_param = 24;</code>
         */
        boolean hasEltwiseParam();
        /**
         * <code>optional .caffe.EltwiseParameter eltwise_param = 24;</code>
         */
        caffe.Loadcaffe.EltwiseParameter getEltwiseParam();
        /**
         * <code>optional .caffe.EltwiseParameter eltwise_param = 24;</code>
         */
        caffe.Loadcaffe.EltwiseParameterOrBuilder getEltwiseParamOrBuilder();

        /**
         * <code>optional .caffe.ExpParameter exp_param = 41;</code>
         */
        boolean hasExpParam();
        /**
         * <code>optional .caffe.ExpParameter exp_param = 41;</code>
         */
        caffe.Loadcaffe.ExpParameter getExpParam();
        /**
         * <code>optional .caffe.ExpParameter exp_param = 41;</code>
         */
        caffe.Loadcaffe.ExpParameterOrBuilder getExpParamOrBuilder();

        /**
         * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 13;</code>
         */
        boolean hasHdf5DataParam();
        /**
         * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 13;</code>
         */
        caffe.Loadcaffe.HDF5DataParameter getHdf5DataParam();
        /**
         * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 13;</code>
         */
        caffe.Loadcaffe.HDF5DataParameterOrBuilder getHdf5DataParamOrBuilder();

        /**
         * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 14;</code>
         */
        boolean hasHdf5OutputParam();
        /**
         * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 14;</code>
         */
        caffe.Loadcaffe.HDF5OutputParameter getHdf5OutputParam();
        /**
         * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 14;</code>
         */
        caffe.Loadcaffe.HDF5OutputParameterOrBuilder getHdf5OutputParamOrBuilder();

        /**
         * <code>optional .caffe.HingeLossParameter hinge_loss_param = 29;</code>
         */
        boolean hasHingeLossParam();
        /**
         * <code>optional .caffe.HingeLossParameter hinge_loss_param = 29;</code>
         */
        caffe.Loadcaffe.HingeLossParameter getHingeLossParam();
        /**
         * <code>optional .caffe.HingeLossParameter hinge_loss_param = 29;</code>
         */
        caffe.Loadcaffe.HingeLossParameterOrBuilder getHingeLossParamOrBuilder();

        /**
         * <code>optional .caffe.ImageDataParameter image_data_param = 15;</code>
         */
        boolean hasImageDataParam();
        /**
         * <code>optional .caffe.ImageDataParameter image_data_param = 15;</code>
         */
        caffe.Loadcaffe.ImageDataParameter getImageDataParam();
        /**
         * <code>optional .caffe.ImageDataParameter image_data_param = 15;</code>
         */
        caffe.Loadcaffe.ImageDataParameterOrBuilder getImageDataParamOrBuilder();

        /**
         * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 16;</code>
         */
        boolean hasInfogainLossParam();
        /**
         * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 16;</code>
         */
        caffe.Loadcaffe.InfogainLossParameter getInfogainLossParam();
        /**
         * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 16;</code>
         */
        caffe.Loadcaffe.InfogainLossParameterOrBuilder getInfogainLossParamOrBuilder();

        /**
         * <code>optional .caffe.InnerProductParameter inner_product_param = 17;</code>
         */
        boolean hasInnerProductParam();
        /**
         * <code>optional .caffe.InnerProductParameter inner_product_param = 17;</code>
         */
        caffe.Loadcaffe.InnerProductParameter getInnerProductParam();
        /**
         * <code>optional .caffe.InnerProductParameter inner_product_param = 17;</code>
         */
        caffe.Loadcaffe.InnerProductParameterOrBuilder getInnerProductParamOrBuilder();

        /**
         * <code>optional .caffe.LRNParameter lrn_param = 18;</code>
         */
        boolean hasLrnParam();
        /**
         * <code>optional .caffe.LRNParameter lrn_param = 18;</code>
         */
        caffe.Loadcaffe.LRNParameter getLrnParam();
        /**
         * <code>optional .caffe.LRNParameter lrn_param = 18;</code>
         */
        caffe.Loadcaffe.LRNParameterOrBuilder getLrnParamOrBuilder();

        /**
         * <code>optional .caffe.MemoryDataParameter memory_data_param = 22;</code>
         */
        boolean hasMemoryDataParam();
        /**
         * <code>optional .caffe.MemoryDataParameter memory_data_param = 22;</code>
         */
        caffe.Loadcaffe.MemoryDataParameter getMemoryDataParam();
        /**
         * <code>optional .caffe.MemoryDataParameter memory_data_param = 22;</code>
         */
        caffe.Loadcaffe.MemoryDataParameterOrBuilder getMemoryDataParamOrBuilder();

        /**
         * <code>optional .caffe.MVNParameter mvn_param = 34;</code>
         */
        boolean hasMvnParam();
        /**
         * <code>optional .caffe.MVNParameter mvn_param = 34;</code>
         */
        caffe.Loadcaffe.MVNParameter getMvnParam();
        /**
         * <code>optional .caffe.MVNParameter mvn_param = 34;</code>
         */
        caffe.Loadcaffe.MVNParameterOrBuilder getMvnParamOrBuilder();

        /**
         * <code>optional .caffe.PoolingParameter pooling_param = 19;</code>
         */
        boolean hasPoolingParam();
        /**
         * <code>optional .caffe.PoolingParameter pooling_param = 19;</code>
         */
        caffe.Loadcaffe.PoolingParameter getPoolingParam();
        /**
         * <code>optional .caffe.PoolingParameter pooling_param = 19;</code>
         */
        caffe.Loadcaffe.PoolingParameterOrBuilder getPoolingParamOrBuilder();

        /**
         * <code>optional .caffe.PowerParameter power_param = 21;</code>
         */
        boolean hasPowerParam();
        /**
         * <code>optional .caffe.PowerParameter power_param = 21;</code>
         */
        caffe.Loadcaffe.PowerParameter getPowerParam();
        /**
         * <code>optional .caffe.PowerParameter power_param = 21;</code>
         */
        caffe.Loadcaffe.PowerParameterOrBuilder getPowerParamOrBuilder();

        /**
         * <code>optional .caffe.ReLUParameter relu_param = 30;</code>
         */
        boolean hasReluParam();
        /**
         * <code>optional .caffe.ReLUParameter relu_param = 30;</code>
         */
        caffe.Loadcaffe.ReLUParameter getReluParam();
        /**
         * <code>optional .caffe.ReLUParameter relu_param = 30;</code>
         */
        caffe.Loadcaffe.ReLUParameterOrBuilder getReluParamOrBuilder();

        /**
         * <code>optional .caffe.SigmoidParameter sigmoid_param = 38;</code>
         */
        boolean hasSigmoidParam();
        /**
         * <code>optional .caffe.SigmoidParameter sigmoid_param = 38;</code>
         */
        caffe.Loadcaffe.SigmoidParameter getSigmoidParam();
        /**
         * <code>optional .caffe.SigmoidParameter sigmoid_param = 38;</code>
         */
        caffe.Loadcaffe.SigmoidParameterOrBuilder getSigmoidParamOrBuilder();

        /**
         * <code>optional .caffe.SoftmaxParameter softmax_param = 39;</code>
         */
        boolean hasSoftmaxParam();
        /**
         * <code>optional .caffe.SoftmaxParameter softmax_param = 39;</code>
         */
        caffe.Loadcaffe.SoftmaxParameter getSoftmaxParam();
        /**
         * <code>optional .caffe.SoftmaxParameter softmax_param = 39;</code>
         */
        caffe.Loadcaffe.SoftmaxParameterOrBuilder getSoftmaxParamOrBuilder();

        /**
         * <code>optional .caffe.SliceParameter slice_param = 31;</code>
         */
        boolean hasSliceParam();
        /**
         * <code>optional .caffe.SliceParameter slice_param = 31;</code>
         */
        caffe.Loadcaffe.SliceParameter getSliceParam();
        /**
         * <code>optional .caffe.SliceParameter slice_param = 31;</code>
         */
        caffe.Loadcaffe.SliceParameterOrBuilder getSliceParamOrBuilder();

        /**
         * <code>optional .caffe.TanHParameter tanh_param = 37;</code>
         */
        boolean hasTanhParam();
        /**
         * <code>optional .caffe.TanHParameter tanh_param = 37;</code>
         */
        caffe.Loadcaffe.TanHParameter getTanhParam();
        /**
         * <code>optional .caffe.TanHParameter tanh_param = 37;</code>
         */
        caffe.Loadcaffe.TanHParameterOrBuilder getTanhParamOrBuilder();

        /**
         * <code>optional .caffe.ThresholdParameter threshold_param = 25;</code>
         */
        boolean hasThresholdParam();
        /**
         * <code>optional .caffe.ThresholdParameter threshold_param = 25;</code>
         */
        caffe.Loadcaffe.ThresholdParameter getThresholdParam();
        /**
         * <code>optional .caffe.ThresholdParameter threshold_param = 25;</code>
         */
        caffe.Loadcaffe.ThresholdParameterOrBuilder getThresholdParamOrBuilder();

        /**
         * <code>optional .caffe.WindowDataParameter window_data_param = 20;</code>
         */
        boolean hasWindowDataParam();
        /**
         * <code>optional .caffe.WindowDataParameter window_data_param = 20;</code>
         */
        caffe.Loadcaffe.WindowDataParameter getWindowDataParam();
        /**
         * <code>optional .caffe.WindowDataParameter window_data_param = 20;</code>
         */
        caffe.Loadcaffe.WindowDataParameterOrBuilder getWindowDataParamOrBuilder();

        /**
         * <code>optional .caffe.TransformationParameter transform_param = 36;</code>
         */
        boolean hasTransformParam();
        /**
         * <code>optional .caffe.TransformationParameter transform_param = 36;</code>
         */
        caffe.Loadcaffe.TransformationParameter getTransformParam();
        /**
         * <code>optional .caffe.TransformationParameter transform_param = 36;</code>
         */
        caffe.Loadcaffe.TransformationParameterOrBuilder getTransformParamOrBuilder();

        /**
         * <code>optional .caffe.LossParameter loss_param = 42;</code>
         */
        boolean hasLossParam();
        /**
         * <code>optional .caffe.LossParameter loss_param = 42;</code>
         */
        caffe.Loadcaffe.LossParameter getLossParam();
        /**
         * <code>optional .caffe.LossParameter loss_param = 42;</code>
         */
        caffe.Loadcaffe.LossParameterOrBuilder getLossParamOrBuilder();

        /**
         * <code>optional .caffe.V0LayerParameter layer = 1;</code>
         */
        boolean hasLayer();
        /**
         * <code>optional .caffe.V0LayerParameter layer = 1;</code>
         */
        caffe.Loadcaffe.V0LayerParameter getLayer();
        /**
         * <code>optional .caffe.V0LayerParameter layer = 1;</code>
         */
        caffe.Loadcaffe.V0LayerParameterOrBuilder getLayerOrBuilder();
    }
    /**
     * Protobuf type {@code caffe.V1LayerParameter}
     *
     * <pre>
     * DEPRECATED: use LayerParameter.
     * </pre>
     */
    public static final class V1LayerParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.V1LayerParameter)
            V1LayerParameterOrBuilder {
        // Use V1LayerParameter.newBuilder() to construct.
        private V1LayerParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private V1LayerParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final V1LayerParameter defaultInstance;
        public static V1LayerParameter getDefaultInstance() {
            return defaultInstance;
        }

        public V1LayerParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private V1LayerParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            int mutable_bitField1_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 10: {
                            caffe.Loadcaffe.V0LayerParameter.Builder subBuilder = null;
                            if (((bitField1_ & 0x00000001) == 0x00000001)) {
                                subBuilder = layer_.toBuilder();
                            }
                            layer_ = input.readMessage(caffe.Loadcaffe.V0LayerParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(layer_);
                                layer_ = subBuilder.buildPartial();
                            }
                            bitField1_ |= 0x00000001;
                            break;
                        }
                        case 18: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                                bottom_ = new com.google.protobuf.LazyStringArrayList();
                                mutable_bitField0_ |= 0x00000001;
                            }
                            bottom_.add(bs);
                            break;
                        }
                        case 26: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                                top_ = new com.google.protobuf.LazyStringArrayList();
                                mutable_bitField0_ |= 0x00000002;
                            }
                            top_.add(bs);
                            break;
                        }
                        case 34: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000001;
                            name_ = bs;
                            break;
                        }
                        case 40: {
                            int rawValue = input.readEnum();
                            caffe.Loadcaffe.V1LayerParameter.LayerType value = caffe.Loadcaffe.V1LayerParameter.LayerType.valueOf(rawValue);
                            if (value == null) {
                                unknownFields.mergeVarintField(5, rawValue);
                            } else {
                                bitField0_ |= 0x00000002;
                                type_ = value;
                            }
                            break;
                        }
                        case 50: {
                            if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                                blobs_ = new java.util.ArrayList<caffe.Loadcaffe.BlobProto>();
                                mutable_bitField0_ |= 0x00000040;
                            }
                            blobs_.add(input.readMessage(caffe.Loadcaffe.BlobProto.PARSER, extensionRegistry));
                            break;
                        }
                        case 61: {
                            if (!((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
                                blobsLr_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x00000200;
                            }
                            blobsLr_.add(input.readFloat());
                            break;
                        }
                        case 58: {
                            int length = input.readRawVarint32();
                            int limit = input.pushLimit(length);
                            if (!((mutable_bitField0_ & 0x00000200) == 0x00000200) && input.getBytesUntilLimit() > 0) {
                                blobsLr_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x00000200;
                            }
                            while (input.getBytesUntilLimit() > 0) {
                                blobsLr_.add(input.readFloat());
                            }
                            input.popLimit(limit);
                            break;
                        }
                        case 69: {
                            if (!((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
                                weightDecay_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x00000400;
                            }
                            weightDecay_.add(input.readFloat());
                            break;
                        }
                        case 66: {
                            int length = input.readRawVarint32();
                            int limit = input.pushLimit(length);
                            if (!((mutable_bitField0_ & 0x00000400) == 0x00000400) && input.getBytesUntilLimit() > 0) {
                                weightDecay_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x00000400;
                            }
                            while (input.getBytesUntilLimit() > 0) {
                                weightDecay_.add(input.readFloat());
                            }
                            input.popLimit(limit);
                            break;
                        }
                        case 74: {
                            caffe.Loadcaffe.ConcatParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                                subBuilder = concatParam_.toBuilder();
                            }
                            concatParam_ = input.readMessage(caffe.Loadcaffe.ConcatParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(concatParam_);
                                concatParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000010;
                            break;
                        }
                        case 82: {
                            caffe.Loadcaffe.ConvolutionParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                                subBuilder = convolutionParam_.toBuilder();
                            }
                            convolutionParam_ = input.readMessage(caffe.Loadcaffe.ConvolutionParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(convolutionParam_);
                                convolutionParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000040;
                            break;
                        }
                        case 90: {
                            caffe.Loadcaffe.DataParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000080) == 0x00000080)) {
                                subBuilder = dataParam_.toBuilder();
                            }
                            dataParam_ = input.readMessage(caffe.Loadcaffe.DataParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(dataParam_);
                                dataParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000080;
                            break;
                        }
                        case 98: {
                            caffe.Loadcaffe.DropoutParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000100) == 0x00000100)) {
                                subBuilder = dropoutParam_.toBuilder();
                            }
                            dropoutParam_ = input.readMessage(caffe.Loadcaffe.DropoutParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(dropoutParam_);
                                dropoutParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000100;
                            break;
                        }
                        case 106: {
                            caffe.Loadcaffe.HDF5DataParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00001000) == 0x00001000)) {
                                subBuilder = hdf5DataParam_.toBuilder();
                            }
                            hdf5DataParam_ = input.readMessage(caffe.Loadcaffe.HDF5DataParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(hdf5DataParam_);
                                hdf5DataParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00001000;
                            break;
                        }
                        case 114: {
                            caffe.Loadcaffe.HDF5OutputParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00002000) == 0x00002000)) {
                                subBuilder = hdf5OutputParam_.toBuilder();
                            }
                            hdf5OutputParam_ = input.readMessage(caffe.Loadcaffe.HDF5OutputParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(hdf5OutputParam_);
                                hdf5OutputParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00002000;
                            break;
                        }
                        case 122: {
                            caffe.Loadcaffe.ImageDataParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00008000) == 0x00008000)) {
                                subBuilder = imageDataParam_.toBuilder();
                            }
                            imageDataParam_ = input.readMessage(caffe.Loadcaffe.ImageDataParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(imageDataParam_);
                                imageDataParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00008000;
                            break;
                        }
                        case 130: {
                            caffe.Loadcaffe.InfogainLossParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00010000) == 0x00010000)) {
                                subBuilder = infogainLossParam_.toBuilder();
                            }
                            infogainLossParam_ = input.readMessage(caffe.Loadcaffe.InfogainLossParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(infogainLossParam_);
                                infogainLossParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00010000;
                            break;
                        }
                        case 138: {
                            caffe.Loadcaffe.InnerProductParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00020000) == 0x00020000)) {
                                subBuilder = innerProductParam_.toBuilder();
                            }
                            innerProductParam_ = input.readMessage(caffe.Loadcaffe.InnerProductParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(innerProductParam_);
                                innerProductParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00020000;
                            break;
                        }
                        case 146: {
                            caffe.Loadcaffe.LRNParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00040000) == 0x00040000)) {
                                subBuilder = lrnParam_.toBuilder();
                            }
                            lrnParam_ = input.readMessage(caffe.Loadcaffe.LRNParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(lrnParam_);
                                lrnParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00040000;
                            break;
                        }
                        case 154: {
                            caffe.Loadcaffe.PoolingParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00200000) == 0x00200000)) {
                                subBuilder = poolingParam_.toBuilder();
                            }
                            poolingParam_ = input.readMessage(caffe.Loadcaffe.PoolingParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(poolingParam_);
                                poolingParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00200000;
                            break;
                        }
                        case 162: {
                            caffe.Loadcaffe.WindowDataParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x20000000) == 0x20000000)) {
                                subBuilder = windowDataParam_.toBuilder();
                            }
                            windowDataParam_ = input.readMessage(caffe.Loadcaffe.WindowDataParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(windowDataParam_);
                                windowDataParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x20000000;
                            break;
                        }
                        case 170: {
                            caffe.Loadcaffe.PowerParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00400000) == 0x00400000)) {
                                subBuilder = powerParam_.toBuilder();
                            }
                            powerParam_ = input.readMessage(caffe.Loadcaffe.PowerParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(powerParam_);
                                powerParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00400000;
                            break;
                        }
                        case 178: {
                            caffe.Loadcaffe.MemoryDataParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00080000) == 0x00080000)) {
                                subBuilder = memoryDataParam_.toBuilder();
                            }
                            memoryDataParam_ = input.readMessage(caffe.Loadcaffe.MemoryDataParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(memoryDataParam_);
                                memoryDataParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00080000;
                            break;
                        }
                        case 186: {
                            caffe.Loadcaffe.ArgMaxParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                                subBuilder = argmaxParam_.toBuilder();
                            }
                            argmaxParam_ = input.readMessage(caffe.Loadcaffe.ArgMaxParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(argmaxParam_);
                                argmaxParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000008;
                            break;
                        }
                        case 194: {
                            caffe.Loadcaffe.EltwiseParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000400) == 0x00000400)) {
                                subBuilder = eltwiseParam_.toBuilder();
                            }
                            eltwiseParam_ = input.readMessage(caffe.Loadcaffe.EltwiseParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(eltwiseParam_);
                                eltwiseParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000400;
                            break;
                        }
                        case 202: {
                            caffe.Loadcaffe.ThresholdParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x10000000) == 0x10000000)) {
                                subBuilder = thresholdParam_.toBuilder();
                            }
                            thresholdParam_ = input.readMessage(caffe.Loadcaffe.ThresholdParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(thresholdParam_);
                                thresholdParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x10000000;
                            break;
                        }
                        case 210: {
                            caffe.Loadcaffe.DummyDataParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000200) == 0x00000200)) {
                                subBuilder = dummyDataParam_.toBuilder();
                            }
                            dummyDataParam_ = input.readMessage(caffe.Loadcaffe.DummyDataParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(dummyDataParam_);
                                dummyDataParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000200;
                            break;
                        }
                        case 218: {
                            caffe.Loadcaffe.AccuracyParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                                subBuilder = accuracyParam_.toBuilder();
                            }
                            accuracyParam_ = input.readMessage(caffe.Loadcaffe.AccuracyParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(accuracyParam_);
                                accuracyParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000004;
                            break;
                        }
                        case 234: {
                            caffe.Loadcaffe.HingeLossParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00004000) == 0x00004000)) {
                                subBuilder = hingeLossParam_.toBuilder();
                            }
                            hingeLossParam_ = input.readMessage(caffe.Loadcaffe.HingeLossParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(hingeLossParam_);
                                hingeLossParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00004000;
                            break;
                        }
                        case 242: {
                            caffe.Loadcaffe.ReLUParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00800000) == 0x00800000)) {
                                subBuilder = reluParam_.toBuilder();
                            }
                            reluParam_ = input.readMessage(caffe.Loadcaffe.ReLUParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(reluParam_);
                                reluParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00800000;
                            break;
                        }
                        case 250: {
                            caffe.Loadcaffe.SliceParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x04000000) == 0x04000000)) {
                                subBuilder = sliceParam_.toBuilder();
                            }
                            sliceParam_ = input.readMessage(caffe.Loadcaffe.SliceParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(sliceParam_);
                                sliceParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x04000000;
                            break;
                        }
                        case 258: {
                            if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                                include_ = new java.util.ArrayList<caffe.Loadcaffe.NetStateRule>();
                                mutable_bitField0_ |= 0x00000008;
                            }
                            include_.add(input.readMessage(caffe.Loadcaffe.NetStateRule.PARSER, extensionRegistry));
                            break;
                        }
                        case 266: {
                            if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                                exclude_ = new java.util.ArrayList<caffe.Loadcaffe.NetStateRule>();
                                mutable_bitField0_ |= 0x00000010;
                            }
                            exclude_.add(input.readMessage(caffe.Loadcaffe.NetStateRule.PARSER, extensionRegistry));
                            break;
                        }
                        case 274: {
                            caffe.Loadcaffe.MVNParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00100000) == 0x00100000)) {
                                subBuilder = mvnParam_.toBuilder();
                            }
                            mvnParam_ = input.readMessage(caffe.Loadcaffe.MVNParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(mvnParam_);
                                mvnParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00100000;
                            break;
                        }
                        case 285: {
                            if (!((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
                                lossWeight_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x00000800;
                            }
                            lossWeight_.add(input.readFloat());
                            break;
                        }
                        case 282: {
                            int length = input.readRawVarint32();
                            int limit = input.pushLimit(length);
                            if (!((mutable_bitField0_ & 0x00000800) == 0x00000800) && input.getBytesUntilLimit() > 0) {
                                lossWeight_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x00000800;
                            }
                            while (input.getBytesUntilLimit() > 0) {
                                lossWeight_.add(input.readFloat());
                            }
                            input.popLimit(limit);
                            break;
                        }
                        case 290: {
                            caffe.Loadcaffe.TransformationParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x40000000) == 0x40000000)) {
                                subBuilder = transformParam_.toBuilder();
                            }
                            transformParam_ = input.readMessage(caffe.Loadcaffe.TransformationParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(transformParam_);
                                transformParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x40000000;
                            break;
                        }
                        case 298: {
                            caffe.Loadcaffe.TanHParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x08000000) == 0x08000000)) {
                                subBuilder = tanhParam_.toBuilder();
                            }
                            tanhParam_ = input.readMessage(caffe.Loadcaffe.TanHParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(tanhParam_);
                                tanhParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x08000000;
                            break;
                        }
                        case 306: {
                            caffe.Loadcaffe.SigmoidParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x01000000) == 0x01000000)) {
                                subBuilder = sigmoidParam_.toBuilder();
                            }
                            sigmoidParam_ = input.readMessage(caffe.Loadcaffe.SigmoidParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(sigmoidParam_);
                                sigmoidParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x01000000;
                            break;
                        }
                        case 314: {
                            caffe.Loadcaffe.SoftmaxParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x02000000) == 0x02000000)) {
                                subBuilder = softmaxParam_.toBuilder();
                            }
                            softmaxParam_ = input.readMessage(caffe.Loadcaffe.SoftmaxParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(softmaxParam_);
                                softmaxParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x02000000;
                            break;
                        }
                        case 322: {
                            caffe.Loadcaffe.ContrastiveLossParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                                subBuilder = contrastiveLossParam_.toBuilder();
                            }
                            contrastiveLossParam_ = input.readMessage(caffe.Loadcaffe.ContrastiveLossParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(contrastiveLossParam_);
                                contrastiveLossParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000020;
                            break;
                        }
                        case 330: {
                            caffe.Loadcaffe.ExpParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000800) == 0x00000800)) {
                                subBuilder = expParam_.toBuilder();
                            }
                            expParam_ = input.readMessage(caffe.Loadcaffe.ExpParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(expParam_);
                                expParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000800;
                            break;
                        }
                        case 338: {
                            caffe.Loadcaffe.LossParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x80000000) == 0x80000000)) {
                                subBuilder = lossParam_.toBuilder();
                            }
                            lossParam_ = input.readMessage(caffe.Loadcaffe.LossParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(lossParam_);
                                lossParam_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x80000000;
                            break;
                        }
                        case 8010: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                                param_ = new com.google.protobuf.LazyStringArrayList();
                                mutable_bitField0_ |= 0x00000080;
                            }
                            param_.add(bs);
                            break;
                        }
                        case 8016: {
                            int rawValue = input.readEnum();
                            caffe.Loadcaffe.V1LayerParameter.DimCheckMode value = caffe.Loadcaffe.V1LayerParameter.DimCheckMode.valueOf(rawValue);
                            if (value == null) {
                                unknownFields.mergeVarintField(1002, rawValue);
                            } else {
                                if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                                    blobShareMode_ = new java.util.ArrayList<caffe.Loadcaffe.V1LayerParameter.DimCheckMode>();
                                    mutable_bitField0_ |= 0x00000100;
                                }
                                blobShareMode_.add(value);
                            }
                            break;
                        }
                        case 8018: {
                            int length = input.readRawVarint32();
                            int oldLimit = input.pushLimit(length);
                            while(input.getBytesUntilLimit() > 0) {
                                int rawValue = input.readEnum();
                                caffe.Loadcaffe.V1LayerParameter.DimCheckMode value = caffe.Loadcaffe.V1LayerParameter.DimCheckMode.valueOf(rawValue);
                                if (value == null) {
                                    unknownFields.mergeVarintField(1002, rawValue);
                                } else {
                                    if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                                        blobShareMode_ = new java.util.ArrayList<caffe.Loadcaffe.V1LayerParameter.DimCheckMode>();
                                        mutable_bitField0_ |= 0x00000100;
                                    }
                                    blobShareMode_.add(value);
                                }
                            }
                            input.popLimit(oldLimit);
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                    bottom_ = bottom_.getUnmodifiableView();
                }
                if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                    top_ = top_.getUnmodifiableView();
                }
                if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                    blobs_ = java.util.Collections.unmodifiableList(blobs_);
                }
                if (((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
                    blobsLr_ = java.util.Collections.unmodifiableList(blobsLr_);
                }
                if (((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
                    weightDecay_ = java.util.Collections.unmodifiableList(weightDecay_);
                }
                if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                    include_ = java.util.Collections.unmodifiableList(include_);
                }
                if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                    exclude_ = java.util.Collections.unmodifiableList(exclude_);
                }
                if (((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
                    lossWeight_ = java.util.Collections.unmodifiableList(lossWeight_);
                }
                if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                    param_ = param_.getUnmodifiableView();
                }
                if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                    blobShareMode_ = java.util.Collections.unmodifiableList(blobShareMode_);
                }
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_V1LayerParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_V1LayerParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.V1LayerParameter.class, caffe.Loadcaffe.V1LayerParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<V1LayerParameter> PARSER =
                new com.google.protobuf.AbstractParser<V1LayerParameter>() {
                    public V1LayerParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new V1LayerParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<V1LayerParameter> getParserForType() {
            return PARSER;
        }

        /**
         * Protobuf enum {@code caffe.V1LayerParameter.LayerType}
         */
        public enum LayerType
                implements com.google.protobuf.ProtocolMessageEnum {
            /**
             * <code>NONE = 0;</code>
             */
            NONE(0, 0),
            /**
             * <code>ABSVAL = 35;</code>
             */
            ABSVAL(1, 35),
            /**
             * <code>ACCURACY = 1;</code>
             */
            ACCURACY(2, 1),
            /**
             * <code>ARGMAX = 30;</code>
             */
            ARGMAX(3, 30),
            /**
             * <code>BNLL = 2;</code>
             */
            BNLL(4, 2),
            /**
             * <code>CONCAT = 3;</code>
             */
            CONCAT(5, 3),
            /**
             * <code>CONTRASTIVE_LOSS = 37;</code>
             */
            CONTRASTIVE_LOSS(6, 37),
            /**
             * <code>CONVOLUTION = 4;</code>
             */
            CONVOLUTION(7, 4),
            /**
             * <code>DATA = 5;</code>
             */
            DATA(8, 5),
            /**
             * <code>DECONVOLUTION = 39;</code>
             */
            DECONVOLUTION(9, 39),
            /**
             * <code>DROPOUT = 6;</code>
             */
            DROPOUT(10, 6),
            /**
             * <code>DUMMY_DATA = 32;</code>
             */
            DUMMY_DATA(11, 32),
            /**
             * <code>EUCLIDEAN_LOSS = 7;</code>
             */
            EUCLIDEAN_LOSS(12, 7),
            /**
             * <code>ELTWISE = 25;</code>
             */
            ELTWISE(13, 25),
            /**
             * <code>EXP = 38;</code>
             */
            EXP(14, 38),
            /**
             * <code>FLATTEN = 8;</code>
             */
            FLATTEN(15, 8),
            /**
             * <code>HDF5_DATA = 9;</code>
             */
            HDF5_DATA(16, 9),
            /**
             * <code>HDF5_OUTPUT = 10;</code>
             */
            HDF5_OUTPUT(17, 10),
            /**
             * <code>HINGE_LOSS = 28;</code>
             */
            HINGE_LOSS(18, 28),
            /**
             * <code>IM2COL = 11;</code>
             */
            IM2COL(19, 11),
            /**
             * <code>IMAGE_DATA = 12;</code>
             */
            IMAGE_DATA(20, 12),
            /**
             * <code>INFOGAIN_LOSS = 13;</code>
             */
            INFOGAIN_LOSS(21, 13),
            /**
             * <code>INNER_PRODUCT = 14;</code>
             */
            INNER_PRODUCT(22, 14),
            /**
             * <code>LRN = 15;</code>
             */
            LRN(23, 15),
            /**
             * <code>MEMORY_DATA = 29;</code>
             */
            MEMORY_DATA(24, 29),
            /**
             * <code>MULTINOMIAL_LOGISTIC_LOSS = 16;</code>
             */
            MULTINOMIAL_LOGISTIC_LOSS(25, 16),
            /**
             * <code>MVN = 34;</code>
             */
            MVN(26, 34),
            /**
             * <code>POOLING = 17;</code>
             */
            POOLING(27, 17),
            /**
             * <code>POWER = 26;</code>
             */
            POWER(28, 26),
            /**
             * <code>RELU = 18;</code>
             */
            RELU(29, 18),
            /**
             * <code>SIGMOID = 19;</code>
             */
            SIGMOID(30, 19),
            /**
             * <code>SIGMOID_CROSS_ENTROPY_LOSS = 27;</code>
             */
            SIGMOID_CROSS_ENTROPY_LOSS(31, 27),
            /**
             * <code>SILENCE = 36;</code>
             */
            SILENCE(32, 36),
            /**
             * <code>SOFTMAX = 20;</code>
             */
            SOFTMAX(33, 20),
            /**
             * <code>SOFTMAX_LOSS = 21;</code>
             */
            SOFTMAX_LOSS(34, 21),
            /**
             * <code>SPLIT = 22;</code>
             */
            SPLIT(35, 22),
            /**
             * <code>SLICE = 33;</code>
             */
            SLICE(36, 33),
            /**
             * <code>TANH = 23;</code>
             */
            TANH(37, 23),
            /**
             * <code>WINDOW_DATA = 24;</code>
             */
            WINDOW_DATA(38, 24),
            /**
             * <code>THRESHOLD = 31;</code>
             */
            THRESHOLD(39, 31),
            ;

            /**
             * <code>NONE = 0;</code>
             */
            public static final int NONE_VALUE = 0;
            /**
             * <code>ABSVAL = 35;</code>
             */
            public static final int ABSVAL_VALUE = 35;
            /**
             * <code>ACCURACY = 1;</code>
             */
            public static final int ACCURACY_VALUE = 1;
            /**
             * <code>ARGMAX = 30;</code>
             */
            public static final int ARGMAX_VALUE = 30;
            /**
             * <code>BNLL = 2;</code>
             */
            public static final int BNLL_VALUE = 2;
            /**
             * <code>CONCAT = 3;</code>
             */
            public static final int CONCAT_VALUE = 3;
            /**
             * <code>CONTRASTIVE_LOSS = 37;</code>
             */
            public static final int CONTRASTIVE_LOSS_VALUE = 37;
            /**
             * <code>CONVOLUTION = 4;</code>
             */
            public static final int CONVOLUTION_VALUE = 4;
            /**
             * <code>DATA = 5;</code>
             */
            public static final int DATA_VALUE = 5;
            /**
             * <code>DECONVOLUTION = 39;</code>
             */
            public static final int DECONVOLUTION_VALUE = 39;
            /**
             * <code>DROPOUT = 6;</code>
             */
            public static final int DROPOUT_VALUE = 6;
            /**
             * <code>DUMMY_DATA = 32;</code>
             */
            public static final int DUMMY_DATA_VALUE = 32;
            /**
             * <code>EUCLIDEAN_LOSS = 7;</code>
             */
            public static final int EUCLIDEAN_LOSS_VALUE = 7;
            /**
             * <code>ELTWISE = 25;</code>
             */
            public static final int ELTWISE_VALUE = 25;
            /**
             * <code>EXP = 38;</code>
             */
            public static final int EXP_VALUE = 38;
            /**
             * <code>FLATTEN = 8;</code>
             */
            public static final int FLATTEN_VALUE = 8;
            /**
             * <code>HDF5_DATA = 9;</code>
             */
            public static final int HDF5_DATA_VALUE = 9;
            /**
             * <code>HDF5_OUTPUT = 10;</code>
             */
            public static final int HDF5_OUTPUT_VALUE = 10;
            /**
             * <code>HINGE_LOSS = 28;</code>
             */
            public static final int HINGE_LOSS_VALUE = 28;
            /**
             * <code>IM2COL = 11;</code>
             */
            public static final int IM2COL_VALUE = 11;
            /**
             * <code>IMAGE_DATA = 12;</code>
             */
            public static final int IMAGE_DATA_VALUE = 12;
            /**
             * <code>INFOGAIN_LOSS = 13;</code>
             */
            public static final int INFOGAIN_LOSS_VALUE = 13;
            /**
             * <code>INNER_PRODUCT = 14;</code>
             */
            public static final int INNER_PRODUCT_VALUE = 14;
            /**
             * <code>LRN = 15;</code>
             */
            public static final int LRN_VALUE = 15;
            /**
             * <code>MEMORY_DATA = 29;</code>
             */
            public static final int MEMORY_DATA_VALUE = 29;
            /**
             * <code>MULTINOMIAL_LOGISTIC_LOSS = 16;</code>
             */
            public static final int MULTINOMIAL_LOGISTIC_LOSS_VALUE = 16;
            /**
             * <code>MVN = 34;</code>
             */
            public static final int MVN_VALUE = 34;
            /**
             * <code>POOLING = 17;</code>
             */
            public static final int POOLING_VALUE = 17;
            /**
             * <code>POWER = 26;</code>
             */
            public static final int POWER_VALUE = 26;
            /**
             * <code>RELU = 18;</code>
             */
            public static final int RELU_VALUE = 18;
            /**
             * <code>SIGMOID = 19;</code>
             */
            public static final int SIGMOID_VALUE = 19;
            /**
             * <code>SIGMOID_CROSS_ENTROPY_LOSS = 27;</code>
             */
            public static final int SIGMOID_CROSS_ENTROPY_LOSS_VALUE = 27;
            /**
             * <code>SILENCE = 36;</code>
             */
            public static final int SILENCE_VALUE = 36;
            /**
             * <code>SOFTMAX = 20;</code>
             */
            public static final int SOFTMAX_VALUE = 20;
            /**
             * <code>SOFTMAX_LOSS = 21;</code>
             */
            public static final int SOFTMAX_LOSS_VALUE = 21;
            /**
             * <code>SPLIT = 22;</code>
             */
            public static final int SPLIT_VALUE = 22;
            /**
             * <code>SLICE = 33;</code>
             */
            public static final int SLICE_VALUE = 33;
            /**
             * <code>TANH = 23;</code>
             */
            public static final int TANH_VALUE = 23;
            /**
             * <code>WINDOW_DATA = 24;</code>
             */
            public static final int WINDOW_DATA_VALUE = 24;
            /**
             * <code>THRESHOLD = 31;</code>
             */
            public static final int THRESHOLD_VALUE = 31;


            public final int getNumber() { return value; }

            public static LayerType valueOf(int value) {
                switch (value) {
                    case 0: return NONE;
                    case 35: return ABSVAL;
                    case 1: return ACCURACY;
                    case 30: return ARGMAX;
                    case 2: return BNLL;
                    case 3: return CONCAT;
                    case 37: return CONTRASTIVE_LOSS;
                    case 4: return CONVOLUTION;
                    case 5: return DATA;
                    case 39: return DECONVOLUTION;
                    case 6: return DROPOUT;
                    case 32: return DUMMY_DATA;
                    case 7: return EUCLIDEAN_LOSS;
                    case 25: return ELTWISE;
                    case 38: return EXP;
                    case 8: return FLATTEN;
                    case 9: return HDF5_DATA;
                    case 10: return HDF5_OUTPUT;
                    case 28: return HINGE_LOSS;
                    case 11: return IM2COL;
                    case 12: return IMAGE_DATA;
                    case 13: return INFOGAIN_LOSS;
                    case 14: return INNER_PRODUCT;
                    case 15: return LRN;
                    case 29: return MEMORY_DATA;
                    case 16: return MULTINOMIAL_LOGISTIC_LOSS;
                    case 34: return MVN;
                    case 17: return POOLING;
                    case 26: return POWER;
                    case 18: return RELU;
                    case 19: return SIGMOID;
                    case 27: return SIGMOID_CROSS_ENTROPY_LOSS;
                    case 36: return SILENCE;
                    case 20: return SOFTMAX;
                    case 21: return SOFTMAX_LOSS;
                    case 22: return SPLIT;
                    case 33: return SLICE;
                    case 23: return TANH;
                    case 24: return WINDOW_DATA;
                    case 31: return THRESHOLD;
                    default: return null;
                }
            }

            public static com.google.protobuf.Internal.EnumLiteMap<LayerType>
            internalGetValueMap() {
                return internalValueMap;
            }
            private static com.google.protobuf.Internal.EnumLiteMap<LayerType>
                    internalValueMap =
                    new com.google.protobuf.Internal.EnumLiteMap<LayerType>() {
                        public LayerType findValueByNumber(int number) {
                            return LayerType.valueOf(number);
                        }
                    };

            public final com.google.protobuf.Descriptors.EnumValueDescriptor
            getValueDescriptor() {
                return getDescriptor().getValues().get(index);
            }
            public final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptorForType() {
                return getDescriptor();
            }
            public static final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptor() {
                return caffe.Loadcaffe.V1LayerParameter.getDescriptor().getEnumTypes().get(0);
            }

            private static final LayerType[] VALUES = values();

            public static LayerType valueOf(
                    com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new java.lang.IllegalArgumentException(
                            "EnumValueDescriptor is not for this type.");
                }
                return VALUES[desc.getIndex()];
            }

            private final int index;
            private final int value;

            private LayerType(int index, int value) {
                this.index = index;
                this.value = value;
            }

            // @@protoc_insertion_point(enum_scope:caffe.V1LayerParameter.LayerType)
        }

        /**
         * Protobuf enum {@code caffe.V1LayerParameter.DimCheckMode}
         */
        public enum DimCheckMode
                implements com.google.protobuf.ProtocolMessageEnum {
            /**
             * <code>STRICT = 0;</code>
             */
            STRICT(0, 0),
            /**
             * <code>PERMISSIVE = 1;</code>
             */
            PERMISSIVE(1, 1),
            ;

            /**
             * <code>STRICT = 0;</code>
             */
            public static final int STRICT_VALUE = 0;
            /**
             * <code>PERMISSIVE = 1;</code>
             */
            public static final int PERMISSIVE_VALUE = 1;


            public final int getNumber() { return value; }

            public static DimCheckMode valueOf(int value) {
                switch (value) {
                    case 0: return STRICT;
                    case 1: return PERMISSIVE;
                    default: return null;
                }
            }

            public static com.google.protobuf.Internal.EnumLiteMap<DimCheckMode>
            internalGetValueMap() {
                return internalValueMap;
            }
            private static com.google.protobuf.Internal.EnumLiteMap<DimCheckMode>
                    internalValueMap =
                    new com.google.protobuf.Internal.EnumLiteMap<DimCheckMode>() {
                        public DimCheckMode findValueByNumber(int number) {
                            return DimCheckMode.valueOf(number);
                        }
                    };

            public final com.google.protobuf.Descriptors.EnumValueDescriptor
            getValueDescriptor() {
                return getDescriptor().getValues().get(index);
            }
            public final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptorForType() {
                return getDescriptor();
            }
            public static final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptor() {
                return caffe.Loadcaffe.V1LayerParameter.getDescriptor().getEnumTypes().get(1);
            }

            private static final DimCheckMode[] VALUES = values();

            public static DimCheckMode valueOf(
                    com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new java.lang.IllegalArgumentException(
                            "EnumValueDescriptor is not for this type.");
                }
                return VALUES[desc.getIndex()];
            }

            private final int index;
            private final int value;

            private DimCheckMode(int index, int value) {
                this.index = index;
                this.value = value;
            }

            // @@protoc_insertion_point(enum_scope:caffe.V1LayerParameter.DimCheckMode)
        }

        private int bitField0_;
        private int bitField1_;
        public static final int BOTTOM_FIELD_NUMBER = 2;
        private com.google.protobuf.LazyStringList bottom_;
        /**
         * <code>repeated string bottom = 2;</code>
         */
        public com.google.protobuf.ProtocolStringList
        getBottomList() {
            return bottom_;
        }
        /**
         * <code>repeated string bottom = 2;</code>
         */
        public int getBottomCount() {
            return bottom_.size();
        }
        /**
         * <code>repeated string bottom = 2;</code>
         */
        public java.lang.String getBottom(int index) {
            return bottom_.get(index);
        }
        /**
         * <code>repeated string bottom = 2;</code>
         */
        public com.google.protobuf.ByteString
        getBottomBytes(int index) {
            return bottom_.getByteString(index);
        }

        public static final int TOP_FIELD_NUMBER = 3;
        private com.google.protobuf.LazyStringList top_;
        /**
         * <code>repeated string top = 3;</code>
         */
        public com.google.protobuf.ProtocolStringList
        getTopList() {
            return top_;
        }
        /**
         * <code>repeated string top = 3;</code>
         */
        public int getTopCount() {
            return top_.size();
        }
        /**
         * <code>repeated string top = 3;</code>
         */
        public java.lang.String getTop(int index) {
            return top_.get(index);
        }
        /**
         * <code>repeated string top = 3;</code>
         */
        public com.google.protobuf.ByteString
        getTopBytes(int index) {
            return top_.getByteString(index);
        }

        public static final int NAME_FIELD_NUMBER = 4;
        private java.lang.Object name_;
        /**
         * <code>optional string name = 4;</code>
         */
        public boolean hasName() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string name = 4;</code>
         */
        public java.lang.String getName() {
            java.lang.Object ref = name_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    name_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string name = 4;</code>
         */
        public com.google.protobuf.ByteString
        getNameBytes() {
            java.lang.Object ref = name_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                name_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int INCLUDE_FIELD_NUMBER = 32;
        private java.util.List<caffe.Loadcaffe.NetStateRule> include_;
        /**
         * <code>repeated .caffe.NetStateRule include = 32;</code>
         */
        public java.util.List<caffe.Loadcaffe.NetStateRule> getIncludeList() {
            return include_;
        }
        /**
         * <code>repeated .caffe.NetStateRule include = 32;</code>
         */
        public java.util.List<? extends caffe.Loadcaffe.NetStateRuleOrBuilder>
        getIncludeOrBuilderList() {
            return include_;
        }
        /**
         * <code>repeated .caffe.NetStateRule include = 32;</code>
         */
        public int getIncludeCount() {
            return include_.size();
        }
        /**
         * <code>repeated .caffe.NetStateRule include = 32;</code>
         */
        public caffe.Loadcaffe.NetStateRule getInclude(int index) {
            return include_.get(index);
        }
        /**
         * <code>repeated .caffe.NetStateRule include = 32;</code>
         */
        public caffe.Loadcaffe.NetStateRuleOrBuilder getIncludeOrBuilder(
                int index) {
            return include_.get(index);
        }

        public static final int EXCLUDE_FIELD_NUMBER = 33;
        private java.util.List<caffe.Loadcaffe.NetStateRule> exclude_;
        /**
         * <code>repeated .caffe.NetStateRule exclude = 33;</code>
         */
        public java.util.List<caffe.Loadcaffe.NetStateRule> getExcludeList() {
            return exclude_;
        }
        /**
         * <code>repeated .caffe.NetStateRule exclude = 33;</code>
         */
        public java.util.List<? extends caffe.Loadcaffe.NetStateRuleOrBuilder>
        getExcludeOrBuilderList() {
            return exclude_;
        }
        /**
         * <code>repeated .caffe.NetStateRule exclude = 33;</code>
         */
        public int getExcludeCount() {
            return exclude_.size();
        }
        /**
         * <code>repeated .caffe.NetStateRule exclude = 33;</code>
         */
        public caffe.Loadcaffe.NetStateRule getExclude(int index) {
            return exclude_.get(index);
        }
        /**
         * <code>repeated .caffe.NetStateRule exclude = 33;</code>
         */
        public caffe.Loadcaffe.NetStateRuleOrBuilder getExcludeOrBuilder(
                int index) {
            return exclude_.get(index);
        }

        public static final int TYPE_FIELD_NUMBER = 5;
        private caffe.Loadcaffe.V1LayerParameter.LayerType type_;
        /**
         * <code>optional .caffe.V1LayerParameter.LayerType type = 5;</code>
         */
        public boolean hasType() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional .caffe.V1LayerParameter.LayerType type = 5;</code>
         */
        public caffe.Loadcaffe.V1LayerParameter.LayerType getType() {
            return type_;
        }

        public static final int BLOBS_FIELD_NUMBER = 6;
        private java.util.List<caffe.Loadcaffe.BlobProto> blobs_;
        /**
         * <code>repeated .caffe.BlobProto blobs = 6;</code>
         */
        public java.util.List<caffe.Loadcaffe.BlobProto> getBlobsList() {
            return blobs_;
        }
        /**
         * <code>repeated .caffe.BlobProto blobs = 6;</code>
         */
        public java.util.List<? extends caffe.Loadcaffe.BlobProtoOrBuilder>
        getBlobsOrBuilderList() {
            return blobs_;
        }
        /**
         * <code>repeated .caffe.BlobProto blobs = 6;</code>
         */
        public int getBlobsCount() {
            return blobs_.size();
        }
        /**
         * <code>repeated .caffe.BlobProto blobs = 6;</code>
         */
        public caffe.Loadcaffe.BlobProto getBlobs(int index) {
            return blobs_.get(index);
        }
        /**
         * <code>repeated .caffe.BlobProto blobs = 6;</code>
         */
        public caffe.Loadcaffe.BlobProtoOrBuilder getBlobsOrBuilder(
                int index) {
            return blobs_.get(index);
        }

        public static final int PARAM_FIELD_NUMBER = 1001;
        private com.google.protobuf.LazyStringList param_;
        /**
         * <code>repeated string param = 1001;</code>
         */
        public com.google.protobuf.ProtocolStringList
        getParamList() {
            return param_;
        }
        /**
         * <code>repeated string param = 1001;</code>
         */
        public int getParamCount() {
            return param_.size();
        }
        /**
         * <code>repeated string param = 1001;</code>
         */
        public java.lang.String getParam(int index) {
            return param_.get(index);
        }
        /**
         * <code>repeated string param = 1001;</code>
         */
        public com.google.protobuf.ByteString
        getParamBytes(int index) {
            return param_.getByteString(index);
        }

        public static final int BLOB_SHARE_MODE_FIELD_NUMBER = 1002;
        private java.util.List<caffe.Loadcaffe.V1LayerParameter.DimCheckMode> blobShareMode_;
        /**
         * <code>repeated .caffe.V1LayerParameter.DimCheckMode blob_share_mode = 1002;</code>
         */
        public java.util.List<caffe.Loadcaffe.V1LayerParameter.DimCheckMode> getBlobShareModeList() {
            return blobShareMode_;
        }
        /**
         * <code>repeated .caffe.V1LayerParameter.DimCheckMode blob_share_mode = 1002;</code>
         */
        public int getBlobShareModeCount() {
            return blobShareMode_.size();
        }
        /**
         * <code>repeated .caffe.V1LayerParameter.DimCheckMode blob_share_mode = 1002;</code>
         */
        public caffe.Loadcaffe.V1LayerParameter.DimCheckMode getBlobShareMode(int index) {
            return blobShareMode_.get(index);
        }

        public static final int BLOBS_LR_FIELD_NUMBER = 7;
        private java.util.List<java.lang.Float> blobsLr_;
        /**
         * <code>repeated float blobs_lr = 7;</code>
         */
        public java.util.List<java.lang.Float>
        getBlobsLrList() {
            return blobsLr_;
        }
        /**
         * <code>repeated float blobs_lr = 7;</code>
         */
        public int getBlobsLrCount() {
            return blobsLr_.size();
        }
        /**
         * <code>repeated float blobs_lr = 7;</code>
         */
        public float getBlobsLr(int index) {
            return blobsLr_.get(index);
        }

        public static final int WEIGHT_DECAY_FIELD_NUMBER = 8;
        private java.util.List<java.lang.Float> weightDecay_;
        /**
         * <code>repeated float weight_decay = 8;</code>
         */
        public java.util.List<java.lang.Float>
        getWeightDecayList() {
            return weightDecay_;
        }
        /**
         * <code>repeated float weight_decay = 8;</code>
         */
        public int getWeightDecayCount() {
            return weightDecay_.size();
        }
        /**
         * <code>repeated float weight_decay = 8;</code>
         */
        public float getWeightDecay(int index) {
            return weightDecay_.get(index);
        }

        public static final int LOSS_WEIGHT_FIELD_NUMBER = 35;
        private java.util.List<java.lang.Float> lossWeight_;
        /**
         * <code>repeated float loss_weight = 35;</code>
         */
        public java.util.List<java.lang.Float>
        getLossWeightList() {
            return lossWeight_;
        }
        /**
         * <code>repeated float loss_weight = 35;</code>
         */
        public int getLossWeightCount() {
            return lossWeight_.size();
        }
        /**
         * <code>repeated float loss_weight = 35;</code>
         */
        public float getLossWeight(int index) {
            return lossWeight_.get(index);
        }

        public static final int ACCURACY_PARAM_FIELD_NUMBER = 27;
        private caffe.Loadcaffe.AccuracyParameter accuracyParam_;
        /**
         * <code>optional .caffe.AccuracyParameter accuracy_param = 27;</code>
         */
        public boolean hasAccuracyParam() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional .caffe.AccuracyParameter accuracy_param = 27;</code>
         */
        public caffe.Loadcaffe.AccuracyParameter getAccuracyParam() {
            return accuracyParam_;
        }
        /**
         * <code>optional .caffe.AccuracyParameter accuracy_param = 27;</code>
         */
        public caffe.Loadcaffe.AccuracyParameterOrBuilder getAccuracyParamOrBuilder() {
            return accuracyParam_;
        }

        public static final int ARGMAX_PARAM_FIELD_NUMBER = 23;
        private caffe.Loadcaffe.ArgMaxParameter argmaxParam_;
        /**
         * <code>optional .caffe.ArgMaxParameter argmax_param = 23;</code>
         */
        public boolean hasArgmaxParam() {
            return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional .caffe.ArgMaxParameter argmax_param = 23;</code>
         */
        public caffe.Loadcaffe.ArgMaxParameter getArgmaxParam() {
            return argmaxParam_;
        }
        /**
         * <code>optional .caffe.ArgMaxParameter argmax_param = 23;</code>
         */
        public caffe.Loadcaffe.ArgMaxParameterOrBuilder getArgmaxParamOrBuilder() {
            return argmaxParam_;
        }

        public static final int CONCAT_PARAM_FIELD_NUMBER = 9;
        private caffe.Loadcaffe.ConcatParameter concatParam_;
        /**
         * <code>optional .caffe.ConcatParameter concat_param = 9;</code>
         */
        public boolean hasConcatParam() {
            return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>optional .caffe.ConcatParameter concat_param = 9;</code>
         */
        public caffe.Loadcaffe.ConcatParameter getConcatParam() {
            return concatParam_;
        }
        /**
         * <code>optional .caffe.ConcatParameter concat_param = 9;</code>
         */
        public caffe.Loadcaffe.ConcatParameterOrBuilder getConcatParamOrBuilder() {
            return concatParam_;
        }

        public static final int CONTRASTIVE_LOSS_PARAM_FIELD_NUMBER = 40;
        private caffe.Loadcaffe.ContrastiveLossParameter contrastiveLossParam_;
        /**
         * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 40;</code>
         */
        public boolean hasContrastiveLossParam() {
            return ((bitField0_ & 0x00000020) == 0x00000020);
        }
        /**
         * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 40;</code>
         */
        public caffe.Loadcaffe.ContrastiveLossParameter getContrastiveLossParam() {
            return contrastiveLossParam_;
        }
        /**
         * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 40;</code>
         */
        public caffe.Loadcaffe.ContrastiveLossParameterOrBuilder getContrastiveLossParamOrBuilder() {
            return contrastiveLossParam_;
        }

        public static final int CONVOLUTION_PARAM_FIELD_NUMBER = 10;
        private caffe.Loadcaffe.ConvolutionParameter convolutionParam_;
        /**
         * <code>optional .caffe.ConvolutionParameter convolution_param = 10;</code>
         */
        public boolean hasConvolutionParam() {
            return ((bitField0_ & 0x00000040) == 0x00000040);
        }
        /**
         * <code>optional .caffe.ConvolutionParameter convolution_param = 10;</code>
         */
        public caffe.Loadcaffe.ConvolutionParameter getConvolutionParam() {
            return convolutionParam_;
        }
        /**
         * <code>optional .caffe.ConvolutionParameter convolution_param = 10;</code>
         */
        public caffe.Loadcaffe.ConvolutionParameterOrBuilder getConvolutionParamOrBuilder() {
            return convolutionParam_;
        }

        public static final int DATA_PARAM_FIELD_NUMBER = 11;
        private caffe.Loadcaffe.DataParameter dataParam_;
        /**
         * <code>optional .caffe.DataParameter data_param = 11;</code>
         */
        public boolean hasDataParam() {
            return ((bitField0_ & 0x00000080) == 0x00000080);
        }
        /**
         * <code>optional .caffe.DataParameter data_param = 11;</code>
         */
        public caffe.Loadcaffe.DataParameter getDataParam() {
            return dataParam_;
        }
        /**
         * <code>optional .caffe.DataParameter data_param = 11;</code>
         */
        public caffe.Loadcaffe.DataParameterOrBuilder getDataParamOrBuilder() {
            return dataParam_;
        }

        public static final int DROPOUT_PARAM_FIELD_NUMBER = 12;
        private caffe.Loadcaffe.DropoutParameter dropoutParam_;
        /**
         * <code>optional .caffe.DropoutParameter dropout_param = 12;</code>
         */
        public boolean hasDropoutParam() {
            return ((bitField0_ & 0x00000100) == 0x00000100);
        }
        /**
         * <code>optional .caffe.DropoutParameter dropout_param = 12;</code>
         */
        public caffe.Loadcaffe.DropoutParameter getDropoutParam() {
            return dropoutParam_;
        }
        /**
         * <code>optional .caffe.DropoutParameter dropout_param = 12;</code>
         */
        public caffe.Loadcaffe.DropoutParameterOrBuilder getDropoutParamOrBuilder() {
            return dropoutParam_;
        }

        public static final int DUMMY_DATA_PARAM_FIELD_NUMBER = 26;
        private caffe.Loadcaffe.DummyDataParameter dummyDataParam_;
        /**
         * <code>optional .caffe.DummyDataParameter dummy_data_param = 26;</code>
         */
        public boolean hasDummyDataParam() {
            return ((bitField0_ & 0x00000200) == 0x00000200);
        }
        /**
         * <code>optional .caffe.DummyDataParameter dummy_data_param = 26;</code>
         */
        public caffe.Loadcaffe.DummyDataParameter getDummyDataParam() {
            return dummyDataParam_;
        }
        /**
         * <code>optional .caffe.DummyDataParameter dummy_data_param = 26;</code>
         */
        public caffe.Loadcaffe.DummyDataParameterOrBuilder getDummyDataParamOrBuilder() {
            return dummyDataParam_;
        }

        public static final int ELTWISE_PARAM_FIELD_NUMBER = 24;
        private caffe.Loadcaffe.EltwiseParameter eltwiseParam_;
        /**
         * <code>optional .caffe.EltwiseParameter eltwise_param = 24;</code>
         */
        public boolean hasEltwiseParam() {
            return ((bitField0_ & 0x00000400) == 0x00000400);
        }
        /**
         * <code>optional .caffe.EltwiseParameter eltwise_param = 24;</code>
         */
        public caffe.Loadcaffe.EltwiseParameter getEltwiseParam() {
            return eltwiseParam_;
        }
        /**
         * <code>optional .caffe.EltwiseParameter eltwise_param = 24;</code>
         */
        public caffe.Loadcaffe.EltwiseParameterOrBuilder getEltwiseParamOrBuilder() {
            return eltwiseParam_;
        }

        public static final int EXP_PARAM_FIELD_NUMBER = 41;
        private caffe.Loadcaffe.ExpParameter expParam_;
        /**
         * <code>optional .caffe.ExpParameter exp_param = 41;</code>
         */
        public boolean hasExpParam() {
            return ((bitField0_ & 0x00000800) == 0x00000800);
        }
        /**
         * <code>optional .caffe.ExpParameter exp_param = 41;</code>
         */
        public caffe.Loadcaffe.ExpParameter getExpParam() {
            return expParam_;
        }
        /**
         * <code>optional .caffe.ExpParameter exp_param = 41;</code>
         */
        public caffe.Loadcaffe.ExpParameterOrBuilder getExpParamOrBuilder() {
            return expParam_;
        }

        public static final int HDF5_DATA_PARAM_FIELD_NUMBER = 13;
        private caffe.Loadcaffe.HDF5DataParameter hdf5DataParam_;
        /**
         * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 13;</code>
         */
        public boolean hasHdf5DataParam() {
            return ((bitField0_ & 0x00001000) == 0x00001000);
        }
        /**
         * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 13;</code>
         */
        public caffe.Loadcaffe.HDF5DataParameter getHdf5DataParam() {
            return hdf5DataParam_;
        }
        /**
         * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 13;</code>
         */
        public caffe.Loadcaffe.HDF5DataParameterOrBuilder getHdf5DataParamOrBuilder() {
            return hdf5DataParam_;
        }

        public static final int HDF5_OUTPUT_PARAM_FIELD_NUMBER = 14;
        private caffe.Loadcaffe.HDF5OutputParameter hdf5OutputParam_;
        /**
         * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 14;</code>
         */
        public boolean hasHdf5OutputParam() {
            return ((bitField0_ & 0x00002000) == 0x00002000);
        }
        /**
         * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 14;</code>
         */
        public caffe.Loadcaffe.HDF5OutputParameter getHdf5OutputParam() {
            return hdf5OutputParam_;
        }
        /**
         * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 14;</code>
         */
        public caffe.Loadcaffe.HDF5OutputParameterOrBuilder getHdf5OutputParamOrBuilder() {
            return hdf5OutputParam_;
        }

        public static final int HINGE_LOSS_PARAM_FIELD_NUMBER = 29;
        private caffe.Loadcaffe.HingeLossParameter hingeLossParam_;
        /**
         * <code>optional .caffe.HingeLossParameter hinge_loss_param = 29;</code>
         */
        public boolean hasHingeLossParam() {
            return ((bitField0_ & 0x00004000) == 0x00004000);
        }
        /**
         * <code>optional .caffe.HingeLossParameter hinge_loss_param = 29;</code>
         */
        public caffe.Loadcaffe.HingeLossParameter getHingeLossParam() {
            return hingeLossParam_;
        }
        /**
         * <code>optional .caffe.HingeLossParameter hinge_loss_param = 29;</code>
         */
        public caffe.Loadcaffe.HingeLossParameterOrBuilder getHingeLossParamOrBuilder() {
            return hingeLossParam_;
        }

        public static final int IMAGE_DATA_PARAM_FIELD_NUMBER = 15;
        private caffe.Loadcaffe.ImageDataParameter imageDataParam_;
        /**
         * <code>optional .caffe.ImageDataParameter image_data_param = 15;</code>
         */
        public boolean hasImageDataParam() {
            return ((bitField0_ & 0x00008000) == 0x00008000);
        }
        /**
         * <code>optional .caffe.ImageDataParameter image_data_param = 15;</code>
         */
        public caffe.Loadcaffe.ImageDataParameter getImageDataParam() {
            return imageDataParam_;
        }
        /**
         * <code>optional .caffe.ImageDataParameter image_data_param = 15;</code>
         */
        public caffe.Loadcaffe.ImageDataParameterOrBuilder getImageDataParamOrBuilder() {
            return imageDataParam_;
        }

        public static final int INFOGAIN_LOSS_PARAM_FIELD_NUMBER = 16;
        private caffe.Loadcaffe.InfogainLossParameter infogainLossParam_;
        /**
         * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 16;</code>
         */
        public boolean hasInfogainLossParam() {
            return ((bitField0_ & 0x00010000) == 0x00010000);
        }
        /**
         * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 16;</code>
         */
        public caffe.Loadcaffe.InfogainLossParameter getInfogainLossParam() {
            return infogainLossParam_;
        }
        /**
         * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 16;</code>
         */
        public caffe.Loadcaffe.InfogainLossParameterOrBuilder getInfogainLossParamOrBuilder() {
            return infogainLossParam_;
        }

        public static final int INNER_PRODUCT_PARAM_FIELD_NUMBER = 17;
        private caffe.Loadcaffe.InnerProductParameter innerProductParam_;
        /**
         * <code>optional .caffe.InnerProductParameter inner_product_param = 17;</code>
         */
        public boolean hasInnerProductParam() {
            return ((bitField0_ & 0x00020000) == 0x00020000);
        }
        /**
         * <code>optional .caffe.InnerProductParameter inner_product_param = 17;</code>
         */
        public caffe.Loadcaffe.InnerProductParameter getInnerProductParam() {
            return innerProductParam_;
        }
        /**
         * <code>optional .caffe.InnerProductParameter inner_product_param = 17;</code>
         */
        public caffe.Loadcaffe.InnerProductParameterOrBuilder getInnerProductParamOrBuilder() {
            return innerProductParam_;
        }

        public static final int LRN_PARAM_FIELD_NUMBER = 18;
        private caffe.Loadcaffe.LRNParameter lrnParam_;
        /**
         * <code>optional .caffe.LRNParameter lrn_param = 18;</code>
         */
        public boolean hasLrnParam() {
            return ((bitField0_ & 0x00040000) == 0x00040000);
        }
        /**
         * <code>optional .caffe.LRNParameter lrn_param = 18;</code>
         */
        public caffe.Loadcaffe.LRNParameter getLrnParam() {
            return lrnParam_;
        }
        /**
         * <code>optional .caffe.LRNParameter lrn_param = 18;</code>
         */
        public caffe.Loadcaffe.LRNParameterOrBuilder getLrnParamOrBuilder() {
            return lrnParam_;
        }

        public static final int MEMORY_DATA_PARAM_FIELD_NUMBER = 22;
        private caffe.Loadcaffe.MemoryDataParameter memoryDataParam_;
        /**
         * <code>optional .caffe.MemoryDataParameter memory_data_param = 22;</code>
         */
        public boolean hasMemoryDataParam() {
            return ((bitField0_ & 0x00080000) == 0x00080000);
        }
        /**
         * <code>optional .caffe.MemoryDataParameter memory_data_param = 22;</code>
         */
        public caffe.Loadcaffe.MemoryDataParameter getMemoryDataParam() {
            return memoryDataParam_;
        }
        /**
         * <code>optional .caffe.MemoryDataParameter memory_data_param = 22;</code>
         */
        public caffe.Loadcaffe.MemoryDataParameterOrBuilder getMemoryDataParamOrBuilder() {
            return memoryDataParam_;
        }

        public static final int MVN_PARAM_FIELD_NUMBER = 34;
        private caffe.Loadcaffe.MVNParameter mvnParam_;
        /**
         * <code>optional .caffe.MVNParameter mvn_param = 34;</code>
         */
        public boolean hasMvnParam() {
            return ((bitField0_ & 0x00100000) == 0x00100000);
        }
        /**
         * <code>optional .caffe.MVNParameter mvn_param = 34;</code>
         */
        public caffe.Loadcaffe.MVNParameter getMvnParam() {
            return mvnParam_;
        }
        /**
         * <code>optional .caffe.MVNParameter mvn_param = 34;</code>
         */
        public caffe.Loadcaffe.MVNParameterOrBuilder getMvnParamOrBuilder() {
            return mvnParam_;
        }

        public static final int POOLING_PARAM_FIELD_NUMBER = 19;
        private caffe.Loadcaffe.PoolingParameter poolingParam_;
        /**
         * <code>optional .caffe.PoolingParameter pooling_param = 19;</code>
         */
        public boolean hasPoolingParam() {
            return ((bitField0_ & 0x00200000) == 0x00200000);
        }
        /**
         * <code>optional .caffe.PoolingParameter pooling_param = 19;</code>
         */
        public caffe.Loadcaffe.PoolingParameter getPoolingParam() {
            return poolingParam_;
        }
        /**
         * <code>optional .caffe.PoolingParameter pooling_param = 19;</code>
         */
        public caffe.Loadcaffe.PoolingParameterOrBuilder getPoolingParamOrBuilder() {
            return poolingParam_;
        }

        public static final int POWER_PARAM_FIELD_NUMBER = 21;
        private caffe.Loadcaffe.PowerParameter powerParam_;
        /**
         * <code>optional .caffe.PowerParameter power_param = 21;</code>
         */
        public boolean hasPowerParam() {
            return ((bitField0_ & 0x00400000) == 0x00400000);
        }
        /**
         * <code>optional .caffe.PowerParameter power_param = 21;</code>
         */
        public caffe.Loadcaffe.PowerParameter getPowerParam() {
            return powerParam_;
        }
        /**
         * <code>optional .caffe.PowerParameter power_param = 21;</code>
         */
        public caffe.Loadcaffe.PowerParameterOrBuilder getPowerParamOrBuilder() {
            return powerParam_;
        }

        public static final int RELU_PARAM_FIELD_NUMBER = 30;
        private caffe.Loadcaffe.ReLUParameter reluParam_;
        /**
         * <code>optional .caffe.ReLUParameter relu_param = 30;</code>
         */
        public boolean hasReluParam() {
            return ((bitField0_ & 0x00800000) == 0x00800000);
        }
        /**
         * <code>optional .caffe.ReLUParameter relu_param = 30;</code>
         */
        public caffe.Loadcaffe.ReLUParameter getReluParam() {
            return reluParam_;
        }
        /**
         * <code>optional .caffe.ReLUParameter relu_param = 30;</code>
         */
        public caffe.Loadcaffe.ReLUParameterOrBuilder getReluParamOrBuilder() {
            return reluParam_;
        }

        public static final int SIGMOID_PARAM_FIELD_NUMBER = 38;
        private caffe.Loadcaffe.SigmoidParameter sigmoidParam_;
        /**
         * <code>optional .caffe.SigmoidParameter sigmoid_param = 38;</code>
         */
        public boolean hasSigmoidParam() {
            return ((bitField0_ & 0x01000000) == 0x01000000);
        }
        /**
         * <code>optional .caffe.SigmoidParameter sigmoid_param = 38;</code>
         */
        public caffe.Loadcaffe.SigmoidParameter getSigmoidParam() {
            return sigmoidParam_;
        }
        /**
         * <code>optional .caffe.SigmoidParameter sigmoid_param = 38;</code>
         */
        public caffe.Loadcaffe.SigmoidParameterOrBuilder getSigmoidParamOrBuilder() {
            return sigmoidParam_;
        }

        public static final int SOFTMAX_PARAM_FIELD_NUMBER = 39;
        private caffe.Loadcaffe.SoftmaxParameter softmaxParam_;
        /**
         * <code>optional .caffe.SoftmaxParameter softmax_param = 39;</code>
         */
        public boolean hasSoftmaxParam() {
            return ((bitField0_ & 0x02000000) == 0x02000000);
        }
        /**
         * <code>optional .caffe.SoftmaxParameter softmax_param = 39;</code>
         */
        public caffe.Loadcaffe.SoftmaxParameter getSoftmaxParam() {
            return softmaxParam_;
        }
        /**
         * <code>optional .caffe.SoftmaxParameter softmax_param = 39;</code>
         */
        public caffe.Loadcaffe.SoftmaxParameterOrBuilder getSoftmaxParamOrBuilder() {
            return softmaxParam_;
        }

        public static final int SLICE_PARAM_FIELD_NUMBER = 31;
        private caffe.Loadcaffe.SliceParameter sliceParam_;
        /**
         * <code>optional .caffe.SliceParameter slice_param = 31;</code>
         */
        public boolean hasSliceParam() {
            return ((bitField0_ & 0x04000000) == 0x04000000);
        }
        /**
         * <code>optional .caffe.SliceParameter slice_param = 31;</code>
         */
        public caffe.Loadcaffe.SliceParameter getSliceParam() {
            return sliceParam_;
        }
        /**
         * <code>optional .caffe.SliceParameter slice_param = 31;</code>
         */
        public caffe.Loadcaffe.SliceParameterOrBuilder getSliceParamOrBuilder() {
            return sliceParam_;
        }

        public static final int TANH_PARAM_FIELD_NUMBER = 37;
        private caffe.Loadcaffe.TanHParameter tanhParam_;
        /**
         * <code>optional .caffe.TanHParameter tanh_param = 37;</code>
         */
        public boolean hasTanhParam() {
            return ((bitField0_ & 0x08000000) == 0x08000000);
        }
        /**
         * <code>optional .caffe.TanHParameter tanh_param = 37;</code>
         */
        public caffe.Loadcaffe.TanHParameter getTanhParam() {
            return tanhParam_;
        }
        /**
         * <code>optional .caffe.TanHParameter tanh_param = 37;</code>
         */
        public caffe.Loadcaffe.TanHParameterOrBuilder getTanhParamOrBuilder() {
            return tanhParam_;
        }

        public static final int THRESHOLD_PARAM_FIELD_NUMBER = 25;
        private caffe.Loadcaffe.ThresholdParameter thresholdParam_;
        /**
         * <code>optional .caffe.ThresholdParameter threshold_param = 25;</code>
         */
        public boolean hasThresholdParam() {
            return ((bitField0_ & 0x10000000) == 0x10000000);
        }
        /**
         * <code>optional .caffe.ThresholdParameter threshold_param = 25;</code>
         */
        public caffe.Loadcaffe.ThresholdParameter getThresholdParam() {
            return thresholdParam_;
        }
        /**
         * <code>optional .caffe.ThresholdParameter threshold_param = 25;</code>
         */
        public caffe.Loadcaffe.ThresholdParameterOrBuilder getThresholdParamOrBuilder() {
            return thresholdParam_;
        }

        public static final int WINDOW_DATA_PARAM_FIELD_NUMBER = 20;
        private caffe.Loadcaffe.WindowDataParameter windowDataParam_;
        /**
         * <code>optional .caffe.WindowDataParameter window_data_param = 20;</code>
         */
        public boolean hasWindowDataParam() {
            return ((bitField0_ & 0x20000000) == 0x20000000);
        }
        /**
         * <code>optional .caffe.WindowDataParameter window_data_param = 20;</code>
         */
        public caffe.Loadcaffe.WindowDataParameter getWindowDataParam() {
            return windowDataParam_;
        }
        /**
         * <code>optional .caffe.WindowDataParameter window_data_param = 20;</code>
         */
        public caffe.Loadcaffe.WindowDataParameterOrBuilder getWindowDataParamOrBuilder() {
            return windowDataParam_;
        }

        public static final int TRANSFORM_PARAM_FIELD_NUMBER = 36;
        private caffe.Loadcaffe.TransformationParameter transformParam_;
        /**
         * <code>optional .caffe.TransformationParameter transform_param = 36;</code>
         */
        public boolean hasTransformParam() {
            return ((bitField0_ & 0x40000000) == 0x40000000);
        }
        /**
         * <code>optional .caffe.TransformationParameter transform_param = 36;</code>
         */
        public caffe.Loadcaffe.TransformationParameter getTransformParam() {
            return transformParam_;
        }
        /**
         * <code>optional .caffe.TransformationParameter transform_param = 36;</code>
         */
        public caffe.Loadcaffe.TransformationParameterOrBuilder getTransformParamOrBuilder() {
            return transformParam_;
        }

        public static final int LOSS_PARAM_FIELD_NUMBER = 42;
        private caffe.Loadcaffe.LossParameter lossParam_;
        /**
         * <code>optional .caffe.LossParameter loss_param = 42;</code>
         */
        public boolean hasLossParam() {
            return ((bitField0_ & 0x80000000) == 0x80000000);
        }
        /**
         * <code>optional .caffe.LossParameter loss_param = 42;</code>
         */
        public caffe.Loadcaffe.LossParameter getLossParam() {
            return lossParam_;
        }
        /**
         * <code>optional .caffe.LossParameter loss_param = 42;</code>
         */
        public caffe.Loadcaffe.LossParameterOrBuilder getLossParamOrBuilder() {
            return lossParam_;
        }

        public static final int LAYER_FIELD_NUMBER = 1;
        private caffe.Loadcaffe.V0LayerParameter layer_;
        /**
         * <code>optional .caffe.V0LayerParameter layer = 1;</code>
         */
        public boolean hasLayer() {
            return ((bitField1_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional .caffe.V0LayerParameter layer = 1;</code>
         */
        public caffe.Loadcaffe.V0LayerParameter getLayer() {
            return layer_;
        }
        /**
         * <code>optional .caffe.V0LayerParameter layer = 1;</code>
         */
        public caffe.Loadcaffe.V0LayerParameterOrBuilder getLayerOrBuilder() {
            return layer_;
        }

        private void initFields() {
            bottom_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            top_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            name_ = "";
            include_ = java.util.Collections.emptyList();
            exclude_ = java.util.Collections.emptyList();
            type_ = caffe.Loadcaffe.V1LayerParameter.LayerType.NONE;
            blobs_ = java.util.Collections.emptyList();
            param_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            blobShareMode_ = java.util.Collections.emptyList();
            blobsLr_ = java.util.Collections.emptyList();
            weightDecay_ = java.util.Collections.emptyList();
            lossWeight_ = java.util.Collections.emptyList();
            accuracyParam_ = caffe.Loadcaffe.AccuracyParameter.getDefaultInstance();
            argmaxParam_ = caffe.Loadcaffe.ArgMaxParameter.getDefaultInstance();
            concatParam_ = caffe.Loadcaffe.ConcatParameter.getDefaultInstance();
            contrastiveLossParam_ = caffe.Loadcaffe.ContrastiveLossParameter.getDefaultInstance();
            convolutionParam_ = caffe.Loadcaffe.ConvolutionParameter.getDefaultInstance();
            dataParam_ = caffe.Loadcaffe.DataParameter.getDefaultInstance();
            dropoutParam_ = caffe.Loadcaffe.DropoutParameter.getDefaultInstance();
            dummyDataParam_ = caffe.Loadcaffe.DummyDataParameter.getDefaultInstance();
            eltwiseParam_ = caffe.Loadcaffe.EltwiseParameter.getDefaultInstance();
            expParam_ = caffe.Loadcaffe.ExpParameter.getDefaultInstance();
            hdf5DataParam_ = caffe.Loadcaffe.HDF5DataParameter.getDefaultInstance();
            hdf5OutputParam_ = caffe.Loadcaffe.HDF5OutputParameter.getDefaultInstance();
            hingeLossParam_ = caffe.Loadcaffe.HingeLossParameter.getDefaultInstance();
            imageDataParam_ = caffe.Loadcaffe.ImageDataParameter.getDefaultInstance();
            infogainLossParam_ = caffe.Loadcaffe.InfogainLossParameter.getDefaultInstance();
            innerProductParam_ = caffe.Loadcaffe.InnerProductParameter.getDefaultInstance();
            lrnParam_ = caffe.Loadcaffe.LRNParameter.getDefaultInstance();
            memoryDataParam_ = caffe.Loadcaffe.MemoryDataParameter.getDefaultInstance();
            mvnParam_ = caffe.Loadcaffe.MVNParameter.getDefaultInstance();
            poolingParam_ = caffe.Loadcaffe.PoolingParameter.getDefaultInstance();
            powerParam_ = caffe.Loadcaffe.PowerParameter.getDefaultInstance();
            reluParam_ = caffe.Loadcaffe.ReLUParameter.getDefaultInstance();
            sigmoidParam_ = caffe.Loadcaffe.SigmoidParameter.getDefaultInstance();
            softmaxParam_ = caffe.Loadcaffe.SoftmaxParameter.getDefaultInstance();
            sliceParam_ = caffe.Loadcaffe.SliceParameter.getDefaultInstance();
            tanhParam_ = caffe.Loadcaffe.TanHParameter.getDefaultInstance();
            thresholdParam_ = caffe.Loadcaffe.ThresholdParameter.getDefaultInstance();
            windowDataParam_ = caffe.Loadcaffe.WindowDataParameter.getDefaultInstance();
            transformParam_ = caffe.Loadcaffe.TransformationParameter.getDefaultInstance();
            lossParam_ = caffe.Loadcaffe.LossParameter.getDefaultInstance();
            layer_ = caffe.Loadcaffe.V0LayerParameter.getDefaultInstance();
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField1_ & 0x00000001) == 0x00000001)) {
                output.writeMessage(1, layer_);
            }
            for (int i = 0; i < bottom_.size(); i++) {
                output.writeBytes(2, bottom_.getByteString(i));
            }
            for (int i = 0; i < top_.size(); i++) {
                output.writeBytes(3, top_.getByteString(i));
            }
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeBytes(4, getNameBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeEnum(5, type_.getNumber());
            }
            for (int i = 0; i < blobs_.size(); i++) {
                output.writeMessage(6, blobs_.get(i));
            }
            for (int i = 0; i < blobsLr_.size(); i++) {
                output.writeFloat(7, blobsLr_.get(i));
            }
            for (int i = 0; i < weightDecay_.size(); i++) {
                output.writeFloat(8, weightDecay_.get(i));
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                output.writeMessage(9, concatParam_);
            }
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                output.writeMessage(10, convolutionParam_);
            }
            if (((bitField0_ & 0x00000080) == 0x00000080)) {
                output.writeMessage(11, dataParam_);
            }
            if (((bitField0_ & 0x00000100) == 0x00000100)) {
                output.writeMessage(12, dropoutParam_);
            }
            if (((bitField0_ & 0x00001000) == 0x00001000)) {
                output.writeMessage(13, hdf5DataParam_);
            }
            if (((bitField0_ & 0x00002000) == 0x00002000)) {
                output.writeMessage(14, hdf5OutputParam_);
            }
            if (((bitField0_ & 0x00008000) == 0x00008000)) {
                output.writeMessage(15, imageDataParam_);
            }
            if (((bitField0_ & 0x00010000) == 0x00010000)) {
                output.writeMessage(16, infogainLossParam_);
            }
            if (((bitField0_ & 0x00020000) == 0x00020000)) {
                output.writeMessage(17, innerProductParam_);
            }
            if (((bitField0_ & 0x00040000) == 0x00040000)) {
                output.writeMessage(18, lrnParam_);
            }
            if (((bitField0_ & 0x00200000) == 0x00200000)) {
                output.writeMessage(19, poolingParam_);
            }
            if (((bitField0_ & 0x20000000) == 0x20000000)) {
                output.writeMessage(20, windowDataParam_);
            }
            if (((bitField0_ & 0x00400000) == 0x00400000)) {
                output.writeMessage(21, powerParam_);
            }
            if (((bitField0_ & 0x00080000) == 0x00080000)) {
                output.writeMessage(22, memoryDataParam_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                output.writeMessage(23, argmaxParam_);
            }
            if (((bitField0_ & 0x00000400) == 0x00000400)) {
                output.writeMessage(24, eltwiseParam_);
            }
            if (((bitField0_ & 0x10000000) == 0x10000000)) {
                output.writeMessage(25, thresholdParam_);
            }
            if (((bitField0_ & 0x00000200) == 0x00000200)) {
                output.writeMessage(26, dummyDataParam_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeMessage(27, accuracyParam_);
            }
            if (((bitField0_ & 0x00004000) == 0x00004000)) {
                output.writeMessage(29, hingeLossParam_);
            }
            if (((bitField0_ & 0x00800000) == 0x00800000)) {
                output.writeMessage(30, reluParam_);
            }
            if (((bitField0_ & 0x04000000) == 0x04000000)) {
                output.writeMessage(31, sliceParam_);
            }
            for (int i = 0; i < include_.size(); i++) {
                output.writeMessage(32, include_.get(i));
            }
            for (int i = 0; i < exclude_.size(); i++) {
                output.writeMessage(33, exclude_.get(i));
            }
            if (((bitField0_ & 0x00100000) == 0x00100000)) {
                output.writeMessage(34, mvnParam_);
            }
            for (int i = 0; i < lossWeight_.size(); i++) {
                output.writeFloat(35, lossWeight_.get(i));
            }
            if (((bitField0_ & 0x40000000) == 0x40000000)) {
                output.writeMessage(36, transformParam_);
            }
            if (((bitField0_ & 0x08000000) == 0x08000000)) {
                output.writeMessage(37, tanhParam_);
            }
            if (((bitField0_ & 0x01000000) == 0x01000000)) {
                output.writeMessage(38, sigmoidParam_);
            }
            if (((bitField0_ & 0x02000000) == 0x02000000)) {
                output.writeMessage(39, softmaxParam_);
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                output.writeMessage(40, contrastiveLossParam_);
            }
            if (((bitField0_ & 0x00000800) == 0x00000800)) {
                output.writeMessage(41, expParam_);
            }
            if (((bitField0_ & 0x80000000) == 0x80000000)) {
                output.writeMessage(42, lossParam_);
            }
            for (int i = 0; i < param_.size(); i++) {
                output.writeBytes(1001, param_.getByteString(i));
            }
            for (int i = 0; i < blobShareMode_.size(); i++) {
                output.writeEnum(1002, blobShareMode_.get(i).getNumber());
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField1_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(1, layer_);
            }
            {
                int dataSize = 0;
                for (int i = 0; i < bottom_.size(); i++) {
                    dataSize += com.google.protobuf.CodedOutputStream
                            .computeBytesSizeNoTag(bottom_.getByteString(i));
                }
                size += dataSize;
                size += 1 * getBottomList().size();
            }
            {
                int dataSize = 0;
                for (int i = 0; i < top_.size(); i++) {
                    dataSize += com.google.protobuf.CodedOutputStream
                            .computeBytesSizeNoTag(top_.getByteString(i));
                }
                size += dataSize;
                size += 1 * getTopList().size();
            }
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(4, getNameBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeEnumSize(5, type_.getNumber());
            }
            for (int i = 0; i < blobs_.size(); i++) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(6, blobs_.get(i));
            }
            {
                int dataSize = 0;
                dataSize = 4 * getBlobsLrList().size();
                size += dataSize;
                size += 1 * getBlobsLrList().size();
            }
            {
                int dataSize = 0;
                dataSize = 4 * getWeightDecayList().size();
                size += dataSize;
                size += 1 * getWeightDecayList().size();
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(9, concatParam_);
            }
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(10, convolutionParam_);
            }
            if (((bitField0_ & 0x00000080) == 0x00000080)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(11, dataParam_);
            }
            if (((bitField0_ & 0x00000100) == 0x00000100)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(12, dropoutParam_);
            }
            if (((bitField0_ & 0x00001000) == 0x00001000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(13, hdf5DataParam_);
            }
            if (((bitField0_ & 0x00002000) == 0x00002000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(14, hdf5OutputParam_);
            }
            if (((bitField0_ & 0x00008000) == 0x00008000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(15, imageDataParam_);
            }
            if (((bitField0_ & 0x00010000) == 0x00010000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(16, infogainLossParam_);
            }
            if (((bitField0_ & 0x00020000) == 0x00020000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(17, innerProductParam_);
            }
            if (((bitField0_ & 0x00040000) == 0x00040000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(18, lrnParam_);
            }
            if (((bitField0_ & 0x00200000) == 0x00200000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(19, poolingParam_);
            }
            if (((bitField0_ & 0x20000000) == 0x20000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(20, windowDataParam_);
            }
            if (((bitField0_ & 0x00400000) == 0x00400000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(21, powerParam_);
            }
            if (((bitField0_ & 0x00080000) == 0x00080000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(22, memoryDataParam_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(23, argmaxParam_);
            }
            if (((bitField0_ & 0x00000400) == 0x00000400)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(24, eltwiseParam_);
            }
            if (((bitField0_ & 0x10000000) == 0x10000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(25, thresholdParam_);
            }
            if (((bitField0_ & 0x00000200) == 0x00000200)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(26, dummyDataParam_);
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(27, accuracyParam_);
            }
            if (((bitField0_ & 0x00004000) == 0x00004000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(29, hingeLossParam_);
            }
            if (((bitField0_ & 0x00800000) == 0x00800000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(30, reluParam_);
            }
            if (((bitField0_ & 0x04000000) == 0x04000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(31, sliceParam_);
            }
            for (int i = 0; i < include_.size(); i++) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(32, include_.get(i));
            }
            for (int i = 0; i < exclude_.size(); i++) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(33, exclude_.get(i));
            }
            if (((bitField0_ & 0x00100000) == 0x00100000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(34, mvnParam_);
            }
            {
                int dataSize = 0;
                dataSize = 4 * getLossWeightList().size();
                size += dataSize;
                size += 2 * getLossWeightList().size();
            }
            if (((bitField0_ & 0x40000000) == 0x40000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(36, transformParam_);
            }
            if (((bitField0_ & 0x08000000) == 0x08000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(37, tanhParam_);
            }
            if (((bitField0_ & 0x01000000) == 0x01000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(38, sigmoidParam_);
            }
            if (((bitField0_ & 0x02000000) == 0x02000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(39, softmaxParam_);
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(40, contrastiveLossParam_);
            }
            if (((bitField0_ & 0x00000800) == 0x00000800)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(41, expParam_);
            }
            if (((bitField0_ & 0x80000000) == 0x80000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(42, lossParam_);
            }
            {
                int dataSize = 0;
                for (int i = 0; i < param_.size(); i++) {
                    dataSize += com.google.protobuf.CodedOutputStream
                            .computeBytesSizeNoTag(param_.getByteString(i));
                }
                size += dataSize;
                size += 2 * getParamList().size();
            }
            {
                int dataSize = 0;
                for (int i = 0; i < blobShareMode_.size(); i++) {
                    dataSize += com.google.protobuf.CodedOutputStream
                            .computeEnumSizeNoTag(blobShareMode_.get(i).getNumber());
                }
                size += dataSize;
                size += 2 * blobShareMode_.size();
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.V1LayerParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.V1LayerParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.V1LayerParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.V1LayerParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.V1LayerParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.V1LayerParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.V1LayerParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.V1LayerParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.V1LayerParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.V1LayerParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.V1LayerParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.V1LayerParameter}
         *
         * <pre>
         * DEPRECATED: use LayerParameter.
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.V1LayerParameter)
                caffe.Loadcaffe.V1LayerParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_V1LayerParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_V1LayerParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.V1LayerParameter.class, caffe.Loadcaffe.V1LayerParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.V1LayerParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                    getIncludeFieldBuilder();
                    getExcludeFieldBuilder();
                    getBlobsFieldBuilder();
                    getAccuracyParamFieldBuilder();
                    getArgmaxParamFieldBuilder();
                    getConcatParamFieldBuilder();
                    getContrastiveLossParamFieldBuilder();
                    getConvolutionParamFieldBuilder();
                    getDataParamFieldBuilder();
                    getDropoutParamFieldBuilder();
                    getDummyDataParamFieldBuilder();
                    getEltwiseParamFieldBuilder();
                    getExpParamFieldBuilder();
                    getHdf5DataParamFieldBuilder();
                    getHdf5OutputParamFieldBuilder();
                    getHingeLossParamFieldBuilder();
                    getImageDataParamFieldBuilder();
                    getInfogainLossParamFieldBuilder();
                    getInnerProductParamFieldBuilder();
                    getLrnParamFieldBuilder();
                    getMemoryDataParamFieldBuilder();
                    getMvnParamFieldBuilder();
                    getPoolingParamFieldBuilder();
                    getPowerParamFieldBuilder();
                    getReluParamFieldBuilder();
                    getSigmoidParamFieldBuilder();
                    getSoftmaxParamFieldBuilder();
                    getSliceParamFieldBuilder();
                    getTanhParamFieldBuilder();
                    getThresholdParamFieldBuilder();
                    getWindowDataParamFieldBuilder();
                    getTransformParamFieldBuilder();
                    getLossParamFieldBuilder();
                    getLayerFieldBuilder();
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                bottom_ = com.google.protobuf.LazyStringArrayList.EMPTY;
                bitField0_ = (bitField0_ & ~0x00000001);
                top_ = com.google.protobuf.LazyStringArrayList.EMPTY;
                bitField0_ = (bitField0_ & ~0x00000002);
                name_ = "";
                bitField0_ = (bitField0_ & ~0x00000004);
                if (includeBuilder_ == null) {
                    include_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000008);
                } else {
                    includeBuilder_.clear();
                }
                if (excludeBuilder_ == null) {
                    exclude_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000010);
                } else {
                    excludeBuilder_.clear();
                }
                type_ = caffe.Loadcaffe.V1LayerParameter.LayerType.NONE;
                bitField0_ = (bitField0_ & ~0x00000020);
                if (blobsBuilder_ == null) {
                    blobs_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000040);
                } else {
                    blobsBuilder_.clear();
                }
                param_ = com.google.protobuf.LazyStringArrayList.EMPTY;
                bitField0_ = (bitField0_ & ~0x00000080);
                blobShareMode_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000100);
                blobsLr_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000200);
                weightDecay_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000400);
                lossWeight_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000800);
                if (accuracyParamBuilder_ == null) {
                    accuracyParam_ = caffe.Loadcaffe.AccuracyParameter.getDefaultInstance();
                } else {
                    accuracyParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00001000);
                if (argmaxParamBuilder_ == null) {
                    argmaxParam_ = caffe.Loadcaffe.ArgMaxParameter.getDefaultInstance();
                } else {
                    argmaxParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00002000);
                if (concatParamBuilder_ == null) {
                    concatParam_ = caffe.Loadcaffe.ConcatParameter.getDefaultInstance();
                } else {
                    concatParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00004000);
                if (contrastiveLossParamBuilder_ == null) {
                    contrastiveLossParam_ = caffe.Loadcaffe.ContrastiveLossParameter.getDefaultInstance();
                } else {
                    contrastiveLossParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00008000);
                if (convolutionParamBuilder_ == null) {
                    convolutionParam_ = caffe.Loadcaffe.ConvolutionParameter.getDefaultInstance();
                } else {
                    convolutionParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00010000);
                if (dataParamBuilder_ == null) {
                    dataParam_ = caffe.Loadcaffe.DataParameter.getDefaultInstance();
                } else {
                    dataParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00020000);
                if (dropoutParamBuilder_ == null) {
                    dropoutParam_ = caffe.Loadcaffe.DropoutParameter.getDefaultInstance();
                } else {
                    dropoutParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00040000);
                if (dummyDataParamBuilder_ == null) {
                    dummyDataParam_ = caffe.Loadcaffe.DummyDataParameter.getDefaultInstance();
                } else {
                    dummyDataParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00080000);
                if (eltwiseParamBuilder_ == null) {
                    eltwiseParam_ = caffe.Loadcaffe.EltwiseParameter.getDefaultInstance();
                } else {
                    eltwiseParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00100000);
                if (expParamBuilder_ == null) {
                    expParam_ = caffe.Loadcaffe.ExpParameter.getDefaultInstance();
                } else {
                    expParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00200000);
                if (hdf5DataParamBuilder_ == null) {
                    hdf5DataParam_ = caffe.Loadcaffe.HDF5DataParameter.getDefaultInstance();
                } else {
                    hdf5DataParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00400000);
                if (hdf5OutputParamBuilder_ == null) {
                    hdf5OutputParam_ = caffe.Loadcaffe.HDF5OutputParameter.getDefaultInstance();
                } else {
                    hdf5OutputParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00800000);
                if (hingeLossParamBuilder_ == null) {
                    hingeLossParam_ = caffe.Loadcaffe.HingeLossParameter.getDefaultInstance();
                } else {
                    hingeLossParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x01000000);
                if (imageDataParamBuilder_ == null) {
                    imageDataParam_ = caffe.Loadcaffe.ImageDataParameter.getDefaultInstance();
                } else {
                    imageDataParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x02000000);
                if (infogainLossParamBuilder_ == null) {
                    infogainLossParam_ = caffe.Loadcaffe.InfogainLossParameter.getDefaultInstance();
                } else {
                    infogainLossParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x04000000);
                if (innerProductParamBuilder_ == null) {
                    innerProductParam_ = caffe.Loadcaffe.InnerProductParameter.getDefaultInstance();
                } else {
                    innerProductParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x08000000);
                if (lrnParamBuilder_ == null) {
                    lrnParam_ = caffe.Loadcaffe.LRNParameter.getDefaultInstance();
                } else {
                    lrnParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x10000000);
                if (memoryDataParamBuilder_ == null) {
                    memoryDataParam_ = caffe.Loadcaffe.MemoryDataParameter.getDefaultInstance();
                } else {
                    memoryDataParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x20000000);
                if (mvnParamBuilder_ == null) {
                    mvnParam_ = caffe.Loadcaffe.MVNParameter.getDefaultInstance();
                } else {
                    mvnParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x40000000);
                if (poolingParamBuilder_ == null) {
                    poolingParam_ = caffe.Loadcaffe.PoolingParameter.getDefaultInstance();
                } else {
                    poolingParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x80000000);
                if (powerParamBuilder_ == null) {
                    powerParam_ = caffe.Loadcaffe.PowerParameter.getDefaultInstance();
                } else {
                    powerParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000001);
                if (reluParamBuilder_ == null) {
                    reluParam_ = caffe.Loadcaffe.ReLUParameter.getDefaultInstance();
                } else {
                    reluParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000002);
                if (sigmoidParamBuilder_ == null) {
                    sigmoidParam_ = caffe.Loadcaffe.SigmoidParameter.getDefaultInstance();
                } else {
                    sigmoidParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000004);
                if (softmaxParamBuilder_ == null) {
                    softmaxParam_ = caffe.Loadcaffe.SoftmaxParameter.getDefaultInstance();
                } else {
                    softmaxParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000008);
                if (sliceParamBuilder_ == null) {
                    sliceParam_ = caffe.Loadcaffe.SliceParameter.getDefaultInstance();
                } else {
                    sliceParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000010);
                if (tanhParamBuilder_ == null) {
                    tanhParam_ = caffe.Loadcaffe.TanHParameter.getDefaultInstance();
                } else {
                    tanhParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000020);
                if (thresholdParamBuilder_ == null) {
                    thresholdParam_ = caffe.Loadcaffe.ThresholdParameter.getDefaultInstance();
                } else {
                    thresholdParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000040);
                if (windowDataParamBuilder_ == null) {
                    windowDataParam_ = caffe.Loadcaffe.WindowDataParameter.getDefaultInstance();
                } else {
                    windowDataParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000080);
                if (transformParamBuilder_ == null) {
                    transformParam_ = caffe.Loadcaffe.TransformationParameter.getDefaultInstance();
                } else {
                    transformParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000100);
                if (lossParamBuilder_ == null) {
                    lossParam_ = caffe.Loadcaffe.LossParameter.getDefaultInstance();
                } else {
                    lossParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000200);
                if (layerBuilder_ == null) {
                    layer_ = caffe.Loadcaffe.V0LayerParameter.getDefaultInstance();
                } else {
                    layerBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000400);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_V1LayerParameter_descriptor;
            }

            public caffe.Loadcaffe.V1LayerParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.V1LayerParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.V1LayerParameter build() {
                caffe.Loadcaffe.V1LayerParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.V1LayerParameter buildPartial() {
                caffe.Loadcaffe.V1LayerParameter result = new caffe.Loadcaffe.V1LayerParameter(this);
                int from_bitField0_ = bitField0_;
                int from_bitField1_ = bitField1_;
                int to_bitField0_ = 0;
                int to_bitField1_ = 0;
                if (((bitField0_ & 0x00000001) == 0x00000001)) {
                    bottom_ = bottom_.getUnmodifiableView();
                    bitField0_ = (bitField0_ & ~0x00000001);
                }
                result.bottom_ = bottom_;
                if (((bitField0_ & 0x00000002) == 0x00000002)) {
                    top_ = top_.getUnmodifiableView();
                    bitField0_ = (bitField0_ & ~0x00000002);
                }
                result.top_ = top_;
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.name_ = name_;
                if (includeBuilder_ == null) {
                    if (((bitField0_ & 0x00000008) == 0x00000008)) {
                        include_ = java.util.Collections.unmodifiableList(include_);
                        bitField0_ = (bitField0_ & ~0x00000008);
                    }
                    result.include_ = include_;
                } else {
                    result.include_ = includeBuilder_.build();
                }
                if (excludeBuilder_ == null) {
                    if (((bitField0_ & 0x00000010) == 0x00000010)) {
                        exclude_ = java.util.Collections.unmodifiableList(exclude_);
                        bitField0_ = (bitField0_ & ~0x00000010);
                    }
                    result.exclude_ = exclude_;
                } else {
                    result.exclude_ = excludeBuilder_.build();
                }
                if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.type_ = type_;
                if (blobsBuilder_ == null) {
                    if (((bitField0_ & 0x00000040) == 0x00000040)) {
                        blobs_ = java.util.Collections.unmodifiableList(blobs_);
                        bitField0_ = (bitField0_ & ~0x00000040);
                    }
                    result.blobs_ = blobs_;
                } else {
                    result.blobs_ = blobsBuilder_.build();
                }
                if (((bitField0_ & 0x00000080) == 0x00000080)) {
                    param_ = param_.getUnmodifiableView();
                    bitField0_ = (bitField0_ & ~0x00000080);
                }
                result.param_ = param_;
                if (((bitField0_ & 0x00000100) == 0x00000100)) {
                    blobShareMode_ = java.util.Collections.unmodifiableList(blobShareMode_);
                    bitField0_ = (bitField0_ & ~0x00000100);
                }
                result.blobShareMode_ = blobShareMode_;
                if (((bitField0_ & 0x00000200) == 0x00000200)) {
                    blobsLr_ = java.util.Collections.unmodifiableList(blobsLr_);
                    bitField0_ = (bitField0_ & ~0x00000200);
                }
                result.blobsLr_ = blobsLr_;
                if (((bitField0_ & 0x00000400) == 0x00000400)) {
                    weightDecay_ = java.util.Collections.unmodifiableList(weightDecay_);
                    bitField0_ = (bitField0_ & ~0x00000400);
                }
                result.weightDecay_ = weightDecay_;
                if (((bitField0_ & 0x00000800) == 0x00000800)) {
                    lossWeight_ = java.util.Collections.unmodifiableList(lossWeight_);
                    bitField0_ = (bitField0_ & ~0x00000800);
                }
                result.lossWeight_ = lossWeight_;
                if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
                    to_bitField0_ |= 0x00000004;
                }
                if (accuracyParamBuilder_ == null) {
                    result.accuracyParam_ = accuracyParam_;
                } else {
                    result.accuracyParam_ = accuracyParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
                    to_bitField0_ |= 0x00000008;
                }
                if (argmaxParamBuilder_ == null) {
                    result.argmaxParam_ = argmaxParam_;
                } else {
                    result.argmaxParam_ = argmaxParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00004000) == 0x00004000)) {
                    to_bitField0_ |= 0x00000010;
                }
                if (concatParamBuilder_ == null) {
                    result.concatParam_ = concatParam_;
                } else {
                    result.concatParam_ = concatParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00008000) == 0x00008000)) {
                    to_bitField0_ |= 0x00000020;
                }
                if (contrastiveLossParamBuilder_ == null) {
                    result.contrastiveLossParam_ = contrastiveLossParam_;
                } else {
                    result.contrastiveLossParam_ = contrastiveLossParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00010000) == 0x00010000)) {
                    to_bitField0_ |= 0x00000040;
                }
                if (convolutionParamBuilder_ == null) {
                    result.convolutionParam_ = convolutionParam_;
                } else {
                    result.convolutionParam_ = convolutionParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00020000) == 0x00020000)) {
                    to_bitField0_ |= 0x00000080;
                }
                if (dataParamBuilder_ == null) {
                    result.dataParam_ = dataParam_;
                } else {
                    result.dataParam_ = dataParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00040000) == 0x00040000)) {
                    to_bitField0_ |= 0x00000100;
                }
                if (dropoutParamBuilder_ == null) {
                    result.dropoutParam_ = dropoutParam_;
                } else {
                    result.dropoutParam_ = dropoutParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00080000) == 0x00080000)) {
                    to_bitField0_ |= 0x00000200;
                }
                if (dummyDataParamBuilder_ == null) {
                    result.dummyDataParam_ = dummyDataParam_;
                } else {
                    result.dummyDataParam_ = dummyDataParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00100000) == 0x00100000)) {
                    to_bitField0_ |= 0x00000400;
                }
                if (eltwiseParamBuilder_ == null) {
                    result.eltwiseParam_ = eltwiseParam_;
                } else {
                    result.eltwiseParam_ = eltwiseParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00200000) == 0x00200000)) {
                    to_bitField0_ |= 0x00000800;
                }
                if (expParamBuilder_ == null) {
                    result.expParam_ = expParam_;
                } else {
                    result.expParam_ = expParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00400000) == 0x00400000)) {
                    to_bitField0_ |= 0x00001000;
                }
                if (hdf5DataParamBuilder_ == null) {
                    result.hdf5DataParam_ = hdf5DataParam_;
                } else {
                    result.hdf5DataParam_ = hdf5DataParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x00800000) == 0x00800000)) {
                    to_bitField0_ |= 0x00002000;
                }
                if (hdf5OutputParamBuilder_ == null) {
                    result.hdf5OutputParam_ = hdf5OutputParam_;
                } else {
                    result.hdf5OutputParam_ = hdf5OutputParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x01000000) == 0x01000000)) {
                    to_bitField0_ |= 0x00004000;
                }
                if (hingeLossParamBuilder_ == null) {
                    result.hingeLossParam_ = hingeLossParam_;
                } else {
                    result.hingeLossParam_ = hingeLossParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x02000000) == 0x02000000)) {
                    to_bitField0_ |= 0x00008000;
                }
                if (imageDataParamBuilder_ == null) {
                    result.imageDataParam_ = imageDataParam_;
                } else {
                    result.imageDataParam_ = imageDataParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x04000000) == 0x04000000)) {
                    to_bitField0_ |= 0x00010000;
                }
                if (infogainLossParamBuilder_ == null) {
                    result.infogainLossParam_ = infogainLossParam_;
                } else {
                    result.infogainLossParam_ = infogainLossParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x08000000) == 0x08000000)) {
                    to_bitField0_ |= 0x00020000;
                }
                if (innerProductParamBuilder_ == null) {
                    result.innerProductParam_ = innerProductParam_;
                } else {
                    result.innerProductParam_ = innerProductParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x10000000) == 0x10000000)) {
                    to_bitField0_ |= 0x00040000;
                }
                if (lrnParamBuilder_ == null) {
                    result.lrnParam_ = lrnParam_;
                } else {
                    result.lrnParam_ = lrnParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x20000000) == 0x20000000)) {
                    to_bitField0_ |= 0x00080000;
                }
                if (memoryDataParamBuilder_ == null) {
                    result.memoryDataParam_ = memoryDataParam_;
                } else {
                    result.memoryDataParam_ = memoryDataParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x40000000) == 0x40000000)) {
                    to_bitField0_ |= 0x00100000;
                }
                if (mvnParamBuilder_ == null) {
                    result.mvnParam_ = mvnParam_;
                } else {
                    result.mvnParam_ = mvnParamBuilder_.build();
                }
                if (((from_bitField0_ & 0x80000000) == 0x80000000)) {
                    to_bitField0_ |= 0x00200000;
                }
                if (poolingParamBuilder_ == null) {
                    result.poolingParam_ = poolingParam_;
                } else {
                    result.poolingParam_ = poolingParamBuilder_.build();
                }
                if (((from_bitField1_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00400000;
                }
                if (powerParamBuilder_ == null) {
                    result.powerParam_ = powerParam_;
                } else {
                    result.powerParam_ = powerParamBuilder_.build();
                }
                if (((from_bitField1_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00800000;
                }
                if (reluParamBuilder_ == null) {
                    result.reluParam_ = reluParam_;
                } else {
                    result.reluParam_ = reluParamBuilder_.build();
                }
                if (((from_bitField1_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x01000000;
                }
                if (sigmoidParamBuilder_ == null) {
                    result.sigmoidParam_ = sigmoidParam_;
                } else {
                    result.sigmoidParam_ = sigmoidParamBuilder_.build();
                }
                if (((from_bitField1_ & 0x00000008) == 0x00000008)) {
                    to_bitField0_ |= 0x02000000;
                }
                if (softmaxParamBuilder_ == null) {
                    result.softmaxParam_ = softmaxParam_;
                } else {
                    result.softmaxParam_ = softmaxParamBuilder_.build();
                }
                if (((from_bitField1_ & 0x00000010) == 0x00000010)) {
                    to_bitField0_ |= 0x04000000;
                }
                if (sliceParamBuilder_ == null) {
                    result.sliceParam_ = sliceParam_;
                } else {
                    result.sliceParam_ = sliceParamBuilder_.build();
                }
                if (((from_bitField1_ & 0x00000020) == 0x00000020)) {
                    to_bitField0_ |= 0x08000000;
                }
                if (tanhParamBuilder_ == null) {
                    result.tanhParam_ = tanhParam_;
                } else {
                    result.tanhParam_ = tanhParamBuilder_.build();
                }
                if (((from_bitField1_ & 0x00000040) == 0x00000040)) {
                    to_bitField0_ |= 0x10000000;
                }
                if (thresholdParamBuilder_ == null) {
                    result.thresholdParam_ = thresholdParam_;
                } else {
                    result.thresholdParam_ = thresholdParamBuilder_.build();
                }
                if (((from_bitField1_ & 0x00000080) == 0x00000080)) {
                    to_bitField0_ |= 0x20000000;
                }
                if (windowDataParamBuilder_ == null) {
                    result.windowDataParam_ = windowDataParam_;
                } else {
                    result.windowDataParam_ = windowDataParamBuilder_.build();
                }
                if (((from_bitField1_ & 0x00000100) == 0x00000100)) {
                    to_bitField0_ |= 0x40000000;
                }
                if (transformParamBuilder_ == null) {
                    result.transformParam_ = transformParam_;
                } else {
                    result.transformParam_ = transformParamBuilder_.build();
                }
                if (((from_bitField1_ & 0x00000200) == 0x00000200)) {
                    to_bitField0_ |= 0x80000000;
                }
                if (lossParamBuilder_ == null) {
                    result.lossParam_ = lossParam_;
                } else {
                    result.lossParam_ = lossParamBuilder_.build();
                }
                if (((from_bitField1_ & 0x00000400) == 0x00000400)) {
                    to_bitField1_ |= 0x00000001;
                }
                if (layerBuilder_ == null) {
                    result.layer_ = layer_;
                } else {
                    result.layer_ = layerBuilder_.build();
                }
                result.bitField0_ = to_bitField0_;
                result.bitField1_ = to_bitField1_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.V1LayerParameter) {
                    return mergeFrom((caffe.Loadcaffe.V1LayerParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.V1LayerParameter other) {
                if (other == caffe.Loadcaffe.V1LayerParameter.getDefaultInstance()) return this;
                if (!other.bottom_.isEmpty()) {
                    if (bottom_.isEmpty()) {
                        bottom_ = other.bottom_;
                        bitField0_ = (bitField0_ & ~0x00000001);
                    } else {
                        ensureBottomIsMutable();
                        bottom_.addAll(other.bottom_);
                    }
                    onChanged();
                }
                if (!other.top_.isEmpty()) {
                    if (top_.isEmpty()) {
                        top_ = other.top_;
                        bitField0_ = (bitField0_ & ~0x00000002);
                    } else {
                        ensureTopIsMutable();
                        top_.addAll(other.top_);
                    }
                    onChanged();
                }
                if (other.hasName()) {
                    bitField0_ |= 0x00000004;
                    name_ = other.name_;
                    onChanged();
                }
                if (includeBuilder_ == null) {
                    if (!other.include_.isEmpty()) {
                        if (include_.isEmpty()) {
                            include_ = other.include_;
                            bitField0_ = (bitField0_ & ~0x00000008);
                        } else {
                            ensureIncludeIsMutable();
                            include_.addAll(other.include_);
                        }
                        onChanged();
                    }
                } else {
                    if (!other.include_.isEmpty()) {
                        if (includeBuilder_.isEmpty()) {
                            includeBuilder_.dispose();
                            includeBuilder_ = null;
                            include_ = other.include_;
                            bitField0_ = (bitField0_ & ~0x00000008);
                            includeBuilder_ =
                                    com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                                            getIncludeFieldBuilder() : null;
                        } else {
                            includeBuilder_.addAllMessages(other.include_);
                        }
                    }
                }
                if (excludeBuilder_ == null) {
                    if (!other.exclude_.isEmpty()) {
                        if (exclude_.isEmpty()) {
                            exclude_ = other.exclude_;
                            bitField0_ = (bitField0_ & ~0x00000010);
                        } else {
                            ensureExcludeIsMutable();
                            exclude_.addAll(other.exclude_);
                        }
                        onChanged();
                    }
                } else {
                    if (!other.exclude_.isEmpty()) {
                        if (excludeBuilder_.isEmpty()) {
                            excludeBuilder_.dispose();
                            excludeBuilder_ = null;
                            exclude_ = other.exclude_;
                            bitField0_ = (bitField0_ & ~0x00000010);
                            excludeBuilder_ =
                                    com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                                            getExcludeFieldBuilder() : null;
                        } else {
                            excludeBuilder_.addAllMessages(other.exclude_);
                        }
                    }
                }
                if (other.hasType()) {
                    setType(other.getType());
                }
                if (blobsBuilder_ == null) {
                    if (!other.blobs_.isEmpty()) {
                        if (blobs_.isEmpty()) {
                            blobs_ = other.blobs_;
                            bitField0_ = (bitField0_ & ~0x00000040);
                        } else {
                            ensureBlobsIsMutable();
                            blobs_.addAll(other.blobs_);
                        }
                        onChanged();
                    }
                } else {
                    if (!other.blobs_.isEmpty()) {
                        if (blobsBuilder_.isEmpty()) {
                            blobsBuilder_.dispose();
                            blobsBuilder_ = null;
                            blobs_ = other.blobs_;
                            bitField0_ = (bitField0_ & ~0x00000040);
                            blobsBuilder_ =
                                    com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                                            getBlobsFieldBuilder() : null;
                        } else {
                            blobsBuilder_.addAllMessages(other.blobs_);
                        }
                    }
                }
                if (!other.param_.isEmpty()) {
                    if (param_.isEmpty()) {
                        param_ = other.param_;
                        bitField0_ = (bitField0_ & ~0x00000080);
                    } else {
                        ensureParamIsMutable();
                        param_.addAll(other.param_);
                    }
                    onChanged();
                }
                if (!other.blobShareMode_.isEmpty()) {
                    if (blobShareMode_.isEmpty()) {
                        blobShareMode_ = other.blobShareMode_;
                        bitField0_ = (bitField0_ & ~0x00000100);
                    } else {
                        ensureBlobShareModeIsMutable();
                        blobShareMode_.addAll(other.blobShareMode_);
                    }
                    onChanged();
                }
                if (!other.blobsLr_.isEmpty()) {
                    if (blobsLr_.isEmpty()) {
                        blobsLr_ = other.blobsLr_;
                        bitField0_ = (bitField0_ & ~0x00000200);
                    } else {
                        ensureBlobsLrIsMutable();
                        blobsLr_.addAll(other.blobsLr_);
                    }
                    onChanged();
                }
                if (!other.weightDecay_.isEmpty()) {
                    if (weightDecay_.isEmpty()) {
                        weightDecay_ = other.weightDecay_;
                        bitField0_ = (bitField0_ & ~0x00000400);
                    } else {
                        ensureWeightDecayIsMutable();
                        weightDecay_.addAll(other.weightDecay_);
                    }
                    onChanged();
                }
                if (!other.lossWeight_.isEmpty()) {
                    if (lossWeight_.isEmpty()) {
                        lossWeight_ = other.lossWeight_;
                        bitField0_ = (bitField0_ & ~0x00000800);
                    } else {
                        ensureLossWeightIsMutable();
                        lossWeight_.addAll(other.lossWeight_);
                    }
                    onChanged();
                }
                if (other.hasAccuracyParam()) {
                    mergeAccuracyParam(other.getAccuracyParam());
                }
                if (other.hasArgmaxParam()) {
                    mergeArgmaxParam(other.getArgmaxParam());
                }
                if (other.hasConcatParam()) {
                    mergeConcatParam(other.getConcatParam());
                }
                if (other.hasContrastiveLossParam()) {
                    mergeContrastiveLossParam(other.getContrastiveLossParam());
                }
                if (other.hasConvolutionParam()) {
                    mergeConvolutionParam(other.getConvolutionParam());
                }
                if (other.hasDataParam()) {
                    mergeDataParam(other.getDataParam());
                }
                if (other.hasDropoutParam()) {
                    mergeDropoutParam(other.getDropoutParam());
                }
                if (other.hasDummyDataParam()) {
                    mergeDummyDataParam(other.getDummyDataParam());
                }
                if (other.hasEltwiseParam()) {
                    mergeEltwiseParam(other.getEltwiseParam());
                }
                if (other.hasExpParam()) {
                    mergeExpParam(other.getExpParam());
                }
                if (other.hasHdf5DataParam()) {
                    mergeHdf5DataParam(other.getHdf5DataParam());
                }
                if (other.hasHdf5OutputParam()) {
                    mergeHdf5OutputParam(other.getHdf5OutputParam());
                }
                if (other.hasHingeLossParam()) {
                    mergeHingeLossParam(other.getHingeLossParam());
                }
                if (other.hasImageDataParam()) {
                    mergeImageDataParam(other.getImageDataParam());
                }
                if (other.hasInfogainLossParam()) {
                    mergeInfogainLossParam(other.getInfogainLossParam());
                }
                if (other.hasInnerProductParam()) {
                    mergeInnerProductParam(other.getInnerProductParam());
                }
                if (other.hasLrnParam()) {
                    mergeLrnParam(other.getLrnParam());
                }
                if (other.hasMemoryDataParam()) {
                    mergeMemoryDataParam(other.getMemoryDataParam());
                }
                if (other.hasMvnParam()) {
                    mergeMvnParam(other.getMvnParam());
                }
                if (other.hasPoolingParam()) {
                    mergePoolingParam(other.getPoolingParam());
                }
                if (other.hasPowerParam()) {
                    mergePowerParam(other.getPowerParam());
                }
                if (other.hasReluParam()) {
                    mergeReluParam(other.getReluParam());
                }
                if (other.hasSigmoidParam()) {
                    mergeSigmoidParam(other.getSigmoidParam());
                }
                if (other.hasSoftmaxParam()) {
                    mergeSoftmaxParam(other.getSoftmaxParam());
                }
                if (other.hasSliceParam()) {
                    mergeSliceParam(other.getSliceParam());
                }
                if (other.hasTanhParam()) {
                    mergeTanhParam(other.getTanhParam());
                }
                if (other.hasThresholdParam()) {
                    mergeThresholdParam(other.getThresholdParam());
                }
                if (other.hasWindowDataParam()) {
                    mergeWindowDataParam(other.getWindowDataParam());
                }
                if (other.hasTransformParam()) {
                    mergeTransformParam(other.getTransformParam());
                }
                if (other.hasLossParam()) {
                    mergeLossParam(other.getLossParam());
                }
                if (other.hasLayer()) {
                    mergeLayer(other.getLayer());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.V1LayerParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.V1LayerParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;
            private int bitField1_;

            private com.google.protobuf.LazyStringList bottom_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            private void ensureBottomIsMutable() {
                if (!((bitField0_ & 0x00000001) == 0x00000001)) {
                    bottom_ = new com.google.protobuf.LazyStringArrayList(bottom_);
                    bitField0_ |= 0x00000001;
                }
            }
            /**
             * <code>repeated string bottom = 2;</code>
             */
            public com.google.protobuf.ProtocolStringList
            getBottomList() {
                return bottom_.getUnmodifiableView();
            }
            /**
             * <code>repeated string bottom = 2;</code>
             */
            public int getBottomCount() {
                return bottom_.size();
            }
            /**
             * <code>repeated string bottom = 2;</code>
             */
            public java.lang.String getBottom(int index) {
                return bottom_.get(index);
            }
            /**
             * <code>repeated string bottom = 2;</code>
             */
            public com.google.protobuf.ByteString
            getBottomBytes(int index) {
                return bottom_.getByteString(index);
            }
            /**
             * <code>repeated string bottom = 2;</code>
             */
            public Builder setBottom(
                    int index, java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureBottomIsMutable();
                bottom_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string bottom = 2;</code>
             */
            public Builder addBottom(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureBottomIsMutable();
                bottom_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string bottom = 2;</code>
             */
            public Builder addAllBottom(
                    java.lang.Iterable<java.lang.String> values) {
                ensureBottomIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, bottom_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string bottom = 2;</code>
             */
            public Builder clearBottom() {
                bottom_ = com.google.protobuf.LazyStringArrayList.EMPTY;
                bitField0_ = (bitField0_ & ~0x00000001);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string bottom = 2;</code>
             */
            public Builder addBottomBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureBottomIsMutable();
                bottom_.add(value);
                onChanged();
                return this;
            }

            private com.google.protobuf.LazyStringList top_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            private void ensureTopIsMutable() {
                if (!((bitField0_ & 0x00000002) == 0x00000002)) {
                    top_ = new com.google.protobuf.LazyStringArrayList(top_);
                    bitField0_ |= 0x00000002;
                }
            }
            /**
             * <code>repeated string top = 3;</code>
             */
            public com.google.protobuf.ProtocolStringList
            getTopList() {
                return top_.getUnmodifiableView();
            }
            /**
             * <code>repeated string top = 3;</code>
             */
            public int getTopCount() {
                return top_.size();
            }
            /**
             * <code>repeated string top = 3;</code>
             */
            public java.lang.String getTop(int index) {
                return top_.get(index);
            }
            /**
             * <code>repeated string top = 3;</code>
             */
            public com.google.protobuf.ByteString
            getTopBytes(int index) {
                return top_.getByteString(index);
            }
            /**
             * <code>repeated string top = 3;</code>
             */
            public Builder setTop(
                    int index, java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureTopIsMutable();
                top_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string top = 3;</code>
             */
            public Builder addTop(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureTopIsMutable();
                top_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string top = 3;</code>
             */
            public Builder addAllTop(
                    java.lang.Iterable<java.lang.String> values) {
                ensureTopIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, top_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string top = 3;</code>
             */
            public Builder clearTop() {
                top_ = com.google.protobuf.LazyStringArrayList.EMPTY;
                bitField0_ = (bitField0_ & ~0x00000002);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string top = 3;</code>
             */
            public Builder addTopBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureTopIsMutable();
                top_.add(value);
                onChanged();
                return this;
            }

            private java.lang.Object name_ = "";
            /**
             * <code>optional string name = 4;</code>
             */
            public boolean hasName() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional string name = 4;</code>
             */
            public java.lang.String getName() {
                java.lang.Object ref = name_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        name_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string name = 4;</code>
             */
            public com.google.protobuf.ByteString
            getNameBytes() {
                java.lang.Object ref = name_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    name_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string name = 4;</code>
             */
            public Builder setName(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000004;
                name_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string name = 4;</code>
             */
            public Builder clearName() {
                bitField0_ = (bitField0_ & ~0x00000004);
                name_ = getDefaultInstance().getName();
                onChanged();
                return this;
            }
            /**
             * <code>optional string name = 4;</code>
             */
            public Builder setNameBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000004;
                name_ = value;
                onChanged();
                return this;
            }

            private java.util.List<caffe.Loadcaffe.NetStateRule> include_ =
                    java.util.Collections.emptyList();
            private void ensureIncludeIsMutable() {
                if (!((bitField0_ & 0x00000008) == 0x00000008)) {
                    include_ = new java.util.ArrayList<caffe.Loadcaffe.NetStateRule>(include_);
                    bitField0_ |= 0x00000008;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.NetStateRule, caffe.Loadcaffe.NetStateRule.Builder, caffe.Loadcaffe.NetStateRuleOrBuilder> includeBuilder_;

            /**
             * <code>repeated .caffe.NetStateRule include = 32;</code>
             */
            public java.util.List<caffe.Loadcaffe.NetStateRule> getIncludeList() {
                if (includeBuilder_ == null) {
                    return java.util.Collections.unmodifiableList(include_);
                } else {
                    return includeBuilder_.getMessageList();
                }
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 32;</code>
             */
            public int getIncludeCount() {
                if (includeBuilder_ == null) {
                    return include_.size();
                } else {
                    return includeBuilder_.getCount();
                }
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 32;</code>
             */
            public caffe.Loadcaffe.NetStateRule getInclude(int index) {
                if (includeBuilder_ == null) {
                    return include_.get(index);
                } else {
                    return includeBuilder_.getMessage(index);
                }
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 32;</code>
             */
            public Builder setInclude(
                    int index, caffe.Loadcaffe.NetStateRule value) {
                if (includeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureIncludeIsMutable();
                    include_.set(index, value);
                    onChanged();
                } else {
                    includeBuilder_.setMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 32;</code>
             */
            public Builder setInclude(
                    int index, caffe.Loadcaffe.NetStateRule.Builder builderForValue) {
                if (includeBuilder_ == null) {
                    ensureIncludeIsMutable();
                    include_.set(index, builderForValue.build());
                    onChanged();
                } else {
                    includeBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 32;</code>
             */
            public Builder addInclude(caffe.Loadcaffe.NetStateRule value) {
                if (includeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureIncludeIsMutable();
                    include_.add(value);
                    onChanged();
                } else {
                    includeBuilder_.addMessage(value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 32;</code>
             */
            public Builder addInclude(
                    int index, caffe.Loadcaffe.NetStateRule value) {
                if (includeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureIncludeIsMutable();
                    include_.add(index, value);
                    onChanged();
                } else {
                    includeBuilder_.addMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 32;</code>
             */
            public Builder addInclude(
                    caffe.Loadcaffe.NetStateRule.Builder builderForValue) {
                if (includeBuilder_ == null) {
                    ensureIncludeIsMutable();
                    include_.add(builderForValue.build());
                    onChanged();
                } else {
                    includeBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 32;</code>
             */
            public Builder addInclude(
                    int index, caffe.Loadcaffe.NetStateRule.Builder builderForValue) {
                if (includeBuilder_ == null) {
                    ensureIncludeIsMutable();
                    include_.add(index, builderForValue.build());
                    onChanged();
                } else {
                    includeBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 32;</code>
             */
            public Builder addAllInclude(
                    java.lang.Iterable<? extends caffe.Loadcaffe.NetStateRule> values) {
                if (includeBuilder_ == null) {
                    ensureIncludeIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(
                            values, include_);
                    onChanged();
                } else {
                    includeBuilder_.addAllMessages(values);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 32;</code>
             */
            public Builder clearInclude() {
                if (includeBuilder_ == null) {
                    include_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000008);
                    onChanged();
                } else {
                    includeBuilder_.clear();
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 32;</code>
             */
            public Builder removeInclude(int index) {
                if (includeBuilder_ == null) {
                    ensureIncludeIsMutable();
                    include_.remove(index);
                    onChanged();
                } else {
                    includeBuilder_.remove(index);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 32;</code>
             */
            public caffe.Loadcaffe.NetStateRule.Builder getIncludeBuilder(
                    int index) {
                return getIncludeFieldBuilder().getBuilder(index);
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 32;</code>
             */
            public caffe.Loadcaffe.NetStateRuleOrBuilder getIncludeOrBuilder(
                    int index) {
                if (includeBuilder_ == null) {
                    return include_.get(index);  } else {
                    return includeBuilder_.getMessageOrBuilder(index);
                }
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 32;</code>
             */
            public java.util.List<? extends caffe.Loadcaffe.NetStateRuleOrBuilder>
            getIncludeOrBuilderList() {
                if (includeBuilder_ != null) {
                    return includeBuilder_.getMessageOrBuilderList();
                } else {
                    return java.util.Collections.unmodifiableList(include_);
                }
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 32;</code>
             */
            public caffe.Loadcaffe.NetStateRule.Builder addIncludeBuilder() {
                return getIncludeFieldBuilder().addBuilder(
                        caffe.Loadcaffe.NetStateRule.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 32;</code>
             */
            public caffe.Loadcaffe.NetStateRule.Builder addIncludeBuilder(
                    int index) {
                return getIncludeFieldBuilder().addBuilder(
                        index, caffe.Loadcaffe.NetStateRule.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.NetStateRule include = 32;</code>
             */
            public java.util.List<caffe.Loadcaffe.NetStateRule.Builder>
            getIncludeBuilderList() {
                return getIncludeFieldBuilder().getBuilderList();
            }
            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.NetStateRule, caffe.Loadcaffe.NetStateRule.Builder, caffe.Loadcaffe.NetStateRuleOrBuilder>
            getIncludeFieldBuilder() {
                if (includeBuilder_ == null) {
                    includeBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            caffe.Loadcaffe.NetStateRule, caffe.Loadcaffe.NetStateRule.Builder, caffe.Loadcaffe.NetStateRuleOrBuilder>(
                            include_,
                            ((bitField0_ & 0x00000008) == 0x00000008),
                            getParentForChildren(),
                            isClean());
                    include_ = null;
                }
                return includeBuilder_;
            }

            private java.util.List<caffe.Loadcaffe.NetStateRule> exclude_ =
                    java.util.Collections.emptyList();
            private void ensureExcludeIsMutable() {
                if (!((bitField0_ & 0x00000010) == 0x00000010)) {
                    exclude_ = new java.util.ArrayList<caffe.Loadcaffe.NetStateRule>(exclude_);
                    bitField0_ |= 0x00000010;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.NetStateRule, caffe.Loadcaffe.NetStateRule.Builder, caffe.Loadcaffe.NetStateRuleOrBuilder> excludeBuilder_;

            /**
             * <code>repeated .caffe.NetStateRule exclude = 33;</code>
             */
            public java.util.List<caffe.Loadcaffe.NetStateRule> getExcludeList() {
                if (excludeBuilder_ == null) {
                    return java.util.Collections.unmodifiableList(exclude_);
                } else {
                    return excludeBuilder_.getMessageList();
                }
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 33;</code>
             */
            public int getExcludeCount() {
                if (excludeBuilder_ == null) {
                    return exclude_.size();
                } else {
                    return excludeBuilder_.getCount();
                }
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 33;</code>
             */
            public caffe.Loadcaffe.NetStateRule getExclude(int index) {
                if (excludeBuilder_ == null) {
                    return exclude_.get(index);
                } else {
                    return excludeBuilder_.getMessage(index);
                }
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 33;</code>
             */
            public Builder setExclude(
                    int index, caffe.Loadcaffe.NetStateRule value) {
                if (excludeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureExcludeIsMutable();
                    exclude_.set(index, value);
                    onChanged();
                } else {
                    excludeBuilder_.setMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 33;</code>
             */
            public Builder setExclude(
                    int index, caffe.Loadcaffe.NetStateRule.Builder builderForValue) {
                if (excludeBuilder_ == null) {
                    ensureExcludeIsMutable();
                    exclude_.set(index, builderForValue.build());
                    onChanged();
                } else {
                    excludeBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 33;</code>
             */
            public Builder addExclude(caffe.Loadcaffe.NetStateRule value) {
                if (excludeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureExcludeIsMutable();
                    exclude_.add(value);
                    onChanged();
                } else {
                    excludeBuilder_.addMessage(value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 33;</code>
             */
            public Builder addExclude(
                    int index, caffe.Loadcaffe.NetStateRule value) {
                if (excludeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureExcludeIsMutable();
                    exclude_.add(index, value);
                    onChanged();
                } else {
                    excludeBuilder_.addMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 33;</code>
             */
            public Builder addExclude(
                    caffe.Loadcaffe.NetStateRule.Builder builderForValue) {
                if (excludeBuilder_ == null) {
                    ensureExcludeIsMutable();
                    exclude_.add(builderForValue.build());
                    onChanged();
                } else {
                    excludeBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 33;</code>
             */
            public Builder addExclude(
                    int index, caffe.Loadcaffe.NetStateRule.Builder builderForValue) {
                if (excludeBuilder_ == null) {
                    ensureExcludeIsMutable();
                    exclude_.add(index, builderForValue.build());
                    onChanged();
                } else {
                    excludeBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 33;</code>
             */
            public Builder addAllExclude(
                    java.lang.Iterable<? extends caffe.Loadcaffe.NetStateRule> values) {
                if (excludeBuilder_ == null) {
                    ensureExcludeIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(
                            values, exclude_);
                    onChanged();
                } else {
                    excludeBuilder_.addAllMessages(values);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 33;</code>
             */
            public Builder clearExclude() {
                if (excludeBuilder_ == null) {
                    exclude_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000010);
                    onChanged();
                } else {
                    excludeBuilder_.clear();
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 33;</code>
             */
            public Builder removeExclude(int index) {
                if (excludeBuilder_ == null) {
                    ensureExcludeIsMutable();
                    exclude_.remove(index);
                    onChanged();
                } else {
                    excludeBuilder_.remove(index);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 33;</code>
             */
            public caffe.Loadcaffe.NetStateRule.Builder getExcludeBuilder(
                    int index) {
                return getExcludeFieldBuilder().getBuilder(index);
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 33;</code>
             */
            public caffe.Loadcaffe.NetStateRuleOrBuilder getExcludeOrBuilder(
                    int index) {
                if (excludeBuilder_ == null) {
                    return exclude_.get(index);  } else {
                    return excludeBuilder_.getMessageOrBuilder(index);
                }
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 33;</code>
             */
            public java.util.List<? extends caffe.Loadcaffe.NetStateRuleOrBuilder>
            getExcludeOrBuilderList() {
                if (excludeBuilder_ != null) {
                    return excludeBuilder_.getMessageOrBuilderList();
                } else {
                    return java.util.Collections.unmodifiableList(exclude_);
                }
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 33;</code>
             */
            public caffe.Loadcaffe.NetStateRule.Builder addExcludeBuilder() {
                return getExcludeFieldBuilder().addBuilder(
                        caffe.Loadcaffe.NetStateRule.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 33;</code>
             */
            public caffe.Loadcaffe.NetStateRule.Builder addExcludeBuilder(
                    int index) {
                return getExcludeFieldBuilder().addBuilder(
                        index, caffe.Loadcaffe.NetStateRule.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.NetStateRule exclude = 33;</code>
             */
            public java.util.List<caffe.Loadcaffe.NetStateRule.Builder>
            getExcludeBuilderList() {
                return getExcludeFieldBuilder().getBuilderList();
            }
            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.NetStateRule, caffe.Loadcaffe.NetStateRule.Builder, caffe.Loadcaffe.NetStateRuleOrBuilder>
            getExcludeFieldBuilder() {
                if (excludeBuilder_ == null) {
                    excludeBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            caffe.Loadcaffe.NetStateRule, caffe.Loadcaffe.NetStateRule.Builder, caffe.Loadcaffe.NetStateRuleOrBuilder>(
                            exclude_,
                            ((bitField0_ & 0x00000010) == 0x00000010),
                            getParentForChildren(),
                            isClean());
                    exclude_ = null;
                }
                return excludeBuilder_;
            }

            private caffe.Loadcaffe.V1LayerParameter.LayerType type_ = caffe.Loadcaffe.V1LayerParameter.LayerType.NONE;
            /**
             * <code>optional .caffe.V1LayerParameter.LayerType type = 5;</code>
             */
            public boolean hasType() {
                return ((bitField0_ & 0x00000020) == 0x00000020);
            }
            /**
             * <code>optional .caffe.V1LayerParameter.LayerType type = 5;</code>
             */
            public caffe.Loadcaffe.V1LayerParameter.LayerType getType() {
                return type_;
            }
            /**
             * <code>optional .caffe.V1LayerParameter.LayerType type = 5;</code>
             */
            public Builder setType(caffe.Loadcaffe.V1LayerParameter.LayerType value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000020;
                type_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional .caffe.V1LayerParameter.LayerType type = 5;</code>
             */
            public Builder clearType() {
                bitField0_ = (bitField0_ & ~0x00000020);
                type_ = caffe.Loadcaffe.V1LayerParameter.LayerType.NONE;
                onChanged();
                return this;
            }

            private java.util.List<caffe.Loadcaffe.BlobProto> blobs_ =
                    java.util.Collections.emptyList();
            private void ensureBlobsIsMutable() {
                if (!((bitField0_ & 0x00000040) == 0x00000040)) {
                    blobs_ = new java.util.ArrayList<caffe.Loadcaffe.BlobProto>(blobs_);
                    bitField0_ |= 0x00000040;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.BlobProto, caffe.Loadcaffe.BlobProto.Builder, caffe.Loadcaffe.BlobProtoOrBuilder> blobsBuilder_;

            /**
             * <code>repeated .caffe.BlobProto blobs = 6;</code>
             */
            public java.util.List<caffe.Loadcaffe.BlobProto> getBlobsList() {
                if (blobsBuilder_ == null) {
                    return java.util.Collections.unmodifiableList(blobs_);
                } else {
                    return blobsBuilder_.getMessageList();
                }
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 6;</code>
             */
            public int getBlobsCount() {
                if (blobsBuilder_ == null) {
                    return blobs_.size();
                } else {
                    return blobsBuilder_.getCount();
                }
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 6;</code>
             */
            public caffe.Loadcaffe.BlobProto getBlobs(int index) {
                if (blobsBuilder_ == null) {
                    return blobs_.get(index);
                } else {
                    return blobsBuilder_.getMessage(index);
                }
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 6;</code>
             */
            public Builder setBlobs(
                    int index, caffe.Loadcaffe.BlobProto value) {
                if (blobsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureBlobsIsMutable();
                    blobs_.set(index, value);
                    onChanged();
                } else {
                    blobsBuilder_.setMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 6;</code>
             */
            public Builder setBlobs(
                    int index, caffe.Loadcaffe.BlobProto.Builder builderForValue) {
                if (blobsBuilder_ == null) {
                    ensureBlobsIsMutable();
                    blobs_.set(index, builderForValue.build());
                    onChanged();
                } else {
                    blobsBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 6;</code>
             */
            public Builder addBlobs(caffe.Loadcaffe.BlobProto value) {
                if (blobsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureBlobsIsMutable();
                    blobs_.add(value);
                    onChanged();
                } else {
                    blobsBuilder_.addMessage(value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 6;</code>
             */
            public Builder addBlobs(
                    int index, caffe.Loadcaffe.BlobProto value) {
                if (blobsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureBlobsIsMutable();
                    blobs_.add(index, value);
                    onChanged();
                } else {
                    blobsBuilder_.addMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 6;</code>
             */
            public Builder addBlobs(
                    caffe.Loadcaffe.BlobProto.Builder builderForValue) {
                if (blobsBuilder_ == null) {
                    ensureBlobsIsMutable();
                    blobs_.add(builderForValue.build());
                    onChanged();
                } else {
                    blobsBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 6;</code>
             */
            public Builder addBlobs(
                    int index, caffe.Loadcaffe.BlobProto.Builder builderForValue) {
                if (blobsBuilder_ == null) {
                    ensureBlobsIsMutable();
                    blobs_.add(index, builderForValue.build());
                    onChanged();
                } else {
                    blobsBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 6;</code>
             */
            public Builder addAllBlobs(
                    java.lang.Iterable<? extends caffe.Loadcaffe.BlobProto> values) {
                if (blobsBuilder_ == null) {
                    ensureBlobsIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(
                            values, blobs_);
                    onChanged();
                } else {
                    blobsBuilder_.addAllMessages(values);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 6;</code>
             */
            public Builder clearBlobs() {
                if (blobsBuilder_ == null) {
                    blobs_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000040);
                    onChanged();
                } else {
                    blobsBuilder_.clear();
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 6;</code>
             */
            public Builder removeBlobs(int index) {
                if (blobsBuilder_ == null) {
                    ensureBlobsIsMutable();
                    blobs_.remove(index);
                    onChanged();
                } else {
                    blobsBuilder_.remove(index);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 6;</code>
             */
            public caffe.Loadcaffe.BlobProto.Builder getBlobsBuilder(
                    int index) {
                return getBlobsFieldBuilder().getBuilder(index);
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 6;</code>
             */
            public caffe.Loadcaffe.BlobProtoOrBuilder getBlobsOrBuilder(
                    int index) {
                if (blobsBuilder_ == null) {
                    return blobs_.get(index);  } else {
                    return blobsBuilder_.getMessageOrBuilder(index);
                }
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 6;</code>
             */
            public java.util.List<? extends caffe.Loadcaffe.BlobProtoOrBuilder>
            getBlobsOrBuilderList() {
                if (blobsBuilder_ != null) {
                    return blobsBuilder_.getMessageOrBuilderList();
                } else {
                    return java.util.Collections.unmodifiableList(blobs_);
                }
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 6;</code>
             */
            public caffe.Loadcaffe.BlobProto.Builder addBlobsBuilder() {
                return getBlobsFieldBuilder().addBuilder(
                        caffe.Loadcaffe.BlobProto.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 6;</code>
             */
            public caffe.Loadcaffe.BlobProto.Builder addBlobsBuilder(
                    int index) {
                return getBlobsFieldBuilder().addBuilder(
                        index, caffe.Loadcaffe.BlobProto.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 6;</code>
             */
            public java.util.List<caffe.Loadcaffe.BlobProto.Builder>
            getBlobsBuilderList() {
                return getBlobsFieldBuilder().getBuilderList();
            }
            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.BlobProto, caffe.Loadcaffe.BlobProto.Builder, caffe.Loadcaffe.BlobProtoOrBuilder>
            getBlobsFieldBuilder() {
                if (blobsBuilder_ == null) {
                    blobsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            caffe.Loadcaffe.BlobProto, caffe.Loadcaffe.BlobProto.Builder, caffe.Loadcaffe.BlobProtoOrBuilder>(
                            blobs_,
                            ((bitField0_ & 0x00000040) == 0x00000040),
                            getParentForChildren(),
                            isClean());
                    blobs_ = null;
                }
                return blobsBuilder_;
            }

            private com.google.protobuf.LazyStringList param_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            private void ensureParamIsMutable() {
                if (!((bitField0_ & 0x00000080) == 0x00000080)) {
                    param_ = new com.google.protobuf.LazyStringArrayList(param_);
                    bitField0_ |= 0x00000080;
                }
            }
            /**
             * <code>repeated string param = 1001;</code>
             */
            public com.google.protobuf.ProtocolStringList
            getParamList() {
                return param_.getUnmodifiableView();
            }
            /**
             * <code>repeated string param = 1001;</code>
             */
            public int getParamCount() {
                return param_.size();
            }
            /**
             * <code>repeated string param = 1001;</code>
             */
            public java.lang.String getParam(int index) {
                return param_.get(index);
            }
            /**
             * <code>repeated string param = 1001;</code>
             */
            public com.google.protobuf.ByteString
            getParamBytes(int index) {
                return param_.getByteString(index);
            }
            /**
             * <code>repeated string param = 1001;</code>
             */
            public Builder setParam(
                    int index, java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureParamIsMutable();
                param_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string param = 1001;</code>
             */
            public Builder addParam(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureParamIsMutable();
                param_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string param = 1001;</code>
             */
            public Builder addAllParam(
                    java.lang.Iterable<java.lang.String> values) {
                ensureParamIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, param_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string param = 1001;</code>
             */
            public Builder clearParam() {
                param_ = com.google.protobuf.LazyStringArrayList.EMPTY;
                bitField0_ = (bitField0_ & ~0x00000080);
                onChanged();
                return this;
            }
            /**
             * <code>repeated string param = 1001;</code>
             */
            public Builder addParamBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureParamIsMutable();
                param_.add(value);
                onChanged();
                return this;
            }

            private java.util.List<caffe.Loadcaffe.V1LayerParameter.DimCheckMode> blobShareMode_ =
                    java.util.Collections.emptyList();
            private void ensureBlobShareModeIsMutable() {
                if (!((bitField0_ & 0x00000100) == 0x00000100)) {
                    blobShareMode_ = new java.util.ArrayList<caffe.Loadcaffe.V1LayerParameter.DimCheckMode>(blobShareMode_);
                    bitField0_ |= 0x00000100;
                }
            }
            /**
             * <code>repeated .caffe.V1LayerParameter.DimCheckMode blob_share_mode = 1002;</code>
             */
            public java.util.List<caffe.Loadcaffe.V1LayerParameter.DimCheckMode> getBlobShareModeList() {
                return java.util.Collections.unmodifiableList(blobShareMode_);
            }
            /**
             * <code>repeated .caffe.V1LayerParameter.DimCheckMode blob_share_mode = 1002;</code>
             */
            public int getBlobShareModeCount() {
                return blobShareMode_.size();
            }
            /**
             * <code>repeated .caffe.V1LayerParameter.DimCheckMode blob_share_mode = 1002;</code>
             */
            public caffe.Loadcaffe.V1LayerParameter.DimCheckMode getBlobShareMode(int index) {
                return blobShareMode_.get(index);
            }
            /**
             * <code>repeated .caffe.V1LayerParameter.DimCheckMode blob_share_mode = 1002;</code>
             */
            public Builder setBlobShareMode(
                    int index, caffe.Loadcaffe.V1LayerParameter.DimCheckMode value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureBlobShareModeIsMutable();
                blobShareMode_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated .caffe.V1LayerParameter.DimCheckMode blob_share_mode = 1002;</code>
             */
            public Builder addBlobShareMode(caffe.Loadcaffe.V1LayerParameter.DimCheckMode value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                ensureBlobShareModeIsMutable();
                blobShareMode_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated .caffe.V1LayerParameter.DimCheckMode blob_share_mode = 1002;</code>
             */
            public Builder addAllBlobShareMode(
                    java.lang.Iterable<? extends caffe.Loadcaffe.V1LayerParameter.DimCheckMode> values) {
                ensureBlobShareModeIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, blobShareMode_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated .caffe.V1LayerParameter.DimCheckMode blob_share_mode = 1002;</code>
             */
            public Builder clearBlobShareMode() {
                blobShareMode_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000100);
                onChanged();
                return this;
            }

            private java.util.List<java.lang.Float> blobsLr_ = java.util.Collections.emptyList();
            private void ensureBlobsLrIsMutable() {
                if (!((bitField0_ & 0x00000200) == 0x00000200)) {
                    blobsLr_ = new java.util.ArrayList<java.lang.Float>(blobsLr_);
                    bitField0_ |= 0x00000200;
                }
            }
            /**
             * <code>repeated float blobs_lr = 7;</code>
             */
            public java.util.List<java.lang.Float>
            getBlobsLrList() {
                return java.util.Collections.unmodifiableList(blobsLr_);
            }
            /**
             * <code>repeated float blobs_lr = 7;</code>
             */
            public int getBlobsLrCount() {
                return blobsLr_.size();
            }
            /**
             * <code>repeated float blobs_lr = 7;</code>
             */
            public float getBlobsLr(int index) {
                return blobsLr_.get(index);
            }
            /**
             * <code>repeated float blobs_lr = 7;</code>
             */
            public Builder setBlobsLr(
                    int index, float value) {
                ensureBlobsLrIsMutable();
                blobsLr_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float blobs_lr = 7;</code>
             */
            public Builder addBlobsLr(float value) {
                ensureBlobsLrIsMutable();
                blobsLr_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float blobs_lr = 7;</code>
             */
            public Builder addAllBlobsLr(
                    java.lang.Iterable<? extends java.lang.Float> values) {
                ensureBlobsLrIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, blobsLr_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float blobs_lr = 7;</code>
             */
            public Builder clearBlobsLr() {
                blobsLr_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000200);
                onChanged();
                return this;
            }

            private java.util.List<java.lang.Float> weightDecay_ = java.util.Collections.emptyList();
            private void ensureWeightDecayIsMutable() {
                if (!((bitField0_ & 0x00000400) == 0x00000400)) {
                    weightDecay_ = new java.util.ArrayList<java.lang.Float>(weightDecay_);
                    bitField0_ |= 0x00000400;
                }
            }
            /**
             * <code>repeated float weight_decay = 8;</code>
             */
            public java.util.List<java.lang.Float>
            getWeightDecayList() {
                return java.util.Collections.unmodifiableList(weightDecay_);
            }
            /**
             * <code>repeated float weight_decay = 8;</code>
             */
            public int getWeightDecayCount() {
                return weightDecay_.size();
            }
            /**
             * <code>repeated float weight_decay = 8;</code>
             */
            public float getWeightDecay(int index) {
                return weightDecay_.get(index);
            }
            /**
             * <code>repeated float weight_decay = 8;</code>
             */
            public Builder setWeightDecay(
                    int index, float value) {
                ensureWeightDecayIsMutable();
                weightDecay_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float weight_decay = 8;</code>
             */
            public Builder addWeightDecay(float value) {
                ensureWeightDecayIsMutable();
                weightDecay_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float weight_decay = 8;</code>
             */
            public Builder addAllWeightDecay(
                    java.lang.Iterable<? extends java.lang.Float> values) {
                ensureWeightDecayIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, weightDecay_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float weight_decay = 8;</code>
             */
            public Builder clearWeightDecay() {
                weightDecay_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000400);
                onChanged();
                return this;
            }

            private java.util.List<java.lang.Float> lossWeight_ = java.util.Collections.emptyList();
            private void ensureLossWeightIsMutable() {
                if (!((bitField0_ & 0x00000800) == 0x00000800)) {
                    lossWeight_ = new java.util.ArrayList<java.lang.Float>(lossWeight_);
                    bitField0_ |= 0x00000800;
                }
            }
            /**
             * <code>repeated float loss_weight = 35;</code>
             */
            public java.util.List<java.lang.Float>
            getLossWeightList() {
                return java.util.Collections.unmodifiableList(lossWeight_);
            }
            /**
             * <code>repeated float loss_weight = 35;</code>
             */
            public int getLossWeightCount() {
                return lossWeight_.size();
            }
            /**
             * <code>repeated float loss_weight = 35;</code>
             */
            public float getLossWeight(int index) {
                return lossWeight_.get(index);
            }
            /**
             * <code>repeated float loss_weight = 35;</code>
             */
            public Builder setLossWeight(
                    int index, float value) {
                ensureLossWeightIsMutable();
                lossWeight_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float loss_weight = 35;</code>
             */
            public Builder addLossWeight(float value) {
                ensureLossWeightIsMutable();
                lossWeight_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float loss_weight = 35;</code>
             */
            public Builder addAllLossWeight(
                    java.lang.Iterable<? extends java.lang.Float> values) {
                ensureLossWeightIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, lossWeight_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float loss_weight = 35;</code>
             */
            public Builder clearLossWeight() {
                lossWeight_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00000800);
                onChanged();
                return this;
            }

            private caffe.Loadcaffe.AccuracyParameter accuracyParam_ = caffe.Loadcaffe.AccuracyParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.AccuracyParameter, caffe.Loadcaffe.AccuracyParameter.Builder, caffe.Loadcaffe.AccuracyParameterOrBuilder> accuracyParamBuilder_;
            /**
             * <code>optional .caffe.AccuracyParameter accuracy_param = 27;</code>
             */
            public boolean hasAccuracyParam() {
                return ((bitField0_ & 0x00001000) == 0x00001000);
            }
            /**
             * <code>optional .caffe.AccuracyParameter accuracy_param = 27;</code>
             */
            public caffe.Loadcaffe.AccuracyParameter getAccuracyParam() {
                if (accuracyParamBuilder_ == null) {
                    return accuracyParam_;
                } else {
                    return accuracyParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.AccuracyParameter accuracy_param = 27;</code>
             */
            public Builder setAccuracyParam(caffe.Loadcaffe.AccuracyParameter value) {
                if (accuracyParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    accuracyParam_ = value;
                    onChanged();
                } else {
                    accuracyParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00001000;
                return this;
            }
            /**
             * <code>optional .caffe.AccuracyParameter accuracy_param = 27;</code>
             */
            public Builder setAccuracyParam(
                    caffe.Loadcaffe.AccuracyParameter.Builder builderForValue) {
                if (accuracyParamBuilder_ == null) {
                    accuracyParam_ = builderForValue.build();
                    onChanged();
                } else {
                    accuracyParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00001000;
                return this;
            }
            /**
             * <code>optional .caffe.AccuracyParameter accuracy_param = 27;</code>
             */
            public Builder mergeAccuracyParam(caffe.Loadcaffe.AccuracyParameter value) {
                if (accuracyParamBuilder_ == null) {
                    if (((bitField0_ & 0x00001000) == 0x00001000) &&
                            accuracyParam_ != caffe.Loadcaffe.AccuracyParameter.getDefaultInstance()) {
                        accuracyParam_ =
                                caffe.Loadcaffe.AccuracyParameter.newBuilder(accuracyParam_).mergeFrom(value).buildPartial();
                    } else {
                        accuracyParam_ = value;
                    }
                    onChanged();
                } else {
                    accuracyParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00001000;
                return this;
            }
            /**
             * <code>optional .caffe.AccuracyParameter accuracy_param = 27;</code>
             */
            public Builder clearAccuracyParam() {
                if (accuracyParamBuilder_ == null) {
                    accuracyParam_ = caffe.Loadcaffe.AccuracyParameter.getDefaultInstance();
                    onChanged();
                } else {
                    accuracyParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00001000);
                return this;
            }
            /**
             * <code>optional .caffe.AccuracyParameter accuracy_param = 27;</code>
             */
            public caffe.Loadcaffe.AccuracyParameter.Builder getAccuracyParamBuilder() {
                bitField0_ |= 0x00001000;
                onChanged();
                return getAccuracyParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.AccuracyParameter accuracy_param = 27;</code>
             */
            public caffe.Loadcaffe.AccuracyParameterOrBuilder getAccuracyParamOrBuilder() {
                if (accuracyParamBuilder_ != null) {
                    return accuracyParamBuilder_.getMessageOrBuilder();
                } else {
                    return accuracyParam_;
                }
            }
            /**
             * <code>optional .caffe.AccuracyParameter accuracy_param = 27;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.AccuracyParameter, caffe.Loadcaffe.AccuracyParameter.Builder, caffe.Loadcaffe.AccuracyParameterOrBuilder>
            getAccuracyParamFieldBuilder() {
                if (accuracyParamBuilder_ == null) {
                    accuracyParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.AccuracyParameter, caffe.Loadcaffe.AccuracyParameter.Builder, caffe.Loadcaffe.AccuracyParameterOrBuilder>(
                            getAccuracyParam(),
                            getParentForChildren(),
                            isClean());
                    accuracyParam_ = null;
                }
                return accuracyParamBuilder_;
            }

            private caffe.Loadcaffe.ArgMaxParameter argmaxParam_ = caffe.Loadcaffe.ArgMaxParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ArgMaxParameter, caffe.Loadcaffe.ArgMaxParameter.Builder, caffe.Loadcaffe.ArgMaxParameterOrBuilder> argmaxParamBuilder_;
            /**
             * <code>optional .caffe.ArgMaxParameter argmax_param = 23;</code>
             */
            public boolean hasArgmaxParam() {
                return ((bitField0_ & 0x00002000) == 0x00002000);
            }
            /**
             * <code>optional .caffe.ArgMaxParameter argmax_param = 23;</code>
             */
            public caffe.Loadcaffe.ArgMaxParameter getArgmaxParam() {
                if (argmaxParamBuilder_ == null) {
                    return argmaxParam_;
                } else {
                    return argmaxParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.ArgMaxParameter argmax_param = 23;</code>
             */
            public Builder setArgmaxParam(caffe.Loadcaffe.ArgMaxParameter value) {
                if (argmaxParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    argmaxParam_ = value;
                    onChanged();
                } else {
                    argmaxParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00002000;
                return this;
            }
            /**
             * <code>optional .caffe.ArgMaxParameter argmax_param = 23;</code>
             */
            public Builder setArgmaxParam(
                    caffe.Loadcaffe.ArgMaxParameter.Builder builderForValue) {
                if (argmaxParamBuilder_ == null) {
                    argmaxParam_ = builderForValue.build();
                    onChanged();
                } else {
                    argmaxParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00002000;
                return this;
            }
            /**
             * <code>optional .caffe.ArgMaxParameter argmax_param = 23;</code>
             */
            public Builder mergeArgmaxParam(caffe.Loadcaffe.ArgMaxParameter value) {
                if (argmaxParamBuilder_ == null) {
                    if (((bitField0_ & 0x00002000) == 0x00002000) &&
                            argmaxParam_ != caffe.Loadcaffe.ArgMaxParameter.getDefaultInstance()) {
                        argmaxParam_ =
                                caffe.Loadcaffe.ArgMaxParameter.newBuilder(argmaxParam_).mergeFrom(value).buildPartial();
                    } else {
                        argmaxParam_ = value;
                    }
                    onChanged();
                } else {
                    argmaxParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00002000;
                return this;
            }
            /**
             * <code>optional .caffe.ArgMaxParameter argmax_param = 23;</code>
             */
            public Builder clearArgmaxParam() {
                if (argmaxParamBuilder_ == null) {
                    argmaxParam_ = caffe.Loadcaffe.ArgMaxParameter.getDefaultInstance();
                    onChanged();
                } else {
                    argmaxParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00002000);
                return this;
            }
            /**
             * <code>optional .caffe.ArgMaxParameter argmax_param = 23;</code>
             */
            public caffe.Loadcaffe.ArgMaxParameter.Builder getArgmaxParamBuilder() {
                bitField0_ |= 0x00002000;
                onChanged();
                return getArgmaxParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.ArgMaxParameter argmax_param = 23;</code>
             */
            public caffe.Loadcaffe.ArgMaxParameterOrBuilder getArgmaxParamOrBuilder() {
                if (argmaxParamBuilder_ != null) {
                    return argmaxParamBuilder_.getMessageOrBuilder();
                } else {
                    return argmaxParam_;
                }
            }
            /**
             * <code>optional .caffe.ArgMaxParameter argmax_param = 23;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ArgMaxParameter, caffe.Loadcaffe.ArgMaxParameter.Builder, caffe.Loadcaffe.ArgMaxParameterOrBuilder>
            getArgmaxParamFieldBuilder() {
                if (argmaxParamBuilder_ == null) {
                    argmaxParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.ArgMaxParameter, caffe.Loadcaffe.ArgMaxParameter.Builder, caffe.Loadcaffe.ArgMaxParameterOrBuilder>(
                            getArgmaxParam(),
                            getParentForChildren(),
                            isClean());
                    argmaxParam_ = null;
                }
                return argmaxParamBuilder_;
            }

            private caffe.Loadcaffe.ConcatParameter concatParam_ = caffe.Loadcaffe.ConcatParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ConcatParameter, caffe.Loadcaffe.ConcatParameter.Builder, caffe.Loadcaffe.ConcatParameterOrBuilder> concatParamBuilder_;
            /**
             * <code>optional .caffe.ConcatParameter concat_param = 9;</code>
             */
            public boolean hasConcatParam() {
                return ((bitField0_ & 0x00004000) == 0x00004000);
            }
            /**
             * <code>optional .caffe.ConcatParameter concat_param = 9;</code>
             */
            public caffe.Loadcaffe.ConcatParameter getConcatParam() {
                if (concatParamBuilder_ == null) {
                    return concatParam_;
                } else {
                    return concatParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.ConcatParameter concat_param = 9;</code>
             */
            public Builder setConcatParam(caffe.Loadcaffe.ConcatParameter value) {
                if (concatParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    concatParam_ = value;
                    onChanged();
                } else {
                    concatParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00004000;
                return this;
            }
            /**
             * <code>optional .caffe.ConcatParameter concat_param = 9;</code>
             */
            public Builder setConcatParam(
                    caffe.Loadcaffe.ConcatParameter.Builder builderForValue) {
                if (concatParamBuilder_ == null) {
                    concatParam_ = builderForValue.build();
                    onChanged();
                } else {
                    concatParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00004000;
                return this;
            }
            /**
             * <code>optional .caffe.ConcatParameter concat_param = 9;</code>
             */
            public Builder mergeConcatParam(caffe.Loadcaffe.ConcatParameter value) {
                if (concatParamBuilder_ == null) {
                    if (((bitField0_ & 0x00004000) == 0x00004000) &&
                            concatParam_ != caffe.Loadcaffe.ConcatParameter.getDefaultInstance()) {
                        concatParam_ =
                                caffe.Loadcaffe.ConcatParameter.newBuilder(concatParam_).mergeFrom(value).buildPartial();
                    } else {
                        concatParam_ = value;
                    }
                    onChanged();
                } else {
                    concatParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00004000;
                return this;
            }
            /**
             * <code>optional .caffe.ConcatParameter concat_param = 9;</code>
             */
            public Builder clearConcatParam() {
                if (concatParamBuilder_ == null) {
                    concatParam_ = caffe.Loadcaffe.ConcatParameter.getDefaultInstance();
                    onChanged();
                } else {
                    concatParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00004000);
                return this;
            }
            /**
             * <code>optional .caffe.ConcatParameter concat_param = 9;</code>
             */
            public caffe.Loadcaffe.ConcatParameter.Builder getConcatParamBuilder() {
                bitField0_ |= 0x00004000;
                onChanged();
                return getConcatParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.ConcatParameter concat_param = 9;</code>
             */
            public caffe.Loadcaffe.ConcatParameterOrBuilder getConcatParamOrBuilder() {
                if (concatParamBuilder_ != null) {
                    return concatParamBuilder_.getMessageOrBuilder();
                } else {
                    return concatParam_;
                }
            }
            /**
             * <code>optional .caffe.ConcatParameter concat_param = 9;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ConcatParameter, caffe.Loadcaffe.ConcatParameter.Builder, caffe.Loadcaffe.ConcatParameterOrBuilder>
            getConcatParamFieldBuilder() {
                if (concatParamBuilder_ == null) {
                    concatParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.ConcatParameter, caffe.Loadcaffe.ConcatParameter.Builder, caffe.Loadcaffe.ConcatParameterOrBuilder>(
                            getConcatParam(),
                            getParentForChildren(),
                            isClean());
                    concatParam_ = null;
                }
                return concatParamBuilder_;
            }

            private caffe.Loadcaffe.ContrastiveLossParameter contrastiveLossParam_ = caffe.Loadcaffe.ContrastiveLossParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ContrastiveLossParameter, caffe.Loadcaffe.ContrastiveLossParameter.Builder, caffe.Loadcaffe.ContrastiveLossParameterOrBuilder> contrastiveLossParamBuilder_;
            /**
             * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 40;</code>
             */
            public boolean hasContrastiveLossParam() {
                return ((bitField0_ & 0x00008000) == 0x00008000);
            }
            /**
             * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 40;</code>
             */
            public caffe.Loadcaffe.ContrastiveLossParameter getContrastiveLossParam() {
                if (contrastiveLossParamBuilder_ == null) {
                    return contrastiveLossParam_;
                } else {
                    return contrastiveLossParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 40;</code>
             */
            public Builder setContrastiveLossParam(caffe.Loadcaffe.ContrastiveLossParameter value) {
                if (contrastiveLossParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    contrastiveLossParam_ = value;
                    onChanged();
                } else {
                    contrastiveLossParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00008000;
                return this;
            }
            /**
             * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 40;</code>
             */
            public Builder setContrastiveLossParam(
                    caffe.Loadcaffe.ContrastiveLossParameter.Builder builderForValue) {
                if (contrastiveLossParamBuilder_ == null) {
                    contrastiveLossParam_ = builderForValue.build();
                    onChanged();
                } else {
                    contrastiveLossParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00008000;
                return this;
            }
            /**
             * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 40;</code>
             */
            public Builder mergeContrastiveLossParam(caffe.Loadcaffe.ContrastiveLossParameter value) {
                if (contrastiveLossParamBuilder_ == null) {
                    if (((bitField0_ & 0x00008000) == 0x00008000) &&
                            contrastiveLossParam_ != caffe.Loadcaffe.ContrastiveLossParameter.getDefaultInstance()) {
                        contrastiveLossParam_ =
                                caffe.Loadcaffe.ContrastiveLossParameter.newBuilder(contrastiveLossParam_).mergeFrom(value).buildPartial();
                    } else {
                        contrastiveLossParam_ = value;
                    }
                    onChanged();
                } else {
                    contrastiveLossParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00008000;
                return this;
            }
            /**
             * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 40;</code>
             */
            public Builder clearContrastiveLossParam() {
                if (contrastiveLossParamBuilder_ == null) {
                    contrastiveLossParam_ = caffe.Loadcaffe.ContrastiveLossParameter.getDefaultInstance();
                    onChanged();
                } else {
                    contrastiveLossParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00008000);
                return this;
            }
            /**
             * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 40;</code>
             */
            public caffe.Loadcaffe.ContrastiveLossParameter.Builder getContrastiveLossParamBuilder() {
                bitField0_ |= 0x00008000;
                onChanged();
                return getContrastiveLossParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 40;</code>
             */
            public caffe.Loadcaffe.ContrastiveLossParameterOrBuilder getContrastiveLossParamOrBuilder() {
                if (contrastiveLossParamBuilder_ != null) {
                    return contrastiveLossParamBuilder_.getMessageOrBuilder();
                } else {
                    return contrastiveLossParam_;
                }
            }
            /**
             * <code>optional .caffe.ContrastiveLossParameter contrastive_loss_param = 40;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ContrastiveLossParameter, caffe.Loadcaffe.ContrastiveLossParameter.Builder, caffe.Loadcaffe.ContrastiveLossParameterOrBuilder>
            getContrastiveLossParamFieldBuilder() {
                if (contrastiveLossParamBuilder_ == null) {
                    contrastiveLossParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.ContrastiveLossParameter, caffe.Loadcaffe.ContrastiveLossParameter.Builder, caffe.Loadcaffe.ContrastiveLossParameterOrBuilder>(
                            getContrastiveLossParam(),
                            getParentForChildren(),
                            isClean());
                    contrastiveLossParam_ = null;
                }
                return contrastiveLossParamBuilder_;
            }

            private caffe.Loadcaffe.ConvolutionParameter convolutionParam_ = caffe.Loadcaffe.ConvolutionParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ConvolutionParameter, caffe.Loadcaffe.ConvolutionParameter.Builder, caffe.Loadcaffe.ConvolutionParameterOrBuilder> convolutionParamBuilder_;
            /**
             * <code>optional .caffe.ConvolutionParameter convolution_param = 10;</code>
             */
            public boolean hasConvolutionParam() {
                return ((bitField0_ & 0x00010000) == 0x00010000);
            }
            /**
             * <code>optional .caffe.ConvolutionParameter convolution_param = 10;</code>
             */
            public caffe.Loadcaffe.ConvolutionParameter getConvolutionParam() {
                if (convolutionParamBuilder_ == null) {
                    return convolutionParam_;
                } else {
                    return convolutionParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.ConvolutionParameter convolution_param = 10;</code>
             */
            public Builder setConvolutionParam(caffe.Loadcaffe.ConvolutionParameter value) {
                if (convolutionParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    convolutionParam_ = value;
                    onChanged();
                } else {
                    convolutionParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00010000;
                return this;
            }
            /**
             * <code>optional .caffe.ConvolutionParameter convolution_param = 10;</code>
             */
            public Builder setConvolutionParam(
                    caffe.Loadcaffe.ConvolutionParameter.Builder builderForValue) {
                if (convolutionParamBuilder_ == null) {
                    convolutionParam_ = builderForValue.build();
                    onChanged();
                } else {
                    convolutionParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00010000;
                return this;
            }
            /**
             * <code>optional .caffe.ConvolutionParameter convolution_param = 10;</code>
             */
            public Builder mergeConvolutionParam(caffe.Loadcaffe.ConvolutionParameter value) {
                if (convolutionParamBuilder_ == null) {
                    if (((bitField0_ & 0x00010000) == 0x00010000) &&
                            convolutionParam_ != caffe.Loadcaffe.ConvolutionParameter.getDefaultInstance()) {
                        convolutionParam_ =
                                caffe.Loadcaffe.ConvolutionParameter.newBuilder(convolutionParam_).mergeFrom(value).buildPartial();
                    } else {
                        convolutionParam_ = value;
                    }
                    onChanged();
                } else {
                    convolutionParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00010000;
                return this;
            }
            /**
             * <code>optional .caffe.ConvolutionParameter convolution_param = 10;</code>
             */
            public Builder clearConvolutionParam() {
                if (convolutionParamBuilder_ == null) {
                    convolutionParam_ = caffe.Loadcaffe.ConvolutionParameter.getDefaultInstance();
                    onChanged();
                } else {
                    convolutionParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00010000);
                return this;
            }
            /**
             * <code>optional .caffe.ConvolutionParameter convolution_param = 10;</code>
             */
            public caffe.Loadcaffe.ConvolutionParameter.Builder getConvolutionParamBuilder() {
                bitField0_ |= 0x00010000;
                onChanged();
                return getConvolutionParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.ConvolutionParameter convolution_param = 10;</code>
             */
            public caffe.Loadcaffe.ConvolutionParameterOrBuilder getConvolutionParamOrBuilder() {
                if (convolutionParamBuilder_ != null) {
                    return convolutionParamBuilder_.getMessageOrBuilder();
                } else {
                    return convolutionParam_;
                }
            }
            /**
             * <code>optional .caffe.ConvolutionParameter convolution_param = 10;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ConvolutionParameter, caffe.Loadcaffe.ConvolutionParameter.Builder, caffe.Loadcaffe.ConvolutionParameterOrBuilder>
            getConvolutionParamFieldBuilder() {
                if (convolutionParamBuilder_ == null) {
                    convolutionParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.ConvolutionParameter, caffe.Loadcaffe.ConvolutionParameter.Builder, caffe.Loadcaffe.ConvolutionParameterOrBuilder>(
                            getConvolutionParam(),
                            getParentForChildren(),
                            isClean());
                    convolutionParam_ = null;
                }
                return convolutionParamBuilder_;
            }

            private caffe.Loadcaffe.DataParameter dataParam_ = caffe.Loadcaffe.DataParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.DataParameter, caffe.Loadcaffe.DataParameter.Builder, caffe.Loadcaffe.DataParameterOrBuilder> dataParamBuilder_;
            /**
             * <code>optional .caffe.DataParameter data_param = 11;</code>
             */
            public boolean hasDataParam() {
                return ((bitField0_ & 0x00020000) == 0x00020000);
            }
            /**
             * <code>optional .caffe.DataParameter data_param = 11;</code>
             */
            public caffe.Loadcaffe.DataParameter getDataParam() {
                if (dataParamBuilder_ == null) {
                    return dataParam_;
                } else {
                    return dataParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.DataParameter data_param = 11;</code>
             */
            public Builder setDataParam(caffe.Loadcaffe.DataParameter value) {
                if (dataParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    dataParam_ = value;
                    onChanged();
                } else {
                    dataParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00020000;
                return this;
            }
            /**
             * <code>optional .caffe.DataParameter data_param = 11;</code>
             */
            public Builder setDataParam(
                    caffe.Loadcaffe.DataParameter.Builder builderForValue) {
                if (dataParamBuilder_ == null) {
                    dataParam_ = builderForValue.build();
                    onChanged();
                } else {
                    dataParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00020000;
                return this;
            }
            /**
             * <code>optional .caffe.DataParameter data_param = 11;</code>
             */
            public Builder mergeDataParam(caffe.Loadcaffe.DataParameter value) {
                if (dataParamBuilder_ == null) {
                    if (((bitField0_ & 0x00020000) == 0x00020000) &&
                            dataParam_ != caffe.Loadcaffe.DataParameter.getDefaultInstance()) {
                        dataParam_ =
                                caffe.Loadcaffe.DataParameter.newBuilder(dataParam_).mergeFrom(value).buildPartial();
                    } else {
                        dataParam_ = value;
                    }
                    onChanged();
                } else {
                    dataParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00020000;
                return this;
            }
            /**
             * <code>optional .caffe.DataParameter data_param = 11;</code>
             */
            public Builder clearDataParam() {
                if (dataParamBuilder_ == null) {
                    dataParam_ = caffe.Loadcaffe.DataParameter.getDefaultInstance();
                    onChanged();
                } else {
                    dataParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00020000);
                return this;
            }
            /**
             * <code>optional .caffe.DataParameter data_param = 11;</code>
             */
            public caffe.Loadcaffe.DataParameter.Builder getDataParamBuilder() {
                bitField0_ |= 0x00020000;
                onChanged();
                return getDataParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.DataParameter data_param = 11;</code>
             */
            public caffe.Loadcaffe.DataParameterOrBuilder getDataParamOrBuilder() {
                if (dataParamBuilder_ != null) {
                    return dataParamBuilder_.getMessageOrBuilder();
                } else {
                    return dataParam_;
                }
            }
            /**
             * <code>optional .caffe.DataParameter data_param = 11;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.DataParameter, caffe.Loadcaffe.DataParameter.Builder, caffe.Loadcaffe.DataParameterOrBuilder>
            getDataParamFieldBuilder() {
                if (dataParamBuilder_ == null) {
                    dataParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.DataParameter, caffe.Loadcaffe.DataParameter.Builder, caffe.Loadcaffe.DataParameterOrBuilder>(
                            getDataParam(),
                            getParentForChildren(),
                            isClean());
                    dataParam_ = null;
                }
                return dataParamBuilder_;
            }

            private caffe.Loadcaffe.DropoutParameter dropoutParam_ = caffe.Loadcaffe.DropoutParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.DropoutParameter, caffe.Loadcaffe.DropoutParameter.Builder, caffe.Loadcaffe.DropoutParameterOrBuilder> dropoutParamBuilder_;
            /**
             * <code>optional .caffe.DropoutParameter dropout_param = 12;</code>
             */
            public boolean hasDropoutParam() {
                return ((bitField0_ & 0x00040000) == 0x00040000);
            }
            /**
             * <code>optional .caffe.DropoutParameter dropout_param = 12;</code>
             */
            public caffe.Loadcaffe.DropoutParameter getDropoutParam() {
                if (dropoutParamBuilder_ == null) {
                    return dropoutParam_;
                } else {
                    return dropoutParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.DropoutParameter dropout_param = 12;</code>
             */
            public Builder setDropoutParam(caffe.Loadcaffe.DropoutParameter value) {
                if (dropoutParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    dropoutParam_ = value;
                    onChanged();
                } else {
                    dropoutParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00040000;
                return this;
            }
            /**
             * <code>optional .caffe.DropoutParameter dropout_param = 12;</code>
             */
            public Builder setDropoutParam(
                    caffe.Loadcaffe.DropoutParameter.Builder builderForValue) {
                if (dropoutParamBuilder_ == null) {
                    dropoutParam_ = builderForValue.build();
                    onChanged();
                } else {
                    dropoutParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00040000;
                return this;
            }
            /**
             * <code>optional .caffe.DropoutParameter dropout_param = 12;</code>
             */
            public Builder mergeDropoutParam(caffe.Loadcaffe.DropoutParameter value) {
                if (dropoutParamBuilder_ == null) {
                    if (((bitField0_ & 0x00040000) == 0x00040000) &&
                            dropoutParam_ != caffe.Loadcaffe.DropoutParameter.getDefaultInstance()) {
                        dropoutParam_ =
                                caffe.Loadcaffe.DropoutParameter.newBuilder(dropoutParam_).mergeFrom(value).buildPartial();
                    } else {
                        dropoutParam_ = value;
                    }
                    onChanged();
                } else {
                    dropoutParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00040000;
                return this;
            }
            /**
             * <code>optional .caffe.DropoutParameter dropout_param = 12;</code>
             */
            public Builder clearDropoutParam() {
                if (dropoutParamBuilder_ == null) {
                    dropoutParam_ = caffe.Loadcaffe.DropoutParameter.getDefaultInstance();
                    onChanged();
                } else {
                    dropoutParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00040000);
                return this;
            }
            /**
             * <code>optional .caffe.DropoutParameter dropout_param = 12;</code>
             */
            public caffe.Loadcaffe.DropoutParameter.Builder getDropoutParamBuilder() {
                bitField0_ |= 0x00040000;
                onChanged();
                return getDropoutParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.DropoutParameter dropout_param = 12;</code>
             */
            public caffe.Loadcaffe.DropoutParameterOrBuilder getDropoutParamOrBuilder() {
                if (dropoutParamBuilder_ != null) {
                    return dropoutParamBuilder_.getMessageOrBuilder();
                } else {
                    return dropoutParam_;
                }
            }
            /**
             * <code>optional .caffe.DropoutParameter dropout_param = 12;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.DropoutParameter, caffe.Loadcaffe.DropoutParameter.Builder, caffe.Loadcaffe.DropoutParameterOrBuilder>
            getDropoutParamFieldBuilder() {
                if (dropoutParamBuilder_ == null) {
                    dropoutParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.DropoutParameter, caffe.Loadcaffe.DropoutParameter.Builder, caffe.Loadcaffe.DropoutParameterOrBuilder>(
                            getDropoutParam(),
                            getParentForChildren(),
                            isClean());
                    dropoutParam_ = null;
                }
                return dropoutParamBuilder_;
            }

            private caffe.Loadcaffe.DummyDataParameter dummyDataParam_ = caffe.Loadcaffe.DummyDataParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.DummyDataParameter, caffe.Loadcaffe.DummyDataParameter.Builder, caffe.Loadcaffe.DummyDataParameterOrBuilder> dummyDataParamBuilder_;
            /**
             * <code>optional .caffe.DummyDataParameter dummy_data_param = 26;</code>
             */
            public boolean hasDummyDataParam() {
                return ((bitField0_ & 0x00080000) == 0x00080000);
            }
            /**
             * <code>optional .caffe.DummyDataParameter dummy_data_param = 26;</code>
             */
            public caffe.Loadcaffe.DummyDataParameter getDummyDataParam() {
                if (dummyDataParamBuilder_ == null) {
                    return dummyDataParam_;
                } else {
                    return dummyDataParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.DummyDataParameter dummy_data_param = 26;</code>
             */
            public Builder setDummyDataParam(caffe.Loadcaffe.DummyDataParameter value) {
                if (dummyDataParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    dummyDataParam_ = value;
                    onChanged();
                } else {
                    dummyDataParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00080000;
                return this;
            }
            /**
             * <code>optional .caffe.DummyDataParameter dummy_data_param = 26;</code>
             */
            public Builder setDummyDataParam(
                    caffe.Loadcaffe.DummyDataParameter.Builder builderForValue) {
                if (dummyDataParamBuilder_ == null) {
                    dummyDataParam_ = builderForValue.build();
                    onChanged();
                } else {
                    dummyDataParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00080000;
                return this;
            }
            /**
             * <code>optional .caffe.DummyDataParameter dummy_data_param = 26;</code>
             */
            public Builder mergeDummyDataParam(caffe.Loadcaffe.DummyDataParameter value) {
                if (dummyDataParamBuilder_ == null) {
                    if (((bitField0_ & 0x00080000) == 0x00080000) &&
                            dummyDataParam_ != caffe.Loadcaffe.DummyDataParameter.getDefaultInstance()) {
                        dummyDataParam_ =
                                caffe.Loadcaffe.DummyDataParameter.newBuilder(dummyDataParam_).mergeFrom(value).buildPartial();
                    } else {
                        dummyDataParam_ = value;
                    }
                    onChanged();
                } else {
                    dummyDataParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00080000;
                return this;
            }
            /**
             * <code>optional .caffe.DummyDataParameter dummy_data_param = 26;</code>
             */
            public Builder clearDummyDataParam() {
                if (dummyDataParamBuilder_ == null) {
                    dummyDataParam_ = caffe.Loadcaffe.DummyDataParameter.getDefaultInstance();
                    onChanged();
                } else {
                    dummyDataParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00080000);
                return this;
            }
            /**
             * <code>optional .caffe.DummyDataParameter dummy_data_param = 26;</code>
             */
            public caffe.Loadcaffe.DummyDataParameter.Builder getDummyDataParamBuilder() {
                bitField0_ |= 0x00080000;
                onChanged();
                return getDummyDataParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.DummyDataParameter dummy_data_param = 26;</code>
             */
            public caffe.Loadcaffe.DummyDataParameterOrBuilder getDummyDataParamOrBuilder() {
                if (dummyDataParamBuilder_ != null) {
                    return dummyDataParamBuilder_.getMessageOrBuilder();
                } else {
                    return dummyDataParam_;
                }
            }
            /**
             * <code>optional .caffe.DummyDataParameter dummy_data_param = 26;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.DummyDataParameter, caffe.Loadcaffe.DummyDataParameter.Builder, caffe.Loadcaffe.DummyDataParameterOrBuilder>
            getDummyDataParamFieldBuilder() {
                if (dummyDataParamBuilder_ == null) {
                    dummyDataParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.DummyDataParameter, caffe.Loadcaffe.DummyDataParameter.Builder, caffe.Loadcaffe.DummyDataParameterOrBuilder>(
                            getDummyDataParam(),
                            getParentForChildren(),
                            isClean());
                    dummyDataParam_ = null;
                }
                return dummyDataParamBuilder_;
            }

            private caffe.Loadcaffe.EltwiseParameter eltwiseParam_ = caffe.Loadcaffe.EltwiseParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.EltwiseParameter, caffe.Loadcaffe.EltwiseParameter.Builder, caffe.Loadcaffe.EltwiseParameterOrBuilder> eltwiseParamBuilder_;
            /**
             * <code>optional .caffe.EltwiseParameter eltwise_param = 24;</code>
             */
            public boolean hasEltwiseParam() {
                return ((bitField0_ & 0x00100000) == 0x00100000);
            }
            /**
             * <code>optional .caffe.EltwiseParameter eltwise_param = 24;</code>
             */
            public caffe.Loadcaffe.EltwiseParameter getEltwiseParam() {
                if (eltwiseParamBuilder_ == null) {
                    return eltwiseParam_;
                } else {
                    return eltwiseParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.EltwiseParameter eltwise_param = 24;</code>
             */
            public Builder setEltwiseParam(caffe.Loadcaffe.EltwiseParameter value) {
                if (eltwiseParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    eltwiseParam_ = value;
                    onChanged();
                } else {
                    eltwiseParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00100000;
                return this;
            }
            /**
             * <code>optional .caffe.EltwiseParameter eltwise_param = 24;</code>
             */
            public Builder setEltwiseParam(
                    caffe.Loadcaffe.EltwiseParameter.Builder builderForValue) {
                if (eltwiseParamBuilder_ == null) {
                    eltwiseParam_ = builderForValue.build();
                    onChanged();
                } else {
                    eltwiseParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00100000;
                return this;
            }
            /**
             * <code>optional .caffe.EltwiseParameter eltwise_param = 24;</code>
             */
            public Builder mergeEltwiseParam(caffe.Loadcaffe.EltwiseParameter value) {
                if (eltwiseParamBuilder_ == null) {
                    if (((bitField0_ & 0x00100000) == 0x00100000) &&
                            eltwiseParam_ != caffe.Loadcaffe.EltwiseParameter.getDefaultInstance()) {
                        eltwiseParam_ =
                                caffe.Loadcaffe.EltwiseParameter.newBuilder(eltwiseParam_).mergeFrom(value).buildPartial();
                    } else {
                        eltwiseParam_ = value;
                    }
                    onChanged();
                } else {
                    eltwiseParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00100000;
                return this;
            }
            /**
             * <code>optional .caffe.EltwiseParameter eltwise_param = 24;</code>
             */
            public Builder clearEltwiseParam() {
                if (eltwiseParamBuilder_ == null) {
                    eltwiseParam_ = caffe.Loadcaffe.EltwiseParameter.getDefaultInstance();
                    onChanged();
                } else {
                    eltwiseParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00100000);
                return this;
            }
            /**
             * <code>optional .caffe.EltwiseParameter eltwise_param = 24;</code>
             */
            public caffe.Loadcaffe.EltwiseParameter.Builder getEltwiseParamBuilder() {
                bitField0_ |= 0x00100000;
                onChanged();
                return getEltwiseParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.EltwiseParameter eltwise_param = 24;</code>
             */
            public caffe.Loadcaffe.EltwiseParameterOrBuilder getEltwiseParamOrBuilder() {
                if (eltwiseParamBuilder_ != null) {
                    return eltwiseParamBuilder_.getMessageOrBuilder();
                } else {
                    return eltwiseParam_;
                }
            }
            /**
             * <code>optional .caffe.EltwiseParameter eltwise_param = 24;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.EltwiseParameter, caffe.Loadcaffe.EltwiseParameter.Builder, caffe.Loadcaffe.EltwiseParameterOrBuilder>
            getEltwiseParamFieldBuilder() {
                if (eltwiseParamBuilder_ == null) {
                    eltwiseParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.EltwiseParameter, caffe.Loadcaffe.EltwiseParameter.Builder, caffe.Loadcaffe.EltwiseParameterOrBuilder>(
                            getEltwiseParam(),
                            getParentForChildren(),
                            isClean());
                    eltwiseParam_ = null;
                }
                return eltwiseParamBuilder_;
            }

            private caffe.Loadcaffe.ExpParameter expParam_ = caffe.Loadcaffe.ExpParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ExpParameter, caffe.Loadcaffe.ExpParameter.Builder, caffe.Loadcaffe.ExpParameterOrBuilder> expParamBuilder_;
            /**
             * <code>optional .caffe.ExpParameter exp_param = 41;</code>
             */
            public boolean hasExpParam() {
                return ((bitField0_ & 0x00200000) == 0x00200000);
            }
            /**
             * <code>optional .caffe.ExpParameter exp_param = 41;</code>
             */
            public caffe.Loadcaffe.ExpParameter getExpParam() {
                if (expParamBuilder_ == null) {
                    return expParam_;
                } else {
                    return expParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.ExpParameter exp_param = 41;</code>
             */
            public Builder setExpParam(caffe.Loadcaffe.ExpParameter value) {
                if (expParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    expParam_ = value;
                    onChanged();
                } else {
                    expParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00200000;
                return this;
            }
            /**
             * <code>optional .caffe.ExpParameter exp_param = 41;</code>
             */
            public Builder setExpParam(
                    caffe.Loadcaffe.ExpParameter.Builder builderForValue) {
                if (expParamBuilder_ == null) {
                    expParam_ = builderForValue.build();
                    onChanged();
                } else {
                    expParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00200000;
                return this;
            }
            /**
             * <code>optional .caffe.ExpParameter exp_param = 41;</code>
             */
            public Builder mergeExpParam(caffe.Loadcaffe.ExpParameter value) {
                if (expParamBuilder_ == null) {
                    if (((bitField0_ & 0x00200000) == 0x00200000) &&
                            expParam_ != caffe.Loadcaffe.ExpParameter.getDefaultInstance()) {
                        expParam_ =
                                caffe.Loadcaffe.ExpParameter.newBuilder(expParam_).mergeFrom(value).buildPartial();
                    } else {
                        expParam_ = value;
                    }
                    onChanged();
                } else {
                    expParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00200000;
                return this;
            }
            /**
             * <code>optional .caffe.ExpParameter exp_param = 41;</code>
             */
            public Builder clearExpParam() {
                if (expParamBuilder_ == null) {
                    expParam_ = caffe.Loadcaffe.ExpParameter.getDefaultInstance();
                    onChanged();
                } else {
                    expParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00200000);
                return this;
            }
            /**
             * <code>optional .caffe.ExpParameter exp_param = 41;</code>
             */
            public caffe.Loadcaffe.ExpParameter.Builder getExpParamBuilder() {
                bitField0_ |= 0x00200000;
                onChanged();
                return getExpParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.ExpParameter exp_param = 41;</code>
             */
            public caffe.Loadcaffe.ExpParameterOrBuilder getExpParamOrBuilder() {
                if (expParamBuilder_ != null) {
                    return expParamBuilder_.getMessageOrBuilder();
                } else {
                    return expParam_;
                }
            }
            /**
             * <code>optional .caffe.ExpParameter exp_param = 41;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ExpParameter, caffe.Loadcaffe.ExpParameter.Builder, caffe.Loadcaffe.ExpParameterOrBuilder>
            getExpParamFieldBuilder() {
                if (expParamBuilder_ == null) {
                    expParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.ExpParameter, caffe.Loadcaffe.ExpParameter.Builder, caffe.Loadcaffe.ExpParameterOrBuilder>(
                            getExpParam(),
                            getParentForChildren(),
                            isClean());
                    expParam_ = null;
                }
                return expParamBuilder_;
            }

            private caffe.Loadcaffe.HDF5DataParameter hdf5DataParam_ = caffe.Loadcaffe.HDF5DataParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.HDF5DataParameter, caffe.Loadcaffe.HDF5DataParameter.Builder, caffe.Loadcaffe.HDF5DataParameterOrBuilder> hdf5DataParamBuilder_;
            /**
             * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 13;</code>
             */
            public boolean hasHdf5DataParam() {
                return ((bitField0_ & 0x00400000) == 0x00400000);
            }
            /**
             * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 13;</code>
             */
            public caffe.Loadcaffe.HDF5DataParameter getHdf5DataParam() {
                if (hdf5DataParamBuilder_ == null) {
                    return hdf5DataParam_;
                } else {
                    return hdf5DataParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 13;</code>
             */
            public Builder setHdf5DataParam(caffe.Loadcaffe.HDF5DataParameter value) {
                if (hdf5DataParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    hdf5DataParam_ = value;
                    onChanged();
                } else {
                    hdf5DataParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00400000;
                return this;
            }
            /**
             * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 13;</code>
             */
            public Builder setHdf5DataParam(
                    caffe.Loadcaffe.HDF5DataParameter.Builder builderForValue) {
                if (hdf5DataParamBuilder_ == null) {
                    hdf5DataParam_ = builderForValue.build();
                    onChanged();
                } else {
                    hdf5DataParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00400000;
                return this;
            }
            /**
             * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 13;</code>
             */
            public Builder mergeHdf5DataParam(caffe.Loadcaffe.HDF5DataParameter value) {
                if (hdf5DataParamBuilder_ == null) {
                    if (((bitField0_ & 0x00400000) == 0x00400000) &&
                            hdf5DataParam_ != caffe.Loadcaffe.HDF5DataParameter.getDefaultInstance()) {
                        hdf5DataParam_ =
                                caffe.Loadcaffe.HDF5DataParameter.newBuilder(hdf5DataParam_).mergeFrom(value).buildPartial();
                    } else {
                        hdf5DataParam_ = value;
                    }
                    onChanged();
                } else {
                    hdf5DataParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00400000;
                return this;
            }
            /**
             * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 13;</code>
             */
            public Builder clearHdf5DataParam() {
                if (hdf5DataParamBuilder_ == null) {
                    hdf5DataParam_ = caffe.Loadcaffe.HDF5DataParameter.getDefaultInstance();
                    onChanged();
                } else {
                    hdf5DataParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00400000);
                return this;
            }
            /**
             * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 13;</code>
             */
            public caffe.Loadcaffe.HDF5DataParameter.Builder getHdf5DataParamBuilder() {
                bitField0_ |= 0x00400000;
                onChanged();
                return getHdf5DataParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 13;</code>
             */
            public caffe.Loadcaffe.HDF5DataParameterOrBuilder getHdf5DataParamOrBuilder() {
                if (hdf5DataParamBuilder_ != null) {
                    return hdf5DataParamBuilder_.getMessageOrBuilder();
                } else {
                    return hdf5DataParam_;
                }
            }
            /**
             * <code>optional .caffe.HDF5DataParameter hdf5_data_param = 13;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.HDF5DataParameter, caffe.Loadcaffe.HDF5DataParameter.Builder, caffe.Loadcaffe.HDF5DataParameterOrBuilder>
            getHdf5DataParamFieldBuilder() {
                if (hdf5DataParamBuilder_ == null) {
                    hdf5DataParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.HDF5DataParameter, caffe.Loadcaffe.HDF5DataParameter.Builder, caffe.Loadcaffe.HDF5DataParameterOrBuilder>(
                            getHdf5DataParam(),
                            getParentForChildren(),
                            isClean());
                    hdf5DataParam_ = null;
                }
                return hdf5DataParamBuilder_;
            }

            private caffe.Loadcaffe.HDF5OutputParameter hdf5OutputParam_ = caffe.Loadcaffe.HDF5OutputParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.HDF5OutputParameter, caffe.Loadcaffe.HDF5OutputParameter.Builder, caffe.Loadcaffe.HDF5OutputParameterOrBuilder> hdf5OutputParamBuilder_;
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 14;</code>
             */
            public boolean hasHdf5OutputParam() {
                return ((bitField0_ & 0x00800000) == 0x00800000);
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 14;</code>
             */
            public caffe.Loadcaffe.HDF5OutputParameter getHdf5OutputParam() {
                if (hdf5OutputParamBuilder_ == null) {
                    return hdf5OutputParam_;
                } else {
                    return hdf5OutputParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 14;</code>
             */
            public Builder setHdf5OutputParam(caffe.Loadcaffe.HDF5OutputParameter value) {
                if (hdf5OutputParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    hdf5OutputParam_ = value;
                    onChanged();
                } else {
                    hdf5OutputParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00800000;
                return this;
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 14;</code>
             */
            public Builder setHdf5OutputParam(
                    caffe.Loadcaffe.HDF5OutputParameter.Builder builderForValue) {
                if (hdf5OutputParamBuilder_ == null) {
                    hdf5OutputParam_ = builderForValue.build();
                    onChanged();
                } else {
                    hdf5OutputParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00800000;
                return this;
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 14;</code>
             */
            public Builder mergeHdf5OutputParam(caffe.Loadcaffe.HDF5OutputParameter value) {
                if (hdf5OutputParamBuilder_ == null) {
                    if (((bitField0_ & 0x00800000) == 0x00800000) &&
                            hdf5OutputParam_ != caffe.Loadcaffe.HDF5OutputParameter.getDefaultInstance()) {
                        hdf5OutputParam_ =
                                caffe.Loadcaffe.HDF5OutputParameter.newBuilder(hdf5OutputParam_).mergeFrom(value).buildPartial();
                    } else {
                        hdf5OutputParam_ = value;
                    }
                    onChanged();
                } else {
                    hdf5OutputParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00800000;
                return this;
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 14;</code>
             */
            public Builder clearHdf5OutputParam() {
                if (hdf5OutputParamBuilder_ == null) {
                    hdf5OutputParam_ = caffe.Loadcaffe.HDF5OutputParameter.getDefaultInstance();
                    onChanged();
                } else {
                    hdf5OutputParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00800000);
                return this;
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 14;</code>
             */
            public caffe.Loadcaffe.HDF5OutputParameter.Builder getHdf5OutputParamBuilder() {
                bitField0_ |= 0x00800000;
                onChanged();
                return getHdf5OutputParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 14;</code>
             */
            public caffe.Loadcaffe.HDF5OutputParameterOrBuilder getHdf5OutputParamOrBuilder() {
                if (hdf5OutputParamBuilder_ != null) {
                    return hdf5OutputParamBuilder_.getMessageOrBuilder();
                } else {
                    return hdf5OutputParam_;
                }
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 14;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.HDF5OutputParameter, caffe.Loadcaffe.HDF5OutputParameter.Builder, caffe.Loadcaffe.HDF5OutputParameterOrBuilder>
            getHdf5OutputParamFieldBuilder() {
                if (hdf5OutputParamBuilder_ == null) {
                    hdf5OutputParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.HDF5OutputParameter, caffe.Loadcaffe.HDF5OutputParameter.Builder, caffe.Loadcaffe.HDF5OutputParameterOrBuilder>(
                            getHdf5OutputParam(),
                            getParentForChildren(),
                            isClean());
                    hdf5OutputParam_ = null;
                }
                return hdf5OutputParamBuilder_;
            }

            private caffe.Loadcaffe.HingeLossParameter hingeLossParam_ = caffe.Loadcaffe.HingeLossParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.HingeLossParameter, caffe.Loadcaffe.HingeLossParameter.Builder, caffe.Loadcaffe.HingeLossParameterOrBuilder> hingeLossParamBuilder_;
            /**
             * <code>optional .caffe.HingeLossParameter hinge_loss_param = 29;</code>
             */
            public boolean hasHingeLossParam() {
                return ((bitField0_ & 0x01000000) == 0x01000000);
            }
            /**
             * <code>optional .caffe.HingeLossParameter hinge_loss_param = 29;</code>
             */
            public caffe.Loadcaffe.HingeLossParameter getHingeLossParam() {
                if (hingeLossParamBuilder_ == null) {
                    return hingeLossParam_;
                } else {
                    return hingeLossParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.HingeLossParameter hinge_loss_param = 29;</code>
             */
            public Builder setHingeLossParam(caffe.Loadcaffe.HingeLossParameter value) {
                if (hingeLossParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    hingeLossParam_ = value;
                    onChanged();
                } else {
                    hingeLossParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x01000000;
                return this;
            }
            /**
             * <code>optional .caffe.HingeLossParameter hinge_loss_param = 29;</code>
             */
            public Builder setHingeLossParam(
                    caffe.Loadcaffe.HingeLossParameter.Builder builderForValue) {
                if (hingeLossParamBuilder_ == null) {
                    hingeLossParam_ = builderForValue.build();
                    onChanged();
                } else {
                    hingeLossParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x01000000;
                return this;
            }
            /**
             * <code>optional .caffe.HingeLossParameter hinge_loss_param = 29;</code>
             */
            public Builder mergeHingeLossParam(caffe.Loadcaffe.HingeLossParameter value) {
                if (hingeLossParamBuilder_ == null) {
                    if (((bitField0_ & 0x01000000) == 0x01000000) &&
                            hingeLossParam_ != caffe.Loadcaffe.HingeLossParameter.getDefaultInstance()) {
                        hingeLossParam_ =
                                caffe.Loadcaffe.HingeLossParameter.newBuilder(hingeLossParam_).mergeFrom(value).buildPartial();
                    } else {
                        hingeLossParam_ = value;
                    }
                    onChanged();
                } else {
                    hingeLossParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x01000000;
                return this;
            }
            /**
             * <code>optional .caffe.HingeLossParameter hinge_loss_param = 29;</code>
             */
            public Builder clearHingeLossParam() {
                if (hingeLossParamBuilder_ == null) {
                    hingeLossParam_ = caffe.Loadcaffe.HingeLossParameter.getDefaultInstance();
                    onChanged();
                } else {
                    hingeLossParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x01000000);
                return this;
            }
            /**
             * <code>optional .caffe.HingeLossParameter hinge_loss_param = 29;</code>
             */
            public caffe.Loadcaffe.HingeLossParameter.Builder getHingeLossParamBuilder() {
                bitField0_ |= 0x01000000;
                onChanged();
                return getHingeLossParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.HingeLossParameter hinge_loss_param = 29;</code>
             */
            public caffe.Loadcaffe.HingeLossParameterOrBuilder getHingeLossParamOrBuilder() {
                if (hingeLossParamBuilder_ != null) {
                    return hingeLossParamBuilder_.getMessageOrBuilder();
                } else {
                    return hingeLossParam_;
                }
            }
            /**
             * <code>optional .caffe.HingeLossParameter hinge_loss_param = 29;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.HingeLossParameter, caffe.Loadcaffe.HingeLossParameter.Builder, caffe.Loadcaffe.HingeLossParameterOrBuilder>
            getHingeLossParamFieldBuilder() {
                if (hingeLossParamBuilder_ == null) {
                    hingeLossParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.HingeLossParameter, caffe.Loadcaffe.HingeLossParameter.Builder, caffe.Loadcaffe.HingeLossParameterOrBuilder>(
                            getHingeLossParam(),
                            getParentForChildren(),
                            isClean());
                    hingeLossParam_ = null;
                }
                return hingeLossParamBuilder_;
            }

            private caffe.Loadcaffe.ImageDataParameter imageDataParam_ = caffe.Loadcaffe.ImageDataParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ImageDataParameter, caffe.Loadcaffe.ImageDataParameter.Builder, caffe.Loadcaffe.ImageDataParameterOrBuilder> imageDataParamBuilder_;
            /**
             * <code>optional .caffe.ImageDataParameter image_data_param = 15;</code>
             */
            public boolean hasImageDataParam() {
                return ((bitField0_ & 0x02000000) == 0x02000000);
            }
            /**
             * <code>optional .caffe.ImageDataParameter image_data_param = 15;</code>
             */
            public caffe.Loadcaffe.ImageDataParameter getImageDataParam() {
                if (imageDataParamBuilder_ == null) {
                    return imageDataParam_;
                } else {
                    return imageDataParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.ImageDataParameter image_data_param = 15;</code>
             */
            public Builder setImageDataParam(caffe.Loadcaffe.ImageDataParameter value) {
                if (imageDataParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    imageDataParam_ = value;
                    onChanged();
                } else {
                    imageDataParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x02000000;
                return this;
            }
            /**
             * <code>optional .caffe.ImageDataParameter image_data_param = 15;</code>
             */
            public Builder setImageDataParam(
                    caffe.Loadcaffe.ImageDataParameter.Builder builderForValue) {
                if (imageDataParamBuilder_ == null) {
                    imageDataParam_ = builderForValue.build();
                    onChanged();
                } else {
                    imageDataParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x02000000;
                return this;
            }
            /**
             * <code>optional .caffe.ImageDataParameter image_data_param = 15;</code>
             */
            public Builder mergeImageDataParam(caffe.Loadcaffe.ImageDataParameter value) {
                if (imageDataParamBuilder_ == null) {
                    if (((bitField0_ & 0x02000000) == 0x02000000) &&
                            imageDataParam_ != caffe.Loadcaffe.ImageDataParameter.getDefaultInstance()) {
                        imageDataParam_ =
                                caffe.Loadcaffe.ImageDataParameter.newBuilder(imageDataParam_).mergeFrom(value).buildPartial();
                    } else {
                        imageDataParam_ = value;
                    }
                    onChanged();
                } else {
                    imageDataParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x02000000;
                return this;
            }
            /**
             * <code>optional .caffe.ImageDataParameter image_data_param = 15;</code>
             */
            public Builder clearImageDataParam() {
                if (imageDataParamBuilder_ == null) {
                    imageDataParam_ = caffe.Loadcaffe.ImageDataParameter.getDefaultInstance();
                    onChanged();
                } else {
                    imageDataParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x02000000);
                return this;
            }
            /**
             * <code>optional .caffe.ImageDataParameter image_data_param = 15;</code>
             */
            public caffe.Loadcaffe.ImageDataParameter.Builder getImageDataParamBuilder() {
                bitField0_ |= 0x02000000;
                onChanged();
                return getImageDataParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.ImageDataParameter image_data_param = 15;</code>
             */
            public caffe.Loadcaffe.ImageDataParameterOrBuilder getImageDataParamOrBuilder() {
                if (imageDataParamBuilder_ != null) {
                    return imageDataParamBuilder_.getMessageOrBuilder();
                } else {
                    return imageDataParam_;
                }
            }
            /**
             * <code>optional .caffe.ImageDataParameter image_data_param = 15;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ImageDataParameter, caffe.Loadcaffe.ImageDataParameter.Builder, caffe.Loadcaffe.ImageDataParameterOrBuilder>
            getImageDataParamFieldBuilder() {
                if (imageDataParamBuilder_ == null) {
                    imageDataParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.ImageDataParameter, caffe.Loadcaffe.ImageDataParameter.Builder, caffe.Loadcaffe.ImageDataParameterOrBuilder>(
                            getImageDataParam(),
                            getParentForChildren(),
                            isClean());
                    imageDataParam_ = null;
                }
                return imageDataParamBuilder_;
            }

            private caffe.Loadcaffe.InfogainLossParameter infogainLossParam_ = caffe.Loadcaffe.InfogainLossParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.InfogainLossParameter, caffe.Loadcaffe.InfogainLossParameter.Builder, caffe.Loadcaffe.InfogainLossParameterOrBuilder> infogainLossParamBuilder_;
            /**
             * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 16;</code>
             */
            public boolean hasInfogainLossParam() {
                return ((bitField0_ & 0x04000000) == 0x04000000);
            }
            /**
             * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 16;</code>
             */
            public caffe.Loadcaffe.InfogainLossParameter getInfogainLossParam() {
                if (infogainLossParamBuilder_ == null) {
                    return infogainLossParam_;
                } else {
                    return infogainLossParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 16;</code>
             */
            public Builder setInfogainLossParam(caffe.Loadcaffe.InfogainLossParameter value) {
                if (infogainLossParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    infogainLossParam_ = value;
                    onChanged();
                } else {
                    infogainLossParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x04000000;
                return this;
            }
            /**
             * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 16;</code>
             */
            public Builder setInfogainLossParam(
                    caffe.Loadcaffe.InfogainLossParameter.Builder builderForValue) {
                if (infogainLossParamBuilder_ == null) {
                    infogainLossParam_ = builderForValue.build();
                    onChanged();
                } else {
                    infogainLossParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x04000000;
                return this;
            }
            /**
             * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 16;</code>
             */
            public Builder mergeInfogainLossParam(caffe.Loadcaffe.InfogainLossParameter value) {
                if (infogainLossParamBuilder_ == null) {
                    if (((bitField0_ & 0x04000000) == 0x04000000) &&
                            infogainLossParam_ != caffe.Loadcaffe.InfogainLossParameter.getDefaultInstance()) {
                        infogainLossParam_ =
                                caffe.Loadcaffe.InfogainLossParameter.newBuilder(infogainLossParam_).mergeFrom(value).buildPartial();
                    } else {
                        infogainLossParam_ = value;
                    }
                    onChanged();
                } else {
                    infogainLossParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x04000000;
                return this;
            }
            /**
             * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 16;</code>
             */
            public Builder clearInfogainLossParam() {
                if (infogainLossParamBuilder_ == null) {
                    infogainLossParam_ = caffe.Loadcaffe.InfogainLossParameter.getDefaultInstance();
                    onChanged();
                } else {
                    infogainLossParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x04000000);
                return this;
            }
            /**
             * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 16;</code>
             */
            public caffe.Loadcaffe.InfogainLossParameter.Builder getInfogainLossParamBuilder() {
                bitField0_ |= 0x04000000;
                onChanged();
                return getInfogainLossParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 16;</code>
             */
            public caffe.Loadcaffe.InfogainLossParameterOrBuilder getInfogainLossParamOrBuilder() {
                if (infogainLossParamBuilder_ != null) {
                    return infogainLossParamBuilder_.getMessageOrBuilder();
                } else {
                    return infogainLossParam_;
                }
            }
            /**
             * <code>optional .caffe.InfogainLossParameter infogain_loss_param = 16;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.InfogainLossParameter, caffe.Loadcaffe.InfogainLossParameter.Builder, caffe.Loadcaffe.InfogainLossParameterOrBuilder>
            getInfogainLossParamFieldBuilder() {
                if (infogainLossParamBuilder_ == null) {
                    infogainLossParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.InfogainLossParameter, caffe.Loadcaffe.InfogainLossParameter.Builder, caffe.Loadcaffe.InfogainLossParameterOrBuilder>(
                            getInfogainLossParam(),
                            getParentForChildren(),
                            isClean());
                    infogainLossParam_ = null;
                }
                return infogainLossParamBuilder_;
            }

            private caffe.Loadcaffe.InnerProductParameter innerProductParam_ = caffe.Loadcaffe.InnerProductParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.InnerProductParameter, caffe.Loadcaffe.InnerProductParameter.Builder, caffe.Loadcaffe.InnerProductParameterOrBuilder> innerProductParamBuilder_;
            /**
             * <code>optional .caffe.InnerProductParameter inner_product_param = 17;</code>
             */
            public boolean hasInnerProductParam() {
                return ((bitField0_ & 0x08000000) == 0x08000000);
            }
            /**
             * <code>optional .caffe.InnerProductParameter inner_product_param = 17;</code>
             */
            public caffe.Loadcaffe.InnerProductParameter getInnerProductParam() {
                if (innerProductParamBuilder_ == null) {
                    return innerProductParam_;
                } else {
                    return innerProductParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.InnerProductParameter inner_product_param = 17;</code>
             */
            public Builder setInnerProductParam(caffe.Loadcaffe.InnerProductParameter value) {
                if (innerProductParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    innerProductParam_ = value;
                    onChanged();
                } else {
                    innerProductParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x08000000;
                return this;
            }
            /**
             * <code>optional .caffe.InnerProductParameter inner_product_param = 17;</code>
             */
            public Builder setInnerProductParam(
                    caffe.Loadcaffe.InnerProductParameter.Builder builderForValue) {
                if (innerProductParamBuilder_ == null) {
                    innerProductParam_ = builderForValue.build();
                    onChanged();
                } else {
                    innerProductParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x08000000;
                return this;
            }
            /**
             * <code>optional .caffe.InnerProductParameter inner_product_param = 17;</code>
             */
            public Builder mergeInnerProductParam(caffe.Loadcaffe.InnerProductParameter value) {
                if (innerProductParamBuilder_ == null) {
                    if (((bitField0_ & 0x08000000) == 0x08000000) &&
                            innerProductParam_ != caffe.Loadcaffe.InnerProductParameter.getDefaultInstance()) {
                        innerProductParam_ =
                                caffe.Loadcaffe.InnerProductParameter.newBuilder(innerProductParam_).mergeFrom(value).buildPartial();
                    } else {
                        innerProductParam_ = value;
                    }
                    onChanged();
                } else {
                    innerProductParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x08000000;
                return this;
            }
            /**
             * <code>optional .caffe.InnerProductParameter inner_product_param = 17;</code>
             */
            public Builder clearInnerProductParam() {
                if (innerProductParamBuilder_ == null) {
                    innerProductParam_ = caffe.Loadcaffe.InnerProductParameter.getDefaultInstance();
                    onChanged();
                } else {
                    innerProductParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x08000000);
                return this;
            }
            /**
             * <code>optional .caffe.InnerProductParameter inner_product_param = 17;</code>
             */
            public caffe.Loadcaffe.InnerProductParameter.Builder getInnerProductParamBuilder() {
                bitField0_ |= 0x08000000;
                onChanged();
                return getInnerProductParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.InnerProductParameter inner_product_param = 17;</code>
             */
            public caffe.Loadcaffe.InnerProductParameterOrBuilder getInnerProductParamOrBuilder() {
                if (innerProductParamBuilder_ != null) {
                    return innerProductParamBuilder_.getMessageOrBuilder();
                } else {
                    return innerProductParam_;
                }
            }
            /**
             * <code>optional .caffe.InnerProductParameter inner_product_param = 17;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.InnerProductParameter, caffe.Loadcaffe.InnerProductParameter.Builder, caffe.Loadcaffe.InnerProductParameterOrBuilder>
            getInnerProductParamFieldBuilder() {
                if (innerProductParamBuilder_ == null) {
                    innerProductParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.InnerProductParameter, caffe.Loadcaffe.InnerProductParameter.Builder, caffe.Loadcaffe.InnerProductParameterOrBuilder>(
                            getInnerProductParam(),
                            getParentForChildren(),
                            isClean());
                    innerProductParam_ = null;
                }
                return innerProductParamBuilder_;
            }

            private caffe.Loadcaffe.LRNParameter lrnParam_ = caffe.Loadcaffe.LRNParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.LRNParameter, caffe.Loadcaffe.LRNParameter.Builder, caffe.Loadcaffe.LRNParameterOrBuilder> lrnParamBuilder_;
            /**
             * <code>optional .caffe.LRNParameter lrn_param = 18;</code>
             */
            public boolean hasLrnParam() {
                return ((bitField0_ & 0x10000000) == 0x10000000);
            }
            /**
             * <code>optional .caffe.LRNParameter lrn_param = 18;</code>
             */
            public caffe.Loadcaffe.LRNParameter getLrnParam() {
                if (lrnParamBuilder_ == null) {
                    return lrnParam_;
                } else {
                    return lrnParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.LRNParameter lrn_param = 18;</code>
             */
            public Builder setLrnParam(caffe.Loadcaffe.LRNParameter value) {
                if (lrnParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    lrnParam_ = value;
                    onChanged();
                } else {
                    lrnParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x10000000;
                return this;
            }
            /**
             * <code>optional .caffe.LRNParameter lrn_param = 18;</code>
             */
            public Builder setLrnParam(
                    caffe.Loadcaffe.LRNParameter.Builder builderForValue) {
                if (lrnParamBuilder_ == null) {
                    lrnParam_ = builderForValue.build();
                    onChanged();
                } else {
                    lrnParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x10000000;
                return this;
            }
            /**
             * <code>optional .caffe.LRNParameter lrn_param = 18;</code>
             */
            public Builder mergeLrnParam(caffe.Loadcaffe.LRNParameter value) {
                if (lrnParamBuilder_ == null) {
                    if (((bitField0_ & 0x10000000) == 0x10000000) &&
                            lrnParam_ != caffe.Loadcaffe.LRNParameter.getDefaultInstance()) {
                        lrnParam_ =
                                caffe.Loadcaffe.LRNParameter.newBuilder(lrnParam_).mergeFrom(value).buildPartial();
                    } else {
                        lrnParam_ = value;
                    }
                    onChanged();
                } else {
                    lrnParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x10000000;
                return this;
            }
            /**
             * <code>optional .caffe.LRNParameter lrn_param = 18;</code>
             */
            public Builder clearLrnParam() {
                if (lrnParamBuilder_ == null) {
                    lrnParam_ = caffe.Loadcaffe.LRNParameter.getDefaultInstance();
                    onChanged();
                } else {
                    lrnParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x10000000);
                return this;
            }
            /**
             * <code>optional .caffe.LRNParameter lrn_param = 18;</code>
             */
            public caffe.Loadcaffe.LRNParameter.Builder getLrnParamBuilder() {
                bitField0_ |= 0x10000000;
                onChanged();
                return getLrnParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.LRNParameter lrn_param = 18;</code>
             */
            public caffe.Loadcaffe.LRNParameterOrBuilder getLrnParamOrBuilder() {
                if (lrnParamBuilder_ != null) {
                    return lrnParamBuilder_.getMessageOrBuilder();
                } else {
                    return lrnParam_;
                }
            }
            /**
             * <code>optional .caffe.LRNParameter lrn_param = 18;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.LRNParameter, caffe.Loadcaffe.LRNParameter.Builder, caffe.Loadcaffe.LRNParameterOrBuilder>
            getLrnParamFieldBuilder() {
                if (lrnParamBuilder_ == null) {
                    lrnParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.LRNParameter, caffe.Loadcaffe.LRNParameter.Builder, caffe.Loadcaffe.LRNParameterOrBuilder>(
                            getLrnParam(),
                            getParentForChildren(),
                            isClean());
                    lrnParam_ = null;
                }
                return lrnParamBuilder_;
            }

            private caffe.Loadcaffe.MemoryDataParameter memoryDataParam_ = caffe.Loadcaffe.MemoryDataParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.MemoryDataParameter, caffe.Loadcaffe.MemoryDataParameter.Builder, caffe.Loadcaffe.MemoryDataParameterOrBuilder> memoryDataParamBuilder_;
            /**
             * <code>optional .caffe.MemoryDataParameter memory_data_param = 22;</code>
             */
            public boolean hasMemoryDataParam() {
                return ((bitField0_ & 0x20000000) == 0x20000000);
            }
            /**
             * <code>optional .caffe.MemoryDataParameter memory_data_param = 22;</code>
             */
            public caffe.Loadcaffe.MemoryDataParameter getMemoryDataParam() {
                if (memoryDataParamBuilder_ == null) {
                    return memoryDataParam_;
                } else {
                    return memoryDataParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.MemoryDataParameter memory_data_param = 22;</code>
             */
            public Builder setMemoryDataParam(caffe.Loadcaffe.MemoryDataParameter value) {
                if (memoryDataParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    memoryDataParam_ = value;
                    onChanged();
                } else {
                    memoryDataParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x20000000;
                return this;
            }
            /**
             * <code>optional .caffe.MemoryDataParameter memory_data_param = 22;</code>
             */
            public Builder setMemoryDataParam(
                    caffe.Loadcaffe.MemoryDataParameter.Builder builderForValue) {
                if (memoryDataParamBuilder_ == null) {
                    memoryDataParam_ = builderForValue.build();
                    onChanged();
                } else {
                    memoryDataParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x20000000;
                return this;
            }
            /**
             * <code>optional .caffe.MemoryDataParameter memory_data_param = 22;</code>
             */
            public Builder mergeMemoryDataParam(caffe.Loadcaffe.MemoryDataParameter value) {
                if (memoryDataParamBuilder_ == null) {
                    if (((bitField0_ & 0x20000000) == 0x20000000) &&
                            memoryDataParam_ != caffe.Loadcaffe.MemoryDataParameter.getDefaultInstance()) {
                        memoryDataParam_ =
                                caffe.Loadcaffe.MemoryDataParameter.newBuilder(memoryDataParam_).mergeFrom(value).buildPartial();
                    } else {
                        memoryDataParam_ = value;
                    }
                    onChanged();
                } else {
                    memoryDataParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x20000000;
                return this;
            }
            /**
             * <code>optional .caffe.MemoryDataParameter memory_data_param = 22;</code>
             */
            public Builder clearMemoryDataParam() {
                if (memoryDataParamBuilder_ == null) {
                    memoryDataParam_ = caffe.Loadcaffe.MemoryDataParameter.getDefaultInstance();
                    onChanged();
                } else {
                    memoryDataParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x20000000);
                return this;
            }
            /**
             * <code>optional .caffe.MemoryDataParameter memory_data_param = 22;</code>
             */
            public caffe.Loadcaffe.MemoryDataParameter.Builder getMemoryDataParamBuilder() {
                bitField0_ |= 0x20000000;
                onChanged();
                return getMemoryDataParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.MemoryDataParameter memory_data_param = 22;</code>
             */
            public caffe.Loadcaffe.MemoryDataParameterOrBuilder getMemoryDataParamOrBuilder() {
                if (memoryDataParamBuilder_ != null) {
                    return memoryDataParamBuilder_.getMessageOrBuilder();
                } else {
                    return memoryDataParam_;
                }
            }
            /**
             * <code>optional .caffe.MemoryDataParameter memory_data_param = 22;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.MemoryDataParameter, caffe.Loadcaffe.MemoryDataParameter.Builder, caffe.Loadcaffe.MemoryDataParameterOrBuilder>
            getMemoryDataParamFieldBuilder() {
                if (memoryDataParamBuilder_ == null) {
                    memoryDataParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.MemoryDataParameter, caffe.Loadcaffe.MemoryDataParameter.Builder, caffe.Loadcaffe.MemoryDataParameterOrBuilder>(
                            getMemoryDataParam(),
                            getParentForChildren(),
                            isClean());
                    memoryDataParam_ = null;
                }
                return memoryDataParamBuilder_;
            }

            private caffe.Loadcaffe.MVNParameter mvnParam_ = caffe.Loadcaffe.MVNParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.MVNParameter, caffe.Loadcaffe.MVNParameter.Builder, caffe.Loadcaffe.MVNParameterOrBuilder> mvnParamBuilder_;
            /**
             * <code>optional .caffe.MVNParameter mvn_param = 34;</code>
             */
            public boolean hasMvnParam() {
                return ((bitField0_ & 0x40000000) == 0x40000000);
            }
            /**
             * <code>optional .caffe.MVNParameter mvn_param = 34;</code>
             */
            public caffe.Loadcaffe.MVNParameter getMvnParam() {
                if (mvnParamBuilder_ == null) {
                    return mvnParam_;
                } else {
                    return mvnParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.MVNParameter mvn_param = 34;</code>
             */
            public Builder setMvnParam(caffe.Loadcaffe.MVNParameter value) {
                if (mvnParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    mvnParam_ = value;
                    onChanged();
                } else {
                    mvnParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x40000000;
                return this;
            }
            /**
             * <code>optional .caffe.MVNParameter mvn_param = 34;</code>
             */
            public Builder setMvnParam(
                    caffe.Loadcaffe.MVNParameter.Builder builderForValue) {
                if (mvnParamBuilder_ == null) {
                    mvnParam_ = builderForValue.build();
                    onChanged();
                } else {
                    mvnParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x40000000;
                return this;
            }
            /**
             * <code>optional .caffe.MVNParameter mvn_param = 34;</code>
             */
            public Builder mergeMvnParam(caffe.Loadcaffe.MVNParameter value) {
                if (mvnParamBuilder_ == null) {
                    if (((bitField0_ & 0x40000000) == 0x40000000) &&
                            mvnParam_ != caffe.Loadcaffe.MVNParameter.getDefaultInstance()) {
                        mvnParam_ =
                                caffe.Loadcaffe.MVNParameter.newBuilder(mvnParam_).mergeFrom(value).buildPartial();
                    } else {
                        mvnParam_ = value;
                    }
                    onChanged();
                } else {
                    mvnParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x40000000;
                return this;
            }
            /**
             * <code>optional .caffe.MVNParameter mvn_param = 34;</code>
             */
            public Builder clearMvnParam() {
                if (mvnParamBuilder_ == null) {
                    mvnParam_ = caffe.Loadcaffe.MVNParameter.getDefaultInstance();
                    onChanged();
                } else {
                    mvnParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x40000000);
                return this;
            }
            /**
             * <code>optional .caffe.MVNParameter mvn_param = 34;</code>
             */
            public caffe.Loadcaffe.MVNParameter.Builder getMvnParamBuilder() {
                bitField0_ |= 0x40000000;
                onChanged();
                return getMvnParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.MVNParameter mvn_param = 34;</code>
             */
            public caffe.Loadcaffe.MVNParameterOrBuilder getMvnParamOrBuilder() {
                if (mvnParamBuilder_ != null) {
                    return mvnParamBuilder_.getMessageOrBuilder();
                } else {
                    return mvnParam_;
                }
            }
            /**
             * <code>optional .caffe.MVNParameter mvn_param = 34;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.MVNParameter, caffe.Loadcaffe.MVNParameter.Builder, caffe.Loadcaffe.MVNParameterOrBuilder>
            getMvnParamFieldBuilder() {
                if (mvnParamBuilder_ == null) {
                    mvnParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.MVNParameter, caffe.Loadcaffe.MVNParameter.Builder, caffe.Loadcaffe.MVNParameterOrBuilder>(
                            getMvnParam(),
                            getParentForChildren(),
                            isClean());
                    mvnParam_ = null;
                }
                return mvnParamBuilder_;
            }

            private caffe.Loadcaffe.PoolingParameter poolingParam_ = caffe.Loadcaffe.PoolingParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.PoolingParameter, caffe.Loadcaffe.PoolingParameter.Builder, caffe.Loadcaffe.PoolingParameterOrBuilder> poolingParamBuilder_;
            /**
             * <code>optional .caffe.PoolingParameter pooling_param = 19;</code>
             */
            public boolean hasPoolingParam() {
                return ((bitField0_ & 0x80000000) == 0x80000000);
            }
            /**
             * <code>optional .caffe.PoolingParameter pooling_param = 19;</code>
             */
            public caffe.Loadcaffe.PoolingParameter getPoolingParam() {
                if (poolingParamBuilder_ == null) {
                    return poolingParam_;
                } else {
                    return poolingParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.PoolingParameter pooling_param = 19;</code>
             */
            public Builder setPoolingParam(caffe.Loadcaffe.PoolingParameter value) {
                if (poolingParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    poolingParam_ = value;
                    onChanged();
                } else {
                    poolingParamBuilder_.setMessage(value);
                }
                bitField0_ |= 0x80000000;
                return this;
            }
            /**
             * <code>optional .caffe.PoolingParameter pooling_param = 19;</code>
             */
            public Builder setPoolingParam(
                    caffe.Loadcaffe.PoolingParameter.Builder builderForValue) {
                if (poolingParamBuilder_ == null) {
                    poolingParam_ = builderForValue.build();
                    onChanged();
                } else {
                    poolingParamBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x80000000;
                return this;
            }
            /**
             * <code>optional .caffe.PoolingParameter pooling_param = 19;</code>
             */
            public Builder mergePoolingParam(caffe.Loadcaffe.PoolingParameter value) {
                if (poolingParamBuilder_ == null) {
                    if (((bitField0_ & 0x80000000) == 0x80000000) &&
                            poolingParam_ != caffe.Loadcaffe.PoolingParameter.getDefaultInstance()) {
                        poolingParam_ =
                                caffe.Loadcaffe.PoolingParameter.newBuilder(poolingParam_).mergeFrom(value).buildPartial();
                    } else {
                        poolingParam_ = value;
                    }
                    onChanged();
                } else {
                    poolingParamBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x80000000;
                return this;
            }
            /**
             * <code>optional .caffe.PoolingParameter pooling_param = 19;</code>
             */
            public Builder clearPoolingParam() {
                if (poolingParamBuilder_ == null) {
                    poolingParam_ = caffe.Loadcaffe.PoolingParameter.getDefaultInstance();
                    onChanged();
                } else {
                    poolingParamBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x80000000);
                return this;
            }
            /**
             * <code>optional .caffe.PoolingParameter pooling_param = 19;</code>
             */
            public caffe.Loadcaffe.PoolingParameter.Builder getPoolingParamBuilder() {
                bitField0_ |= 0x80000000;
                onChanged();
                return getPoolingParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.PoolingParameter pooling_param = 19;</code>
             */
            public caffe.Loadcaffe.PoolingParameterOrBuilder getPoolingParamOrBuilder() {
                if (poolingParamBuilder_ != null) {
                    return poolingParamBuilder_.getMessageOrBuilder();
                } else {
                    return poolingParam_;
                }
            }
            /**
             * <code>optional .caffe.PoolingParameter pooling_param = 19;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.PoolingParameter, caffe.Loadcaffe.PoolingParameter.Builder, caffe.Loadcaffe.PoolingParameterOrBuilder>
            getPoolingParamFieldBuilder() {
                if (poolingParamBuilder_ == null) {
                    poolingParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.PoolingParameter, caffe.Loadcaffe.PoolingParameter.Builder, caffe.Loadcaffe.PoolingParameterOrBuilder>(
                            getPoolingParam(),
                            getParentForChildren(),
                            isClean());
                    poolingParam_ = null;
                }
                return poolingParamBuilder_;
            }

            private caffe.Loadcaffe.PowerParameter powerParam_ = caffe.Loadcaffe.PowerParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.PowerParameter, caffe.Loadcaffe.PowerParameter.Builder, caffe.Loadcaffe.PowerParameterOrBuilder> powerParamBuilder_;
            /**
             * <code>optional .caffe.PowerParameter power_param = 21;</code>
             */
            public boolean hasPowerParam() {
                return ((bitField1_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional .caffe.PowerParameter power_param = 21;</code>
             */
            public caffe.Loadcaffe.PowerParameter getPowerParam() {
                if (powerParamBuilder_ == null) {
                    return powerParam_;
                } else {
                    return powerParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.PowerParameter power_param = 21;</code>
             */
            public Builder setPowerParam(caffe.Loadcaffe.PowerParameter value) {
                if (powerParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    powerParam_ = value;
                    onChanged();
                } else {
                    powerParamBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000001;
                return this;
            }
            /**
             * <code>optional .caffe.PowerParameter power_param = 21;</code>
             */
            public Builder setPowerParam(
                    caffe.Loadcaffe.PowerParameter.Builder builderForValue) {
                if (powerParamBuilder_ == null) {
                    powerParam_ = builderForValue.build();
                    onChanged();
                } else {
                    powerParamBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000001;
                return this;
            }
            /**
             * <code>optional .caffe.PowerParameter power_param = 21;</code>
             */
            public Builder mergePowerParam(caffe.Loadcaffe.PowerParameter value) {
                if (powerParamBuilder_ == null) {
                    if (((bitField1_ & 0x00000001) == 0x00000001) &&
                            powerParam_ != caffe.Loadcaffe.PowerParameter.getDefaultInstance()) {
                        powerParam_ =
                                caffe.Loadcaffe.PowerParameter.newBuilder(powerParam_).mergeFrom(value).buildPartial();
                    } else {
                        powerParam_ = value;
                    }
                    onChanged();
                } else {
                    powerParamBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000001;
                return this;
            }
            /**
             * <code>optional .caffe.PowerParameter power_param = 21;</code>
             */
            public Builder clearPowerParam() {
                if (powerParamBuilder_ == null) {
                    powerParam_ = caffe.Loadcaffe.PowerParameter.getDefaultInstance();
                    onChanged();
                } else {
                    powerParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000001);
                return this;
            }
            /**
             * <code>optional .caffe.PowerParameter power_param = 21;</code>
             */
            public caffe.Loadcaffe.PowerParameter.Builder getPowerParamBuilder() {
                bitField1_ |= 0x00000001;
                onChanged();
                return getPowerParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.PowerParameter power_param = 21;</code>
             */
            public caffe.Loadcaffe.PowerParameterOrBuilder getPowerParamOrBuilder() {
                if (powerParamBuilder_ != null) {
                    return powerParamBuilder_.getMessageOrBuilder();
                } else {
                    return powerParam_;
                }
            }
            /**
             * <code>optional .caffe.PowerParameter power_param = 21;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.PowerParameter, caffe.Loadcaffe.PowerParameter.Builder, caffe.Loadcaffe.PowerParameterOrBuilder>
            getPowerParamFieldBuilder() {
                if (powerParamBuilder_ == null) {
                    powerParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.PowerParameter, caffe.Loadcaffe.PowerParameter.Builder, caffe.Loadcaffe.PowerParameterOrBuilder>(
                            getPowerParam(),
                            getParentForChildren(),
                            isClean());
                    powerParam_ = null;
                }
                return powerParamBuilder_;
            }

            private caffe.Loadcaffe.ReLUParameter reluParam_ = caffe.Loadcaffe.ReLUParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ReLUParameter, caffe.Loadcaffe.ReLUParameter.Builder, caffe.Loadcaffe.ReLUParameterOrBuilder> reluParamBuilder_;
            /**
             * <code>optional .caffe.ReLUParameter relu_param = 30;</code>
             */
            public boolean hasReluParam() {
                return ((bitField1_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional .caffe.ReLUParameter relu_param = 30;</code>
             */
            public caffe.Loadcaffe.ReLUParameter getReluParam() {
                if (reluParamBuilder_ == null) {
                    return reluParam_;
                } else {
                    return reluParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.ReLUParameter relu_param = 30;</code>
             */
            public Builder setReluParam(caffe.Loadcaffe.ReLUParameter value) {
                if (reluParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    reluParam_ = value;
                    onChanged();
                } else {
                    reluParamBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000002;
                return this;
            }
            /**
             * <code>optional .caffe.ReLUParameter relu_param = 30;</code>
             */
            public Builder setReluParam(
                    caffe.Loadcaffe.ReLUParameter.Builder builderForValue) {
                if (reluParamBuilder_ == null) {
                    reluParam_ = builderForValue.build();
                    onChanged();
                } else {
                    reluParamBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000002;
                return this;
            }
            /**
             * <code>optional .caffe.ReLUParameter relu_param = 30;</code>
             */
            public Builder mergeReluParam(caffe.Loadcaffe.ReLUParameter value) {
                if (reluParamBuilder_ == null) {
                    if (((bitField1_ & 0x00000002) == 0x00000002) &&
                            reluParam_ != caffe.Loadcaffe.ReLUParameter.getDefaultInstance()) {
                        reluParam_ =
                                caffe.Loadcaffe.ReLUParameter.newBuilder(reluParam_).mergeFrom(value).buildPartial();
                    } else {
                        reluParam_ = value;
                    }
                    onChanged();
                } else {
                    reluParamBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000002;
                return this;
            }
            /**
             * <code>optional .caffe.ReLUParameter relu_param = 30;</code>
             */
            public Builder clearReluParam() {
                if (reluParamBuilder_ == null) {
                    reluParam_ = caffe.Loadcaffe.ReLUParameter.getDefaultInstance();
                    onChanged();
                } else {
                    reluParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000002);
                return this;
            }
            /**
             * <code>optional .caffe.ReLUParameter relu_param = 30;</code>
             */
            public caffe.Loadcaffe.ReLUParameter.Builder getReluParamBuilder() {
                bitField1_ |= 0x00000002;
                onChanged();
                return getReluParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.ReLUParameter relu_param = 30;</code>
             */
            public caffe.Loadcaffe.ReLUParameterOrBuilder getReluParamOrBuilder() {
                if (reluParamBuilder_ != null) {
                    return reluParamBuilder_.getMessageOrBuilder();
                } else {
                    return reluParam_;
                }
            }
            /**
             * <code>optional .caffe.ReLUParameter relu_param = 30;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ReLUParameter, caffe.Loadcaffe.ReLUParameter.Builder, caffe.Loadcaffe.ReLUParameterOrBuilder>
            getReluParamFieldBuilder() {
                if (reluParamBuilder_ == null) {
                    reluParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.ReLUParameter, caffe.Loadcaffe.ReLUParameter.Builder, caffe.Loadcaffe.ReLUParameterOrBuilder>(
                            getReluParam(),
                            getParentForChildren(),
                            isClean());
                    reluParam_ = null;
                }
                return reluParamBuilder_;
            }

            private caffe.Loadcaffe.SigmoidParameter sigmoidParam_ = caffe.Loadcaffe.SigmoidParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.SigmoidParameter, caffe.Loadcaffe.SigmoidParameter.Builder, caffe.Loadcaffe.SigmoidParameterOrBuilder> sigmoidParamBuilder_;
            /**
             * <code>optional .caffe.SigmoidParameter sigmoid_param = 38;</code>
             */
            public boolean hasSigmoidParam() {
                return ((bitField1_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional .caffe.SigmoidParameter sigmoid_param = 38;</code>
             */
            public caffe.Loadcaffe.SigmoidParameter getSigmoidParam() {
                if (sigmoidParamBuilder_ == null) {
                    return sigmoidParam_;
                } else {
                    return sigmoidParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.SigmoidParameter sigmoid_param = 38;</code>
             */
            public Builder setSigmoidParam(caffe.Loadcaffe.SigmoidParameter value) {
                if (sigmoidParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    sigmoidParam_ = value;
                    onChanged();
                } else {
                    sigmoidParamBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000004;
                return this;
            }
            /**
             * <code>optional .caffe.SigmoidParameter sigmoid_param = 38;</code>
             */
            public Builder setSigmoidParam(
                    caffe.Loadcaffe.SigmoidParameter.Builder builderForValue) {
                if (sigmoidParamBuilder_ == null) {
                    sigmoidParam_ = builderForValue.build();
                    onChanged();
                } else {
                    sigmoidParamBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000004;
                return this;
            }
            /**
             * <code>optional .caffe.SigmoidParameter sigmoid_param = 38;</code>
             */
            public Builder mergeSigmoidParam(caffe.Loadcaffe.SigmoidParameter value) {
                if (sigmoidParamBuilder_ == null) {
                    if (((bitField1_ & 0x00000004) == 0x00000004) &&
                            sigmoidParam_ != caffe.Loadcaffe.SigmoidParameter.getDefaultInstance()) {
                        sigmoidParam_ =
                                caffe.Loadcaffe.SigmoidParameter.newBuilder(sigmoidParam_).mergeFrom(value).buildPartial();
                    } else {
                        sigmoidParam_ = value;
                    }
                    onChanged();
                } else {
                    sigmoidParamBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000004;
                return this;
            }
            /**
             * <code>optional .caffe.SigmoidParameter sigmoid_param = 38;</code>
             */
            public Builder clearSigmoidParam() {
                if (sigmoidParamBuilder_ == null) {
                    sigmoidParam_ = caffe.Loadcaffe.SigmoidParameter.getDefaultInstance();
                    onChanged();
                } else {
                    sigmoidParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000004);
                return this;
            }
            /**
             * <code>optional .caffe.SigmoidParameter sigmoid_param = 38;</code>
             */
            public caffe.Loadcaffe.SigmoidParameter.Builder getSigmoidParamBuilder() {
                bitField1_ |= 0x00000004;
                onChanged();
                return getSigmoidParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.SigmoidParameter sigmoid_param = 38;</code>
             */
            public caffe.Loadcaffe.SigmoidParameterOrBuilder getSigmoidParamOrBuilder() {
                if (sigmoidParamBuilder_ != null) {
                    return sigmoidParamBuilder_.getMessageOrBuilder();
                } else {
                    return sigmoidParam_;
                }
            }
            /**
             * <code>optional .caffe.SigmoidParameter sigmoid_param = 38;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.SigmoidParameter, caffe.Loadcaffe.SigmoidParameter.Builder, caffe.Loadcaffe.SigmoidParameterOrBuilder>
            getSigmoidParamFieldBuilder() {
                if (sigmoidParamBuilder_ == null) {
                    sigmoidParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.SigmoidParameter, caffe.Loadcaffe.SigmoidParameter.Builder, caffe.Loadcaffe.SigmoidParameterOrBuilder>(
                            getSigmoidParam(),
                            getParentForChildren(),
                            isClean());
                    sigmoidParam_ = null;
                }
                return sigmoidParamBuilder_;
            }

            private caffe.Loadcaffe.SoftmaxParameter softmaxParam_ = caffe.Loadcaffe.SoftmaxParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.SoftmaxParameter, caffe.Loadcaffe.SoftmaxParameter.Builder, caffe.Loadcaffe.SoftmaxParameterOrBuilder> softmaxParamBuilder_;
            /**
             * <code>optional .caffe.SoftmaxParameter softmax_param = 39;</code>
             */
            public boolean hasSoftmaxParam() {
                return ((bitField1_ & 0x00000008) == 0x00000008);
            }
            /**
             * <code>optional .caffe.SoftmaxParameter softmax_param = 39;</code>
             */
            public caffe.Loadcaffe.SoftmaxParameter getSoftmaxParam() {
                if (softmaxParamBuilder_ == null) {
                    return softmaxParam_;
                } else {
                    return softmaxParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.SoftmaxParameter softmax_param = 39;</code>
             */
            public Builder setSoftmaxParam(caffe.Loadcaffe.SoftmaxParameter value) {
                if (softmaxParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    softmaxParam_ = value;
                    onChanged();
                } else {
                    softmaxParamBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000008;
                return this;
            }
            /**
             * <code>optional .caffe.SoftmaxParameter softmax_param = 39;</code>
             */
            public Builder setSoftmaxParam(
                    caffe.Loadcaffe.SoftmaxParameter.Builder builderForValue) {
                if (softmaxParamBuilder_ == null) {
                    softmaxParam_ = builderForValue.build();
                    onChanged();
                } else {
                    softmaxParamBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000008;
                return this;
            }
            /**
             * <code>optional .caffe.SoftmaxParameter softmax_param = 39;</code>
             */
            public Builder mergeSoftmaxParam(caffe.Loadcaffe.SoftmaxParameter value) {
                if (softmaxParamBuilder_ == null) {
                    if (((bitField1_ & 0x00000008) == 0x00000008) &&
                            softmaxParam_ != caffe.Loadcaffe.SoftmaxParameter.getDefaultInstance()) {
                        softmaxParam_ =
                                caffe.Loadcaffe.SoftmaxParameter.newBuilder(softmaxParam_).mergeFrom(value).buildPartial();
                    } else {
                        softmaxParam_ = value;
                    }
                    onChanged();
                } else {
                    softmaxParamBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000008;
                return this;
            }
            /**
             * <code>optional .caffe.SoftmaxParameter softmax_param = 39;</code>
             */
            public Builder clearSoftmaxParam() {
                if (softmaxParamBuilder_ == null) {
                    softmaxParam_ = caffe.Loadcaffe.SoftmaxParameter.getDefaultInstance();
                    onChanged();
                } else {
                    softmaxParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000008);
                return this;
            }
            /**
             * <code>optional .caffe.SoftmaxParameter softmax_param = 39;</code>
             */
            public caffe.Loadcaffe.SoftmaxParameter.Builder getSoftmaxParamBuilder() {
                bitField1_ |= 0x00000008;
                onChanged();
                return getSoftmaxParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.SoftmaxParameter softmax_param = 39;</code>
             */
            public caffe.Loadcaffe.SoftmaxParameterOrBuilder getSoftmaxParamOrBuilder() {
                if (softmaxParamBuilder_ != null) {
                    return softmaxParamBuilder_.getMessageOrBuilder();
                } else {
                    return softmaxParam_;
                }
            }
            /**
             * <code>optional .caffe.SoftmaxParameter softmax_param = 39;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.SoftmaxParameter, caffe.Loadcaffe.SoftmaxParameter.Builder, caffe.Loadcaffe.SoftmaxParameterOrBuilder>
            getSoftmaxParamFieldBuilder() {
                if (softmaxParamBuilder_ == null) {
                    softmaxParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.SoftmaxParameter, caffe.Loadcaffe.SoftmaxParameter.Builder, caffe.Loadcaffe.SoftmaxParameterOrBuilder>(
                            getSoftmaxParam(),
                            getParentForChildren(),
                            isClean());
                    softmaxParam_ = null;
                }
                return softmaxParamBuilder_;
            }

            private caffe.Loadcaffe.SliceParameter sliceParam_ = caffe.Loadcaffe.SliceParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.SliceParameter, caffe.Loadcaffe.SliceParameter.Builder, caffe.Loadcaffe.SliceParameterOrBuilder> sliceParamBuilder_;
            /**
             * <code>optional .caffe.SliceParameter slice_param = 31;</code>
             */
            public boolean hasSliceParam() {
                return ((bitField1_ & 0x00000010) == 0x00000010);
            }
            /**
             * <code>optional .caffe.SliceParameter slice_param = 31;</code>
             */
            public caffe.Loadcaffe.SliceParameter getSliceParam() {
                if (sliceParamBuilder_ == null) {
                    return sliceParam_;
                } else {
                    return sliceParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.SliceParameter slice_param = 31;</code>
             */
            public Builder setSliceParam(caffe.Loadcaffe.SliceParameter value) {
                if (sliceParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    sliceParam_ = value;
                    onChanged();
                } else {
                    sliceParamBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000010;
                return this;
            }
            /**
             * <code>optional .caffe.SliceParameter slice_param = 31;</code>
             */
            public Builder setSliceParam(
                    caffe.Loadcaffe.SliceParameter.Builder builderForValue) {
                if (sliceParamBuilder_ == null) {
                    sliceParam_ = builderForValue.build();
                    onChanged();
                } else {
                    sliceParamBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000010;
                return this;
            }
            /**
             * <code>optional .caffe.SliceParameter slice_param = 31;</code>
             */
            public Builder mergeSliceParam(caffe.Loadcaffe.SliceParameter value) {
                if (sliceParamBuilder_ == null) {
                    if (((bitField1_ & 0x00000010) == 0x00000010) &&
                            sliceParam_ != caffe.Loadcaffe.SliceParameter.getDefaultInstance()) {
                        sliceParam_ =
                                caffe.Loadcaffe.SliceParameter.newBuilder(sliceParam_).mergeFrom(value).buildPartial();
                    } else {
                        sliceParam_ = value;
                    }
                    onChanged();
                } else {
                    sliceParamBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000010;
                return this;
            }
            /**
             * <code>optional .caffe.SliceParameter slice_param = 31;</code>
             */
            public Builder clearSliceParam() {
                if (sliceParamBuilder_ == null) {
                    sliceParam_ = caffe.Loadcaffe.SliceParameter.getDefaultInstance();
                    onChanged();
                } else {
                    sliceParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000010);
                return this;
            }
            /**
             * <code>optional .caffe.SliceParameter slice_param = 31;</code>
             */
            public caffe.Loadcaffe.SliceParameter.Builder getSliceParamBuilder() {
                bitField1_ |= 0x00000010;
                onChanged();
                return getSliceParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.SliceParameter slice_param = 31;</code>
             */
            public caffe.Loadcaffe.SliceParameterOrBuilder getSliceParamOrBuilder() {
                if (sliceParamBuilder_ != null) {
                    return sliceParamBuilder_.getMessageOrBuilder();
                } else {
                    return sliceParam_;
                }
            }
            /**
             * <code>optional .caffe.SliceParameter slice_param = 31;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.SliceParameter, caffe.Loadcaffe.SliceParameter.Builder, caffe.Loadcaffe.SliceParameterOrBuilder>
            getSliceParamFieldBuilder() {
                if (sliceParamBuilder_ == null) {
                    sliceParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.SliceParameter, caffe.Loadcaffe.SliceParameter.Builder, caffe.Loadcaffe.SliceParameterOrBuilder>(
                            getSliceParam(),
                            getParentForChildren(),
                            isClean());
                    sliceParam_ = null;
                }
                return sliceParamBuilder_;
            }

            private caffe.Loadcaffe.TanHParameter tanhParam_ = caffe.Loadcaffe.TanHParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.TanHParameter, caffe.Loadcaffe.TanHParameter.Builder, caffe.Loadcaffe.TanHParameterOrBuilder> tanhParamBuilder_;
            /**
             * <code>optional .caffe.TanHParameter tanh_param = 37;</code>
             */
            public boolean hasTanhParam() {
                return ((bitField1_ & 0x00000020) == 0x00000020);
            }
            /**
             * <code>optional .caffe.TanHParameter tanh_param = 37;</code>
             */
            public caffe.Loadcaffe.TanHParameter getTanhParam() {
                if (tanhParamBuilder_ == null) {
                    return tanhParam_;
                } else {
                    return tanhParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.TanHParameter tanh_param = 37;</code>
             */
            public Builder setTanhParam(caffe.Loadcaffe.TanHParameter value) {
                if (tanhParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    tanhParam_ = value;
                    onChanged();
                } else {
                    tanhParamBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000020;
                return this;
            }
            /**
             * <code>optional .caffe.TanHParameter tanh_param = 37;</code>
             */
            public Builder setTanhParam(
                    caffe.Loadcaffe.TanHParameter.Builder builderForValue) {
                if (tanhParamBuilder_ == null) {
                    tanhParam_ = builderForValue.build();
                    onChanged();
                } else {
                    tanhParamBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000020;
                return this;
            }
            /**
             * <code>optional .caffe.TanHParameter tanh_param = 37;</code>
             */
            public Builder mergeTanhParam(caffe.Loadcaffe.TanHParameter value) {
                if (tanhParamBuilder_ == null) {
                    if (((bitField1_ & 0x00000020) == 0x00000020) &&
                            tanhParam_ != caffe.Loadcaffe.TanHParameter.getDefaultInstance()) {
                        tanhParam_ =
                                caffe.Loadcaffe.TanHParameter.newBuilder(tanhParam_).mergeFrom(value).buildPartial();
                    } else {
                        tanhParam_ = value;
                    }
                    onChanged();
                } else {
                    tanhParamBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000020;
                return this;
            }
            /**
             * <code>optional .caffe.TanHParameter tanh_param = 37;</code>
             */
            public Builder clearTanhParam() {
                if (tanhParamBuilder_ == null) {
                    tanhParam_ = caffe.Loadcaffe.TanHParameter.getDefaultInstance();
                    onChanged();
                } else {
                    tanhParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000020);
                return this;
            }
            /**
             * <code>optional .caffe.TanHParameter tanh_param = 37;</code>
             */
            public caffe.Loadcaffe.TanHParameter.Builder getTanhParamBuilder() {
                bitField1_ |= 0x00000020;
                onChanged();
                return getTanhParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.TanHParameter tanh_param = 37;</code>
             */
            public caffe.Loadcaffe.TanHParameterOrBuilder getTanhParamOrBuilder() {
                if (tanhParamBuilder_ != null) {
                    return tanhParamBuilder_.getMessageOrBuilder();
                } else {
                    return tanhParam_;
                }
            }
            /**
             * <code>optional .caffe.TanHParameter tanh_param = 37;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.TanHParameter, caffe.Loadcaffe.TanHParameter.Builder, caffe.Loadcaffe.TanHParameterOrBuilder>
            getTanhParamFieldBuilder() {
                if (tanhParamBuilder_ == null) {
                    tanhParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.TanHParameter, caffe.Loadcaffe.TanHParameter.Builder, caffe.Loadcaffe.TanHParameterOrBuilder>(
                            getTanhParam(),
                            getParentForChildren(),
                            isClean());
                    tanhParam_ = null;
                }
                return tanhParamBuilder_;
            }

            private caffe.Loadcaffe.ThresholdParameter thresholdParam_ = caffe.Loadcaffe.ThresholdParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ThresholdParameter, caffe.Loadcaffe.ThresholdParameter.Builder, caffe.Loadcaffe.ThresholdParameterOrBuilder> thresholdParamBuilder_;
            /**
             * <code>optional .caffe.ThresholdParameter threshold_param = 25;</code>
             */
            public boolean hasThresholdParam() {
                return ((bitField1_ & 0x00000040) == 0x00000040);
            }
            /**
             * <code>optional .caffe.ThresholdParameter threshold_param = 25;</code>
             */
            public caffe.Loadcaffe.ThresholdParameter getThresholdParam() {
                if (thresholdParamBuilder_ == null) {
                    return thresholdParam_;
                } else {
                    return thresholdParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.ThresholdParameter threshold_param = 25;</code>
             */
            public Builder setThresholdParam(caffe.Loadcaffe.ThresholdParameter value) {
                if (thresholdParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    thresholdParam_ = value;
                    onChanged();
                } else {
                    thresholdParamBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000040;
                return this;
            }
            /**
             * <code>optional .caffe.ThresholdParameter threshold_param = 25;</code>
             */
            public Builder setThresholdParam(
                    caffe.Loadcaffe.ThresholdParameter.Builder builderForValue) {
                if (thresholdParamBuilder_ == null) {
                    thresholdParam_ = builderForValue.build();
                    onChanged();
                } else {
                    thresholdParamBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000040;
                return this;
            }
            /**
             * <code>optional .caffe.ThresholdParameter threshold_param = 25;</code>
             */
            public Builder mergeThresholdParam(caffe.Loadcaffe.ThresholdParameter value) {
                if (thresholdParamBuilder_ == null) {
                    if (((bitField1_ & 0x00000040) == 0x00000040) &&
                            thresholdParam_ != caffe.Loadcaffe.ThresholdParameter.getDefaultInstance()) {
                        thresholdParam_ =
                                caffe.Loadcaffe.ThresholdParameter.newBuilder(thresholdParam_).mergeFrom(value).buildPartial();
                    } else {
                        thresholdParam_ = value;
                    }
                    onChanged();
                } else {
                    thresholdParamBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000040;
                return this;
            }
            /**
             * <code>optional .caffe.ThresholdParameter threshold_param = 25;</code>
             */
            public Builder clearThresholdParam() {
                if (thresholdParamBuilder_ == null) {
                    thresholdParam_ = caffe.Loadcaffe.ThresholdParameter.getDefaultInstance();
                    onChanged();
                } else {
                    thresholdParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000040);
                return this;
            }
            /**
             * <code>optional .caffe.ThresholdParameter threshold_param = 25;</code>
             */
            public caffe.Loadcaffe.ThresholdParameter.Builder getThresholdParamBuilder() {
                bitField1_ |= 0x00000040;
                onChanged();
                return getThresholdParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.ThresholdParameter threshold_param = 25;</code>
             */
            public caffe.Loadcaffe.ThresholdParameterOrBuilder getThresholdParamOrBuilder() {
                if (thresholdParamBuilder_ != null) {
                    return thresholdParamBuilder_.getMessageOrBuilder();
                } else {
                    return thresholdParam_;
                }
            }
            /**
             * <code>optional .caffe.ThresholdParameter threshold_param = 25;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.ThresholdParameter, caffe.Loadcaffe.ThresholdParameter.Builder, caffe.Loadcaffe.ThresholdParameterOrBuilder>
            getThresholdParamFieldBuilder() {
                if (thresholdParamBuilder_ == null) {
                    thresholdParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.ThresholdParameter, caffe.Loadcaffe.ThresholdParameter.Builder, caffe.Loadcaffe.ThresholdParameterOrBuilder>(
                            getThresholdParam(),
                            getParentForChildren(),
                            isClean());
                    thresholdParam_ = null;
                }
                return thresholdParamBuilder_;
            }

            private caffe.Loadcaffe.WindowDataParameter windowDataParam_ = caffe.Loadcaffe.WindowDataParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.WindowDataParameter, caffe.Loadcaffe.WindowDataParameter.Builder, caffe.Loadcaffe.WindowDataParameterOrBuilder> windowDataParamBuilder_;
            /**
             * <code>optional .caffe.WindowDataParameter window_data_param = 20;</code>
             */
            public boolean hasWindowDataParam() {
                return ((bitField1_ & 0x00000080) == 0x00000080);
            }
            /**
             * <code>optional .caffe.WindowDataParameter window_data_param = 20;</code>
             */
            public caffe.Loadcaffe.WindowDataParameter getWindowDataParam() {
                if (windowDataParamBuilder_ == null) {
                    return windowDataParam_;
                } else {
                    return windowDataParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.WindowDataParameter window_data_param = 20;</code>
             */
            public Builder setWindowDataParam(caffe.Loadcaffe.WindowDataParameter value) {
                if (windowDataParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    windowDataParam_ = value;
                    onChanged();
                } else {
                    windowDataParamBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000080;
                return this;
            }
            /**
             * <code>optional .caffe.WindowDataParameter window_data_param = 20;</code>
             */
            public Builder setWindowDataParam(
                    caffe.Loadcaffe.WindowDataParameter.Builder builderForValue) {
                if (windowDataParamBuilder_ == null) {
                    windowDataParam_ = builderForValue.build();
                    onChanged();
                } else {
                    windowDataParamBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000080;
                return this;
            }
            /**
             * <code>optional .caffe.WindowDataParameter window_data_param = 20;</code>
             */
            public Builder mergeWindowDataParam(caffe.Loadcaffe.WindowDataParameter value) {
                if (windowDataParamBuilder_ == null) {
                    if (((bitField1_ & 0x00000080) == 0x00000080) &&
                            windowDataParam_ != caffe.Loadcaffe.WindowDataParameter.getDefaultInstance()) {
                        windowDataParam_ =
                                caffe.Loadcaffe.WindowDataParameter.newBuilder(windowDataParam_).mergeFrom(value).buildPartial();
                    } else {
                        windowDataParam_ = value;
                    }
                    onChanged();
                } else {
                    windowDataParamBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000080;
                return this;
            }
            /**
             * <code>optional .caffe.WindowDataParameter window_data_param = 20;</code>
             */
            public Builder clearWindowDataParam() {
                if (windowDataParamBuilder_ == null) {
                    windowDataParam_ = caffe.Loadcaffe.WindowDataParameter.getDefaultInstance();
                    onChanged();
                } else {
                    windowDataParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000080);
                return this;
            }
            /**
             * <code>optional .caffe.WindowDataParameter window_data_param = 20;</code>
             */
            public caffe.Loadcaffe.WindowDataParameter.Builder getWindowDataParamBuilder() {
                bitField1_ |= 0x00000080;
                onChanged();
                return getWindowDataParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.WindowDataParameter window_data_param = 20;</code>
             */
            public caffe.Loadcaffe.WindowDataParameterOrBuilder getWindowDataParamOrBuilder() {
                if (windowDataParamBuilder_ != null) {
                    return windowDataParamBuilder_.getMessageOrBuilder();
                } else {
                    return windowDataParam_;
                }
            }
            /**
             * <code>optional .caffe.WindowDataParameter window_data_param = 20;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.WindowDataParameter, caffe.Loadcaffe.WindowDataParameter.Builder, caffe.Loadcaffe.WindowDataParameterOrBuilder>
            getWindowDataParamFieldBuilder() {
                if (windowDataParamBuilder_ == null) {
                    windowDataParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.WindowDataParameter, caffe.Loadcaffe.WindowDataParameter.Builder, caffe.Loadcaffe.WindowDataParameterOrBuilder>(
                            getWindowDataParam(),
                            getParentForChildren(),
                            isClean());
                    windowDataParam_ = null;
                }
                return windowDataParamBuilder_;
            }

            private caffe.Loadcaffe.TransformationParameter transformParam_ = caffe.Loadcaffe.TransformationParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.TransformationParameter, caffe.Loadcaffe.TransformationParameter.Builder, caffe.Loadcaffe.TransformationParameterOrBuilder> transformParamBuilder_;
            /**
             * <code>optional .caffe.TransformationParameter transform_param = 36;</code>
             */
            public boolean hasTransformParam() {
                return ((bitField1_ & 0x00000100) == 0x00000100);
            }
            /**
             * <code>optional .caffe.TransformationParameter transform_param = 36;</code>
             */
            public caffe.Loadcaffe.TransformationParameter getTransformParam() {
                if (transformParamBuilder_ == null) {
                    return transformParam_;
                } else {
                    return transformParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.TransformationParameter transform_param = 36;</code>
             */
            public Builder setTransformParam(caffe.Loadcaffe.TransformationParameter value) {
                if (transformParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    transformParam_ = value;
                    onChanged();
                } else {
                    transformParamBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000100;
                return this;
            }
            /**
             * <code>optional .caffe.TransformationParameter transform_param = 36;</code>
             */
            public Builder setTransformParam(
                    caffe.Loadcaffe.TransformationParameter.Builder builderForValue) {
                if (transformParamBuilder_ == null) {
                    transformParam_ = builderForValue.build();
                    onChanged();
                } else {
                    transformParamBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000100;
                return this;
            }
            /**
             * <code>optional .caffe.TransformationParameter transform_param = 36;</code>
             */
            public Builder mergeTransformParam(caffe.Loadcaffe.TransformationParameter value) {
                if (transformParamBuilder_ == null) {
                    if (((bitField1_ & 0x00000100) == 0x00000100) &&
                            transformParam_ != caffe.Loadcaffe.TransformationParameter.getDefaultInstance()) {
                        transformParam_ =
                                caffe.Loadcaffe.TransformationParameter.newBuilder(transformParam_).mergeFrom(value).buildPartial();
                    } else {
                        transformParam_ = value;
                    }
                    onChanged();
                } else {
                    transformParamBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000100;
                return this;
            }
            /**
             * <code>optional .caffe.TransformationParameter transform_param = 36;</code>
             */
            public Builder clearTransformParam() {
                if (transformParamBuilder_ == null) {
                    transformParam_ = caffe.Loadcaffe.TransformationParameter.getDefaultInstance();
                    onChanged();
                } else {
                    transformParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000100);
                return this;
            }
            /**
             * <code>optional .caffe.TransformationParameter transform_param = 36;</code>
             */
            public caffe.Loadcaffe.TransformationParameter.Builder getTransformParamBuilder() {
                bitField1_ |= 0x00000100;
                onChanged();
                return getTransformParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.TransformationParameter transform_param = 36;</code>
             */
            public caffe.Loadcaffe.TransformationParameterOrBuilder getTransformParamOrBuilder() {
                if (transformParamBuilder_ != null) {
                    return transformParamBuilder_.getMessageOrBuilder();
                } else {
                    return transformParam_;
                }
            }
            /**
             * <code>optional .caffe.TransformationParameter transform_param = 36;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.TransformationParameter, caffe.Loadcaffe.TransformationParameter.Builder, caffe.Loadcaffe.TransformationParameterOrBuilder>
            getTransformParamFieldBuilder() {
                if (transformParamBuilder_ == null) {
                    transformParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.TransformationParameter, caffe.Loadcaffe.TransformationParameter.Builder, caffe.Loadcaffe.TransformationParameterOrBuilder>(
                            getTransformParam(),
                            getParentForChildren(),
                            isClean());
                    transformParam_ = null;
                }
                return transformParamBuilder_;
            }

            private caffe.Loadcaffe.LossParameter lossParam_ = caffe.Loadcaffe.LossParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.LossParameter, caffe.Loadcaffe.LossParameter.Builder, caffe.Loadcaffe.LossParameterOrBuilder> lossParamBuilder_;
            /**
             * <code>optional .caffe.LossParameter loss_param = 42;</code>
             */
            public boolean hasLossParam() {
                return ((bitField1_ & 0x00000200) == 0x00000200);
            }
            /**
             * <code>optional .caffe.LossParameter loss_param = 42;</code>
             */
            public caffe.Loadcaffe.LossParameter getLossParam() {
                if (lossParamBuilder_ == null) {
                    return lossParam_;
                } else {
                    return lossParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.LossParameter loss_param = 42;</code>
             */
            public Builder setLossParam(caffe.Loadcaffe.LossParameter value) {
                if (lossParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    lossParam_ = value;
                    onChanged();
                } else {
                    lossParamBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000200;
                return this;
            }
            /**
             * <code>optional .caffe.LossParameter loss_param = 42;</code>
             */
            public Builder setLossParam(
                    caffe.Loadcaffe.LossParameter.Builder builderForValue) {
                if (lossParamBuilder_ == null) {
                    lossParam_ = builderForValue.build();
                    onChanged();
                } else {
                    lossParamBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000200;
                return this;
            }
            /**
             * <code>optional .caffe.LossParameter loss_param = 42;</code>
             */
            public Builder mergeLossParam(caffe.Loadcaffe.LossParameter value) {
                if (lossParamBuilder_ == null) {
                    if (((bitField1_ & 0x00000200) == 0x00000200) &&
                            lossParam_ != caffe.Loadcaffe.LossParameter.getDefaultInstance()) {
                        lossParam_ =
                                caffe.Loadcaffe.LossParameter.newBuilder(lossParam_).mergeFrom(value).buildPartial();
                    } else {
                        lossParam_ = value;
                    }
                    onChanged();
                } else {
                    lossParamBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000200;
                return this;
            }
            /**
             * <code>optional .caffe.LossParameter loss_param = 42;</code>
             */
            public Builder clearLossParam() {
                if (lossParamBuilder_ == null) {
                    lossParam_ = caffe.Loadcaffe.LossParameter.getDefaultInstance();
                    onChanged();
                } else {
                    lossParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000200);
                return this;
            }
            /**
             * <code>optional .caffe.LossParameter loss_param = 42;</code>
             */
            public caffe.Loadcaffe.LossParameter.Builder getLossParamBuilder() {
                bitField1_ |= 0x00000200;
                onChanged();
                return getLossParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.LossParameter loss_param = 42;</code>
             */
            public caffe.Loadcaffe.LossParameterOrBuilder getLossParamOrBuilder() {
                if (lossParamBuilder_ != null) {
                    return lossParamBuilder_.getMessageOrBuilder();
                } else {
                    return lossParam_;
                }
            }
            /**
             * <code>optional .caffe.LossParameter loss_param = 42;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.LossParameter, caffe.Loadcaffe.LossParameter.Builder, caffe.Loadcaffe.LossParameterOrBuilder>
            getLossParamFieldBuilder() {
                if (lossParamBuilder_ == null) {
                    lossParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.LossParameter, caffe.Loadcaffe.LossParameter.Builder, caffe.Loadcaffe.LossParameterOrBuilder>(
                            getLossParam(),
                            getParentForChildren(),
                            isClean());
                    lossParam_ = null;
                }
                return lossParamBuilder_;
            }

            private caffe.Loadcaffe.V0LayerParameter layer_ = caffe.Loadcaffe.V0LayerParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.V0LayerParameter, caffe.Loadcaffe.V0LayerParameter.Builder, caffe.Loadcaffe.V0LayerParameterOrBuilder> layerBuilder_;
            /**
             * <code>optional .caffe.V0LayerParameter layer = 1;</code>
             */
            public boolean hasLayer() {
                return ((bitField1_ & 0x00000400) == 0x00000400);
            }
            /**
             * <code>optional .caffe.V0LayerParameter layer = 1;</code>
             */
            public caffe.Loadcaffe.V0LayerParameter getLayer() {
                if (layerBuilder_ == null) {
                    return layer_;
                } else {
                    return layerBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.V0LayerParameter layer = 1;</code>
             */
            public Builder setLayer(caffe.Loadcaffe.V0LayerParameter value) {
                if (layerBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    layer_ = value;
                    onChanged();
                } else {
                    layerBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000400;
                return this;
            }
            /**
             * <code>optional .caffe.V0LayerParameter layer = 1;</code>
             */
            public Builder setLayer(
                    caffe.Loadcaffe.V0LayerParameter.Builder builderForValue) {
                if (layerBuilder_ == null) {
                    layer_ = builderForValue.build();
                    onChanged();
                } else {
                    layerBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000400;
                return this;
            }
            /**
             * <code>optional .caffe.V0LayerParameter layer = 1;</code>
             */
            public Builder mergeLayer(caffe.Loadcaffe.V0LayerParameter value) {
                if (layerBuilder_ == null) {
                    if (((bitField1_ & 0x00000400) == 0x00000400) &&
                            layer_ != caffe.Loadcaffe.V0LayerParameter.getDefaultInstance()) {
                        layer_ =
                                caffe.Loadcaffe.V0LayerParameter.newBuilder(layer_).mergeFrom(value).buildPartial();
                    } else {
                        layer_ = value;
                    }
                    onChanged();
                } else {
                    layerBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000400;
                return this;
            }
            /**
             * <code>optional .caffe.V0LayerParameter layer = 1;</code>
             */
            public Builder clearLayer() {
                if (layerBuilder_ == null) {
                    layer_ = caffe.Loadcaffe.V0LayerParameter.getDefaultInstance();
                    onChanged();
                } else {
                    layerBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000400);
                return this;
            }
            /**
             * <code>optional .caffe.V0LayerParameter layer = 1;</code>
             */
            public caffe.Loadcaffe.V0LayerParameter.Builder getLayerBuilder() {
                bitField1_ |= 0x00000400;
                onChanged();
                return getLayerFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.V0LayerParameter layer = 1;</code>
             */
            public caffe.Loadcaffe.V0LayerParameterOrBuilder getLayerOrBuilder() {
                if (layerBuilder_ != null) {
                    return layerBuilder_.getMessageOrBuilder();
                } else {
                    return layer_;
                }
            }
            /**
             * <code>optional .caffe.V0LayerParameter layer = 1;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.V0LayerParameter, caffe.Loadcaffe.V0LayerParameter.Builder, caffe.Loadcaffe.V0LayerParameterOrBuilder>
            getLayerFieldBuilder() {
                if (layerBuilder_ == null) {
                    layerBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.V0LayerParameter, caffe.Loadcaffe.V0LayerParameter.Builder, caffe.Loadcaffe.V0LayerParameterOrBuilder>(
                            getLayer(),
                            getParentForChildren(),
                            isClean());
                    layer_ = null;
                }
                return layerBuilder_;
            }

            // @@protoc_insertion_point(builder_scope:caffe.V1LayerParameter)
        }

        static {
            defaultInstance = new V1LayerParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.V1LayerParameter)
    }

    public interface V0LayerParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.V0LayerParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * the layer name
         * </pre>
         */
        boolean hasName();
        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * the layer name
         * </pre>
         */
        java.lang.String getName();
        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * the layer name
         * </pre>
         */
        com.google.protobuf.ByteString
        getNameBytes();

        /**
         * <code>optional string type = 2;</code>
         *
         * <pre>
         * the string to specify the layer type
         * </pre>
         */
        boolean hasType();
        /**
         * <code>optional string type = 2;</code>
         *
         * <pre>
         * the string to specify the layer type
         * </pre>
         */
        java.lang.String getType();
        /**
         * <code>optional string type = 2;</code>
         *
         * <pre>
         * the string to specify the layer type
         * </pre>
         */
        com.google.protobuf.ByteString
        getTypeBytes();

        /**
         * <code>optional uint32 num_output = 3;</code>
         *
         * <pre>
         * Parameters to specify layers with inner products.
         * </pre>
         */
        boolean hasNumOutput();
        /**
         * <code>optional uint32 num_output = 3;</code>
         *
         * <pre>
         * Parameters to specify layers with inner products.
         * </pre>
         */
        int getNumOutput();

        /**
         * <code>optional bool biasterm = 4 [default = true];</code>
         *
         * <pre>
         * whether to have bias terms
         * </pre>
         */
        boolean hasBiasterm();
        /**
         * <code>optional bool biasterm = 4 [default = true];</code>
         *
         * <pre>
         * whether to have bias terms
         * </pre>
         */
        boolean getBiasterm();

        /**
         * <code>optional .caffe.FillerParameter weight_filler = 5;</code>
         *
         * <pre>
         * The filler for the weight
         * </pre>
         */
        boolean hasWeightFiller();
        /**
         * <code>optional .caffe.FillerParameter weight_filler = 5;</code>
         *
         * <pre>
         * The filler for the weight
         * </pre>
         */
        caffe.Loadcaffe.FillerParameter getWeightFiller();
        /**
         * <code>optional .caffe.FillerParameter weight_filler = 5;</code>
         *
         * <pre>
         * The filler for the weight
         * </pre>
         */
        caffe.Loadcaffe.FillerParameterOrBuilder getWeightFillerOrBuilder();

        /**
         * <code>optional .caffe.FillerParameter bias_filler = 6;</code>
         *
         * <pre>
         * The filler for the bias
         * </pre>
         */
        boolean hasBiasFiller();
        /**
         * <code>optional .caffe.FillerParameter bias_filler = 6;</code>
         *
         * <pre>
         * The filler for the bias
         * </pre>
         */
        caffe.Loadcaffe.FillerParameter getBiasFiller();
        /**
         * <code>optional .caffe.FillerParameter bias_filler = 6;</code>
         *
         * <pre>
         * The filler for the bias
         * </pre>
         */
        caffe.Loadcaffe.FillerParameterOrBuilder getBiasFillerOrBuilder();

        /**
         * <code>optional uint32 pad = 7 [default = 0];</code>
         *
         * <pre>
         * The padding size
         * </pre>
         */
        boolean hasPad();
        /**
         * <code>optional uint32 pad = 7 [default = 0];</code>
         *
         * <pre>
         * The padding size
         * </pre>
         */
        int getPad();

        /**
         * <code>optional uint32 kernelsize = 8;</code>
         *
         * <pre>
         * The kernel size
         * </pre>
         */
        boolean hasKernelsize();
        /**
         * <code>optional uint32 kernelsize = 8;</code>
         *
         * <pre>
         * The kernel size
         * </pre>
         */
        int getKernelsize();

        /**
         * <code>optional uint32 group = 9 [default = 1];</code>
         *
         * <pre>
         * The group size for group conv
         * </pre>
         */
        boolean hasGroup();
        /**
         * <code>optional uint32 group = 9 [default = 1];</code>
         *
         * <pre>
         * The group size for group conv
         * </pre>
         */
        int getGroup();

        /**
         * <code>optional uint32 stride = 10 [default = 1];</code>
         *
         * <pre>
         * The stride
         * </pre>
         */
        boolean hasStride();
        /**
         * <code>optional uint32 stride = 10 [default = 1];</code>
         *
         * <pre>
         * The stride
         * </pre>
         */
        int getStride();

        /**
         * <code>optional .caffe.V0LayerParameter.PoolMethod pool = 11 [default = MAX];</code>
         *
         * <pre>
         * The pooling method
         * </pre>
         */
        boolean hasPool();
        /**
         * <code>optional .caffe.V0LayerParameter.PoolMethod pool = 11 [default = MAX];</code>
         *
         * <pre>
         * The pooling method
         * </pre>
         */
        caffe.Loadcaffe.V0LayerParameter.PoolMethod getPool();

        /**
         * <code>optional float dropout_ratio = 12 [default = 0.5];</code>
         *
         * <pre>
         * dropout ratio
         * </pre>
         */
        boolean hasDropoutRatio();
        /**
         * <code>optional float dropout_ratio = 12 [default = 0.5];</code>
         *
         * <pre>
         * dropout ratio
         * </pre>
         */
        float getDropoutRatio();

        /**
         * <code>optional uint32 local_size = 13 [default = 5];</code>
         *
         * <pre>
         * for local response norm
         * </pre>
         */
        boolean hasLocalSize();
        /**
         * <code>optional uint32 local_size = 13 [default = 5];</code>
         *
         * <pre>
         * for local response norm
         * </pre>
         */
        int getLocalSize();

        /**
         * <code>optional float alpha = 14 [default = 1];</code>
         *
         * <pre>
         * for local response norm
         * </pre>
         */
        boolean hasAlpha();
        /**
         * <code>optional float alpha = 14 [default = 1];</code>
         *
         * <pre>
         * for local response norm
         * </pre>
         */
        float getAlpha();

        /**
         * <code>optional float beta = 15 [default = 0.75];</code>
         *
         * <pre>
         * for local response norm
         * </pre>
         */
        boolean hasBeta();
        /**
         * <code>optional float beta = 15 [default = 0.75];</code>
         *
         * <pre>
         * for local response norm
         * </pre>
         */
        float getBeta();

        /**
         * <code>optional float k = 22 [default = 1];</code>
         */
        boolean hasK();
        /**
         * <code>optional float k = 22 [default = 1];</code>
         */
        float getK();

        /**
         * <code>optional string source = 16;</code>
         *
         * <pre>
         * For data layers, specify the data source
         * </pre>
         */
        boolean hasSource();
        /**
         * <code>optional string source = 16;</code>
         *
         * <pre>
         * For data layers, specify the data source
         * </pre>
         */
        java.lang.String getSource();
        /**
         * <code>optional string source = 16;</code>
         *
         * <pre>
         * For data layers, specify the data source
         * </pre>
         */
        com.google.protobuf.ByteString
        getSourceBytes();

        /**
         * <code>optional float scale = 17 [default = 1];</code>
         *
         * <pre>
         * For data pre-processing, we can do simple scaling and subtracting the
         * data mean, if provided. Note that the mean subtraction is always carried
         * out before scaling.
         * </pre>
         */
        boolean hasScale();
        /**
         * <code>optional float scale = 17 [default = 1];</code>
         *
         * <pre>
         * For data pre-processing, we can do simple scaling and subtracting the
         * data mean, if provided. Note that the mean subtraction is always carried
         * out before scaling.
         * </pre>
         */
        float getScale();

        /**
         * <code>optional string meanfile = 18;</code>
         */
        boolean hasMeanfile();
        /**
         * <code>optional string meanfile = 18;</code>
         */
        java.lang.String getMeanfile();
        /**
         * <code>optional string meanfile = 18;</code>
         */
        com.google.protobuf.ByteString
        getMeanfileBytes();

        /**
         * <code>optional uint32 batchsize = 19;</code>
         *
         * <pre>
         * For data layers, specify the batch size.
         * </pre>
         */
        boolean hasBatchsize();
        /**
         * <code>optional uint32 batchsize = 19;</code>
         *
         * <pre>
         * For data layers, specify the batch size.
         * </pre>
         */
        int getBatchsize();

        /**
         * <code>optional uint32 cropsize = 20 [default = 0];</code>
         *
         * <pre>
         * For data layers, specify if we would like to randomly crop an image.
         * </pre>
         */
        boolean hasCropsize();
        /**
         * <code>optional uint32 cropsize = 20 [default = 0];</code>
         *
         * <pre>
         * For data layers, specify if we would like to randomly crop an image.
         * </pre>
         */
        int getCropsize();

        /**
         * <code>optional bool mirror = 21 [default = false];</code>
         *
         * <pre>
         * For data layers, specify if we want to randomly mirror data.
         * </pre>
         */
        boolean hasMirror();
        /**
         * <code>optional bool mirror = 21 [default = false];</code>
         *
         * <pre>
         * For data layers, specify if we want to randomly mirror data.
         * </pre>
         */
        boolean getMirror();

        /**
         * <code>repeated .caffe.BlobProto blobs = 50;</code>
         *
         * <pre>
         * The blobs containing the numeric parameters of the layer
         * </pre>
         */
        java.util.List<caffe.Loadcaffe.BlobProto>
        getBlobsList();
        /**
         * <code>repeated .caffe.BlobProto blobs = 50;</code>
         *
         * <pre>
         * The blobs containing the numeric parameters of the layer
         * </pre>
         */
        caffe.Loadcaffe.BlobProto getBlobs(int index);
        /**
         * <code>repeated .caffe.BlobProto blobs = 50;</code>
         *
         * <pre>
         * The blobs containing the numeric parameters of the layer
         * </pre>
         */
        int getBlobsCount();
        /**
         * <code>repeated .caffe.BlobProto blobs = 50;</code>
         *
         * <pre>
         * The blobs containing the numeric parameters of the layer
         * </pre>
         */
        java.util.List<? extends caffe.Loadcaffe.BlobProtoOrBuilder>
        getBlobsOrBuilderList();
        /**
         * <code>repeated .caffe.BlobProto blobs = 50;</code>
         *
         * <pre>
         * The blobs containing the numeric parameters of the layer
         * </pre>
         */
        caffe.Loadcaffe.BlobProtoOrBuilder getBlobsOrBuilder(
                int index);

        /**
         * <code>repeated float blobs_lr = 51;</code>
         *
         * <pre>
         * The ratio that is multiplied on the global learning rate. If you want to
         * set the learning ratio for one blob, you need to set it for all blobs.
         * </pre>
         */
        java.util.List<java.lang.Float> getBlobsLrList();
        /**
         * <code>repeated float blobs_lr = 51;</code>
         *
         * <pre>
         * The ratio that is multiplied on the global learning rate. If you want to
         * set the learning ratio for one blob, you need to set it for all blobs.
         * </pre>
         */
        int getBlobsLrCount();
        /**
         * <code>repeated float blobs_lr = 51;</code>
         *
         * <pre>
         * The ratio that is multiplied on the global learning rate. If you want to
         * set the learning ratio for one blob, you need to set it for all blobs.
         * </pre>
         */
        float getBlobsLr(int index);

        /**
         * <code>repeated float weight_decay = 52;</code>
         *
         * <pre>
         * The weight decay that is multiplied on the global weight decay.
         * </pre>
         */
        java.util.List<java.lang.Float> getWeightDecayList();
        /**
         * <code>repeated float weight_decay = 52;</code>
         *
         * <pre>
         * The weight decay that is multiplied on the global weight decay.
         * </pre>
         */
        int getWeightDecayCount();
        /**
         * <code>repeated float weight_decay = 52;</code>
         *
         * <pre>
         * The weight decay that is multiplied on the global weight decay.
         * </pre>
         */
        float getWeightDecay(int index);

        /**
         * <code>optional uint32 rand_skip = 53 [default = 0];</code>
         *
         * <pre>
         * The rand_skip variable is for the data layer to skip a few data points
         * to avoid all asynchronous sgd clients to start at the same point. The skip
         * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
         * be larger than the number of keys in the database.
         * </pre>
         */
        boolean hasRandSkip();
        /**
         * <code>optional uint32 rand_skip = 53 [default = 0];</code>
         *
         * <pre>
         * The rand_skip variable is for the data layer to skip a few data points
         * to avoid all asynchronous sgd clients to start at the same point. The skip
         * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
         * be larger than the number of keys in the database.
         * </pre>
         */
        int getRandSkip();

        /**
         * <code>optional float det_fg_threshold = 54 [default = 0.5];</code>
         *
         * <pre>
         * Fields related to detection (det_*)
         * foreground (object) overlap threshold
         * </pre>
         */
        boolean hasDetFgThreshold();
        /**
         * <code>optional float det_fg_threshold = 54 [default = 0.5];</code>
         *
         * <pre>
         * Fields related to detection (det_*)
         * foreground (object) overlap threshold
         * </pre>
         */
        float getDetFgThreshold();

        /**
         * <code>optional float det_bg_threshold = 55 [default = 0.5];</code>
         *
         * <pre>
         * background (non-object) overlap threshold
         * </pre>
         */
        boolean hasDetBgThreshold();
        /**
         * <code>optional float det_bg_threshold = 55 [default = 0.5];</code>
         *
         * <pre>
         * background (non-object) overlap threshold
         * </pre>
         */
        float getDetBgThreshold();

        /**
         * <code>optional float det_fg_fraction = 56 [default = 0.25];</code>
         *
         * <pre>
         * Fraction of batch that should be foreground objects
         * </pre>
         */
        boolean hasDetFgFraction();
        /**
         * <code>optional float det_fg_fraction = 56 [default = 0.25];</code>
         *
         * <pre>
         * Fraction of batch that should be foreground objects
         * </pre>
         */
        float getDetFgFraction();

        /**
         * <code>optional uint32 det_context_pad = 58 [default = 0];</code>
         *
         * <pre>
         * Amount of contextual padding to add around a window
         * (used only by the window_data_layer)
         * </pre>
         */
        boolean hasDetContextPad();
        /**
         * <code>optional uint32 det_context_pad = 58 [default = 0];</code>
         *
         * <pre>
         * Amount of contextual padding to add around a window
         * (used only by the window_data_layer)
         * </pre>
         */
        int getDetContextPad();

        /**
         * <code>optional string det_crop_mode = 59 [default = "warp"];</code>
         *
         * <pre>
         * Mode for cropping out a detection window
         * warp: cropped window is warped to a fixed size and aspect ratio
         * square: the tightest square around the window is cropped
         * </pre>
         */
        boolean hasDetCropMode();
        /**
         * <code>optional string det_crop_mode = 59 [default = "warp"];</code>
         *
         * <pre>
         * Mode for cropping out a detection window
         * warp: cropped window is warped to a fixed size and aspect ratio
         * square: the tightest square around the window is cropped
         * </pre>
         */
        java.lang.String getDetCropMode();
        /**
         * <code>optional string det_crop_mode = 59 [default = "warp"];</code>
         *
         * <pre>
         * Mode for cropping out a detection window
         * warp: cropped window is warped to a fixed size and aspect ratio
         * square: the tightest square around the window is cropped
         * </pre>
         */
        com.google.protobuf.ByteString
        getDetCropModeBytes();

        /**
         * <code>optional int32 new_num = 60 [default = 0];</code>
         *
         * <pre>
         * For ReshapeLayer, one needs to specify the new dimensions.
         * </pre>
         */
        boolean hasNewNum();
        /**
         * <code>optional int32 new_num = 60 [default = 0];</code>
         *
         * <pre>
         * For ReshapeLayer, one needs to specify the new dimensions.
         * </pre>
         */
        int getNewNum();

        /**
         * <code>optional int32 new_channels = 61 [default = 0];</code>
         */
        boolean hasNewChannels();
        /**
         * <code>optional int32 new_channels = 61 [default = 0];</code>
         */
        int getNewChannels();

        /**
         * <code>optional int32 new_height = 62 [default = 0];</code>
         */
        boolean hasNewHeight();
        /**
         * <code>optional int32 new_height = 62 [default = 0];</code>
         */
        int getNewHeight();

        /**
         * <code>optional int32 new_width = 63 [default = 0];</code>
         */
        boolean hasNewWidth();
        /**
         * <code>optional int32 new_width = 63 [default = 0];</code>
         */
        int getNewWidth();

        /**
         * <code>optional bool shuffle_images = 64 [default = false];</code>
         *
         * <pre>
         * Whether or not ImageLayer should shuffle the list of files at every epoch.
         * It will also resize images if new_height or new_width are not zero.
         * </pre>
         */
        boolean hasShuffleImages();
        /**
         * <code>optional bool shuffle_images = 64 [default = false];</code>
         *
         * <pre>
         * Whether or not ImageLayer should shuffle the list of files at every epoch.
         * It will also resize images if new_height or new_width are not zero.
         * </pre>
         */
        boolean getShuffleImages();

        /**
         * <code>optional uint32 concat_dim = 65 [default = 1];</code>
         *
         * <pre>
         * For ConcatLayer, one needs to specify the dimension for concatenation, and
         * the other dimensions must be the same for all the bottom blobs.
         * By default it will concatenate blobs along the channels dimension.
         * </pre>
         */
        boolean hasConcatDim();
        /**
         * <code>optional uint32 concat_dim = 65 [default = 1];</code>
         *
         * <pre>
         * For ConcatLayer, one needs to specify the dimension for concatenation, and
         * the other dimensions must be the same for all the bottom blobs.
         * By default it will concatenate blobs along the channels dimension.
         * </pre>
         */
        int getConcatDim();

        /**
         * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 1001;</code>
         */
        boolean hasHdf5OutputParam();
        /**
         * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 1001;</code>
         */
        caffe.Loadcaffe.HDF5OutputParameter getHdf5OutputParam();
        /**
         * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 1001;</code>
         */
        caffe.Loadcaffe.HDF5OutputParameterOrBuilder getHdf5OutputParamOrBuilder();
    }
    /**
     * Protobuf type {@code caffe.V0LayerParameter}
     *
     * <pre>
     * DEPRECATED: V0LayerParameter is the old way of specifying layer parameters
     * in Caffe.  We keep this message type around for legacy support.
     * </pre>
     */
    public static final class V0LayerParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.V0LayerParameter)
            V0LayerParameterOrBuilder {
        // Use V0LayerParameter.newBuilder() to construct.
        private V0LayerParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private V0LayerParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final V0LayerParameter defaultInstance;
        public static V0LayerParameter getDefaultInstance() {
            return defaultInstance;
        }

        public V0LayerParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private V0LayerParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            int mutable_bitField1_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 10: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000001;
                            name_ = bs;
                            break;
                        }
                        case 18: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00000002;
                            type_ = bs;
                            break;
                        }
                        case 24: {
                            bitField0_ |= 0x00000004;
                            numOutput_ = input.readUInt32();
                            break;
                        }
                        case 32: {
                            bitField0_ |= 0x00000008;
                            biasterm_ = input.readBool();
                            break;
                        }
                        case 42: {
                            caffe.Loadcaffe.FillerParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                                subBuilder = weightFiller_.toBuilder();
                            }
                            weightFiller_ = input.readMessage(caffe.Loadcaffe.FillerParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(weightFiller_);
                                weightFiller_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000010;
                            break;
                        }
                        case 50: {
                            caffe.Loadcaffe.FillerParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                                subBuilder = biasFiller_.toBuilder();
                            }
                            biasFiller_ = input.readMessage(caffe.Loadcaffe.FillerParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(biasFiller_);
                                biasFiller_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000020;
                            break;
                        }
                        case 56: {
                            bitField0_ |= 0x00000040;
                            pad_ = input.readUInt32();
                            break;
                        }
                        case 64: {
                            bitField0_ |= 0x00000080;
                            kernelsize_ = input.readUInt32();
                            break;
                        }
                        case 72: {
                            bitField0_ |= 0x00000100;
                            group_ = input.readUInt32();
                            break;
                        }
                        case 80: {
                            bitField0_ |= 0x00000200;
                            stride_ = input.readUInt32();
                            break;
                        }
                        case 88: {
                            int rawValue = input.readEnum();
                            caffe.Loadcaffe.V0LayerParameter.PoolMethod value = caffe.Loadcaffe.V0LayerParameter.PoolMethod.valueOf(rawValue);
                            if (value == null) {
                                unknownFields.mergeVarintField(11, rawValue);
                            } else {
                                bitField0_ |= 0x00000400;
                                pool_ = value;
                            }
                            break;
                        }
                        case 101: {
                            bitField0_ |= 0x00000800;
                            dropoutRatio_ = input.readFloat();
                            break;
                        }
                        case 104: {
                            bitField0_ |= 0x00001000;
                            localSize_ = input.readUInt32();
                            break;
                        }
                        case 117: {
                            bitField0_ |= 0x00002000;
                            alpha_ = input.readFloat();
                            break;
                        }
                        case 125: {
                            bitField0_ |= 0x00004000;
                            beta_ = input.readFloat();
                            break;
                        }
                        case 130: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00010000;
                            source_ = bs;
                            break;
                        }
                        case 141: {
                            bitField0_ |= 0x00020000;
                            scale_ = input.readFloat();
                            break;
                        }
                        case 146: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x00040000;
                            meanfile_ = bs;
                            break;
                        }
                        case 152: {
                            bitField0_ |= 0x00080000;
                            batchsize_ = input.readUInt32();
                            break;
                        }
                        case 160: {
                            bitField0_ |= 0x00100000;
                            cropsize_ = input.readUInt32();
                            break;
                        }
                        case 168: {
                            bitField0_ |= 0x00200000;
                            mirror_ = input.readBool();
                            break;
                        }
                        case 181: {
                            bitField0_ |= 0x00008000;
                            k_ = input.readFloat();
                            break;
                        }
                        case 402: {
                            if (!((mutable_bitField0_ & 0x00400000) == 0x00400000)) {
                                blobs_ = new java.util.ArrayList<caffe.Loadcaffe.BlobProto>();
                                mutable_bitField0_ |= 0x00400000;
                            }
                            blobs_.add(input.readMessage(caffe.Loadcaffe.BlobProto.PARSER, extensionRegistry));
                            break;
                        }
                        case 413: {
                            if (!((mutable_bitField0_ & 0x00800000) == 0x00800000)) {
                                blobsLr_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x00800000;
                            }
                            blobsLr_.add(input.readFloat());
                            break;
                        }
                        case 410: {
                            int length = input.readRawVarint32();
                            int limit = input.pushLimit(length);
                            if (!((mutable_bitField0_ & 0x00800000) == 0x00800000) && input.getBytesUntilLimit() > 0) {
                                blobsLr_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x00800000;
                            }
                            while (input.getBytesUntilLimit() > 0) {
                                blobsLr_.add(input.readFloat());
                            }
                            input.popLimit(limit);
                            break;
                        }
                        case 421: {
                            if (!((mutable_bitField0_ & 0x01000000) == 0x01000000)) {
                                weightDecay_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x01000000;
                            }
                            weightDecay_.add(input.readFloat());
                            break;
                        }
                        case 418: {
                            int length = input.readRawVarint32();
                            int limit = input.pushLimit(length);
                            if (!((mutable_bitField0_ & 0x01000000) == 0x01000000) && input.getBytesUntilLimit() > 0) {
                                weightDecay_ = new java.util.ArrayList<java.lang.Float>();
                                mutable_bitField0_ |= 0x01000000;
                            }
                            while (input.getBytesUntilLimit() > 0) {
                                weightDecay_.add(input.readFloat());
                            }
                            input.popLimit(limit);
                            break;
                        }
                        case 424: {
                            bitField0_ |= 0x00400000;
                            randSkip_ = input.readUInt32();
                            break;
                        }
                        case 437: {
                            bitField0_ |= 0x00800000;
                            detFgThreshold_ = input.readFloat();
                            break;
                        }
                        case 445: {
                            bitField0_ |= 0x01000000;
                            detBgThreshold_ = input.readFloat();
                            break;
                        }
                        case 453: {
                            bitField0_ |= 0x02000000;
                            detFgFraction_ = input.readFloat();
                            break;
                        }
                        case 464: {
                            bitField0_ |= 0x04000000;
                            detContextPad_ = input.readUInt32();
                            break;
                        }
                        case 474: {
                            com.google.protobuf.ByteString bs = input.readBytes();
                            bitField0_ |= 0x08000000;
                            detCropMode_ = bs;
                            break;
                        }
                        case 480: {
                            bitField0_ |= 0x10000000;
                            newNum_ = input.readInt32();
                            break;
                        }
                        case 488: {
                            bitField0_ |= 0x20000000;
                            newChannels_ = input.readInt32();
                            break;
                        }
                        case 496: {
                            bitField0_ |= 0x40000000;
                            newHeight_ = input.readInt32();
                            break;
                        }
                        case 504: {
                            bitField0_ |= 0x80000000;
                            newWidth_ = input.readInt32();
                            break;
                        }
                        case 512: {
                            bitField1_ |= 0x00000001;
                            shuffleImages_ = input.readBool();
                            break;
                        }
                        case 520: {
                            bitField1_ |= 0x00000002;
                            concatDim_ = input.readUInt32();
                            break;
                        }
                        case 8010: {
                            caffe.Loadcaffe.HDF5OutputParameter.Builder subBuilder = null;
                            if (((bitField1_ & 0x00000004) == 0x00000004)) {
                                subBuilder = hdf5OutputParam_.toBuilder();
                            }
                            hdf5OutputParam_ = input.readMessage(caffe.Loadcaffe.HDF5OutputParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(hdf5OutputParam_);
                                hdf5OutputParam_ = subBuilder.buildPartial();
                            }
                            bitField1_ |= 0x00000004;
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                if (((mutable_bitField0_ & 0x00400000) == 0x00400000)) {
                    blobs_ = java.util.Collections.unmodifiableList(blobs_);
                }
                if (((mutable_bitField0_ & 0x00800000) == 0x00800000)) {
                    blobsLr_ = java.util.Collections.unmodifiableList(blobsLr_);
                }
                if (((mutable_bitField0_ & 0x01000000) == 0x01000000)) {
                    weightDecay_ = java.util.Collections.unmodifiableList(weightDecay_);
                }
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_V0LayerParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_V0LayerParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.V0LayerParameter.class, caffe.Loadcaffe.V0LayerParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<V0LayerParameter> PARSER =
                new com.google.protobuf.AbstractParser<V0LayerParameter>() {
                    public V0LayerParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new V0LayerParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<V0LayerParameter> getParserForType() {
            return PARSER;
        }

        /**
         * Protobuf enum {@code caffe.V0LayerParameter.PoolMethod}
         */
        public enum PoolMethod
                implements com.google.protobuf.ProtocolMessageEnum {
            /**
             * <code>MAX = 0;</code>
             */
            MAX(0, 0),
            /**
             * <code>AVE = 1;</code>
             */
            AVE(1, 1),
            /**
             * <code>STOCHASTIC = 2;</code>
             */
            STOCHASTIC(2, 2),
            ;

            /**
             * <code>MAX = 0;</code>
             */
            public static final int MAX_VALUE = 0;
            /**
             * <code>AVE = 1;</code>
             */
            public static final int AVE_VALUE = 1;
            /**
             * <code>STOCHASTIC = 2;</code>
             */
            public static final int STOCHASTIC_VALUE = 2;


            public final int getNumber() { return value; }

            public static PoolMethod valueOf(int value) {
                switch (value) {
                    case 0: return MAX;
                    case 1: return AVE;
                    case 2: return STOCHASTIC;
                    default: return null;
                }
            }

            public static com.google.protobuf.Internal.EnumLiteMap<PoolMethod>
            internalGetValueMap() {
                return internalValueMap;
            }
            private static com.google.protobuf.Internal.EnumLiteMap<PoolMethod>
                    internalValueMap =
                    new com.google.protobuf.Internal.EnumLiteMap<PoolMethod>() {
                        public PoolMethod findValueByNumber(int number) {
                            return PoolMethod.valueOf(number);
                        }
                    };

            public final com.google.protobuf.Descriptors.EnumValueDescriptor
            getValueDescriptor() {
                return getDescriptor().getValues().get(index);
            }
            public final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptorForType() {
                return getDescriptor();
            }
            public static final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptor() {
                return caffe.Loadcaffe.V0LayerParameter.getDescriptor().getEnumTypes().get(0);
            }

            private static final PoolMethod[] VALUES = values();

            public static PoolMethod valueOf(
                    com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new java.lang.IllegalArgumentException(
                            "EnumValueDescriptor is not for this type.");
                }
                return VALUES[desc.getIndex()];
            }

            private final int index;
            private final int value;

            private PoolMethod(int index, int value) {
                this.index = index;
                this.value = value;
            }

            // @@protoc_insertion_point(enum_scope:caffe.V0LayerParameter.PoolMethod)
        }

        private int bitField0_;
        private int bitField1_;
        public static final int NAME_FIELD_NUMBER = 1;
        private java.lang.Object name_;
        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * the layer name
         * </pre>
         */
        public boolean hasName() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * the layer name
         * </pre>
         */
        public java.lang.String getName() {
            java.lang.Object ref = name_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    name_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string name = 1;</code>
         *
         * <pre>
         * the layer name
         * </pre>
         */
        public com.google.protobuf.ByteString
        getNameBytes() {
            java.lang.Object ref = name_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                name_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int TYPE_FIELD_NUMBER = 2;
        private java.lang.Object type_;
        /**
         * <code>optional string type = 2;</code>
         *
         * <pre>
         * the string to specify the layer type
         * </pre>
         */
        public boolean hasType() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional string type = 2;</code>
         *
         * <pre>
         * the string to specify the layer type
         * </pre>
         */
        public java.lang.String getType() {
            java.lang.Object ref = type_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    type_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string type = 2;</code>
         *
         * <pre>
         * the string to specify the layer type
         * </pre>
         */
        public com.google.protobuf.ByteString
        getTypeBytes() {
            java.lang.Object ref = type_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                type_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int NUM_OUTPUT_FIELD_NUMBER = 3;
        private int numOutput_;
        /**
         * <code>optional uint32 num_output = 3;</code>
         *
         * <pre>
         * Parameters to specify layers with inner products.
         * </pre>
         */
        public boolean hasNumOutput() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional uint32 num_output = 3;</code>
         *
         * <pre>
         * Parameters to specify layers with inner products.
         * </pre>
         */
        public int getNumOutput() {
            return numOutput_;
        }

        public static final int BIASTERM_FIELD_NUMBER = 4;
        private boolean biasterm_;
        /**
         * <code>optional bool biasterm = 4 [default = true];</code>
         *
         * <pre>
         * whether to have bias terms
         * </pre>
         */
        public boolean hasBiasterm() {
            return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional bool biasterm = 4 [default = true];</code>
         *
         * <pre>
         * whether to have bias terms
         * </pre>
         */
        public boolean getBiasterm() {
            return biasterm_;
        }

        public static final int WEIGHT_FILLER_FIELD_NUMBER = 5;
        private caffe.Loadcaffe.FillerParameter weightFiller_;
        /**
         * <code>optional .caffe.FillerParameter weight_filler = 5;</code>
         *
         * <pre>
         * The filler for the weight
         * </pre>
         */
        public boolean hasWeightFiller() {
            return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>optional .caffe.FillerParameter weight_filler = 5;</code>
         *
         * <pre>
         * The filler for the weight
         * </pre>
         */
        public caffe.Loadcaffe.FillerParameter getWeightFiller() {
            return weightFiller_;
        }
        /**
         * <code>optional .caffe.FillerParameter weight_filler = 5;</code>
         *
         * <pre>
         * The filler for the weight
         * </pre>
         */
        public caffe.Loadcaffe.FillerParameterOrBuilder getWeightFillerOrBuilder() {
            return weightFiller_;
        }

        public static final int BIAS_FILLER_FIELD_NUMBER = 6;
        private caffe.Loadcaffe.FillerParameter biasFiller_;
        /**
         * <code>optional .caffe.FillerParameter bias_filler = 6;</code>
         *
         * <pre>
         * The filler for the bias
         * </pre>
         */
        public boolean hasBiasFiller() {
            return ((bitField0_ & 0x00000020) == 0x00000020);
        }
        /**
         * <code>optional .caffe.FillerParameter bias_filler = 6;</code>
         *
         * <pre>
         * The filler for the bias
         * </pre>
         */
        public caffe.Loadcaffe.FillerParameter getBiasFiller() {
            return biasFiller_;
        }
        /**
         * <code>optional .caffe.FillerParameter bias_filler = 6;</code>
         *
         * <pre>
         * The filler for the bias
         * </pre>
         */
        public caffe.Loadcaffe.FillerParameterOrBuilder getBiasFillerOrBuilder() {
            return biasFiller_;
        }

        public static final int PAD_FIELD_NUMBER = 7;
        private int pad_;
        /**
         * <code>optional uint32 pad = 7 [default = 0];</code>
         *
         * <pre>
         * The padding size
         * </pre>
         */
        public boolean hasPad() {
            return ((bitField0_ & 0x00000040) == 0x00000040);
        }
        /**
         * <code>optional uint32 pad = 7 [default = 0];</code>
         *
         * <pre>
         * The padding size
         * </pre>
         */
        public int getPad() {
            return pad_;
        }

        public static final int KERNELSIZE_FIELD_NUMBER = 8;
        private int kernelsize_;
        /**
         * <code>optional uint32 kernelsize = 8;</code>
         *
         * <pre>
         * The kernel size
         * </pre>
         */
        public boolean hasKernelsize() {
            return ((bitField0_ & 0x00000080) == 0x00000080);
        }
        /**
         * <code>optional uint32 kernelsize = 8;</code>
         *
         * <pre>
         * The kernel size
         * </pre>
         */
        public int getKernelsize() {
            return kernelsize_;
        }

        public static final int GROUP_FIELD_NUMBER = 9;
        private int group_;
        /**
         * <code>optional uint32 group = 9 [default = 1];</code>
         *
         * <pre>
         * The group size for group conv
         * </pre>
         */
        public boolean hasGroup() {
            return ((bitField0_ & 0x00000100) == 0x00000100);
        }
        /**
         * <code>optional uint32 group = 9 [default = 1];</code>
         *
         * <pre>
         * The group size for group conv
         * </pre>
         */
        public int getGroup() {
            return group_;
        }

        public static final int STRIDE_FIELD_NUMBER = 10;
        private int stride_;
        /**
         * <code>optional uint32 stride = 10 [default = 1];</code>
         *
         * <pre>
         * The stride
         * </pre>
         */
        public boolean hasStride() {
            return ((bitField0_ & 0x00000200) == 0x00000200);
        }
        /**
         * <code>optional uint32 stride = 10 [default = 1];</code>
         *
         * <pre>
         * The stride
         * </pre>
         */
        public int getStride() {
            return stride_;
        }

        public static final int POOL_FIELD_NUMBER = 11;
        private caffe.Loadcaffe.V0LayerParameter.PoolMethod pool_;
        /**
         * <code>optional .caffe.V0LayerParameter.PoolMethod pool = 11 [default = MAX];</code>
         *
         * <pre>
         * The pooling method
         * </pre>
         */
        public boolean hasPool() {
            return ((bitField0_ & 0x00000400) == 0x00000400);
        }
        /**
         * <code>optional .caffe.V0LayerParameter.PoolMethod pool = 11 [default = MAX];</code>
         *
         * <pre>
         * The pooling method
         * </pre>
         */
        public caffe.Loadcaffe.V0LayerParameter.PoolMethod getPool() {
            return pool_;
        }

        public static final int DROPOUT_RATIO_FIELD_NUMBER = 12;
        private float dropoutRatio_;
        /**
         * <code>optional float dropout_ratio = 12 [default = 0.5];</code>
         *
         * <pre>
         * dropout ratio
         * </pre>
         */
        public boolean hasDropoutRatio() {
            return ((bitField0_ & 0x00000800) == 0x00000800);
        }
        /**
         * <code>optional float dropout_ratio = 12 [default = 0.5];</code>
         *
         * <pre>
         * dropout ratio
         * </pre>
         */
        public float getDropoutRatio() {
            return dropoutRatio_;
        }

        public static final int LOCAL_SIZE_FIELD_NUMBER = 13;
        private int localSize_;
        /**
         * <code>optional uint32 local_size = 13 [default = 5];</code>
         *
         * <pre>
         * for local response norm
         * </pre>
         */
        public boolean hasLocalSize() {
            return ((bitField0_ & 0x00001000) == 0x00001000);
        }
        /**
         * <code>optional uint32 local_size = 13 [default = 5];</code>
         *
         * <pre>
         * for local response norm
         * </pre>
         */
        public int getLocalSize() {
            return localSize_;
        }

        public static final int ALPHA_FIELD_NUMBER = 14;
        private float alpha_;
        /**
         * <code>optional float alpha = 14 [default = 1];</code>
         *
         * <pre>
         * for local response norm
         * </pre>
         */
        public boolean hasAlpha() {
            return ((bitField0_ & 0x00002000) == 0x00002000);
        }
        /**
         * <code>optional float alpha = 14 [default = 1];</code>
         *
         * <pre>
         * for local response norm
         * </pre>
         */
        public float getAlpha() {
            return alpha_;
        }

        public static final int BETA_FIELD_NUMBER = 15;
        private float beta_;
        /**
         * <code>optional float beta = 15 [default = 0.75];</code>
         *
         * <pre>
         * for local response norm
         * </pre>
         */
        public boolean hasBeta() {
            return ((bitField0_ & 0x00004000) == 0x00004000);
        }
        /**
         * <code>optional float beta = 15 [default = 0.75];</code>
         *
         * <pre>
         * for local response norm
         * </pre>
         */
        public float getBeta() {
            return beta_;
        }

        public static final int K_FIELD_NUMBER = 22;
        private float k_;
        /**
         * <code>optional float k = 22 [default = 1];</code>
         */
        public boolean hasK() {
            return ((bitField0_ & 0x00008000) == 0x00008000);
        }
        /**
         * <code>optional float k = 22 [default = 1];</code>
         */
        public float getK() {
            return k_;
        }

        public static final int SOURCE_FIELD_NUMBER = 16;
        private java.lang.Object source_;
        /**
         * <code>optional string source = 16;</code>
         *
         * <pre>
         * For data layers, specify the data source
         * </pre>
         */
        public boolean hasSource() {
            return ((bitField0_ & 0x00010000) == 0x00010000);
        }
        /**
         * <code>optional string source = 16;</code>
         *
         * <pre>
         * For data layers, specify the data source
         * </pre>
         */
        public java.lang.String getSource() {
            java.lang.Object ref = source_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    source_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string source = 16;</code>
         *
         * <pre>
         * For data layers, specify the data source
         * </pre>
         */
        public com.google.protobuf.ByteString
        getSourceBytes() {
            java.lang.Object ref = source_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                source_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int SCALE_FIELD_NUMBER = 17;
        private float scale_;
        /**
         * <code>optional float scale = 17 [default = 1];</code>
         *
         * <pre>
         * For data pre-processing, we can do simple scaling and subtracting the
         * data mean, if provided. Note that the mean subtraction is always carried
         * out before scaling.
         * </pre>
         */
        public boolean hasScale() {
            return ((bitField0_ & 0x00020000) == 0x00020000);
        }
        /**
         * <code>optional float scale = 17 [default = 1];</code>
         *
         * <pre>
         * For data pre-processing, we can do simple scaling and subtracting the
         * data mean, if provided. Note that the mean subtraction is always carried
         * out before scaling.
         * </pre>
         */
        public float getScale() {
            return scale_;
        }

        public static final int MEANFILE_FIELD_NUMBER = 18;
        private java.lang.Object meanfile_;
        /**
         * <code>optional string meanfile = 18;</code>
         */
        public boolean hasMeanfile() {
            return ((bitField0_ & 0x00040000) == 0x00040000);
        }
        /**
         * <code>optional string meanfile = 18;</code>
         */
        public java.lang.String getMeanfile() {
            java.lang.Object ref = meanfile_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    meanfile_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string meanfile = 18;</code>
         */
        public com.google.protobuf.ByteString
        getMeanfileBytes() {
            java.lang.Object ref = meanfile_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                meanfile_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int BATCHSIZE_FIELD_NUMBER = 19;
        private int batchsize_;
        /**
         * <code>optional uint32 batchsize = 19;</code>
         *
         * <pre>
         * For data layers, specify the batch size.
         * </pre>
         */
        public boolean hasBatchsize() {
            return ((bitField0_ & 0x00080000) == 0x00080000);
        }
        /**
         * <code>optional uint32 batchsize = 19;</code>
         *
         * <pre>
         * For data layers, specify the batch size.
         * </pre>
         */
        public int getBatchsize() {
            return batchsize_;
        }

        public static final int CROPSIZE_FIELD_NUMBER = 20;
        private int cropsize_;
        /**
         * <code>optional uint32 cropsize = 20 [default = 0];</code>
         *
         * <pre>
         * For data layers, specify if we would like to randomly crop an image.
         * </pre>
         */
        public boolean hasCropsize() {
            return ((bitField0_ & 0x00100000) == 0x00100000);
        }
        /**
         * <code>optional uint32 cropsize = 20 [default = 0];</code>
         *
         * <pre>
         * For data layers, specify if we would like to randomly crop an image.
         * </pre>
         */
        public int getCropsize() {
            return cropsize_;
        }

        public static final int MIRROR_FIELD_NUMBER = 21;
        private boolean mirror_;
        /**
         * <code>optional bool mirror = 21 [default = false];</code>
         *
         * <pre>
         * For data layers, specify if we want to randomly mirror data.
         * </pre>
         */
        public boolean hasMirror() {
            return ((bitField0_ & 0x00200000) == 0x00200000);
        }
        /**
         * <code>optional bool mirror = 21 [default = false];</code>
         *
         * <pre>
         * For data layers, specify if we want to randomly mirror data.
         * </pre>
         */
        public boolean getMirror() {
            return mirror_;
        }

        public static final int BLOBS_FIELD_NUMBER = 50;
        private java.util.List<caffe.Loadcaffe.BlobProto> blobs_;
        /**
         * <code>repeated .caffe.BlobProto blobs = 50;</code>
         *
         * <pre>
         * The blobs containing the numeric parameters of the layer
         * </pre>
         */
        public java.util.List<caffe.Loadcaffe.BlobProto> getBlobsList() {
            return blobs_;
        }
        /**
         * <code>repeated .caffe.BlobProto blobs = 50;</code>
         *
         * <pre>
         * The blobs containing the numeric parameters of the layer
         * </pre>
         */
        public java.util.List<? extends caffe.Loadcaffe.BlobProtoOrBuilder>
        getBlobsOrBuilderList() {
            return blobs_;
        }
        /**
         * <code>repeated .caffe.BlobProto blobs = 50;</code>
         *
         * <pre>
         * The blobs containing the numeric parameters of the layer
         * </pre>
         */
        public int getBlobsCount() {
            return blobs_.size();
        }
        /**
         * <code>repeated .caffe.BlobProto blobs = 50;</code>
         *
         * <pre>
         * The blobs containing the numeric parameters of the layer
         * </pre>
         */
        public caffe.Loadcaffe.BlobProto getBlobs(int index) {
            return blobs_.get(index);
        }
        /**
         * <code>repeated .caffe.BlobProto blobs = 50;</code>
         *
         * <pre>
         * The blobs containing the numeric parameters of the layer
         * </pre>
         */
        public caffe.Loadcaffe.BlobProtoOrBuilder getBlobsOrBuilder(
                int index) {
            return blobs_.get(index);
        }

        public static final int BLOBS_LR_FIELD_NUMBER = 51;
        private java.util.List<java.lang.Float> blobsLr_;
        /**
         * <code>repeated float blobs_lr = 51;</code>
         *
         * <pre>
         * The ratio that is multiplied on the global learning rate. If you want to
         * set the learning ratio for one blob, you need to set it for all blobs.
         * </pre>
         */
        public java.util.List<java.lang.Float>
        getBlobsLrList() {
            return blobsLr_;
        }
        /**
         * <code>repeated float blobs_lr = 51;</code>
         *
         * <pre>
         * The ratio that is multiplied on the global learning rate. If you want to
         * set the learning ratio for one blob, you need to set it for all blobs.
         * </pre>
         */
        public int getBlobsLrCount() {
            return blobsLr_.size();
        }
        /**
         * <code>repeated float blobs_lr = 51;</code>
         *
         * <pre>
         * The ratio that is multiplied on the global learning rate. If you want to
         * set the learning ratio for one blob, you need to set it for all blobs.
         * </pre>
         */
        public float getBlobsLr(int index) {
            return blobsLr_.get(index);
        }

        public static final int WEIGHT_DECAY_FIELD_NUMBER = 52;
        private java.util.List<java.lang.Float> weightDecay_;
        /**
         * <code>repeated float weight_decay = 52;</code>
         *
         * <pre>
         * The weight decay that is multiplied on the global weight decay.
         * </pre>
         */
        public java.util.List<java.lang.Float>
        getWeightDecayList() {
            return weightDecay_;
        }
        /**
         * <code>repeated float weight_decay = 52;</code>
         *
         * <pre>
         * The weight decay that is multiplied on the global weight decay.
         * </pre>
         */
        public int getWeightDecayCount() {
            return weightDecay_.size();
        }
        /**
         * <code>repeated float weight_decay = 52;</code>
         *
         * <pre>
         * The weight decay that is multiplied on the global weight decay.
         * </pre>
         */
        public float getWeightDecay(int index) {
            return weightDecay_.get(index);
        }

        public static final int RAND_SKIP_FIELD_NUMBER = 53;
        private int randSkip_;
        /**
         * <code>optional uint32 rand_skip = 53 [default = 0];</code>
         *
         * <pre>
         * The rand_skip variable is for the data layer to skip a few data points
         * to avoid all asynchronous sgd clients to start at the same point. The skip
         * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
         * be larger than the number of keys in the database.
         * </pre>
         */
        public boolean hasRandSkip() {
            return ((bitField0_ & 0x00400000) == 0x00400000);
        }
        /**
         * <code>optional uint32 rand_skip = 53 [default = 0];</code>
         *
         * <pre>
         * The rand_skip variable is for the data layer to skip a few data points
         * to avoid all asynchronous sgd clients to start at the same point. The skip
         * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
         * be larger than the number of keys in the database.
         * </pre>
         */
        public int getRandSkip() {
            return randSkip_;
        }

        public static final int DET_FG_THRESHOLD_FIELD_NUMBER = 54;
        private float detFgThreshold_;
        /**
         * <code>optional float det_fg_threshold = 54 [default = 0.5];</code>
         *
         * <pre>
         * Fields related to detection (det_*)
         * foreground (object) overlap threshold
         * </pre>
         */
        public boolean hasDetFgThreshold() {
            return ((bitField0_ & 0x00800000) == 0x00800000);
        }
        /**
         * <code>optional float det_fg_threshold = 54 [default = 0.5];</code>
         *
         * <pre>
         * Fields related to detection (det_*)
         * foreground (object) overlap threshold
         * </pre>
         */
        public float getDetFgThreshold() {
            return detFgThreshold_;
        }

        public static final int DET_BG_THRESHOLD_FIELD_NUMBER = 55;
        private float detBgThreshold_;
        /**
         * <code>optional float det_bg_threshold = 55 [default = 0.5];</code>
         *
         * <pre>
         * background (non-object) overlap threshold
         * </pre>
         */
        public boolean hasDetBgThreshold() {
            return ((bitField0_ & 0x01000000) == 0x01000000);
        }
        /**
         * <code>optional float det_bg_threshold = 55 [default = 0.5];</code>
         *
         * <pre>
         * background (non-object) overlap threshold
         * </pre>
         */
        public float getDetBgThreshold() {
            return detBgThreshold_;
        }

        public static final int DET_FG_FRACTION_FIELD_NUMBER = 56;
        private float detFgFraction_;
        /**
         * <code>optional float det_fg_fraction = 56 [default = 0.25];</code>
         *
         * <pre>
         * Fraction of batch that should be foreground objects
         * </pre>
         */
        public boolean hasDetFgFraction() {
            return ((bitField0_ & 0x02000000) == 0x02000000);
        }
        /**
         * <code>optional float det_fg_fraction = 56 [default = 0.25];</code>
         *
         * <pre>
         * Fraction of batch that should be foreground objects
         * </pre>
         */
        public float getDetFgFraction() {
            return detFgFraction_;
        }

        public static final int DET_CONTEXT_PAD_FIELD_NUMBER = 58;
        private int detContextPad_;
        /**
         * <code>optional uint32 det_context_pad = 58 [default = 0];</code>
         *
         * <pre>
         * Amount of contextual padding to add around a window
         * (used only by the window_data_layer)
         * </pre>
         */
        public boolean hasDetContextPad() {
            return ((bitField0_ & 0x04000000) == 0x04000000);
        }
        /**
         * <code>optional uint32 det_context_pad = 58 [default = 0];</code>
         *
         * <pre>
         * Amount of contextual padding to add around a window
         * (used only by the window_data_layer)
         * </pre>
         */
        public int getDetContextPad() {
            return detContextPad_;
        }

        public static final int DET_CROP_MODE_FIELD_NUMBER = 59;
        private java.lang.Object detCropMode_;
        /**
         * <code>optional string det_crop_mode = 59 [default = "warp"];</code>
         *
         * <pre>
         * Mode for cropping out a detection window
         * warp: cropped window is warped to a fixed size and aspect ratio
         * square: the tightest square around the window is cropped
         * </pre>
         */
        public boolean hasDetCropMode() {
            return ((bitField0_ & 0x08000000) == 0x08000000);
        }
        /**
         * <code>optional string det_crop_mode = 59 [default = "warp"];</code>
         *
         * <pre>
         * Mode for cropping out a detection window
         * warp: cropped window is warped to a fixed size and aspect ratio
         * square: the tightest square around the window is cropped
         * </pre>
         */
        public java.lang.String getDetCropMode() {
            java.lang.Object ref = detCropMode_;
            if (ref instanceof java.lang.String) {
                return (java.lang.String) ref;
            } else {
                com.google.protobuf.ByteString bs =
                        (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    detCropMode_ = s;
                }
                return s;
            }
        }
        /**
         * <code>optional string det_crop_mode = 59 [default = "warp"];</code>
         *
         * <pre>
         * Mode for cropping out a detection window
         * warp: cropped window is warped to a fixed size and aspect ratio
         * square: the tightest square around the window is cropped
         * </pre>
         */
        public com.google.protobuf.ByteString
        getDetCropModeBytes() {
            java.lang.Object ref = detCropMode_;
            if (ref instanceof java.lang.String) {
                com.google.protobuf.ByteString b =
                        com.google.protobuf.ByteString.copyFromUtf8(
                                (java.lang.String) ref);
                detCropMode_ = b;
                return b;
            } else {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int NEW_NUM_FIELD_NUMBER = 60;
        private int newNum_;
        /**
         * <code>optional int32 new_num = 60 [default = 0];</code>
         *
         * <pre>
         * For ReshapeLayer, one needs to specify the new dimensions.
         * </pre>
         */
        public boolean hasNewNum() {
            return ((bitField0_ & 0x10000000) == 0x10000000);
        }
        /**
         * <code>optional int32 new_num = 60 [default = 0];</code>
         *
         * <pre>
         * For ReshapeLayer, one needs to specify the new dimensions.
         * </pre>
         */
        public int getNewNum() {
            return newNum_;
        }

        public static final int NEW_CHANNELS_FIELD_NUMBER = 61;
        private int newChannels_;
        /**
         * <code>optional int32 new_channels = 61 [default = 0];</code>
         */
        public boolean hasNewChannels() {
            return ((bitField0_ & 0x20000000) == 0x20000000);
        }
        /**
         * <code>optional int32 new_channels = 61 [default = 0];</code>
         */
        public int getNewChannels() {
            return newChannels_;
        }

        public static final int NEW_HEIGHT_FIELD_NUMBER = 62;
        private int newHeight_;
        /**
         * <code>optional int32 new_height = 62 [default = 0];</code>
         */
        public boolean hasNewHeight() {
            return ((bitField0_ & 0x40000000) == 0x40000000);
        }
        /**
         * <code>optional int32 new_height = 62 [default = 0];</code>
         */
        public int getNewHeight() {
            return newHeight_;
        }

        public static final int NEW_WIDTH_FIELD_NUMBER = 63;
        private int newWidth_;
        /**
         * <code>optional int32 new_width = 63 [default = 0];</code>
         */
        public boolean hasNewWidth() {
            return ((bitField0_ & 0x80000000) == 0x80000000);
        }
        /**
         * <code>optional int32 new_width = 63 [default = 0];</code>
         */
        public int getNewWidth() {
            return newWidth_;
        }

        public static final int SHUFFLE_IMAGES_FIELD_NUMBER = 64;
        private boolean shuffleImages_;
        /**
         * <code>optional bool shuffle_images = 64 [default = false];</code>
         *
         * <pre>
         * Whether or not ImageLayer should shuffle the list of files at every epoch.
         * It will also resize images if new_height or new_width are not zero.
         * </pre>
         */
        public boolean hasShuffleImages() {
            return ((bitField1_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional bool shuffle_images = 64 [default = false];</code>
         *
         * <pre>
         * Whether or not ImageLayer should shuffle the list of files at every epoch.
         * It will also resize images if new_height or new_width are not zero.
         * </pre>
         */
        public boolean getShuffleImages() {
            return shuffleImages_;
        }

        public static final int CONCAT_DIM_FIELD_NUMBER = 65;
        private int concatDim_;
        /**
         * <code>optional uint32 concat_dim = 65 [default = 1];</code>
         *
         * <pre>
         * For ConcatLayer, one needs to specify the dimension for concatenation, and
         * the other dimensions must be the same for all the bottom blobs.
         * By default it will concatenate blobs along the channels dimension.
         * </pre>
         */
        public boolean hasConcatDim() {
            return ((bitField1_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional uint32 concat_dim = 65 [default = 1];</code>
         *
         * <pre>
         * For ConcatLayer, one needs to specify the dimension for concatenation, and
         * the other dimensions must be the same for all the bottom blobs.
         * By default it will concatenate blobs along the channels dimension.
         * </pre>
         */
        public int getConcatDim() {
            return concatDim_;
        }

        public static final int HDF5_OUTPUT_PARAM_FIELD_NUMBER = 1001;
        private caffe.Loadcaffe.HDF5OutputParameter hdf5OutputParam_;
        /**
         * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 1001;</code>
         */
        public boolean hasHdf5OutputParam() {
            return ((bitField1_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 1001;</code>
         */
        public caffe.Loadcaffe.HDF5OutputParameter getHdf5OutputParam() {
            return hdf5OutputParam_;
        }
        /**
         * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 1001;</code>
         */
        public caffe.Loadcaffe.HDF5OutputParameterOrBuilder getHdf5OutputParamOrBuilder() {
            return hdf5OutputParam_;
        }

        private void initFields() {
            name_ = "";
            type_ = "";
            numOutput_ = 0;
            biasterm_ = true;
            weightFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
            biasFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
            pad_ = 0;
            kernelsize_ = 0;
            group_ = 1;
            stride_ = 1;
            pool_ = caffe.Loadcaffe.V0LayerParameter.PoolMethod.MAX;
            dropoutRatio_ = 0.5F;
            localSize_ = 5;
            alpha_ = 1F;
            beta_ = 0.75F;
            k_ = 1F;
            source_ = "";
            scale_ = 1F;
            meanfile_ = "";
            batchsize_ = 0;
            cropsize_ = 0;
            mirror_ = false;
            blobs_ = java.util.Collections.emptyList();
            blobsLr_ = java.util.Collections.emptyList();
            weightDecay_ = java.util.Collections.emptyList();
            randSkip_ = 0;
            detFgThreshold_ = 0.5F;
            detBgThreshold_ = 0.5F;
            detFgFraction_ = 0.25F;
            detContextPad_ = 0;
            detCropMode_ = "warp";
            newNum_ = 0;
            newChannels_ = 0;
            newHeight_ = 0;
            newWidth_ = 0;
            shuffleImages_ = false;
            concatDim_ = 1;
            hdf5OutputParam_ = caffe.Loadcaffe.HDF5OutputParameter.getDefaultInstance();
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeBytes(1, getNameBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeBytes(2, getTypeBytes());
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                output.writeUInt32(3, numOutput_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                output.writeBool(4, biasterm_);
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                output.writeMessage(5, weightFiller_);
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                output.writeMessage(6, biasFiller_);
            }
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                output.writeUInt32(7, pad_);
            }
            if (((bitField0_ & 0x00000080) == 0x00000080)) {
                output.writeUInt32(8, kernelsize_);
            }
            if (((bitField0_ & 0x00000100) == 0x00000100)) {
                output.writeUInt32(9, group_);
            }
            if (((bitField0_ & 0x00000200) == 0x00000200)) {
                output.writeUInt32(10, stride_);
            }
            if (((bitField0_ & 0x00000400) == 0x00000400)) {
                output.writeEnum(11, pool_.getNumber());
            }
            if (((bitField0_ & 0x00000800) == 0x00000800)) {
                output.writeFloat(12, dropoutRatio_);
            }
            if (((bitField0_ & 0x00001000) == 0x00001000)) {
                output.writeUInt32(13, localSize_);
            }
            if (((bitField0_ & 0x00002000) == 0x00002000)) {
                output.writeFloat(14, alpha_);
            }
            if (((bitField0_ & 0x00004000) == 0x00004000)) {
                output.writeFloat(15, beta_);
            }
            if (((bitField0_ & 0x00010000) == 0x00010000)) {
                output.writeBytes(16, getSourceBytes());
            }
            if (((bitField0_ & 0x00020000) == 0x00020000)) {
                output.writeFloat(17, scale_);
            }
            if (((bitField0_ & 0x00040000) == 0x00040000)) {
                output.writeBytes(18, getMeanfileBytes());
            }
            if (((bitField0_ & 0x00080000) == 0x00080000)) {
                output.writeUInt32(19, batchsize_);
            }
            if (((bitField0_ & 0x00100000) == 0x00100000)) {
                output.writeUInt32(20, cropsize_);
            }
            if (((bitField0_ & 0x00200000) == 0x00200000)) {
                output.writeBool(21, mirror_);
            }
            if (((bitField0_ & 0x00008000) == 0x00008000)) {
                output.writeFloat(22, k_);
            }
            for (int i = 0; i < blobs_.size(); i++) {
                output.writeMessage(50, blobs_.get(i));
            }
            for (int i = 0; i < blobsLr_.size(); i++) {
                output.writeFloat(51, blobsLr_.get(i));
            }
            for (int i = 0; i < weightDecay_.size(); i++) {
                output.writeFloat(52, weightDecay_.get(i));
            }
            if (((bitField0_ & 0x00400000) == 0x00400000)) {
                output.writeUInt32(53, randSkip_);
            }
            if (((bitField0_ & 0x00800000) == 0x00800000)) {
                output.writeFloat(54, detFgThreshold_);
            }
            if (((bitField0_ & 0x01000000) == 0x01000000)) {
                output.writeFloat(55, detBgThreshold_);
            }
            if (((bitField0_ & 0x02000000) == 0x02000000)) {
                output.writeFloat(56, detFgFraction_);
            }
            if (((bitField0_ & 0x04000000) == 0x04000000)) {
                output.writeUInt32(58, detContextPad_);
            }
            if (((bitField0_ & 0x08000000) == 0x08000000)) {
                output.writeBytes(59, getDetCropModeBytes());
            }
            if (((bitField0_ & 0x10000000) == 0x10000000)) {
                output.writeInt32(60, newNum_);
            }
            if (((bitField0_ & 0x20000000) == 0x20000000)) {
                output.writeInt32(61, newChannels_);
            }
            if (((bitField0_ & 0x40000000) == 0x40000000)) {
                output.writeInt32(62, newHeight_);
            }
            if (((bitField0_ & 0x80000000) == 0x80000000)) {
                output.writeInt32(63, newWidth_);
            }
            if (((bitField1_ & 0x00000001) == 0x00000001)) {
                output.writeBool(64, shuffleImages_);
            }
            if (((bitField1_ & 0x00000002) == 0x00000002)) {
                output.writeUInt32(65, concatDim_);
            }
            if (((bitField1_ & 0x00000004) == 0x00000004)) {
                output.writeMessage(1001, hdf5OutputParam_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(1, getNameBytes());
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(2, getTypeBytes());
            }
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(3, numOutput_);
            }
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(4, biasterm_);
            }
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(5, weightFiller_);
            }
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(6, biasFiller_);
            }
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(7, pad_);
            }
            if (((bitField0_ & 0x00000080) == 0x00000080)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(8, kernelsize_);
            }
            if (((bitField0_ & 0x00000100) == 0x00000100)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(9, group_);
            }
            if (((bitField0_ & 0x00000200) == 0x00000200)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(10, stride_);
            }
            if (((bitField0_ & 0x00000400) == 0x00000400)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeEnumSize(11, pool_.getNumber());
            }
            if (((bitField0_ & 0x00000800) == 0x00000800)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(12, dropoutRatio_);
            }
            if (((bitField0_ & 0x00001000) == 0x00001000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(13, localSize_);
            }
            if (((bitField0_ & 0x00002000) == 0x00002000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(14, alpha_);
            }
            if (((bitField0_ & 0x00004000) == 0x00004000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(15, beta_);
            }
            if (((bitField0_ & 0x00010000) == 0x00010000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(16, getSourceBytes());
            }
            if (((bitField0_ & 0x00020000) == 0x00020000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(17, scale_);
            }
            if (((bitField0_ & 0x00040000) == 0x00040000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(18, getMeanfileBytes());
            }
            if (((bitField0_ & 0x00080000) == 0x00080000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(19, batchsize_);
            }
            if (((bitField0_ & 0x00100000) == 0x00100000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(20, cropsize_);
            }
            if (((bitField0_ & 0x00200000) == 0x00200000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(21, mirror_);
            }
            if (((bitField0_ & 0x00008000) == 0x00008000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(22, k_);
            }
            for (int i = 0; i < blobs_.size(); i++) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(50, blobs_.get(i));
            }
            {
                int dataSize = 0;
                dataSize = 4 * getBlobsLrList().size();
                size += dataSize;
                size += 2 * getBlobsLrList().size();
            }
            {
                int dataSize = 0;
                dataSize = 4 * getWeightDecayList().size();
                size += dataSize;
                size += 2 * getWeightDecayList().size();
            }
            if (((bitField0_ & 0x00400000) == 0x00400000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(53, randSkip_);
            }
            if (((bitField0_ & 0x00800000) == 0x00800000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(54, detFgThreshold_);
            }
            if (((bitField0_ & 0x01000000) == 0x01000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(55, detBgThreshold_);
            }
            if (((bitField0_ & 0x02000000) == 0x02000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeFloatSize(56, detFgFraction_);
            }
            if (((bitField0_ & 0x04000000) == 0x04000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(58, detContextPad_);
            }
            if (((bitField0_ & 0x08000000) == 0x08000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBytesSize(59, getDetCropModeBytes());
            }
            if (((bitField0_ & 0x10000000) == 0x10000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(60, newNum_);
            }
            if (((bitField0_ & 0x20000000) == 0x20000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(61, newChannels_);
            }
            if (((bitField0_ & 0x40000000) == 0x40000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(62, newHeight_);
            }
            if (((bitField0_ & 0x80000000) == 0x80000000)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeInt32Size(63, newWidth_);
            }
            if (((bitField1_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(64, shuffleImages_);
            }
            if (((bitField1_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeUInt32Size(65, concatDim_);
            }
            if (((bitField1_ & 0x00000004) == 0x00000004)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(1001, hdf5OutputParam_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.V0LayerParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.V0LayerParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.V0LayerParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.V0LayerParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.V0LayerParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.V0LayerParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.V0LayerParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.V0LayerParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.V0LayerParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.V0LayerParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.V0LayerParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.V0LayerParameter}
         *
         * <pre>
         * DEPRECATED: V0LayerParameter is the old way of specifying layer parameters
         * in Caffe.  We keep this message type around for legacy support.
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.V0LayerParameter)
                caffe.Loadcaffe.V0LayerParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_V0LayerParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_V0LayerParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.V0LayerParameter.class, caffe.Loadcaffe.V0LayerParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.V0LayerParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                    getWeightFillerFieldBuilder();
                    getBiasFillerFieldBuilder();
                    getBlobsFieldBuilder();
                    getHdf5OutputParamFieldBuilder();
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                name_ = "";
                bitField0_ = (bitField0_ & ~0x00000001);
                type_ = "";
                bitField0_ = (bitField0_ & ~0x00000002);
                numOutput_ = 0;
                bitField0_ = (bitField0_ & ~0x00000004);
                biasterm_ = true;
                bitField0_ = (bitField0_ & ~0x00000008);
                if (weightFillerBuilder_ == null) {
                    weightFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
                } else {
                    weightFillerBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000010);
                if (biasFillerBuilder_ == null) {
                    biasFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
                } else {
                    biasFillerBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000020);
                pad_ = 0;
                bitField0_ = (bitField0_ & ~0x00000040);
                kernelsize_ = 0;
                bitField0_ = (bitField0_ & ~0x00000080);
                group_ = 1;
                bitField0_ = (bitField0_ & ~0x00000100);
                stride_ = 1;
                bitField0_ = (bitField0_ & ~0x00000200);
                pool_ = caffe.Loadcaffe.V0LayerParameter.PoolMethod.MAX;
                bitField0_ = (bitField0_ & ~0x00000400);
                dropoutRatio_ = 0.5F;
                bitField0_ = (bitField0_ & ~0x00000800);
                localSize_ = 5;
                bitField0_ = (bitField0_ & ~0x00001000);
                alpha_ = 1F;
                bitField0_ = (bitField0_ & ~0x00002000);
                beta_ = 0.75F;
                bitField0_ = (bitField0_ & ~0x00004000);
                k_ = 1F;
                bitField0_ = (bitField0_ & ~0x00008000);
                source_ = "";
                bitField0_ = (bitField0_ & ~0x00010000);
                scale_ = 1F;
                bitField0_ = (bitField0_ & ~0x00020000);
                meanfile_ = "";
                bitField0_ = (bitField0_ & ~0x00040000);
                batchsize_ = 0;
                bitField0_ = (bitField0_ & ~0x00080000);
                cropsize_ = 0;
                bitField0_ = (bitField0_ & ~0x00100000);
                mirror_ = false;
                bitField0_ = (bitField0_ & ~0x00200000);
                if (blobsBuilder_ == null) {
                    blobs_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00400000);
                } else {
                    blobsBuilder_.clear();
                }
                blobsLr_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00800000);
                weightDecay_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x01000000);
                randSkip_ = 0;
                bitField0_ = (bitField0_ & ~0x02000000);
                detFgThreshold_ = 0.5F;
                bitField0_ = (bitField0_ & ~0x04000000);
                detBgThreshold_ = 0.5F;
                bitField0_ = (bitField0_ & ~0x08000000);
                detFgFraction_ = 0.25F;
                bitField0_ = (bitField0_ & ~0x10000000);
                detContextPad_ = 0;
                bitField0_ = (bitField0_ & ~0x20000000);
                detCropMode_ = "warp";
                bitField0_ = (bitField0_ & ~0x40000000);
                newNum_ = 0;
                bitField0_ = (bitField0_ & ~0x80000000);
                newChannels_ = 0;
                bitField1_ = (bitField1_ & ~0x00000001);
                newHeight_ = 0;
                bitField1_ = (bitField1_ & ~0x00000002);
                newWidth_ = 0;
                bitField1_ = (bitField1_ & ~0x00000004);
                shuffleImages_ = false;
                bitField1_ = (bitField1_ & ~0x00000008);
                concatDim_ = 1;
                bitField1_ = (bitField1_ & ~0x00000010);
                if (hdf5OutputParamBuilder_ == null) {
                    hdf5OutputParam_ = caffe.Loadcaffe.HDF5OutputParameter.getDefaultInstance();
                } else {
                    hdf5OutputParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000020);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_V0LayerParameter_descriptor;
            }

            public caffe.Loadcaffe.V0LayerParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.V0LayerParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.V0LayerParameter build() {
                caffe.Loadcaffe.V0LayerParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.V0LayerParameter buildPartial() {
                caffe.Loadcaffe.V0LayerParameter result = new caffe.Loadcaffe.V0LayerParameter(this);
                int from_bitField0_ = bitField0_;
                int from_bitField1_ = bitField1_;
                int to_bitField0_ = 0;
                int to_bitField1_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                result.name_ = name_;
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.type_ = type_;
                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x00000004;
                }
                result.numOutput_ = numOutput_;
                if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
                    to_bitField0_ |= 0x00000008;
                }
                result.biasterm_ = biasterm_;
                if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
                    to_bitField0_ |= 0x00000010;
                }
                if (weightFillerBuilder_ == null) {
                    result.weightFiller_ = weightFiller_;
                } else {
                    result.weightFiller_ = weightFillerBuilder_.build();
                }
                if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
                    to_bitField0_ |= 0x00000020;
                }
                if (biasFillerBuilder_ == null) {
                    result.biasFiller_ = biasFiller_;
                } else {
                    result.biasFiller_ = biasFillerBuilder_.build();
                }
                if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
                    to_bitField0_ |= 0x00000040;
                }
                result.pad_ = pad_;
                if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
                    to_bitField0_ |= 0x00000080;
                }
                result.kernelsize_ = kernelsize_;
                if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
                    to_bitField0_ |= 0x00000100;
                }
                result.group_ = group_;
                if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
                    to_bitField0_ |= 0x00000200;
                }
                result.stride_ = stride_;
                if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
                    to_bitField0_ |= 0x00000400;
                }
                result.pool_ = pool_;
                if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
                    to_bitField0_ |= 0x00000800;
                }
                result.dropoutRatio_ = dropoutRatio_;
                if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
                    to_bitField0_ |= 0x00001000;
                }
                result.localSize_ = localSize_;
                if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
                    to_bitField0_ |= 0x00002000;
                }
                result.alpha_ = alpha_;
                if (((from_bitField0_ & 0x00004000) == 0x00004000)) {
                    to_bitField0_ |= 0x00004000;
                }
                result.beta_ = beta_;
                if (((from_bitField0_ & 0x00008000) == 0x00008000)) {
                    to_bitField0_ |= 0x00008000;
                }
                result.k_ = k_;
                if (((from_bitField0_ & 0x00010000) == 0x00010000)) {
                    to_bitField0_ |= 0x00010000;
                }
                result.source_ = source_;
                if (((from_bitField0_ & 0x00020000) == 0x00020000)) {
                    to_bitField0_ |= 0x00020000;
                }
                result.scale_ = scale_;
                if (((from_bitField0_ & 0x00040000) == 0x00040000)) {
                    to_bitField0_ |= 0x00040000;
                }
                result.meanfile_ = meanfile_;
                if (((from_bitField0_ & 0x00080000) == 0x00080000)) {
                    to_bitField0_ |= 0x00080000;
                }
                result.batchsize_ = batchsize_;
                if (((from_bitField0_ & 0x00100000) == 0x00100000)) {
                    to_bitField0_ |= 0x00100000;
                }
                result.cropsize_ = cropsize_;
                if (((from_bitField0_ & 0x00200000) == 0x00200000)) {
                    to_bitField0_ |= 0x00200000;
                }
                result.mirror_ = mirror_;
                if (blobsBuilder_ == null) {
                    if (((bitField0_ & 0x00400000) == 0x00400000)) {
                        blobs_ = java.util.Collections.unmodifiableList(blobs_);
                        bitField0_ = (bitField0_ & ~0x00400000);
                    }
                    result.blobs_ = blobs_;
                } else {
                    result.blobs_ = blobsBuilder_.build();
                }
                if (((bitField0_ & 0x00800000) == 0x00800000)) {
                    blobsLr_ = java.util.Collections.unmodifiableList(blobsLr_);
                    bitField0_ = (bitField0_ & ~0x00800000);
                }
                result.blobsLr_ = blobsLr_;
                if (((bitField0_ & 0x01000000) == 0x01000000)) {
                    weightDecay_ = java.util.Collections.unmodifiableList(weightDecay_);
                    bitField0_ = (bitField0_ & ~0x01000000);
                }
                result.weightDecay_ = weightDecay_;
                if (((from_bitField0_ & 0x02000000) == 0x02000000)) {
                    to_bitField0_ |= 0x00400000;
                }
                result.randSkip_ = randSkip_;
                if (((from_bitField0_ & 0x04000000) == 0x04000000)) {
                    to_bitField0_ |= 0x00800000;
                }
                result.detFgThreshold_ = detFgThreshold_;
                if (((from_bitField0_ & 0x08000000) == 0x08000000)) {
                    to_bitField0_ |= 0x01000000;
                }
                result.detBgThreshold_ = detBgThreshold_;
                if (((from_bitField0_ & 0x10000000) == 0x10000000)) {
                    to_bitField0_ |= 0x02000000;
                }
                result.detFgFraction_ = detFgFraction_;
                if (((from_bitField0_ & 0x20000000) == 0x20000000)) {
                    to_bitField0_ |= 0x04000000;
                }
                result.detContextPad_ = detContextPad_;
                if (((from_bitField0_ & 0x40000000) == 0x40000000)) {
                    to_bitField0_ |= 0x08000000;
                }
                result.detCropMode_ = detCropMode_;
                if (((from_bitField0_ & 0x80000000) == 0x80000000)) {
                    to_bitField0_ |= 0x10000000;
                }
                result.newNum_ = newNum_;
                if (((from_bitField1_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x20000000;
                }
                result.newChannels_ = newChannels_;
                if (((from_bitField1_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x40000000;
                }
                result.newHeight_ = newHeight_;
                if (((from_bitField1_ & 0x00000004) == 0x00000004)) {
                    to_bitField0_ |= 0x80000000;
                }
                result.newWidth_ = newWidth_;
                if (((from_bitField1_ & 0x00000008) == 0x00000008)) {
                    to_bitField1_ |= 0x00000001;
                }
                result.shuffleImages_ = shuffleImages_;
                if (((from_bitField1_ & 0x00000010) == 0x00000010)) {
                    to_bitField1_ |= 0x00000002;
                }
                result.concatDim_ = concatDim_;
                if (((from_bitField1_ & 0x00000020) == 0x00000020)) {
                    to_bitField1_ |= 0x00000004;
                }
                if (hdf5OutputParamBuilder_ == null) {
                    result.hdf5OutputParam_ = hdf5OutputParam_;
                } else {
                    result.hdf5OutputParam_ = hdf5OutputParamBuilder_.build();
                }
                result.bitField0_ = to_bitField0_;
                result.bitField1_ = to_bitField1_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.V0LayerParameter) {
                    return mergeFrom((caffe.Loadcaffe.V0LayerParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.V0LayerParameter other) {
                if (other == caffe.Loadcaffe.V0LayerParameter.getDefaultInstance()) return this;
                if (other.hasName()) {
                    bitField0_ |= 0x00000001;
                    name_ = other.name_;
                    onChanged();
                }
                if (other.hasType()) {
                    bitField0_ |= 0x00000002;
                    type_ = other.type_;
                    onChanged();
                }
                if (other.hasNumOutput()) {
                    setNumOutput(other.getNumOutput());
                }
                if (other.hasBiasterm()) {
                    setBiasterm(other.getBiasterm());
                }
                if (other.hasWeightFiller()) {
                    mergeWeightFiller(other.getWeightFiller());
                }
                if (other.hasBiasFiller()) {
                    mergeBiasFiller(other.getBiasFiller());
                }
                if (other.hasPad()) {
                    setPad(other.getPad());
                }
                if (other.hasKernelsize()) {
                    setKernelsize(other.getKernelsize());
                }
                if (other.hasGroup()) {
                    setGroup(other.getGroup());
                }
                if (other.hasStride()) {
                    setStride(other.getStride());
                }
                if (other.hasPool()) {
                    setPool(other.getPool());
                }
                if (other.hasDropoutRatio()) {
                    setDropoutRatio(other.getDropoutRatio());
                }
                if (other.hasLocalSize()) {
                    setLocalSize(other.getLocalSize());
                }
                if (other.hasAlpha()) {
                    setAlpha(other.getAlpha());
                }
                if (other.hasBeta()) {
                    setBeta(other.getBeta());
                }
                if (other.hasK()) {
                    setK(other.getK());
                }
                if (other.hasSource()) {
                    bitField0_ |= 0x00010000;
                    source_ = other.source_;
                    onChanged();
                }
                if (other.hasScale()) {
                    setScale(other.getScale());
                }
                if (other.hasMeanfile()) {
                    bitField0_ |= 0x00040000;
                    meanfile_ = other.meanfile_;
                    onChanged();
                }
                if (other.hasBatchsize()) {
                    setBatchsize(other.getBatchsize());
                }
                if (other.hasCropsize()) {
                    setCropsize(other.getCropsize());
                }
                if (other.hasMirror()) {
                    setMirror(other.getMirror());
                }
                if (blobsBuilder_ == null) {
                    if (!other.blobs_.isEmpty()) {
                        if (blobs_.isEmpty()) {
                            blobs_ = other.blobs_;
                            bitField0_ = (bitField0_ & ~0x00400000);
                        } else {
                            ensureBlobsIsMutable();
                            blobs_.addAll(other.blobs_);
                        }
                        onChanged();
                    }
                } else {
                    if (!other.blobs_.isEmpty()) {
                        if (blobsBuilder_.isEmpty()) {
                            blobsBuilder_.dispose();
                            blobsBuilder_ = null;
                            blobs_ = other.blobs_;
                            bitField0_ = (bitField0_ & ~0x00400000);
                            blobsBuilder_ =
                                    com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                                            getBlobsFieldBuilder() : null;
                        } else {
                            blobsBuilder_.addAllMessages(other.blobs_);
                        }
                    }
                }
                if (!other.blobsLr_.isEmpty()) {
                    if (blobsLr_.isEmpty()) {
                        blobsLr_ = other.blobsLr_;
                        bitField0_ = (bitField0_ & ~0x00800000);
                    } else {
                        ensureBlobsLrIsMutable();
                        blobsLr_.addAll(other.blobsLr_);
                    }
                    onChanged();
                }
                if (!other.weightDecay_.isEmpty()) {
                    if (weightDecay_.isEmpty()) {
                        weightDecay_ = other.weightDecay_;
                        bitField0_ = (bitField0_ & ~0x01000000);
                    } else {
                        ensureWeightDecayIsMutable();
                        weightDecay_.addAll(other.weightDecay_);
                    }
                    onChanged();
                }
                if (other.hasRandSkip()) {
                    setRandSkip(other.getRandSkip());
                }
                if (other.hasDetFgThreshold()) {
                    setDetFgThreshold(other.getDetFgThreshold());
                }
                if (other.hasDetBgThreshold()) {
                    setDetBgThreshold(other.getDetBgThreshold());
                }
                if (other.hasDetFgFraction()) {
                    setDetFgFraction(other.getDetFgFraction());
                }
                if (other.hasDetContextPad()) {
                    setDetContextPad(other.getDetContextPad());
                }
                if (other.hasDetCropMode()) {
                    bitField0_ |= 0x40000000;
                    detCropMode_ = other.detCropMode_;
                    onChanged();
                }
                if (other.hasNewNum()) {
                    setNewNum(other.getNewNum());
                }
                if (other.hasNewChannels()) {
                    setNewChannels(other.getNewChannels());
                }
                if (other.hasNewHeight()) {
                    setNewHeight(other.getNewHeight());
                }
                if (other.hasNewWidth()) {
                    setNewWidth(other.getNewWidth());
                }
                if (other.hasShuffleImages()) {
                    setShuffleImages(other.getShuffleImages());
                }
                if (other.hasConcatDim()) {
                    setConcatDim(other.getConcatDim());
                }
                if (other.hasHdf5OutputParam()) {
                    mergeHdf5OutputParam(other.getHdf5OutputParam());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.V0LayerParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.V0LayerParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;
            private int bitField1_;

            private java.lang.Object name_ = "";
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * the layer name
             * </pre>
             */
            public boolean hasName() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * the layer name
             * </pre>
             */
            public java.lang.String getName() {
                java.lang.Object ref = name_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        name_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * the layer name
             * </pre>
             */
            public com.google.protobuf.ByteString
            getNameBytes() {
                java.lang.Object ref = name_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    name_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * the layer name
             * </pre>
             */
            public Builder setName(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                name_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * the layer name
             * </pre>
             */
            public Builder clearName() {
                bitField0_ = (bitField0_ & ~0x00000001);
                name_ = getDefaultInstance().getName();
                onChanged();
                return this;
            }
            /**
             * <code>optional string name = 1;</code>
             *
             * <pre>
             * the layer name
             * </pre>
             */
            public Builder setNameBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000001;
                name_ = value;
                onChanged();
                return this;
            }

            private java.lang.Object type_ = "";
            /**
             * <code>optional string type = 2;</code>
             *
             * <pre>
             * the string to specify the layer type
             * </pre>
             */
            public boolean hasType() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional string type = 2;</code>
             *
             * <pre>
             * the string to specify the layer type
             * </pre>
             */
            public java.lang.String getType() {
                java.lang.Object ref = type_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        type_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string type = 2;</code>
             *
             * <pre>
             * the string to specify the layer type
             * </pre>
             */
            public com.google.protobuf.ByteString
            getTypeBytes() {
                java.lang.Object ref = type_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    type_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string type = 2;</code>
             *
             * <pre>
             * the string to specify the layer type
             * </pre>
             */
            public Builder setType(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000002;
                type_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string type = 2;</code>
             *
             * <pre>
             * the string to specify the layer type
             * </pre>
             */
            public Builder clearType() {
                bitField0_ = (bitField0_ & ~0x00000002);
                type_ = getDefaultInstance().getType();
                onChanged();
                return this;
            }
            /**
             * <code>optional string type = 2;</code>
             *
             * <pre>
             * the string to specify the layer type
             * </pre>
             */
            public Builder setTypeBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000002;
                type_ = value;
                onChanged();
                return this;
            }

            private int numOutput_ ;
            /**
             * <code>optional uint32 num_output = 3;</code>
             *
             * <pre>
             * Parameters to specify layers with inner products.
             * </pre>
             */
            public boolean hasNumOutput() {
                return ((bitField0_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional uint32 num_output = 3;</code>
             *
             * <pre>
             * Parameters to specify layers with inner products.
             * </pre>
             */
            public int getNumOutput() {
                return numOutput_;
            }
            /**
             * <code>optional uint32 num_output = 3;</code>
             *
             * <pre>
             * Parameters to specify layers with inner products.
             * </pre>
             */
            public Builder setNumOutput(int value) {
                bitField0_ |= 0x00000004;
                numOutput_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 num_output = 3;</code>
             *
             * <pre>
             * Parameters to specify layers with inner products.
             * </pre>
             */
            public Builder clearNumOutput() {
                bitField0_ = (bitField0_ & ~0x00000004);
                numOutput_ = 0;
                onChanged();
                return this;
            }

            private boolean biasterm_ = true;
            /**
             * <code>optional bool biasterm = 4 [default = true];</code>
             *
             * <pre>
             * whether to have bias terms
             * </pre>
             */
            public boolean hasBiasterm() {
                return ((bitField0_ & 0x00000008) == 0x00000008);
            }
            /**
             * <code>optional bool biasterm = 4 [default = true];</code>
             *
             * <pre>
             * whether to have bias terms
             * </pre>
             */
            public boolean getBiasterm() {
                return biasterm_;
            }
            /**
             * <code>optional bool biasterm = 4 [default = true];</code>
             *
             * <pre>
             * whether to have bias terms
             * </pre>
             */
            public Builder setBiasterm(boolean value) {
                bitField0_ |= 0x00000008;
                biasterm_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool biasterm = 4 [default = true];</code>
             *
             * <pre>
             * whether to have bias terms
             * </pre>
             */
            public Builder clearBiasterm() {
                bitField0_ = (bitField0_ & ~0x00000008);
                biasterm_ = true;
                onChanged();
                return this;
            }

            private caffe.Loadcaffe.FillerParameter weightFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder> weightFillerBuilder_;
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 5;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public boolean hasWeightFiller() {
                return ((bitField0_ & 0x00000010) == 0x00000010);
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 5;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameter getWeightFiller() {
                if (weightFillerBuilder_ == null) {
                    return weightFiller_;
                } else {
                    return weightFillerBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 5;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public Builder setWeightFiller(caffe.Loadcaffe.FillerParameter value) {
                if (weightFillerBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    weightFiller_ = value;
                    onChanged();
                } else {
                    weightFillerBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00000010;
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 5;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public Builder setWeightFiller(
                    caffe.Loadcaffe.FillerParameter.Builder builderForValue) {
                if (weightFillerBuilder_ == null) {
                    weightFiller_ = builderForValue.build();
                    onChanged();
                } else {
                    weightFillerBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00000010;
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 5;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public Builder mergeWeightFiller(caffe.Loadcaffe.FillerParameter value) {
                if (weightFillerBuilder_ == null) {
                    if (((bitField0_ & 0x00000010) == 0x00000010) &&
                            weightFiller_ != caffe.Loadcaffe.FillerParameter.getDefaultInstance()) {
                        weightFiller_ =
                                caffe.Loadcaffe.FillerParameter.newBuilder(weightFiller_).mergeFrom(value).buildPartial();
                    } else {
                        weightFiller_ = value;
                    }
                    onChanged();
                } else {
                    weightFillerBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00000010;
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 5;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public Builder clearWeightFiller() {
                if (weightFillerBuilder_ == null) {
                    weightFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
                    onChanged();
                } else {
                    weightFillerBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000010);
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 5;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameter.Builder getWeightFillerBuilder() {
                bitField0_ |= 0x00000010;
                onChanged();
                return getWeightFillerFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 5;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameterOrBuilder getWeightFillerOrBuilder() {
                if (weightFillerBuilder_ != null) {
                    return weightFillerBuilder_.getMessageOrBuilder();
                } else {
                    return weightFiller_;
                }
            }
            /**
             * <code>optional .caffe.FillerParameter weight_filler = 5;</code>
             *
             * <pre>
             * The filler for the weight
             * </pre>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder>
            getWeightFillerFieldBuilder() {
                if (weightFillerBuilder_ == null) {
                    weightFillerBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder>(
                            getWeightFiller(),
                            getParentForChildren(),
                            isClean());
                    weightFiller_ = null;
                }
                return weightFillerBuilder_;
            }

            private caffe.Loadcaffe.FillerParameter biasFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder> biasFillerBuilder_;
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 6;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public boolean hasBiasFiller() {
                return ((bitField0_ & 0x00000020) == 0x00000020);
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 6;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameter getBiasFiller() {
                if (biasFillerBuilder_ == null) {
                    return biasFiller_;
                } else {
                    return biasFillerBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 6;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public Builder setBiasFiller(caffe.Loadcaffe.FillerParameter value) {
                if (biasFillerBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    biasFiller_ = value;
                    onChanged();
                } else {
                    biasFillerBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00000020;
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 6;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public Builder setBiasFiller(
                    caffe.Loadcaffe.FillerParameter.Builder builderForValue) {
                if (biasFillerBuilder_ == null) {
                    biasFiller_ = builderForValue.build();
                    onChanged();
                } else {
                    biasFillerBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00000020;
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 6;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public Builder mergeBiasFiller(caffe.Loadcaffe.FillerParameter value) {
                if (biasFillerBuilder_ == null) {
                    if (((bitField0_ & 0x00000020) == 0x00000020) &&
                            biasFiller_ != caffe.Loadcaffe.FillerParameter.getDefaultInstance()) {
                        biasFiller_ =
                                caffe.Loadcaffe.FillerParameter.newBuilder(biasFiller_).mergeFrom(value).buildPartial();
                    } else {
                        biasFiller_ = value;
                    }
                    onChanged();
                } else {
                    biasFillerBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00000020;
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 6;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public Builder clearBiasFiller() {
                if (biasFillerBuilder_ == null) {
                    biasFiller_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
                    onChanged();
                } else {
                    biasFillerBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000020);
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 6;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameter.Builder getBiasFillerBuilder() {
                bitField0_ |= 0x00000020;
                onChanged();
                return getBiasFillerFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 6;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameterOrBuilder getBiasFillerOrBuilder() {
                if (biasFillerBuilder_ != null) {
                    return biasFillerBuilder_.getMessageOrBuilder();
                } else {
                    return biasFiller_;
                }
            }
            /**
             * <code>optional .caffe.FillerParameter bias_filler = 6;</code>
             *
             * <pre>
             * The filler for the bias
             * </pre>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder>
            getBiasFillerFieldBuilder() {
                if (biasFillerBuilder_ == null) {
                    biasFillerBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder>(
                            getBiasFiller(),
                            getParentForChildren(),
                            isClean());
                    biasFiller_ = null;
                }
                return biasFillerBuilder_;
            }

            private int pad_ ;
            /**
             * <code>optional uint32 pad = 7 [default = 0];</code>
             *
             * <pre>
             * The padding size
             * </pre>
             */
            public boolean hasPad() {
                return ((bitField0_ & 0x00000040) == 0x00000040);
            }
            /**
             * <code>optional uint32 pad = 7 [default = 0];</code>
             *
             * <pre>
             * The padding size
             * </pre>
             */
            public int getPad() {
                return pad_;
            }
            /**
             * <code>optional uint32 pad = 7 [default = 0];</code>
             *
             * <pre>
             * The padding size
             * </pre>
             */
            public Builder setPad(int value) {
                bitField0_ |= 0x00000040;
                pad_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 pad = 7 [default = 0];</code>
             *
             * <pre>
             * The padding size
             * </pre>
             */
            public Builder clearPad() {
                bitField0_ = (bitField0_ & ~0x00000040);
                pad_ = 0;
                onChanged();
                return this;
            }

            private int kernelsize_ ;
            /**
             * <code>optional uint32 kernelsize = 8;</code>
             *
             * <pre>
             * The kernel size
             * </pre>
             */
            public boolean hasKernelsize() {
                return ((bitField0_ & 0x00000080) == 0x00000080);
            }
            /**
             * <code>optional uint32 kernelsize = 8;</code>
             *
             * <pre>
             * The kernel size
             * </pre>
             */
            public int getKernelsize() {
                return kernelsize_;
            }
            /**
             * <code>optional uint32 kernelsize = 8;</code>
             *
             * <pre>
             * The kernel size
             * </pre>
             */
            public Builder setKernelsize(int value) {
                bitField0_ |= 0x00000080;
                kernelsize_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 kernelsize = 8;</code>
             *
             * <pre>
             * The kernel size
             * </pre>
             */
            public Builder clearKernelsize() {
                bitField0_ = (bitField0_ & ~0x00000080);
                kernelsize_ = 0;
                onChanged();
                return this;
            }

            private int group_ = 1;
            /**
             * <code>optional uint32 group = 9 [default = 1];</code>
             *
             * <pre>
             * The group size for group conv
             * </pre>
             */
            public boolean hasGroup() {
                return ((bitField0_ & 0x00000100) == 0x00000100);
            }
            /**
             * <code>optional uint32 group = 9 [default = 1];</code>
             *
             * <pre>
             * The group size for group conv
             * </pre>
             */
            public int getGroup() {
                return group_;
            }
            /**
             * <code>optional uint32 group = 9 [default = 1];</code>
             *
             * <pre>
             * The group size for group conv
             * </pre>
             */
            public Builder setGroup(int value) {
                bitField0_ |= 0x00000100;
                group_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 group = 9 [default = 1];</code>
             *
             * <pre>
             * The group size for group conv
             * </pre>
             */
            public Builder clearGroup() {
                bitField0_ = (bitField0_ & ~0x00000100);
                group_ = 1;
                onChanged();
                return this;
            }

            private int stride_ = 1;
            /**
             * <code>optional uint32 stride = 10 [default = 1];</code>
             *
             * <pre>
             * The stride
             * </pre>
             */
            public boolean hasStride() {
                return ((bitField0_ & 0x00000200) == 0x00000200);
            }
            /**
             * <code>optional uint32 stride = 10 [default = 1];</code>
             *
             * <pre>
             * The stride
             * </pre>
             */
            public int getStride() {
                return stride_;
            }
            /**
             * <code>optional uint32 stride = 10 [default = 1];</code>
             *
             * <pre>
             * The stride
             * </pre>
             */
            public Builder setStride(int value) {
                bitField0_ |= 0x00000200;
                stride_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 stride = 10 [default = 1];</code>
             *
             * <pre>
             * The stride
             * </pre>
             */
            public Builder clearStride() {
                bitField0_ = (bitField0_ & ~0x00000200);
                stride_ = 1;
                onChanged();
                return this;
            }

            private caffe.Loadcaffe.V0LayerParameter.PoolMethod pool_ = caffe.Loadcaffe.V0LayerParameter.PoolMethod.MAX;
            /**
             * <code>optional .caffe.V0LayerParameter.PoolMethod pool = 11 [default = MAX];</code>
             *
             * <pre>
             * The pooling method
             * </pre>
             */
            public boolean hasPool() {
                return ((bitField0_ & 0x00000400) == 0x00000400);
            }
            /**
             * <code>optional .caffe.V0LayerParameter.PoolMethod pool = 11 [default = MAX];</code>
             *
             * <pre>
             * The pooling method
             * </pre>
             */
            public caffe.Loadcaffe.V0LayerParameter.PoolMethod getPool() {
                return pool_;
            }
            /**
             * <code>optional .caffe.V0LayerParameter.PoolMethod pool = 11 [default = MAX];</code>
             *
             * <pre>
             * The pooling method
             * </pre>
             */
            public Builder setPool(caffe.Loadcaffe.V0LayerParameter.PoolMethod value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00000400;
                pool_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional .caffe.V0LayerParameter.PoolMethod pool = 11 [default = MAX];</code>
             *
             * <pre>
             * The pooling method
             * </pre>
             */
            public Builder clearPool() {
                bitField0_ = (bitField0_ & ~0x00000400);
                pool_ = caffe.Loadcaffe.V0LayerParameter.PoolMethod.MAX;
                onChanged();
                return this;
            }

            private float dropoutRatio_ = 0.5F;
            /**
             * <code>optional float dropout_ratio = 12 [default = 0.5];</code>
             *
             * <pre>
             * dropout ratio
             * </pre>
             */
            public boolean hasDropoutRatio() {
                return ((bitField0_ & 0x00000800) == 0x00000800);
            }
            /**
             * <code>optional float dropout_ratio = 12 [default = 0.5];</code>
             *
             * <pre>
             * dropout ratio
             * </pre>
             */
            public float getDropoutRatio() {
                return dropoutRatio_;
            }
            /**
             * <code>optional float dropout_ratio = 12 [default = 0.5];</code>
             *
             * <pre>
             * dropout ratio
             * </pre>
             */
            public Builder setDropoutRatio(float value) {
                bitField0_ |= 0x00000800;
                dropoutRatio_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float dropout_ratio = 12 [default = 0.5];</code>
             *
             * <pre>
             * dropout ratio
             * </pre>
             */
            public Builder clearDropoutRatio() {
                bitField0_ = (bitField0_ & ~0x00000800);
                dropoutRatio_ = 0.5F;
                onChanged();
                return this;
            }

            private int localSize_ = 5;
            /**
             * <code>optional uint32 local_size = 13 [default = 5];</code>
             *
             * <pre>
             * for local response norm
             * </pre>
             */
            public boolean hasLocalSize() {
                return ((bitField0_ & 0x00001000) == 0x00001000);
            }
            /**
             * <code>optional uint32 local_size = 13 [default = 5];</code>
             *
             * <pre>
             * for local response norm
             * </pre>
             */
            public int getLocalSize() {
                return localSize_;
            }
            /**
             * <code>optional uint32 local_size = 13 [default = 5];</code>
             *
             * <pre>
             * for local response norm
             * </pre>
             */
            public Builder setLocalSize(int value) {
                bitField0_ |= 0x00001000;
                localSize_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 local_size = 13 [default = 5];</code>
             *
             * <pre>
             * for local response norm
             * </pre>
             */
            public Builder clearLocalSize() {
                bitField0_ = (bitField0_ & ~0x00001000);
                localSize_ = 5;
                onChanged();
                return this;
            }

            private float alpha_ = 1F;
            /**
             * <code>optional float alpha = 14 [default = 1];</code>
             *
             * <pre>
             * for local response norm
             * </pre>
             */
            public boolean hasAlpha() {
                return ((bitField0_ & 0x00002000) == 0x00002000);
            }
            /**
             * <code>optional float alpha = 14 [default = 1];</code>
             *
             * <pre>
             * for local response norm
             * </pre>
             */
            public float getAlpha() {
                return alpha_;
            }
            /**
             * <code>optional float alpha = 14 [default = 1];</code>
             *
             * <pre>
             * for local response norm
             * </pre>
             */
            public Builder setAlpha(float value) {
                bitField0_ |= 0x00002000;
                alpha_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float alpha = 14 [default = 1];</code>
             *
             * <pre>
             * for local response norm
             * </pre>
             */
            public Builder clearAlpha() {
                bitField0_ = (bitField0_ & ~0x00002000);
                alpha_ = 1F;
                onChanged();
                return this;
            }

            private float beta_ = 0.75F;
            /**
             * <code>optional float beta = 15 [default = 0.75];</code>
             *
             * <pre>
             * for local response norm
             * </pre>
             */
            public boolean hasBeta() {
                return ((bitField0_ & 0x00004000) == 0x00004000);
            }
            /**
             * <code>optional float beta = 15 [default = 0.75];</code>
             *
             * <pre>
             * for local response norm
             * </pre>
             */
            public float getBeta() {
                return beta_;
            }
            /**
             * <code>optional float beta = 15 [default = 0.75];</code>
             *
             * <pre>
             * for local response norm
             * </pre>
             */
            public Builder setBeta(float value) {
                bitField0_ |= 0x00004000;
                beta_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float beta = 15 [default = 0.75];</code>
             *
             * <pre>
             * for local response norm
             * </pre>
             */
            public Builder clearBeta() {
                bitField0_ = (bitField0_ & ~0x00004000);
                beta_ = 0.75F;
                onChanged();
                return this;
            }

            private float k_ = 1F;
            /**
             * <code>optional float k = 22 [default = 1];</code>
             */
            public boolean hasK() {
                return ((bitField0_ & 0x00008000) == 0x00008000);
            }
            /**
             * <code>optional float k = 22 [default = 1];</code>
             */
            public float getK() {
                return k_;
            }
            /**
             * <code>optional float k = 22 [default = 1];</code>
             */
            public Builder setK(float value) {
                bitField0_ |= 0x00008000;
                k_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float k = 22 [default = 1];</code>
             */
            public Builder clearK() {
                bitField0_ = (bitField0_ & ~0x00008000);
                k_ = 1F;
                onChanged();
                return this;
            }

            private java.lang.Object source_ = "";
            /**
             * <code>optional string source = 16;</code>
             *
             * <pre>
             * For data layers, specify the data source
             * </pre>
             */
            public boolean hasSource() {
                return ((bitField0_ & 0x00010000) == 0x00010000);
            }
            /**
             * <code>optional string source = 16;</code>
             *
             * <pre>
             * For data layers, specify the data source
             * </pre>
             */
            public java.lang.String getSource() {
                java.lang.Object ref = source_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        source_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string source = 16;</code>
             *
             * <pre>
             * For data layers, specify the data source
             * </pre>
             */
            public com.google.protobuf.ByteString
            getSourceBytes() {
                java.lang.Object ref = source_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    source_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string source = 16;</code>
             *
             * <pre>
             * For data layers, specify the data source
             * </pre>
             */
            public Builder setSource(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00010000;
                source_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string source = 16;</code>
             *
             * <pre>
             * For data layers, specify the data source
             * </pre>
             */
            public Builder clearSource() {
                bitField0_ = (bitField0_ & ~0x00010000);
                source_ = getDefaultInstance().getSource();
                onChanged();
                return this;
            }
            /**
             * <code>optional string source = 16;</code>
             *
             * <pre>
             * For data layers, specify the data source
             * </pre>
             */
            public Builder setSourceBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00010000;
                source_ = value;
                onChanged();
                return this;
            }

            private float scale_ = 1F;
            /**
             * <code>optional float scale = 17 [default = 1];</code>
             *
             * <pre>
             * For data pre-processing, we can do simple scaling and subtracting the
             * data mean, if provided. Note that the mean subtraction is always carried
             * out before scaling.
             * </pre>
             */
            public boolean hasScale() {
                return ((bitField0_ & 0x00020000) == 0x00020000);
            }
            /**
             * <code>optional float scale = 17 [default = 1];</code>
             *
             * <pre>
             * For data pre-processing, we can do simple scaling and subtracting the
             * data mean, if provided. Note that the mean subtraction is always carried
             * out before scaling.
             * </pre>
             */
            public float getScale() {
                return scale_;
            }
            /**
             * <code>optional float scale = 17 [default = 1];</code>
             *
             * <pre>
             * For data pre-processing, we can do simple scaling and subtracting the
             * data mean, if provided. Note that the mean subtraction is always carried
             * out before scaling.
             * </pre>
             */
            public Builder setScale(float value) {
                bitField0_ |= 0x00020000;
                scale_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float scale = 17 [default = 1];</code>
             *
             * <pre>
             * For data pre-processing, we can do simple scaling and subtracting the
             * data mean, if provided. Note that the mean subtraction is always carried
             * out before scaling.
             * </pre>
             */
            public Builder clearScale() {
                bitField0_ = (bitField0_ & ~0x00020000);
                scale_ = 1F;
                onChanged();
                return this;
            }

            private java.lang.Object meanfile_ = "";
            /**
             * <code>optional string meanfile = 18;</code>
             */
            public boolean hasMeanfile() {
                return ((bitField0_ & 0x00040000) == 0x00040000);
            }
            /**
             * <code>optional string meanfile = 18;</code>
             */
            public java.lang.String getMeanfile() {
                java.lang.Object ref = meanfile_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        meanfile_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string meanfile = 18;</code>
             */
            public com.google.protobuf.ByteString
            getMeanfileBytes() {
                java.lang.Object ref = meanfile_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    meanfile_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string meanfile = 18;</code>
             */
            public Builder setMeanfile(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00040000;
                meanfile_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string meanfile = 18;</code>
             */
            public Builder clearMeanfile() {
                bitField0_ = (bitField0_ & ~0x00040000);
                meanfile_ = getDefaultInstance().getMeanfile();
                onChanged();
                return this;
            }
            /**
             * <code>optional string meanfile = 18;</code>
             */
            public Builder setMeanfileBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x00040000;
                meanfile_ = value;
                onChanged();
                return this;
            }

            private int batchsize_ ;
            /**
             * <code>optional uint32 batchsize = 19;</code>
             *
             * <pre>
             * For data layers, specify the batch size.
             * </pre>
             */
            public boolean hasBatchsize() {
                return ((bitField0_ & 0x00080000) == 0x00080000);
            }
            /**
             * <code>optional uint32 batchsize = 19;</code>
             *
             * <pre>
             * For data layers, specify the batch size.
             * </pre>
             */
            public int getBatchsize() {
                return batchsize_;
            }
            /**
             * <code>optional uint32 batchsize = 19;</code>
             *
             * <pre>
             * For data layers, specify the batch size.
             * </pre>
             */
            public Builder setBatchsize(int value) {
                bitField0_ |= 0x00080000;
                batchsize_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 batchsize = 19;</code>
             *
             * <pre>
             * For data layers, specify the batch size.
             * </pre>
             */
            public Builder clearBatchsize() {
                bitField0_ = (bitField0_ & ~0x00080000);
                batchsize_ = 0;
                onChanged();
                return this;
            }

            private int cropsize_ ;
            /**
             * <code>optional uint32 cropsize = 20 [default = 0];</code>
             *
             * <pre>
             * For data layers, specify if we would like to randomly crop an image.
             * </pre>
             */
            public boolean hasCropsize() {
                return ((bitField0_ & 0x00100000) == 0x00100000);
            }
            /**
             * <code>optional uint32 cropsize = 20 [default = 0];</code>
             *
             * <pre>
             * For data layers, specify if we would like to randomly crop an image.
             * </pre>
             */
            public int getCropsize() {
                return cropsize_;
            }
            /**
             * <code>optional uint32 cropsize = 20 [default = 0];</code>
             *
             * <pre>
             * For data layers, specify if we would like to randomly crop an image.
             * </pre>
             */
            public Builder setCropsize(int value) {
                bitField0_ |= 0x00100000;
                cropsize_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 cropsize = 20 [default = 0];</code>
             *
             * <pre>
             * For data layers, specify if we would like to randomly crop an image.
             * </pre>
             */
            public Builder clearCropsize() {
                bitField0_ = (bitField0_ & ~0x00100000);
                cropsize_ = 0;
                onChanged();
                return this;
            }

            private boolean mirror_ ;
            /**
             * <code>optional bool mirror = 21 [default = false];</code>
             *
             * <pre>
             * For data layers, specify if we want to randomly mirror data.
             * </pre>
             */
            public boolean hasMirror() {
                return ((bitField0_ & 0x00200000) == 0x00200000);
            }
            /**
             * <code>optional bool mirror = 21 [default = false];</code>
             *
             * <pre>
             * For data layers, specify if we want to randomly mirror data.
             * </pre>
             */
            public boolean getMirror() {
                return mirror_;
            }
            /**
             * <code>optional bool mirror = 21 [default = false];</code>
             *
             * <pre>
             * For data layers, specify if we want to randomly mirror data.
             * </pre>
             */
            public Builder setMirror(boolean value) {
                bitField0_ |= 0x00200000;
                mirror_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool mirror = 21 [default = false];</code>
             *
             * <pre>
             * For data layers, specify if we want to randomly mirror data.
             * </pre>
             */
            public Builder clearMirror() {
                bitField0_ = (bitField0_ & ~0x00200000);
                mirror_ = false;
                onChanged();
                return this;
            }

            private java.util.List<caffe.Loadcaffe.BlobProto> blobs_ =
                    java.util.Collections.emptyList();
            private void ensureBlobsIsMutable() {
                if (!((bitField0_ & 0x00400000) == 0x00400000)) {
                    blobs_ = new java.util.ArrayList<caffe.Loadcaffe.BlobProto>(blobs_);
                    bitField0_ |= 0x00400000;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.BlobProto, caffe.Loadcaffe.BlobProto.Builder, caffe.Loadcaffe.BlobProtoOrBuilder> blobsBuilder_;

            /**
             * <code>repeated .caffe.BlobProto blobs = 50;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer
             * </pre>
             */
            public java.util.List<caffe.Loadcaffe.BlobProto> getBlobsList() {
                if (blobsBuilder_ == null) {
                    return java.util.Collections.unmodifiableList(blobs_);
                } else {
                    return blobsBuilder_.getMessageList();
                }
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 50;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer
             * </pre>
             */
            public int getBlobsCount() {
                if (blobsBuilder_ == null) {
                    return blobs_.size();
                } else {
                    return blobsBuilder_.getCount();
                }
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 50;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer
             * </pre>
             */
            public caffe.Loadcaffe.BlobProto getBlobs(int index) {
                if (blobsBuilder_ == null) {
                    return blobs_.get(index);
                } else {
                    return blobsBuilder_.getMessage(index);
                }
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 50;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer
             * </pre>
             */
            public Builder setBlobs(
                    int index, caffe.Loadcaffe.BlobProto value) {
                if (blobsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureBlobsIsMutable();
                    blobs_.set(index, value);
                    onChanged();
                } else {
                    blobsBuilder_.setMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 50;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer
             * </pre>
             */
            public Builder setBlobs(
                    int index, caffe.Loadcaffe.BlobProto.Builder builderForValue) {
                if (blobsBuilder_ == null) {
                    ensureBlobsIsMutable();
                    blobs_.set(index, builderForValue.build());
                    onChanged();
                } else {
                    blobsBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 50;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer
             * </pre>
             */
            public Builder addBlobs(caffe.Loadcaffe.BlobProto value) {
                if (blobsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureBlobsIsMutable();
                    blobs_.add(value);
                    onChanged();
                } else {
                    blobsBuilder_.addMessage(value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 50;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer
             * </pre>
             */
            public Builder addBlobs(
                    int index, caffe.Loadcaffe.BlobProto value) {
                if (blobsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureBlobsIsMutable();
                    blobs_.add(index, value);
                    onChanged();
                } else {
                    blobsBuilder_.addMessage(index, value);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 50;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer
             * </pre>
             */
            public Builder addBlobs(
                    caffe.Loadcaffe.BlobProto.Builder builderForValue) {
                if (blobsBuilder_ == null) {
                    ensureBlobsIsMutable();
                    blobs_.add(builderForValue.build());
                    onChanged();
                } else {
                    blobsBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 50;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer
             * </pre>
             */
            public Builder addBlobs(
                    int index, caffe.Loadcaffe.BlobProto.Builder builderForValue) {
                if (blobsBuilder_ == null) {
                    ensureBlobsIsMutable();
                    blobs_.add(index, builderForValue.build());
                    onChanged();
                } else {
                    blobsBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 50;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer
             * </pre>
             */
            public Builder addAllBlobs(
                    java.lang.Iterable<? extends caffe.Loadcaffe.BlobProto> values) {
                if (blobsBuilder_ == null) {
                    ensureBlobsIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(
                            values, blobs_);
                    onChanged();
                } else {
                    blobsBuilder_.addAllMessages(values);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 50;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer
             * </pre>
             */
            public Builder clearBlobs() {
                if (blobsBuilder_ == null) {
                    blobs_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00400000);
                    onChanged();
                } else {
                    blobsBuilder_.clear();
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 50;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer
             * </pre>
             */
            public Builder removeBlobs(int index) {
                if (blobsBuilder_ == null) {
                    ensureBlobsIsMutable();
                    blobs_.remove(index);
                    onChanged();
                } else {
                    blobsBuilder_.remove(index);
                }
                return this;
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 50;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer
             * </pre>
             */
            public caffe.Loadcaffe.BlobProto.Builder getBlobsBuilder(
                    int index) {
                return getBlobsFieldBuilder().getBuilder(index);
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 50;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer
             * </pre>
             */
            public caffe.Loadcaffe.BlobProtoOrBuilder getBlobsOrBuilder(
                    int index) {
                if (blobsBuilder_ == null) {
                    return blobs_.get(index);  } else {
                    return blobsBuilder_.getMessageOrBuilder(index);
                }
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 50;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer
             * </pre>
             */
            public java.util.List<? extends caffe.Loadcaffe.BlobProtoOrBuilder>
            getBlobsOrBuilderList() {
                if (blobsBuilder_ != null) {
                    return blobsBuilder_.getMessageOrBuilderList();
                } else {
                    return java.util.Collections.unmodifiableList(blobs_);
                }
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 50;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer
             * </pre>
             */
            public caffe.Loadcaffe.BlobProto.Builder addBlobsBuilder() {
                return getBlobsFieldBuilder().addBuilder(
                        caffe.Loadcaffe.BlobProto.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 50;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer
             * </pre>
             */
            public caffe.Loadcaffe.BlobProto.Builder addBlobsBuilder(
                    int index) {
                return getBlobsFieldBuilder().addBuilder(
                        index, caffe.Loadcaffe.BlobProto.getDefaultInstance());
            }
            /**
             * <code>repeated .caffe.BlobProto blobs = 50;</code>
             *
             * <pre>
             * The blobs containing the numeric parameters of the layer
             * </pre>
             */
            public java.util.List<caffe.Loadcaffe.BlobProto.Builder>
            getBlobsBuilderList() {
                return getBlobsFieldBuilder().getBuilderList();
            }
            private com.google.protobuf.RepeatedFieldBuilder<
                    caffe.Loadcaffe.BlobProto, caffe.Loadcaffe.BlobProto.Builder, caffe.Loadcaffe.BlobProtoOrBuilder>
            getBlobsFieldBuilder() {
                if (blobsBuilder_ == null) {
                    blobsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            caffe.Loadcaffe.BlobProto, caffe.Loadcaffe.BlobProto.Builder, caffe.Loadcaffe.BlobProtoOrBuilder>(
                            blobs_,
                            ((bitField0_ & 0x00400000) == 0x00400000),
                            getParentForChildren(),
                            isClean());
                    blobs_ = null;
                }
                return blobsBuilder_;
            }

            private java.util.List<java.lang.Float> blobsLr_ = java.util.Collections.emptyList();
            private void ensureBlobsLrIsMutable() {
                if (!((bitField0_ & 0x00800000) == 0x00800000)) {
                    blobsLr_ = new java.util.ArrayList<java.lang.Float>(blobsLr_);
                    bitField0_ |= 0x00800000;
                }
            }
            /**
             * <code>repeated float blobs_lr = 51;</code>
             *
             * <pre>
             * The ratio that is multiplied on the global learning rate. If you want to
             * set the learning ratio for one blob, you need to set it for all blobs.
             * </pre>
             */
            public java.util.List<java.lang.Float>
            getBlobsLrList() {
                return java.util.Collections.unmodifiableList(blobsLr_);
            }
            /**
             * <code>repeated float blobs_lr = 51;</code>
             *
             * <pre>
             * The ratio that is multiplied on the global learning rate. If you want to
             * set the learning ratio for one blob, you need to set it for all blobs.
             * </pre>
             */
            public int getBlobsLrCount() {
                return blobsLr_.size();
            }
            /**
             * <code>repeated float blobs_lr = 51;</code>
             *
             * <pre>
             * The ratio that is multiplied on the global learning rate. If you want to
             * set the learning ratio for one blob, you need to set it for all blobs.
             * </pre>
             */
            public float getBlobsLr(int index) {
                return blobsLr_.get(index);
            }
            /**
             * <code>repeated float blobs_lr = 51;</code>
             *
             * <pre>
             * The ratio that is multiplied on the global learning rate. If you want to
             * set the learning ratio for one blob, you need to set it for all blobs.
             * </pre>
             */
            public Builder setBlobsLr(
                    int index, float value) {
                ensureBlobsLrIsMutable();
                blobsLr_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float blobs_lr = 51;</code>
             *
             * <pre>
             * The ratio that is multiplied on the global learning rate. If you want to
             * set the learning ratio for one blob, you need to set it for all blobs.
             * </pre>
             */
            public Builder addBlobsLr(float value) {
                ensureBlobsLrIsMutable();
                blobsLr_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float blobs_lr = 51;</code>
             *
             * <pre>
             * The ratio that is multiplied on the global learning rate. If you want to
             * set the learning ratio for one blob, you need to set it for all blobs.
             * </pre>
             */
            public Builder addAllBlobsLr(
                    java.lang.Iterable<? extends java.lang.Float> values) {
                ensureBlobsLrIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, blobsLr_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float blobs_lr = 51;</code>
             *
             * <pre>
             * The ratio that is multiplied on the global learning rate. If you want to
             * set the learning ratio for one blob, you need to set it for all blobs.
             * </pre>
             */
            public Builder clearBlobsLr() {
                blobsLr_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x00800000);
                onChanged();
                return this;
            }

            private java.util.List<java.lang.Float> weightDecay_ = java.util.Collections.emptyList();
            private void ensureWeightDecayIsMutable() {
                if (!((bitField0_ & 0x01000000) == 0x01000000)) {
                    weightDecay_ = new java.util.ArrayList<java.lang.Float>(weightDecay_);
                    bitField0_ |= 0x01000000;
                }
            }
            /**
             * <code>repeated float weight_decay = 52;</code>
             *
             * <pre>
             * The weight decay that is multiplied on the global weight decay.
             * </pre>
             */
            public java.util.List<java.lang.Float>
            getWeightDecayList() {
                return java.util.Collections.unmodifiableList(weightDecay_);
            }
            /**
             * <code>repeated float weight_decay = 52;</code>
             *
             * <pre>
             * The weight decay that is multiplied on the global weight decay.
             * </pre>
             */
            public int getWeightDecayCount() {
                return weightDecay_.size();
            }
            /**
             * <code>repeated float weight_decay = 52;</code>
             *
             * <pre>
             * The weight decay that is multiplied on the global weight decay.
             * </pre>
             */
            public float getWeightDecay(int index) {
                return weightDecay_.get(index);
            }
            /**
             * <code>repeated float weight_decay = 52;</code>
             *
             * <pre>
             * The weight decay that is multiplied on the global weight decay.
             * </pre>
             */
            public Builder setWeightDecay(
                    int index, float value) {
                ensureWeightDecayIsMutable();
                weightDecay_.set(index, value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float weight_decay = 52;</code>
             *
             * <pre>
             * The weight decay that is multiplied on the global weight decay.
             * </pre>
             */
            public Builder addWeightDecay(float value) {
                ensureWeightDecayIsMutable();
                weightDecay_.add(value);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float weight_decay = 52;</code>
             *
             * <pre>
             * The weight decay that is multiplied on the global weight decay.
             * </pre>
             */
            public Builder addAllWeightDecay(
                    java.lang.Iterable<? extends java.lang.Float> values) {
                ensureWeightDecayIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(
                        values, weightDecay_);
                onChanged();
                return this;
            }
            /**
             * <code>repeated float weight_decay = 52;</code>
             *
             * <pre>
             * The weight decay that is multiplied on the global weight decay.
             * </pre>
             */
            public Builder clearWeightDecay() {
                weightDecay_ = java.util.Collections.emptyList();
                bitField0_ = (bitField0_ & ~0x01000000);
                onChanged();
                return this;
            }

            private int randSkip_ ;
            /**
             * <code>optional uint32 rand_skip = 53 [default = 0];</code>
             *
             * <pre>
             * The rand_skip variable is for the data layer to skip a few data points
             * to avoid all asynchronous sgd clients to start at the same point. The skip
             * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
             * be larger than the number of keys in the database.
             * </pre>
             */
            public boolean hasRandSkip() {
                return ((bitField0_ & 0x02000000) == 0x02000000);
            }
            /**
             * <code>optional uint32 rand_skip = 53 [default = 0];</code>
             *
             * <pre>
             * The rand_skip variable is for the data layer to skip a few data points
             * to avoid all asynchronous sgd clients to start at the same point. The skip
             * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
             * be larger than the number of keys in the database.
             * </pre>
             */
            public int getRandSkip() {
                return randSkip_;
            }
            /**
             * <code>optional uint32 rand_skip = 53 [default = 0];</code>
             *
             * <pre>
             * The rand_skip variable is for the data layer to skip a few data points
             * to avoid all asynchronous sgd clients to start at the same point. The skip
             * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
             * be larger than the number of keys in the database.
             * </pre>
             */
            public Builder setRandSkip(int value) {
                bitField0_ |= 0x02000000;
                randSkip_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 rand_skip = 53 [default = 0];</code>
             *
             * <pre>
             * The rand_skip variable is for the data layer to skip a few data points
             * to avoid all asynchronous sgd clients to start at the same point. The skip
             * point would be set as rand_skip * rand(0,1). Note that rand_skip should not
             * be larger than the number of keys in the database.
             * </pre>
             */
            public Builder clearRandSkip() {
                bitField0_ = (bitField0_ & ~0x02000000);
                randSkip_ = 0;
                onChanged();
                return this;
            }

            private float detFgThreshold_ = 0.5F;
            /**
             * <code>optional float det_fg_threshold = 54 [default = 0.5];</code>
             *
             * <pre>
             * Fields related to detection (det_*)
             * foreground (object) overlap threshold
             * </pre>
             */
            public boolean hasDetFgThreshold() {
                return ((bitField0_ & 0x04000000) == 0x04000000);
            }
            /**
             * <code>optional float det_fg_threshold = 54 [default = 0.5];</code>
             *
             * <pre>
             * Fields related to detection (det_*)
             * foreground (object) overlap threshold
             * </pre>
             */
            public float getDetFgThreshold() {
                return detFgThreshold_;
            }
            /**
             * <code>optional float det_fg_threshold = 54 [default = 0.5];</code>
             *
             * <pre>
             * Fields related to detection (det_*)
             * foreground (object) overlap threshold
             * </pre>
             */
            public Builder setDetFgThreshold(float value) {
                bitField0_ |= 0x04000000;
                detFgThreshold_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float det_fg_threshold = 54 [default = 0.5];</code>
             *
             * <pre>
             * Fields related to detection (det_*)
             * foreground (object) overlap threshold
             * </pre>
             */
            public Builder clearDetFgThreshold() {
                bitField0_ = (bitField0_ & ~0x04000000);
                detFgThreshold_ = 0.5F;
                onChanged();
                return this;
            }

            private float detBgThreshold_ = 0.5F;
            /**
             * <code>optional float det_bg_threshold = 55 [default = 0.5];</code>
             *
             * <pre>
             * background (non-object) overlap threshold
             * </pre>
             */
            public boolean hasDetBgThreshold() {
                return ((bitField0_ & 0x08000000) == 0x08000000);
            }
            /**
             * <code>optional float det_bg_threshold = 55 [default = 0.5];</code>
             *
             * <pre>
             * background (non-object) overlap threshold
             * </pre>
             */
            public float getDetBgThreshold() {
                return detBgThreshold_;
            }
            /**
             * <code>optional float det_bg_threshold = 55 [default = 0.5];</code>
             *
             * <pre>
             * background (non-object) overlap threshold
             * </pre>
             */
            public Builder setDetBgThreshold(float value) {
                bitField0_ |= 0x08000000;
                detBgThreshold_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float det_bg_threshold = 55 [default = 0.5];</code>
             *
             * <pre>
             * background (non-object) overlap threshold
             * </pre>
             */
            public Builder clearDetBgThreshold() {
                bitField0_ = (bitField0_ & ~0x08000000);
                detBgThreshold_ = 0.5F;
                onChanged();
                return this;
            }

            private float detFgFraction_ = 0.25F;
            /**
             * <code>optional float det_fg_fraction = 56 [default = 0.25];</code>
             *
             * <pre>
             * Fraction of batch that should be foreground objects
             * </pre>
             */
            public boolean hasDetFgFraction() {
                return ((bitField0_ & 0x10000000) == 0x10000000);
            }
            /**
             * <code>optional float det_fg_fraction = 56 [default = 0.25];</code>
             *
             * <pre>
             * Fraction of batch that should be foreground objects
             * </pre>
             */
            public float getDetFgFraction() {
                return detFgFraction_;
            }
            /**
             * <code>optional float det_fg_fraction = 56 [default = 0.25];</code>
             *
             * <pre>
             * Fraction of batch that should be foreground objects
             * </pre>
             */
            public Builder setDetFgFraction(float value) {
                bitField0_ |= 0x10000000;
                detFgFraction_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional float det_fg_fraction = 56 [default = 0.25];</code>
             *
             * <pre>
             * Fraction of batch that should be foreground objects
             * </pre>
             */
            public Builder clearDetFgFraction() {
                bitField0_ = (bitField0_ & ~0x10000000);
                detFgFraction_ = 0.25F;
                onChanged();
                return this;
            }

            private int detContextPad_ ;
            /**
             * <code>optional uint32 det_context_pad = 58 [default = 0];</code>
             *
             * <pre>
             * Amount of contextual padding to add around a window
             * (used only by the window_data_layer)
             * </pre>
             */
            public boolean hasDetContextPad() {
                return ((bitField0_ & 0x20000000) == 0x20000000);
            }
            /**
             * <code>optional uint32 det_context_pad = 58 [default = 0];</code>
             *
             * <pre>
             * Amount of contextual padding to add around a window
             * (used only by the window_data_layer)
             * </pre>
             */
            public int getDetContextPad() {
                return detContextPad_;
            }
            /**
             * <code>optional uint32 det_context_pad = 58 [default = 0];</code>
             *
             * <pre>
             * Amount of contextual padding to add around a window
             * (used only by the window_data_layer)
             * </pre>
             */
            public Builder setDetContextPad(int value) {
                bitField0_ |= 0x20000000;
                detContextPad_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 det_context_pad = 58 [default = 0];</code>
             *
             * <pre>
             * Amount of contextual padding to add around a window
             * (used only by the window_data_layer)
             * </pre>
             */
            public Builder clearDetContextPad() {
                bitField0_ = (bitField0_ & ~0x20000000);
                detContextPad_ = 0;
                onChanged();
                return this;
            }

            private java.lang.Object detCropMode_ = "warp";
            /**
             * <code>optional string det_crop_mode = 59 [default = "warp"];</code>
             *
             * <pre>
             * Mode for cropping out a detection window
             * warp: cropped window is warped to a fixed size and aspect ratio
             * square: the tightest square around the window is cropped
             * </pre>
             */
            public boolean hasDetCropMode() {
                return ((bitField0_ & 0x40000000) == 0x40000000);
            }
            /**
             * <code>optional string det_crop_mode = 59 [default = "warp"];</code>
             *
             * <pre>
             * Mode for cropping out a detection window
             * warp: cropped window is warped to a fixed size and aspect ratio
             * square: the tightest square around the window is cropped
             * </pre>
             */
            public java.lang.String getDetCropMode() {
                java.lang.Object ref = detCropMode_;
                if (!(ref instanceof java.lang.String)) {
                    com.google.protobuf.ByteString bs =
                            (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        detCropMode_ = s;
                    }
                    return s;
                } else {
                    return (java.lang.String) ref;
                }
            }
            /**
             * <code>optional string det_crop_mode = 59 [default = "warp"];</code>
             *
             * <pre>
             * Mode for cropping out a detection window
             * warp: cropped window is warped to a fixed size and aspect ratio
             * square: the tightest square around the window is cropped
             * </pre>
             */
            public com.google.protobuf.ByteString
            getDetCropModeBytes() {
                java.lang.Object ref = detCropMode_;
                if (ref instanceof String) {
                    com.google.protobuf.ByteString b =
                            com.google.protobuf.ByteString.copyFromUtf8(
                                    (java.lang.String) ref);
                    detCropMode_ = b;
                    return b;
                } else {
                    return (com.google.protobuf.ByteString) ref;
                }
            }
            /**
             * <code>optional string det_crop_mode = 59 [default = "warp"];</code>
             *
             * <pre>
             * Mode for cropping out a detection window
             * warp: cropped window is warped to a fixed size and aspect ratio
             * square: the tightest square around the window is cropped
             * </pre>
             */
            public Builder setDetCropMode(
                    java.lang.String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x40000000;
                detCropMode_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional string det_crop_mode = 59 [default = "warp"];</code>
             *
             * <pre>
             * Mode for cropping out a detection window
             * warp: cropped window is warped to a fixed size and aspect ratio
             * square: the tightest square around the window is cropped
             * </pre>
             */
            public Builder clearDetCropMode() {
                bitField0_ = (bitField0_ & ~0x40000000);
                detCropMode_ = getDefaultInstance().getDetCropMode();
                onChanged();
                return this;
            }
            /**
             * <code>optional string det_crop_mode = 59 [default = "warp"];</code>
             *
             * <pre>
             * Mode for cropping out a detection window
             * warp: cropped window is warped to a fixed size and aspect ratio
             * square: the tightest square around the window is cropped
             * </pre>
             */
            public Builder setDetCropModeBytes(
                    com.google.protobuf.ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                bitField0_ |= 0x40000000;
                detCropMode_ = value;
                onChanged();
                return this;
            }

            private int newNum_ ;
            /**
             * <code>optional int32 new_num = 60 [default = 0];</code>
             *
             * <pre>
             * For ReshapeLayer, one needs to specify the new dimensions.
             * </pre>
             */
            public boolean hasNewNum() {
                return ((bitField0_ & 0x80000000) == 0x80000000);
            }
            /**
             * <code>optional int32 new_num = 60 [default = 0];</code>
             *
             * <pre>
             * For ReshapeLayer, one needs to specify the new dimensions.
             * </pre>
             */
            public int getNewNum() {
                return newNum_;
            }
            /**
             * <code>optional int32 new_num = 60 [default = 0];</code>
             *
             * <pre>
             * For ReshapeLayer, one needs to specify the new dimensions.
             * </pre>
             */
            public Builder setNewNum(int value) {
                bitField0_ |= 0x80000000;
                newNum_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 new_num = 60 [default = 0];</code>
             *
             * <pre>
             * For ReshapeLayer, one needs to specify the new dimensions.
             * </pre>
             */
            public Builder clearNewNum() {
                bitField0_ = (bitField0_ & ~0x80000000);
                newNum_ = 0;
                onChanged();
                return this;
            }

            private int newChannels_ ;
            /**
             * <code>optional int32 new_channels = 61 [default = 0];</code>
             */
            public boolean hasNewChannels() {
                return ((bitField1_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional int32 new_channels = 61 [default = 0];</code>
             */
            public int getNewChannels() {
                return newChannels_;
            }
            /**
             * <code>optional int32 new_channels = 61 [default = 0];</code>
             */
            public Builder setNewChannels(int value) {
                bitField1_ |= 0x00000001;
                newChannels_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 new_channels = 61 [default = 0];</code>
             */
            public Builder clearNewChannels() {
                bitField1_ = (bitField1_ & ~0x00000001);
                newChannels_ = 0;
                onChanged();
                return this;
            }

            private int newHeight_ ;
            /**
             * <code>optional int32 new_height = 62 [default = 0];</code>
             */
            public boolean hasNewHeight() {
                return ((bitField1_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional int32 new_height = 62 [default = 0];</code>
             */
            public int getNewHeight() {
                return newHeight_;
            }
            /**
             * <code>optional int32 new_height = 62 [default = 0];</code>
             */
            public Builder setNewHeight(int value) {
                bitField1_ |= 0x00000002;
                newHeight_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 new_height = 62 [default = 0];</code>
             */
            public Builder clearNewHeight() {
                bitField1_ = (bitField1_ & ~0x00000002);
                newHeight_ = 0;
                onChanged();
                return this;
            }

            private int newWidth_ ;
            /**
             * <code>optional int32 new_width = 63 [default = 0];</code>
             */
            public boolean hasNewWidth() {
                return ((bitField1_ & 0x00000004) == 0x00000004);
            }
            /**
             * <code>optional int32 new_width = 63 [default = 0];</code>
             */
            public int getNewWidth() {
                return newWidth_;
            }
            /**
             * <code>optional int32 new_width = 63 [default = 0];</code>
             */
            public Builder setNewWidth(int value) {
                bitField1_ |= 0x00000004;
                newWidth_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional int32 new_width = 63 [default = 0];</code>
             */
            public Builder clearNewWidth() {
                bitField1_ = (bitField1_ & ~0x00000004);
                newWidth_ = 0;
                onChanged();
                return this;
            }

            private boolean shuffleImages_ ;
            /**
             * <code>optional bool shuffle_images = 64 [default = false];</code>
             *
             * <pre>
             * Whether or not ImageLayer should shuffle the list of files at every epoch.
             * It will also resize images if new_height or new_width are not zero.
             * </pre>
             */
            public boolean hasShuffleImages() {
                return ((bitField1_ & 0x00000008) == 0x00000008);
            }
            /**
             * <code>optional bool shuffle_images = 64 [default = false];</code>
             *
             * <pre>
             * Whether or not ImageLayer should shuffle the list of files at every epoch.
             * It will also resize images if new_height or new_width are not zero.
             * </pre>
             */
            public boolean getShuffleImages() {
                return shuffleImages_;
            }
            /**
             * <code>optional bool shuffle_images = 64 [default = false];</code>
             *
             * <pre>
             * Whether or not ImageLayer should shuffle the list of files at every epoch.
             * It will also resize images if new_height or new_width are not zero.
             * </pre>
             */
            public Builder setShuffleImages(boolean value) {
                bitField1_ |= 0x00000008;
                shuffleImages_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool shuffle_images = 64 [default = false];</code>
             *
             * <pre>
             * Whether or not ImageLayer should shuffle the list of files at every epoch.
             * It will also resize images if new_height or new_width are not zero.
             * </pre>
             */
            public Builder clearShuffleImages() {
                bitField1_ = (bitField1_ & ~0x00000008);
                shuffleImages_ = false;
                onChanged();
                return this;
            }

            private int concatDim_ = 1;
            /**
             * <code>optional uint32 concat_dim = 65 [default = 1];</code>
             *
             * <pre>
             * For ConcatLayer, one needs to specify the dimension for concatenation, and
             * the other dimensions must be the same for all the bottom blobs.
             * By default it will concatenate blobs along the channels dimension.
             * </pre>
             */
            public boolean hasConcatDim() {
                return ((bitField1_ & 0x00000010) == 0x00000010);
            }
            /**
             * <code>optional uint32 concat_dim = 65 [default = 1];</code>
             *
             * <pre>
             * For ConcatLayer, one needs to specify the dimension for concatenation, and
             * the other dimensions must be the same for all the bottom blobs.
             * By default it will concatenate blobs along the channels dimension.
             * </pre>
             */
            public int getConcatDim() {
                return concatDim_;
            }
            /**
             * <code>optional uint32 concat_dim = 65 [default = 1];</code>
             *
             * <pre>
             * For ConcatLayer, one needs to specify the dimension for concatenation, and
             * the other dimensions must be the same for all the bottom blobs.
             * By default it will concatenate blobs along the channels dimension.
             * </pre>
             */
            public Builder setConcatDim(int value) {
                bitField1_ |= 0x00000010;
                concatDim_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional uint32 concat_dim = 65 [default = 1];</code>
             *
             * <pre>
             * For ConcatLayer, one needs to specify the dimension for concatenation, and
             * the other dimensions must be the same for all the bottom blobs.
             * By default it will concatenate blobs along the channels dimension.
             * </pre>
             */
            public Builder clearConcatDim() {
                bitField1_ = (bitField1_ & ~0x00000010);
                concatDim_ = 1;
                onChanged();
                return this;
            }

            private caffe.Loadcaffe.HDF5OutputParameter hdf5OutputParam_ = caffe.Loadcaffe.HDF5OutputParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.HDF5OutputParameter, caffe.Loadcaffe.HDF5OutputParameter.Builder, caffe.Loadcaffe.HDF5OutputParameterOrBuilder> hdf5OutputParamBuilder_;
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 1001;</code>
             */
            public boolean hasHdf5OutputParam() {
                return ((bitField1_ & 0x00000020) == 0x00000020);
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 1001;</code>
             */
            public caffe.Loadcaffe.HDF5OutputParameter getHdf5OutputParam() {
                if (hdf5OutputParamBuilder_ == null) {
                    return hdf5OutputParam_;
                } else {
                    return hdf5OutputParamBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 1001;</code>
             */
            public Builder setHdf5OutputParam(caffe.Loadcaffe.HDF5OutputParameter value) {
                if (hdf5OutputParamBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    hdf5OutputParam_ = value;
                    onChanged();
                } else {
                    hdf5OutputParamBuilder_.setMessage(value);
                }
                bitField1_ |= 0x00000020;
                return this;
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 1001;</code>
             */
            public Builder setHdf5OutputParam(
                    caffe.Loadcaffe.HDF5OutputParameter.Builder builderForValue) {
                if (hdf5OutputParamBuilder_ == null) {
                    hdf5OutputParam_ = builderForValue.build();
                    onChanged();
                } else {
                    hdf5OutputParamBuilder_.setMessage(builderForValue.build());
                }
                bitField1_ |= 0x00000020;
                return this;
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 1001;</code>
             */
            public Builder mergeHdf5OutputParam(caffe.Loadcaffe.HDF5OutputParameter value) {
                if (hdf5OutputParamBuilder_ == null) {
                    if (((bitField1_ & 0x00000020) == 0x00000020) &&
                            hdf5OutputParam_ != caffe.Loadcaffe.HDF5OutputParameter.getDefaultInstance()) {
                        hdf5OutputParam_ =
                                caffe.Loadcaffe.HDF5OutputParameter.newBuilder(hdf5OutputParam_).mergeFrom(value).buildPartial();
                    } else {
                        hdf5OutputParam_ = value;
                    }
                    onChanged();
                } else {
                    hdf5OutputParamBuilder_.mergeFrom(value);
                }
                bitField1_ |= 0x00000020;
                return this;
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 1001;</code>
             */
            public Builder clearHdf5OutputParam() {
                if (hdf5OutputParamBuilder_ == null) {
                    hdf5OutputParam_ = caffe.Loadcaffe.HDF5OutputParameter.getDefaultInstance();
                    onChanged();
                } else {
                    hdf5OutputParamBuilder_.clear();
                }
                bitField1_ = (bitField1_ & ~0x00000020);
                return this;
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 1001;</code>
             */
            public caffe.Loadcaffe.HDF5OutputParameter.Builder getHdf5OutputParamBuilder() {
                bitField1_ |= 0x00000020;
                onChanged();
                return getHdf5OutputParamFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 1001;</code>
             */
            public caffe.Loadcaffe.HDF5OutputParameterOrBuilder getHdf5OutputParamOrBuilder() {
                if (hdf5OutputParamBuilder_ != null) {
                    return hdf5OutputParamBuilder_.getMessageOrBuilder();
                } else {
                    return hdf5OutputParam_;
                }
            }
            /**
             * <code>optional .caffe.HDF5OutputParameter hdf5_output_param = 1001;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.HDF5OutputParameter, caffe.Loadcaffe.HDF5OutputParameter.Builder, caffe.Loadcaffe.HDF5OutputParameterOrBuilder>
            getHdf5OutputParamFieldBuilder() {
                if (hdf5OutputParamBuilder_ == null) {
                    hdf5OutputParamBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.HDF5OutputParameter, caffe.Loadcaffe.HDF5OutputParameter.Builder, caffe.Loadcaffe.HDF5OutputParameterOrBuilder>(
                            getHdf5OutputParam(),
                            getParentForChildren(),
                            isClean());
                    hdf5OutputParam_ = null;
                }
                return hdf5OutputParamBuilder_;
            }

            // @@protoc_insertion_point(builder_scope:caffe.V0LayerParameter)
        }

        static {
            defaultInstance = new V0LayerParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.V0LayerParameter)
    }

    public interface PReLUParameterOrBuilder extends
            // @@protoc_insertion_point(interface_extends:caffe.PReLUParameter)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>optional .caffe.FillerParameter filler = 1;</code>
         *
         * <pre>
         * Initial value of a_i. Default is a_i=0.25 for all i.
         * </pre>
         */
        boolean hasFiller();
        /**
         * <code>optional .caffe.FillerParameter filler = 1;</code>
         *
         * <pre>
         * Initial value of a_i. Default is a_i=0.25 for all i.
         * </pre>
         */
        caffe.Loadcaffe.FillerParameter getFiller();
        /**
         * <code>optional .caffe.FillerParameter filler = 1;</code>
         *
         * <pre>
         * Initial value of a_i. Default is a_i=0.25 for all i.
         * </pre>
         */
        caffe.Loadcaffe.FillerParameterOrBuilder getFillerOrBuilder();

        /**
         * <code>optional bool channel_shared = 2 [default = false];</code>
         *
         * <pre>
         * Whether or not slope paramters are shared across channels.
         * </pre>
         */
        boolean hasChannelShared();
        /**
         * <code>optional bool channel_shared = 2 [default = false];</code>
         *
         * <pre>
         * Whether or not slope paramters are shared across channels.
         * </pre>
         */
        boolean getChannelShared();
    }
    /**
     * Protobuf type {@code caffe.PReLUParameter}
     *
     * <pre>
     * Message that stores parameters used by PReLULayer
     * </pre>
     */
    public static final class PReLUParameter extends
            com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:caffe.PReLUParameter)
            PReLUParameterOrBuilder {
        // Use PReLUParameter.newBuilder() to construct.
        private PReLUParameter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.unknownFields = builder.getUnknownFields();
        }
        private PReLUParameter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final PReLUParameter defaultInstance;
        public static PReLUParameter getDefaultInstance() {
            return defaultInstance;
        }

        public PReLUParameter getDefaultInstanceForType() {
            return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
            return this.unknownFields;
        }
        private PReLUParameter(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            initFields();
            int mutable_bitField0_ = 0;
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
                    com.google.protobuf.UnknownFieldSet.newBuilder();
            try {
                boolean done = false;
                while (!done) {
                    int tag = input.readTag();
                    switch (tag) {
                        case 0:
                            done = true;
                            break;
                        default: {
                            if (!parseUnknownField(input, unknownFields,
                                    extensionRegistry, tag)) {
                                done = true;
                            }
                            break;
                        }
                        case 10: {
                            caffe.Loadcaffe.FillerParameter.Builder subBuilder = null;
                            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                                subBuilder = filler_.toBuilder();
                            }
                            filler_ = input.readMessage(caffe.Loadcaffe.FillerParameter.PARSER, extensionRegistry);
                            if (subBuilder != null) {
                                subBuilder.mergeFrom(filler_);
                                filler_ = subBuilder.buildPartial();
                            }
                            bitField0_ |= 0x00000001;
                            break;
                        }
                        case 16: {
                            bitField0_ |= 0x00000002;
                            channelShared_ = input.readBool();
                            break;
                        }
                    }
                }
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                throw e.setUnfinishedMessage(this);
            } catch (java.io.IOException e) {
                throw new com.google.protobuf.InvalidProtocolBufferException(
                        e.getMessage()).setUnfinishedMessage(this);
            } finally {
                this.unknownFields = unknownFields.build();
                makeExtensionsImmutable();
            }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
            return caffe.Loadcaffe.internal_static_caffe_PReLUParameter_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
            return caffe.Loadcaffe.internal_static_caffe_PReLUParameter_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            caffe.Loadcaffe.PReLUParameter.class, caffe.Loadcaffe.PReLUParameter.Builder.class);
        }

        public static com.google.protobuf.Parser<PReLUParameter> PARSER =
                new com.google.protobuf.AbstractParser<PReLUParameter>() {
                    public PReLUParameter parsePartialFrom(
                            com.google.protobuf.CodedInputStream input,
                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException {
                        return new PReLUParameter(input, extensionRegistry);
                    }
                };

        @java.lang.Override
        public com.google.protobuf.Parser<PReLUParameter> getParserForType() {
            return PARSER;
        }

        private int bitField0_;
        public static final int FILLER_FIELD_NUMBER = 1;
        private caffe.Loadcaffe.FillerParameter filler_;
        /**
         * <code>optional .caffe.FillerParameter filler = 1;</code>
         *
         * <pre>
         * Initial value of a_i. Default is a_i=0.25 for all i.
         * </pre>
         */
        public boolean hasFiller() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional .caffe.FillerParameter filler = 1;</code>
         *
         * <pre>
         * Initial value of a_i. Default is a_i=0.25 for all i.
         * </pre>
         */
        public caffe.Loadcaffe.FillerParameter getFiller() {
            return filler_;
        }
        /**
         * <code>optional .caffe.FillerParameter filler = 1;</code>
         *
         * <pre>
         * Initial value of a_i. Default is a_i=0.25 for all i.
         * </pre>
         */
        public caffe.Loadcaffe.FillerParameterOrBuilder getFillerOrBuilder() {
            return filler_;
        }

        public static final int CHANNEL_SHARED_FIELD_NUMBER = 2;
        private boolean channelShared_;
        /**
         * <code>optional bool channel_shared = 2 [default = false];</code>
         *
         * <pre>
         * Whether or not slope paramters are shared across channels.
         * </pre>
         */
        public boolean hasChannelShared() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional bool channel_shared = 2 [default = false];</code>
         *
         * <pre>
         * Whether or not slope paramters are shared across channels.
         * </pre>
         */
        public boolean getChannelShared() {
            return channelShared_;
        }

        private void initFields() {
            filler_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
            channelShared_ = false;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
            byte isInitialized = memoizedIsInitialized;
            if (isInitialized == 1) return true;
            if (isInitialized == 0) return false;

            memoizedIsInitialized = 1;
            return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                throws java.io.IOException {
            getSerializedSize();
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                output.writeMessage(1, filler_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                output.writeBool(2, channelShared_);
            }
            getUnknownFields().writeTo(output);
        }

        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
            int size = memoizedSerializedSize;
            if (size != -1) return size;

            size = 0;
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeMessageSize(1, filler_);
            }
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
                size += com.google.protobuf.CodedOutputStream
                        .computeBoolSize(2, channelShared_);
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSerializedSize = size;
            return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
                throws java.io.ObjectStreamException {
            return super.writeReplace();
        }

        public static caffe.Loadcaffe.PReLUParameter parseFrom(
                com.google.protobuf.ByteString data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.PReLUParameter parseFrom(
                com.google.protobuf.ByteString data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.PReLUParameter parseFrom(byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data);
        }
        public static caffe.Loadcaffe.PReLUParameter parseFrom(
                byte[] data,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
            return PARSER.parseFrom(data, extensionRegistry);
        }
        public static caffe.Loadcaffe.PReLUParameter parseFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.PReLUParameter parseFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.PReLUParameter parseDelimitedFrom(java.io.InputStream input)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input);
        }
        public static caffe.Loadcaffe.PReLUParameter parseDelimitedFrom(
                java.io.InputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static caffe.Loadcaffe.PReLUParameter parseFrom(
                com.google.protobuf.CodedInputStream input)
                throws java.io.IOException {
            return PARSER.parseFrom(input);
        }
        public static caffe.Loadcaffe.PReLUParameter parseFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException {
            return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(caffe.Loadcaffe.PReLUParameter prototype) {
            return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            Builder builder = new Builder(parent);
            return builder;
        }
        /**
         * Protobuf type {@code caffe.PReLUParameter}
         *
         * <pre>
         * Message that stores parameters used by PReLULayer
         * </pre>
         */
        public static final class Builder extends
                com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:caffe.PReLUParameter)
                caffe.Loadcaffe.PReLUParameterOrBuilder {
            public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
                return caffe.Loadcaffe.internal_static_caffe_PReLUParameter_descriptor;
            }

            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
                return caffe.Loadcaffe.internal_static_caffe_PReLUParameter_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                caffe.Loadcaffe.PReLUParameter.class, caffe.Loadcaffe.PReLUParameter.Builder.class);
            }

            // Construct using caffe.Loadcaffe.PReLUParameter.newBuilder()
            private Builder() {
                maybeForceBuilderInitialization();
            }

            private Builder(
                    com.google.protobuf.GeneratedMessage.BuilderParent parent) {
                super(parent);
                maybeForceBuilderInitialization();
            }
            private void maybeForceBuilderInitialization() {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
                    getFillerFieldBuilder();
                }
            }
            private static Builder create() {
                return new Builder();
            }

            public Builder clear() {
                super.clear();
                if (fillerBuilder_ == null) {
                    filler_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
                } else {
                    fillerBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000001);
                channelShared_ = false;
                bitField0_ = (bitField0_ & ~0x00000002);
                return this;
            }

            public Builder clone() {
                return create().mergeFrom(buildPartial());
            }

            public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
                return caffe.Loadcaffe.internal_static_caffe_PReLUParameter_descriptor;
            }

            public caffe.Loadcaffe.PReLUParameter getDefaultInstanceForType() {
                return caffe.Loadcaffe.PReLUParameter.getDefaultInstance();
            }

            public caffe.Loadcaffe.PReLUParameter build() {
                caffe.Loadcaffe.PReLUParameter result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            public caffe.Loadcaffe.PReLUParameter buildPartial() {
                caffe.Loadcaffe.PReLUParameter result = new caffe.Loadcaffe.PReLUParameter(this);
                int from_bitField0_ = bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
                    to_bitField0_ |= 0x00000001;
                }
                if (fillerBuilder_ == null) {
                    result.filler_ = filler_;
                } else {
                    result.filler_ = fillerBuilder_.build();
                }
                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
                    to_bitField0_ |= 0x00000002;
                }
                result.channelShared_ = channelShared_;
                result.bitField0_ = to_bitField0_;
                onBuilt();
                return result;
            }

            public Builder mergeFrom(com.google.protobuf.Message other) {
                if (other instanceof caffe.Loadcaffe.PReLUParameter) {
                    return mergeFrom((caffe.Loadcaffe.PReLUParameter)other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(caffe.Loadcaffe.PReLUParameter other) {
                if (other == caffe.Loadcaffe.PReLUParameter.getDefaultInstance()) return this;
                if (other.hasFiller()) {
                    mergeFiller(other.getFiller());
                }
                if (other.hasChannelShared()) {
                    setChannelShared(other.getChannelShared());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                return this;
            }

            public final boolean isInitialized() {
                return true;
            }

            public Builder mergeFrom(
                    com.google.protobuf.CodedInputStream input,
                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws java.io.IOException {
                caffe.Loadcaffe.PReLUParameter parsedMessage = null;
                try {
                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    parsedMessage = (caffe.Loadcaffe.PReLUParameter) e.getUnfinishedMessage();
                    throw e;
                } finally {
                    if (parsedMessage != null) {
                        mergeFrom(parsedMessage);
                    }
                }
                return this;
            }
            private int bitField0_;

            private caffe.Loadcaffe.FillerParameter filler_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder> fillerBuilder_;
            /**
             * <code>optional .caffe.FillerParameter filler = 1;</code>
             *
             * <pre>
             * Initial value of a_i. Default is a_i=0.25 for all i.
             * </pre>
             */
            public boolean hasFiller() {
                return ((bitField0_ & 0x00000001) == 0x00000001);
            }
            /**
             * <code>optional .caffe.FillerParameter filler = 1;</code>
             *
             * <pre>
             * Initial value of a_i. Default is a_i=0.25 for all i.
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameter getFiller() {
                if (fillerBuilder_ == null) {
                    return filler_;
                } else {
                    return fillerBuilder_.getMessage();
                }
            }
            /**
             * <code>optional .caffe.FillerParameter filler = 1;</code>
             *
             * <pre>
             * Initial value of a_i. Default is a_i=0.25 for all i.
             * </pre>
             */
            public Builder setFiller(caffe.Loadcaffe.FillerParameter value) {
                if (fillerBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    filler_ = value;
                    onChanged();
                } else {
                    fillerBuilder_.setMessage(value);
                }
                bitField0_ |= 0x00000001;
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter filler = 1;</code>
             *
             * <pre>
             * Initial value of a_i. Default is a_i=0.25 for all i.
             * </pre>
             */
            public Builder setFiller(
                    caffe.Loadcaffe.FillerParameter.Builder builderForValue) {
                if (fillerBuilder_ == null) {
                    filler_ = builderForValue.build();
                    onChanged();
                } else {
                    fillerBuilder_.setMessage(builderForValue.build());
                }
                bitField0_ |= 0x00000001;
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter filler = 1;</code>
             *
             * <pre>
             * Initial value of a_i. Default is a_i=0.25 for all i.
             * </pre>
             */
            public Builder mergeFiller(caffe.Loadcaffe.FillerParameter value) {
                if (fillerBuilder_ == null) {
                    if (((bitField0_ & 0x00000001) == 0x00000001) &&
                            filler_ != caffe.Loadcaffe.FillerParameter.getDefaultInstance()) {
                        filler_ =
                                caffe.Loadcaffe.FillerParameter.newBuilder(filler_).mergeFrom(value).buildPartial();
                    } else {
                        filler_ = value;
                    }
                    onChanged();
                } else {
                    fillerBuilder_.mergeFrom(value);
                }
                bitField0_ |= 0x00000001;
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter filler = 1;</code>
             *
             * <pre>
             * Initial value of a_i. Default is a_i=0.25 for all i.
             * </pre>
             */
            public Builder clearFiller() {
                if (fillerBuilder_ == null) {
                    filler_ = caffe.Loadcaffe.FillerParameter.getDefaultInstance();
                    onChanged();
                } else {
                    fillerBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000001);
                return this;
            }
            /**
             * <code>optional .caffe.FillerParameter filler = 1;</code>
             *
             * <pre>
             * Initial value of a_i. Default is a_i=0.25 for all i.
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameter.Builder getFillerBuilder() {
                bitField0_ |= 0x00000001;
                onChanged();
                return getFillerFieldBuilder().getBuilder();
            }
            /**
             * <code>optional .caffe.FillerParameter filler = 1;</code>
             *
             * <pre>
             * Initial value of a_i. Default is a_i=0.25 for all i.
             * </pre>
             */
            public caffe.Loadcaffe.FillerParameterOrBuilder getFillerOrBuilder() {
                if (fillerBuilder_ != null) {
                    return fillerBuilder_.getMessageOrBuilder();
                } else {
                    return filler_;
                }
            }
            /**
             * <code>optional .caffe.FillerParameter filler = 1;</code>
             *
             * <pre>
             * Initial value of a_i. Default is a_i=0.25 for all i.
             * </pre>
             */
            private com.google.protobuf.SingleFieldBuilder<
                    caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder>
            getFillerFieldBuilder() {
                if (fillerBuilder_ == null) {
                    fillerBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            caffe.Loadcaffe.FillerParameter, caffe.Loadcaffe.FillerParameter.Builder, caffe.Loadcaffe.FillerParameterOrBuilder>(
                            getFiller(),
                            getParentForChildren(),
                            isClean());
                    filler_ = null;
                }
                return fillerBuilder_;
            }

            private boolean channelShared_ ;
            /**
             * <code>optional bool channel_shared = 2 [default = false];</code>
             *
             * <pre>
             * Whether or not slope paramters are shared across channels.
             * </pre>
             */
            public boolean hasChannelShared() {
                return ((bitField0_ & 0x00000002) == 0x00000002);
            }
            /**
             * <code>optional bool channel_shared = 2 [default = false];</code>
             *
             * <pre>
             * Whether or not slope paramters are shared across channels.
             * </pre>
             */
            public boolean getChannelShared() {
                return channelShared_;
            }
            /**
             * <code>optional bool channel_shared = 2 [default = false];</code>
             *
             * <pre>
             * Whether or not slope paramters are shared across channels.
             * </pre>
             */
            public Builder setChannelShared(boolean value) {
                bitField0_ |= 0x00000002;
                channelShared_ = value;
                onChanged();
                return this;
            }
            /**
             * <code>optional bool channel_shared = 2 [default = false];</code>
             *
             * <pre>
             * Whether or not slope paramters are shared across channels.
             * </pre>
             */
            public Builder clearChannelShared() {
                bitField0_ = (bitField0_ & ~0x00000002);
                channelShared_ = false;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:caffe.PReLUParameter)
        }

        static {
            defaultInstance = new PReLUParameter(true);
            defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:caffe.PReLUParameter)
    }

    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_BlobShape_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_BlobShape_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_BlobProto_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_BlobProto_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_BlobProtoVector_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_BlobProtoVector_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_Datum_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_Datum_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_FillerParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_FillerParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_NetParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_NetParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_SolverParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_SolverParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_SolverState_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_SolverState_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_NetState_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_NetState_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_NetStateRule_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_NetStateRule_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_ParamSpec_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_ParamSpec_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_LayerParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_LayerParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_TransformationParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_TransformationParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_LossParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_LossParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_AccuracyParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_AccuracyParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_ArgMaxParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_ArgMaxParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_ConcatParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_ConcatParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_ContrastiveLossParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_ContrastiveLossParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_ConvolutionParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_ConvolutionParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_DataParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_DataParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_DropoutParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_DropoutParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_DummyDataParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_DummyDataParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_EltwiseParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_EltwiseParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_ExpParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_ExpParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_HDF5DataParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_HDF5DataParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_HDF5OutputParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_HDF5OutputParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_HingeLossParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_HingeLossParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_ImageDataParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_ImageDataParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_InfogainLossParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_InfogainLossParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_InnerProductParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_InnerProductParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_LRNParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_LRNParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_MemoryDataParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_MemoryDataParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_MVNParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_MVNParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_PoolingParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_PoolingParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_PowerParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_PowerParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_PythonParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_PythonParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_ReLUParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_ReLUParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_SigmoidParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_SigmoidParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_SliceParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_SliceParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_SoftmaxParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_SoftmaxParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_TanHParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_TanHParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_ThresholdParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_ThresholdParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_WindowDataParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_WindowDataParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_V1LayerParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_V1LayerParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_V0LayerParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_V0LayerParameter_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
            internal_static_caffe_PReLUParameter_descriptor;
    private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internal_static_caffe_PReLUParameter_fieldAccessorTable;

    public static com.google.protobuf.Descriptors.FileDescriptor
    getDescriptor() {
        return descriptor;
    }
    private static com.google.protobuf.Descriptors.FileDescriptor
            descriptor;
    static {
        java.lang.String[] descriptorData = {
                "\n\017loadcaffe.proto\022\005caffe\"\034\n\tBlobShape\022\017\n" +
                        "\003dim\030\001 \003(\003B\002\020\001\"\232\001\n\tBlobProto\022\037\n\005shape\030\007 " +
                        "\001(\0132\020.caffe.BlobShape\022\020\n\004data\030\005 \003(\002B\002\020\001\022" +
                        "\020\n\004diff\030\006 \003(\002B\002\020\001\022\016\n\003num\030\001 \001(\005:\0010\022\023\n\010cha" +
                        "nnels\030\002 \001(\005:\0010\022\021\n\006height\030\003 \001(\005:\0010\022\020\n\005wid" +
                        "th\030\004 \001(\005:\0010\"2\n\017BlobProtoVector\022\037\n\005blobs\030" +
                        "\001 \003(\0132\020.caffe.BlobProto\"\201\001\n\005Datum\022\020\n\010cha" +
                        "nnels\030\001 \001(\005\022\016\n\006height\030\002 \001(\005\022\r\n\005width\030\003 \001" +
                        "(\005\022\014\n\004data\030\004 \001(\014\022\r\n\005label\030\005 \001(\005\022\022\n\nfloat" +
                        "_data\030\006 \003(\002\022\026\n\007encoded\030\007 \001(\010:\005false\"\220\001\n\017",
                "FillerParameter\022\026\n\004type\030\001 \001(\t:\010constant\022" +
                        "\020\n\005value\030\002 \001(\002:\0010\022\016\n\003min\030\003 \001(\002:\0010\022\016\n\003max" +
                        "\030\004 \001(\002:\0011\022\017\n\004mean\030\005 \001(\002:\0010\022\016\n\003std\030\006 \001(\002:" +
                        "\0011\022\022\n\006sparse\030\007 \001(\005:\002-1\"\216\002\n\014NetParameter\022" +
                        "\014\n\004name\030\001 \001(\t\022\r\n\005input\030\003 \003(\t\022%\n\013input_sh" +
                        "ape\030\010 \003(\0132\020.caffe.BlobShape\022\021\n\tinput_dim" +
                        "\030\004 \003(\005\022\035\n\016force_backward\030\005 \001(\010:\005false\022\036\n" +
                        "\005state\030\006 \001(\0132\017.caffe.NetState\022\031\n\ndebug_i" +
                        "nfo\030\007 \001(\010:\005false\022$\n\005layer\030d \003(\0132\025.caffe." +
                        "LayerParameter\022\'\n\006layers\030\002 \003(\0132\027.caffe.V",
                "1LayerParameter\"\247\010\n\017SolverParameter\022\013\n\003n" +
                        "et\030\030 \001(\t\022&\n\tnet_param\030\031 \001(\0132\023.caffe.NetP" +
                        "arameter\022\021\n\ttrain_net\030\001 \001(\t\022\020\n\010test_net\030" +
                        "\002 \003(\t\022,\n\017train_net_param\030\025 \001(\0132\023.caffe.N" +
                        "etParameter\022+\n\016test_net_param\030\026 \003(\0132\023.ca" +
                        "ffe.NetParameter\022$\n\013train_state\030\032 \001(\0132\017." +
                        "caffe.NetState\022#\n\ntest_state\030\033 \003(\0132\017.caf" +
                        "fe.NetState\022\021\n\ttest_iter\030\003 \003(\005\022\030\n\rtest_i" +
                        "nterval\030\004 \001(\005:\0010\022 \n\021test_compute_loss\030\023 " +
                        "\001(\010:\005false\022!\n\023test_initialization\030  \001(\010:",
                "\004true\022\017\n\007base_lr\030\005 \001(\002\022\017\n\007display\030\006 \001(\005\022" +
                        "\027\n\014average_loss\030! \001(\005:\0011\022\020\n\010max_iter\030\007 \001" +
                        "(\005\022\021\n\tlr_policy\030\010 \001(\t\022\r\n\005gamma\030\t \001(\002\022\r\n\005" +
                        "power\030\n \001(\002\022\020\n\010momentum\030\013 \001(\002\022\024\n\014weight_" +
                        "decay\030\014 \001(\002\022\037\n\023regularization_type\030\035 \001(\t" +
                        ":\002L2\022\020\n\010stepsize\030\r \001(\005\022\021\n\tstepvalue\030\" \003(" +
                        "\005\022\032\n\016clip_gradients\030# \001(\002:\002-1\022\023\n\010snapsho" +
                        "t\030\016 \001(\005:\0010\022\027\n\017snapshot_prefix\030\017 \001(\t\022\034\n\rs" +
                        "napshot_diff\030\020 \001(\010:\005false\022;\n\013solver_mode" +
                        "\030\021 \001(\0162!.caffe.SolverParameter.SolverMod",
                "e:\003GPU\022\024\n\tdevice_id\030\022 \001(\005:\0010\022\027\n\013random_s" +
                        "eed\030\024 \001(\003:\002-1\022;\n\013solver_type\030\036 \001(\0162!.caf" +
                        "fe.SolverParameter.SolverType:\003SGD\022\024\n\005de" +
                        "lta\030\037 \001(\002:\0051e-08\022\031\n\ndebug_info\030\027 \001(\010:\005fa" +
                        "lse\022\"\n\024snapshot_after_train\030\034 \001(\010:\004true\"" +
                        "\036\n\nSolverMode\022\007\n\003CPU\020\000\022\007\n\003GPU\020\001\"0\n\nSolve" +
                        "rType\022\007\n\003SGD\020\000\022\014\n\010NESTEROV\020\001\022\013\n\007ADAGRAD\020" +
                        "\002\"l\n\013SolverState\022\014\n\004iter\030\001 \001(\005\022\023\n\013learne" +
                        "d_net\030\002 \001(\t\022!\n\007history\030\003 \003(\0132\020.caffe.Blo" +
                        "bProto\022\027\n\014current_step\030\004 \001(\005:\0010\"N\n\010NetSt",
                "ate\022!\n\005phase\030\001 \001(\0162\014.caffe.Phase:\004TEST\022\020" +
                        "\n\005level\030\002 \001(\005:\0010\022\r\n\005stage\030\003 \003(\t\"s\n\014NetSt" +
                        "ateRule\022\033\n\005phase\030\001 \001(\0162\014.caffe.Phase\022\021\n\t" +
                        "min_level\030\002 \001(\005\022\021\n\tmax_level\030\003 \001(\005\022\r\n\005st" +
                        "age\030\004 \003(\t\022\021\n\tnot_stage\030\005 \003(\t\"\243\001\n\tParamSp" +
                        "ec\022\014\n\004name\030\001 \001(\t\0221\n\nshare_mode\030\002 \001(\0162\035.c" +
                        "affe.ParamSpec.DimCheckMode\022\022\n\007lr_mult\030\003" +
                        " \001(\002:\0011\022\025\n\ndecay_mult\030\004 \001(\002:\0011\"*\n\014DimChe" +
                        "ckMode\022\n\n\006STRICT\020\000\022\016\n\nPERMISSIVE\020\001\"\260\016\n\016L" +
                        "ayerParameter\022\014\n\004name\030\001 \001(\t\022\014\n\004type\030\002 \001(",
                "\t\022\016\n\006bottom\030\003 \003(\t\022\013\n\003top\030\004 \003(\t\022\033\n\005phase\030" +
                        "\n \001(\0162\014.caffe.Phase\022\023\n\013loss_weight\030\005 \003(\002" +
                        "\022\037\n\005param\030\006 \003(\0132\020.caffe.ParamSpec\022\037\n\005blo" +
                        "bs\030\007 \003(\0132\020.caffe.BlobProto\022$\n\007include\030\010 " +
                        "\003(\0132\023.caffe.NetStateRule\022$\n\007exclude\030\t \003(" +
                        "\0132\023.caffe.NetStateRule\0227\n\017transform_para" +
                        "m\030d \001(\0132\036.caffe.TransformationParameter\022" +
                        "(\n\nloss_param\030e \001(\0132\024.caffe.LossParamete" +
                        "r\0220\n\016accuracy_param\030f \001(\0132\030.caffe.Accura" +
                        "cyParameter\022,\n\014argmax_param\030g \001(\0132\026.caff",
                "e.ArgMaxParameter\022,\n\014concat_param\030h \001(\0132" +
                        "\026.caffe.ConcatParameter\022?\n\026contrastive_l" +
                        "oss_param\030i \001(\0132\037.caffe.ContrastiveLossP" +
                        "arameter\0226\n\021convolution_param\030j \001(\0132\033.ca" +
                        "ffe.ConvolutionParameter\022(\n\ndata_param\030k" +
                        " \001(\0132\024.caffe.DataParameter\022.\n\rdropout_pa" +
                        "ram\030l \001(\0132\027.caffe.DropoutParameter\0223\n\020du" +
                        "mmy_data_param\030m \001(\0132\031.caffe.DummyDataPa" +
                        "rameter\022.\n\reltwise_param\030n \001(\0132\027.caffe.E" +
                        "ltwiseParameter\022&\n\texp_param\030o \001(\0132\023.caf",
                "fe.ExpParameter\0221\n\017hdf5_data_param\030p \001(\013" +
                        "2\030.caffe.HDF5DataParameter\0225\n\021hdf5_outpu" +
                        "t_param\030q \001(\0132\032.caffe.HDF5OutputParamete" +
                        "r\0223\n\020hinge_loss_param\030r \001(\0132\031.caffe.Hing" +
                        "eLossParameter\0223\n\020image_data_param\030s \001(\013" +
                        "2\031.caffe.ImageDataParameter\0229\n\023infogain_" +
                        "loss_param\030t \001(\0132\034.caffe.InfogainLossPar" +
                        "ameter\0229\n\023inner_product_param\030u \001(\0132\034.ca" +
                        "ffe.InnerProductParameter\022&\n\tlrn_param\030v" +
                        " \001(\0132\023.caffe.LRNParameter\0225\n\021memory_data",
                "_param\030w \001(\0132\032.caffe.MemoryDataParameter" +
                        "\022&\n\tmvn_param\030x \001(\0132\023.caffe.MVNParameter" +
                        "\022.\n\rpooling_param\030y \001(\0132\027.caffe.PoolingP" +
                        "arameter\022*\n\013power_param\030z \001(\0132\025.caffe.Po" +
                        "werParameter\022+\n\013prelu_param\030\203\001 \001(\0132\025.caf" +
                        "fe.PReLUParameter\022-\n\014python_param\030\202\001 \001(\013" +
                        "2\026.caffe.PythonParameter\022(\n\nrelu_param\030{" +
                        " \001(\0132\024.caffe.ReLUParameter\022.\n\rsigmoid_pa" +
                        "ram\030| \001(\0132\027.caffe.SigmoidParameter\022.\n\rso" +
                        "ftmax_param\030} \001(\0132\027.caffe.SoftmaxParamet",
                "er\022*\n\013slice_param\030~ \001(\0132\025.caffe.SlicePar" +
                        "ameter\022(\n\ntanh_param\030\177 \001(\0132\024.caffe.TanHP" +
                        "arameter\0223\n\017threshold_param\030\200\001 \001(\0132\031.caf" +
                        "fe.ThresholdParameter\0226\n\021window_data_par" +
                        "am\030\201\001 \001(\0132\032.caffe.WindowDataParameter\"\177\n" +
                        "\027TransformationParameter\022\020\n\005scale\030\001 \001(\002:" +
                        "\0011\022\025\n\006mirror\030\002 \001(\010:\005false\022\024\n\tcrop_size\030\003" +
                        " \001(\r:\0010\022\021\n\tmean_file\030\004 \001(\t\022\022\n\nmean_value" +
                        "\030\005 \003(\002\">\n\rLossParameter\022\024\n\014ignore_label\030" +
                        "\001 \001(\005\022\027\n\tnormalize\030\002 \001(\010:\004true\"L\n\021Accura",
                "cyParameter\022\020\n\005top_k\030\001 \001(\r:\0011\022\017\n\004axis\030\002 " +
                        "\001(\005:\0011\022\024\n\014ignore_label\030\003 \001(\005\"?\n\017ArgMaxPa" +
                        "rameter\022\032\n\013out_max_val\030\001 \001(\010:\005false\022\020\n\005t" +
                        "op_k\030\002 \001(\r:\0011\"9\n\017ConcatParameter\022\017\n\004axis" +
                        "\030\002 \001(\005:\0011\022\025\n\nconcat_dim\030\001 \001(\r:\0011\"-\n\030Cont" +
                        "rastiveLossParameter\022\021\n\006margin\030\001 \001(\002:\0011\"" +
                        "\277\003\n\024ConvolutionParameter\022\022\n\nnum_output\030\001" +
                        " \001(\r\022\027\n\tbias_term\030\002 \001(\010:\004true\022\016\n\003pad\030\003 \001" +
                        "(\r:\0010\022\020\n\005pad_h\030\t \001(\r:\0010\022\020\n\005pad_w\030\n \001(\r:\001" +
                        "0\022\023\n\013kernel_size\030\004 \001(\r\022\020\n\010kernel_h\030\013 \001(\r",
                "\022\020\n\010kernel_w\030\014 \001(\r\022\020\n\005group\030\005 \001(\r:\0011\022\021\n\006" +
                        "stride\030\006 \001(\r:\0011\022\020\n\010stride_h\030\r \001(\r\022\020\n\010str" +
                        "ide_w\030\016 \001(\r\022-\n\rweight_filler\030\007 \001(\0132\026.caf" +
                        "fe.FillerParameter\022+\n\013bias_filler\030\010 \001(\0132" +
                        "\026.caffe.FillerParameter\022;\n\006engine\030\017 \001(\0162" +
                        "\".caffe.ConvolutionParameter.Engine:\007DEF" +
                        "AULT\"+\n\006Engine\022\013\n\007DEFAULT\020\000\022\t\n\005CAFFE\020\001\022\t" +
                        "\n\005CUDNN\020\002\"\217\002\n\rDataParameter\022\016\n\006source\030\001 " +
                        "\001(\t\022\022\n\nbatch_size\030\004 \001(\r\022\024\n\trand_skip\030\007 \001" +
                        "(\r:\0010\0221\n\007backend\030\010 \001(\0162\027.caffe.DataParam",
                "eter.DB:\007LEVELDB\022\020\n\005scale\030\002 \001(\002:\0011\022\021\n\tme" +
                        "an_file\030\003 \001(\t\022\024\n\tcrop_size\030\005 \001(\r:\0010\022\025\n\006m" +
                        "irror\030\006 \001(\010:\005false\022\"\n\023force_encoded_colo" +
                        "r\030\t \001(\010:\005false\"\033\n\002DB\022\013\n\007LEVELDB\020\000\022\010\n\004LMD" +
                        "B\020\001\".\n\020DropoutParameter\022\032\n\rdropout_ratio" +
                        "\030\001 \001(\002:\0030.5\"\240\001\n\022DummyDataParameter\022+\n\013da" +
                        "ta_filler\030\001 \003(\0132\026.caffe.FillerParameter\022" +
                        "\037\n\005shape\030\006 \003(\0132\020.caffe.BlobShape\022\013\n\003num\030" +
                        "\002 \003(\r\022\020\n\010channels\030\003 \003(\r\022\016\n\006height\030\004 \003(\r\022" +
                        "\r\n\005width\030\005 \003(\r\"\245\001\n\020EltwiseParameter\0229\n\to",
                "peration\030\001 \001(\0162!.caffe.EltwiseParameter." +
                        "EltwiseOp:\003SUM\022\r\n\005coeff\030\002 \003(\002\022\036\n\020stable_" +
                        "prod_grad\030\003 \001(\010:\004true\"\'\n\tEltwiseOp\022\010\n\004PR" +
                        "OD\020\000\022\007\n\003SUM\020\001\022\007\n\003MAX\020\002\"D\n\014ExpParameter\022\020" +
                        "\n\004base\030\001 \001(\002:\002-1\022\020\n\005scale\030\002 \001(\002:\0011\022\020\n\005sh" +
                        "ift\030\003 \001(\002:\0010\"O\n\021HDF5DataParameter\022\016\n\006sou" +
                        "rce\030\001 \001(\t\022\022\n\nbatch_size\030\002 \001(\r\022\026\n\007shuffle" +
                        "\030\003 \001(\010:\005false\"(\n\023HDF5OutputParameter\022\021\n\t" +
                        "file_name\030\001 \001(\t\"^\n\022HingeLossParameter\0220\n" +
                        "\004norm\030\001 \001(\0162\036.caffe.HingeLossParameter.N",
                "orm:\002L1\"\026\n\004Norm\022\006\n\002L1\020\001\022\006\n\002L2\020\002\"\224\002\n\022Imag" +
                        "eDataParameter\022\016\n\006source\030\001 \001(\t\022\022\n\nbatch_" +
                        "size\030\004 \001(\r\022\024\n\trand_skip\030\007 \001(\r:\0010\022\026\n\007shuf" +
                        "fle\030\010 \001(\010:\005false\022\025\n\nnew_height\030\t \001(\r:\0010\022" +
                        "\024\n\tnew_width\030\n \001(\r:\0010\022\026\n\010is_color\030\013 \001(\010:" +
                        "\004true\022\020\n\005scale\030\002 \001(\002:\0011\022\021\n\tmean_file\030\003 \001" +
                        "(\t\022\024\n\tcrop_size\030\005 \001(\r:\0010\022\025\n\006mirror\030\006 \001(\010" +
                        ":\005false\022\025\n\013root_folder\030\014 \001(\t:\000\"\'\n\025Infoga" +
                        "inLossParameter\022\016\n\006source\030\001 \001(\t\"\261\001\n\025Inne" +
                        "rProductParameter\022\022\n\nnum_output\030\001 \001(\r\022\027\n",
                "\tbias_term\030\002 \001(\010:\004true\022-\n\rweight_filler\030" +
                        "\003 \001(\0132\026.caffe.FillerParameter\022+\n\013bias_fi" +
                        "ller\030\004 \001(\0132\026.caffe.FillerParameter\022\017\n\004ax" +
                        "is\030\005 \001(\005:\0011\"\326\001\n\014LRNParameter\022\025\n\nlocal_si" +
                        "ze\030\001 \001(\r:\0015\022\020\n\005alpha\030\002 \001(\002:\0011\022\022\n\004beta\030\003 " +
                        "\001(\002:\0040.75\022D\n\013norm_region\030\004 \001(\0162\036.caffe.L" +
                        "RNParameter.NormRegion:\017ACROSS_CHANNELS\022" +
                        "\014\n\001k\030\005 \001(\002:\0011\"5\n\nNormRegion\022\023\n\017ACROSS_CH" +
                        "ANNELS\020\000\022\022\n\016WITHIN_CHANNEL\020\001\"Z\n\023MemoryDa" +
                        "taParameter\022\022\n\nbatch_size\030\001 \001(\r\022\020\n\010chann",
                "els\030\002 \001(\r\022\016\n\006height\030\003 \001(\r\022\r\n\005width\030\004 \001(\r" +
                        "\"P\n\014MVNParameter\022 \n\022normalize_variance\030\001" +
                        " \001(\010:\004true\022\036\n\017across_channels\030\002 \001(\010:\005fal" +
                        "se\"\242\003\n\020PoolingParameter\0225\n\004pool\030\001 \001(\0162\"." +
                        "caffe.PoolingParameter.PoolMethod:\003MAX\022\016" +
                        "\n\003pad\030\004 \001(\r:\0010\022\020\n\005pad_h\030\t \001(\r:\0010\022\020\n\005pad_" +
                        "w\030\n \001(\r:\0010\022\023\n\013kernel_size\030\002 \001(\r\022\020\n\010kerne" +
                        "l_h\030\005 \001(\r\022\020\n\010kernel_w\030\006 \001(\r\022\021\n\006stride\030\003 " +
                        "\001(\r:\0011\022\020\n\010stride_h\030\007 \001(\r\022\020\n\010stride_w\030\010 \001" +
                        "(\r\0227\n\006engine\030\013 \001(\0162\036.caffe.PoolingParame",
                "ter.Engine:\007DEFAULT\022\035\n\016global_pooling\030\014 " +
                        "\001(\010:\005false\".\n\nPoolMethod\022\007\n\003MAX\020\000\022\007\n\003AVE" +
                        "\020\001\022\016\n\nSTOCHASTIC\020\002\"+\n\006Engine\022\013\n\007DEFAULT\020" +
                        "\000\022\t\n\005CAFFE\020\001\022\t\n\005CUDNN\020\002\"F\n\016PowerParamete" +
                        "r\022\020\n\005power\030\001 \001(\002:\0011\022\020\n\005scale\030\002 \001(\002:\0011\022\020\n" +
                        "\005shift\030\003 \001(\002:\0010\"0\n\017PythonParameter\022\016\n\006mo" +
                        "dule\030\001 \001(\t\022\r\n\005layer\030\002 \001(\t\"\215\001\n\rReLUParame" +
                        "ter\022\031\n\016negative_slope\030\001 \001(\002:\0010\0224\n\006engine" +
                        "\030\002 \001(\0162\033.caffe.ReLUParameter.Engine:\007DEF" +
                        "AULT\"+\n\006Engine\022\013\n\007DEFAULT\020\000\022\t\n\005CAFFE\020\001\022\t",
                "\n\005CUDNN\020\002\"x\n\020SigmoidParameter\0227\n\006engine\030" +
                        "\001 \001(\0162\036.caffe.SigmoidParameter.Engine:\007D" +
                        "EFAULT\"+\n\006Engine\022\013\n\007DEFAULT\020\000\022\t\n\005CAFFE\020\001" +
                        "\022\t\n\005CUDNN\020\002\"L\n\016SliceParameter\022\017\n\004axis\030\003 " +
                        "\001(\005:\0011\022\023\n\013slice_point\030\002 \003(\r\022\024\n\tslice_dim" +
                        "\030\001 \001(\r:\0011\"\211\001\n\020SoftmaxParameter\0227\n\006engine" +
                        "\030\001 \001(\0162\036.caffe.SoftmaxParameter.Engine:\007" +
                        "DEFAULT\022\017\n\004axis\030\002 \001(\005:\0011\"+\n\006Engine\022\013\n\007DE" +
                        "FAULT\020\000\022\t\n\005CAFFE\020\001\022\t\n\005CUDNN\020\002\"r\n\rTanHPar" +
                        "ameter\0224\n\006engine\030\001 \001(\0162\033.caffe.TanHParam",
                "eter.Engine:\007DEFAULT\"+\n\006Engine\022\013\n\007DEFAUL" +
                        "T\020\000\022\t\n\005CAFFE\020\001\022\t\n\005CUDNN\020\002\"*\n\022ThresholdPa" +
                        "rameter\022\024\n\tthreshold\030\001 \001(\002:\0010\"\301\002\n\023Window" +
                        "DataParameter\022\016\n\006source\030\001 \001(\t\022\020\n\005scale\030\002" +
                        " \001(\002:\0011\022\021\n\tmean_file\030\003 \001(\t\022\022\n\nbatch_size" +
                        "\030\004 \001(\r\022\024\n\tcrop_size\030\005 \001(\r:\0010\022\025\n\006mirror\030\006" +
                        " \001(\010:\005false\022\031\n\014fg_threshold\030\007 \001(\002:\0030.5\022\031" +
                        "\n\014bg_threshold\030\010 \001(\002:\0030.5\022\031\n\013fg_fraction" +
                        "\030\t \001(\002:\0040.25\022\026\n\013context_pad\030\n \001(\r:\0010\022\027\n\t" +
                        "crop_mode\030\013 \001(\t:\004warp\022\033\n\014cache_images\030\014 ",
                "\001(\010:\005false\022\025\n\013root_folder\030\r \001(\t:\000\"\340\023\n\020V1" +
                        "LayerParameter\022\016\n\006bottom\030\002 \003(\t\022\013\n\003top\030\003 " +
                        "\003(\t\022\014\n\004name\030\004 \001(\t\022$\n\007include\030  \003(\0132\023.caf" +
                        "fe.NetStateRule\022$\n\007exclude\030! \003(\0132\023.caffe" +
                        ".NetStateRule\022/\n\004type\030\005 \001(\0162!.caffe.V1La" +
                        "yerParameter.LayerType\022\037\n\005blobs\030\006 \003(\0132\020." +
                        "caffe.BlobProto\022\016\n\005param\030\351\007 \003(\t\022>\n\017blob_" +
                        "share_mode\030\352\007 \003(\0162$.caffe.V1LayerParamet" +
                        "er.DimCheckMode\022\020\n\010blobs_lr\030\007 \003(\002\022\024\n\014wei" +
                        "ght_decay\030\010 \003(\002\022\023\n\013loss_weight\030# \003(\002\0220\n\016",
                "accuracy_param\030\033 \001(\0132\030.caffe.AccuracyPar" +
                        "ameter\022,\n\014argmax_param\030\027 \001(\0132\026.caffe.Arg" +
                        "MaxParameter\022,\n\014concat_param\030\t \001(\0132\026.caf" +
                        "fe.ConcatParameter\022?\n\026contrastive_loss_p" +
                        "aram\030( \001(\0132\037.caffe.ContrastiveLossParame" +
                        "ter\0226\n\021convolution_param\030\n \001(\0132\033.caffe.C" +
                        "onvolutionParameter\022(\n\ndata_param\030\013 \001(\0132" +
                        "\024.caffe.DataParameter\022.\n\rdropout_param\030\014" +
                        " \001(\0132\027.caffe.DropoutParameter\0223\n\020dummy_d" +
                        "ata_param\030\032 \001(\0132\031.caffe.DummyDataParamet",
                "er\022.\n\reltwise_param\030\030 \001(\0132\027.caffe.Eltwis" +
                        "eParameter\022&\n\texp_param\030) \001(\0132\023.caffe.Ex" +
                        "pParameter\0221\n\017hdf5_data_param\030\r \001(\0132\030.ca" +
                        "ffe.HDF5DataParameter\0225\n\021hdf5_output_par" +
                        "am\030\016 \001(\0132\032.caffe.HDF5OutputParameter\0223\n\020" +
                        "hinge_loss_param\030\035 \001(\0132\031.caffe.HingeLoss" +
                        "Parameter\0223\n\020image_data_param\030\017 \001(\0132\031.ca" +
                        "ffe.ImageDataParameter\0229\n\023infogain_loss_" +
                        "param\030\020 \001(\0132\034.caffe.InfogainLossParamete" +
                        "r\0229\n\023inner_product_param\030\021 \001(\0132\034.caffe.I",
                "nnerProductParameter\022&\n\tlrn_param\030\022 \001(\0132" +
                        "\023.caffe.LRNParameter\0225\n\021memory_data_para" +
                        "m\030\026 \001(\0132\032.caffe.MemoryDataParameter\022&\n\tm" +
                        "vn_param\030\" \001(\0132\023.caffe.MVNParameter\022.\n\rp" +
                        "ooling_param\030\023 \001(\0132\027.caffe.PoolingParame" +
                        "ter\022*\n\013power_param\030\025 \001(\0132\025.caffe.PowerPa" +
                        "rameter\022(\n\nrelu_param\030\036 \001(\0132\024.caffe.ReLU" +
                        "Parameter\022.\n\rsigmoid_param\030& \001(\0132\027.caffe" +
                        ".SigmoidParameter\022.\n\rsoftmax_param\030\' \001(\013" +
                        "2\027.caffe.SoftmaxParameter\022*\n\013slice_param",
                "\030\037 \001(\0132\025.caffe.SliceParameter\022(\n\ntanh_pa" +
                        "ram\030% \001(\0132\024.caffe.TanHParameter\0222\n\017thres" +
                        "hold_param\030\031 \001(\0132\031.caffe.ThresholdParame" +
                        "ter\0225\n\021window_data_param\030\024 \001(\0132\032.caffe.W" +
                        "indowDataParameter\0227\n\017transform_param\030$ " +
                        "\001(\0132\036.caffe.TransformationParameter\022(\n\nl" +
                        "oss_param\030* \001(\0132\024.caffe.LossParameter\022&\n" +
                        "\005layer\030\001 \001(\0132\027.caffe.V0LayerParameter\"\330\004" +
                        "\n\tLayerType\022\010\n\004NONE\020\000\022\n\n\006ABSVAL\020#\022\014\n\010ACC" +
                        "URACY\020\001\022\n\n\006ARGMAX\020\036\022\010\n\004BNLL\020\002\022\n\n\006CONCAT\020",
                "\003\022\024\n\020CONTRASTIVE_LOSS\020%\022\017\n\013CONVOLUTION\020\004" +
                        "\022\010\n\004DATA\020\005\022\021\n\rDECONVOLUTION\020\'\022\013\n\007DROPOUT" +
                        "\020\006\022\016\n\nDUMMY_DATA\020 \022\022\n\016EUCLIDEAN_LOSS\020\007\022\013" +
                        "\n\007ELTWISE\020\031\022\007\n\003EXP\020&\022\013\n\007FLATTEN\020\010\022\r\n\tHDF" +
                        "5_DATA\020\t\022\017\n\013HDF5_OUTPUT\020\n\022\016\n\nHINGE_LOSS\020" +
                        "\034\022\n\n\006IM2COL\020\013\022\016\n\nIMAGE_DATA\020\014\022\021\n\rINFOGAI" +
                        "N_LOSS\020\r\022\021\n\rINNER_PRODUCT\020\016\022\007\n\003LRN\020\017\022\017\n\013" +
                        "MEMORY_DATA\020\035\022\035\n\031MULTINOMIAL_LOGISTIC_LO" +
                        "SS\020\020\022\007\n\003MVN\020\"\022\013\n\007POOLING\020\021\022\t\n\005POWER\020\032\022\010\n" +
                        "\004RELU\020\022\022\013\n\007SIGMOID\020\023\022\036\n\032SIGMOID_CROSS_EN",
                "TROPY_LOSS\020\033\022\013\n\007SILENCE\020$\022\013\n\007SOFTMAX\020\024\022\020" +
                        "\n\014SOFTMAX_LOSS\020\025\022\t\n\005SPLIT\020\026\022\t\n\005SLICE\020!\022\010" +
                        "\n\004TANH\020\027\022\017\n\013WINDOW_DATA\020\030\022\r\n\tTHRESHOLD\020\037" +
                        "\"*\n\014DimCheckMode\022\n\n\006STRICT\020\000\022\016\n\nPERMISSI" +
                        "VE\020\001\"\375\007\n\020V0LayerParameter\022\014\n\004name\030\001 \001(\t\022" +
                        "\014\n\004type\030\002 \001(\t\022\022\n\nnum_output\030\003 \001(\r\022\026\n\010bia" +
                        "sterm\030\004 \001(\010:\004true\022-\n\rweight_filler\030\005 \001(\013" +
                        "2\026.caffe.FillerParameter\022+\n\013bias_filler\030" +
                        "\006 \001(\0132\026.caffe.FillerParameter\022\016\n\003pad\030\007 \001" +
                        "(\r:\0010\022\022\n\nkernelsize\030\010 \001(\r\022\020\n\005group\030\t \001(\r",
                ":\0011\022\021\n\006stride\030\n \001(\r:\0011\0225\n\004pool\030\013 \001(\0162\".c" +
                        "affe.V0LayerParameter.PoolMethod:\003MAX\022\032\n" +
                        "\rdropout_ratio\030\014 \001(\002:\0030.5\022\025\n\nlocal_size\030" +
                        "\r \001(\r:\0015\022\020\n\005alpha\030\016 \001(\002:\0011\022\022\n\004beta\030\017 \001(\002" +
                        ":\0040.75\022\014\n\001k\030\026 \001(\002:\0011\022\016\n\006source\030\020 \001(\t\022\020\n\005" +
                        "scale\030\021 \001(\002:\0011\022\020\n\010meanfile\030\022 \001(\t\022\021\n\tbatc" +
                        "hsize\030\023 \001(\r\022\023\n\010cropsize\030\024 \001(\r:\0010\022\025\n\006mirr" +
                        "or\030\025 \001(\010:\005false\022\037\n\005blobs\0302 \003(\0132\020.caffe.B" +
                        "lobProto\022\020\n\010blobs_lr\0303 \003(\002\022\024\n\014weight_dec" +
                        "ay\0304 \003(\002\022\024\n\trand_skip\0305 \001(\r:\0010\022\035\n\020det_fg",
                "_threshold\0306 \001(\002:\0030.5\022\035\n\020det_bg_threshol" +
                        "d\0307 \001(\002:\0030.5\022\035\n\017det_fg_fraction\0308 \001(\002:\0040" +
                        ".25\022\032\n\017det_context_pad\030: \001(\r:\0010\022\033\n\rdet_c" +
                        "rop_mode\030; \001(\t:\004warp\022\022\n\007new_num\030< \001(\005:\0010" +
                        "\022\027\n\014new_channels\030= \001(\005:\0010\022\025\n\nnew_height\030" +
                        "> \001(\005:\0010\022\024\n\tnew_width\030? \001(\005:\0010\022\035\n\016shuffl" +
                        "e_images\030@ \001(\010:\005false\022\025\n\nconcat_dim\030A \001(" +
                        "\r:\0011\0226\n\021hdf5_output_param\030\351\007 \001(\0132\032.caffe" +
                        ".HDF5OutputParameter\".\n\nPoolMethod\022\007\n\003MA" +
                        "X\020\000\022\007\n\003AVE\020\001\022\016\n\nSTOCHASTIC\020\002\"W\n\016PReLUPar",
                "ameter\022&\n\006filler\030\001 \001(\0132\026.caffe.FillerPar" +
                        "ameter\022\035\n\016channel_shared\030\002 \001(\010:\005false*\034\n" +
                        "\005Phase\022\t\n\005TRAIN\020\000\022\010\n\004TEST\020\001"
        };
        com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
                new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
                    public com.google.protobuf.ExtensionRegistry assignDescriptors(
                            com.google.protobuf.Descriptors.FileDescriptor root) {
                        descriptor = root;
                        return null;
                    }
                };
        com.google.protobuf.Descriptors.FileDescriptor
                .internalBuildGeneratedFileFrom(descriptorData,
                        new com.google.protobuf.Descriptors.FileDescriptor[] {
                        }, assigner);
        internal_static_caffe_BlobShape_descriptor =
                getDescriptor().getMessageTypes().get(0);
        internal_static_caffe_BlobShape_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_BlobShape_descriptor,
                new java.lang.String[] { "Dim", });
        internal_static_caffe_BlobProto_descriptor =
                getDescriptor().getMessageTypes().get(1);
        internal_static_caffe_BlobProto_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_BlobProto_descriptor,
                new java.lang.String[] { "Shape", "Data", "Diff", "Num", "Channels", "Height", "Width", });
        internal_static_caffe_BlobProtoVector_descriptor =
                getDescriptor().getMessageTypes().get(2);
        internal_static_caffe_BlobProtoVector_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_BlobProtoVector_descriptor,
                new java.lang.String[] { "Blobs", });
        internal_static_caffe_Datum_descriptor =
                getDescriptor().getMessageTypes().get(3);
        internal_static_caffe_Datum_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_Datum_descriptor,
                new java.lang.String[] { "Channels", "Height", "Width", "Data", "Label", "FloatData", "Encoded", });
        internal_static_caffe_FillerParameter_descriptor =
                getDescriptor().getMessageTypes().get(4);
        internal_static_caffe_FillerParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_FillerParameter_descriptor,
                new java.lang.String[] { "Type", "Value", "Min", "Max", "Mean", "Std", "Sparse", });
        internal_static_caffe_NetParameter_descriptor =
                getDescriptor().getMessageTypes().get(5);
        internal_static_caffe_NetParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_NetParameter_descriptor,
                new java.lang.String[] { "Name", "Input", "InputShape", "InputDim", "ForceBackward", "State", "DebugInfo", "Layer", "Layers", });
        internal_static_caffe_SolverParameter_descriptor =
                getDescriptor().getMessageTypes().get(6);
        internal_static_caffe_SolverParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_SolverParameter_descriptor,
                new java.lang.String[] { "Net", "NetParam", "TrainNet", "TestNet", "TrainNetParam", "TestNetParam", "TrainState", "TestState", "TestIter", "TestInterval", "TestComputeLoss", "TestInitialization", "BaseLr", "Display", "AverageLoss", "MaxIter", "LrPolicy", "Gamma", "Power", "Momentum", "WeightDecay", "RegularizationType", "Stepsize", "Stepvalue", "ClipGradients", "Snapshot", "SnapshotPrefix", "SnapshotDiff", "SolverMode", "DeviceId", "RandomSeed", "SolverType", "Delta", "DebugInfo", "SnapshotAfterTrain", });
        internal_static_caffe_SolverState_descriptor =
                getDescriptor().getMessageTypes().get(7);
        internal_static_caffe_SolverState_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_SolverState_descriptor,
                new java.lang.String[] { "Iter", "LearnedNet", "History", "CurrentStep", });
        internal_static_caffe_NetState_descriptor =
                getDescriptor().getMessageTypes().get(8);
        internal_static_caffe_NetState_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_NetState_descriptor,
                new java.lang.String[] { "Phase", "Level", "Stage", });
        internal_static_caffe_NetStateRule_descriptor =
                getDescriptor().getMessageTypes().get(9);
        internal_static_caffe_NetStateRule_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_NetStateRule_descriptor,
                new java.lang.String[] { "Phase", "MinLevel", "MaxLevel", "Stage", "NotStage", });
        internal_static_caffe_ParamSpec_descriptor =
                getDescriptor().getMessageTypes().get(10);
        internal_static_caffe_ParamSpec_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_ParamSpec_descriptor,
                new java.lang.String[] { "Name", "ShareMode", "LrMult", "DecayMult", });
        internal_static_caffe_LayerParameter_descriptor =
                getDescriptor().getMessageTypes().get(11);
        internal_static_caffe_LayerParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_LayerParameter_descriptor,
                new java.lang.String[] { "Name", "Type", "Bottom", "Top", "Phase", "LossWeight", "Param", "Blobs", "Include", "Exclude", "TransformParam", "LossParam", "AccuracyParam", "ArgmaxParam", "ConcatParam", "ContrastiveLossParam", "ConvolutionParam", "DataParam", "DropoutParam", "DummyDataParam", "EltwiseParam", "ExpParam", "Hdf5DataParam", "Hdf5OutputParam", "HingeLossParam", "ImageDataParam", "InfogainLossParam", "InnerProductParam", "LrnParam", "MemoryDataParam", "MvnParam", "PoolingParam", "PowerParam", "PreluParam", "PythonParam", "ReluParam", "SigmoidParam", "SoftmaxParam", "SliceParam", "TanhParam", "ThresholdParam", "WindowDataParam", });
        internal_static_caffe_TransformationParameter_descriptor =
                getDescriptor().getMessageTypes().get(12);
        internal_static_caffe_TransformationParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_TransformationParameter_descriptor,
                new java.lang.String[] { "Scale", "Mirror", "CropSize", "MeanFile", "MeanValue", });
        internal_static_caffe_LossParameter_descriptor =
                getDescriptor().getMessageTypes().get(13);
        internal_static_caffe_LossParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_LossParameter_descriptor,
                new java.lang.String[] { "IgnoreLabel", "Normalize", });
        internal_static_caffe_AccuracyParameter_descriptor =
                getDescriptor().getMessageTypes().get(14);
        internal_static_caffe_AccuracyParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_AccuracyParameter_descriptor,
                new java.lang.String[] { "TopK", "Axis", "IgnoreLabel", });
        internal_static_caffe_ArgMaxParameter_descriptor =
                getDescriptor().getMessageTypes().get(15);
        internal_static_caffe_ArgMaxParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_ArgMaxParameter_descriptor,
                new java.lang.String[] { "OutMaxVal", "TopK", });
        internal_static_caffe_ConcatParameter_descriptor =
                getDescriptor().getMessageTypes().get(16);
        internal_static_caffe_ConcatParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_ConcatParameter_descriptor,
                new java.lang.String[] { "Axis", "ConcatDim", });
        internal_static_caffe_ContrastiveLossParameter_descriptor =
                getDescriptor().getMessageTypes().get(17);
        internal_static_caffe_ContrastiveLossParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_ContrastiveLossParameter_descriptor,
                new java.lang.String[] { "Margin", });
        internal_static_caffe_ConvolutionParameter_descriptor =
                getDescriptor().getMessageTypes().get(18);
        internal_static_caffe_ConvolutionParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_ConvolutionParameter_descriptor,
                new java.lang.String[] { "NumOutput", "BiasTerm", "Pad", "PadH", "PadW", "KernelSize", "KernelH", "KernelW", "Group", "Stride", "StrideH", "StrideW", "WeightFiller", "BiasFiller", "Engine", });
        internal_static_caffe_DataParameter_descriptor =
                getDescriptor().getMessageTypes().get(19);
        internal_static_caffe_DataParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_DataParameter_descriptor,
                new java.lang.String[] { "Source", "BatchSize", "RandSkip", "Backend", "Scale", "MeanFile", "CropSize", "Mirror", "ForceEncodedColor", });
        internal_static_caffe_DropoutParameter_descriptor =
                getDescriptor().getMessageTypes().get(20);
        internal_static_caffe_DropoutParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_DropoutParameter_descriptor,
                new java.lang.String[] { "DropoutRatio", });
        internal_static_caffe_DummyDataParameter_descriptor =
                getDescriptor().getMessageTypes().get(21);
        internal_static_caffe_DummyDataParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_DummyDataParameter_descriptor,
                new java.lang.String[] { "DataFiller", "Shape", "Num", "Channels", "Height", "Width", });
        internal_static_caffe_EltwiseParameter_descriptor =
                getDescriptor().getMessageTypes().get(22);
        internal_static_caffe_EltwiseParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_EltwiseParameter_descriptor,
                new java.lang.String[] { "Operation", "Coeff", "StableProdGrad", });
        internal_static_caffe_ExpParameter_descriptor =
                getDescriptor().getMessageTypes().get(23);
        internal_static_caffe_ExpParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_ExpParameter_descriptor,
                new java.lang.String[] { "Base", "Scale", "Shift", });
        internal_static_caffe_HDF5DataParameter_descriptor =
                getDescriptor().getMessageTypes().get(24);
        internal_static_caffe_HDF5DataParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_HDF5DataParameter_descriptor,
                new java.lang.String[] { "Source", "BatchSize", "Shuffle", });
        internal_static_caffe_HDF5OutputParameter_descriptor =
                getDescriptor().getMessageTypes().get(25);
        internal_static_caffe_HDF5OutputParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_HDF5OutputParameter_descriptor,
                new java.lang.String[] { "FileName", });
        internal_static_caffe_HingeLossParameter_descriptor =
                getDescriptor().getMessageTypes().get(26);
        internal_static_caffe_HingeLossParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_HingeLossParameter_descriptor,
                new java.lang.String[] { "Norm", });
        internal_static_caffe_ImageDataParameter_descriptor =
                getDescriptor().getMessageTypes().get(27);
        internal_static_caffe_ImageDataParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_ImageDataParameter_descriptor,
                new java.lang.String[] { "Source", "BatchSize", "RandSkip", "Shuffle", "NewHeight", "NewWidth", "IsColor", "Scale", "MeanFile", "CropSize", "Mirror", "RootFolder", });
        internal_static_caffe_InfogainLossParameter_descriptor =
                getDescriptor().getMessageTypes().get(28);
        internal_static_caffe_InfogainLossParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_InfogainLossParameter_descriptor,
                new java.lang.String[] { "Source", });
        internal_static_caffe_InnerProductParameter_descriptor =
                getDescriptor().getMessageTypes().get(29);
        internal_static_caffe_InnerProductParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_InnerProductParameter_descriptor,
                new java.lang.String[] { "NumOutput", "BiasTerm", "WeightFiller", "BiasFiller", "Axis", });
        internal_static_caffe_LRNParameter_descriptor =
                getDescriptor().getMessageTypes().get(30);
        internal_static_caffe_LRNParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_LRNParameter_descriptor,
                new java.lang.String[] { "LocalSize", "Alpha", "Beta", "NormRegion", "K", });
        internal_static_caffe_MemoryDataParameter_descriptor =
                getDescriptor().getMessageTypes().get(31);
        internal_static_caffe_MemoryDataParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_MemoryDataParameter_descriptor,
                new java.lang.String[] { "BatchSize", "Channels", "Height", "Width", });
        internal_static_caffe_MVNParameter_descriptor =
                getDescriptor().getMessageTypes().get(32);
        internal_static_caffe_MVNParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_MVNParameter_descriptor,
                new java.lang.String[] { "NormalizeVariance", "AcrossChannels", });
        internal_static_caffe_PoolingParameter_descriptor =
                getDescriptor().getMessageTypes().get(33);
        internal_static_caffe_PoolingParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_PoolingParameter_descriptor,
                new java.lang.String[] { "Pool", "Pad", "PadH", "PadW", "KernelSize", "KernelH", "KernelW", "Stride", "StrideH", "StrideW", "Engine", "GlobalPooling", });
        internal_static_caffe_PowerParameter_descriptor =
                getDescriptor().getMessageTypes().get(34);
        internal_static_caffe_PowerParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_PowerParameter_descriptor,
                new java.lang.String[] { "Power", "Scale", "Shift", });
        internal_static_caffe_PythonParameter_descriptor =
                getDescriptor().getMessageTypes().get(35);
        internal_static_caffe_PythonParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_PythonParameter_descriptor,
                new java.lang.String[] { "Module", "Layer", });
        internal_static_caffe_ReLUParameter_descriptor =
                getDescriptor().getMessageTypes().get(36);
        internal_static_caffe_ReLUParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_ReLUParameter_descriptor,
                new java.lang.String[] { "NegativeSlope", "Engine", });
        internal_static_caffe_SigmoidParameter_descriptor =
                getDescriptor().getMessageTypes().get(37);
        internal_static_caffe_SigmoidParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_SigmoidParameter_descriptor,
                new java.lang.String[] { "Engine", });
        internal_static_caffe_SliceParameter_descriptor =
                getDescriptor().getMessageTypes().get(38);
        internal_static_caffe_SliceParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_SliceParameter_descriptor,
                new java.lang.String[] { "Axis", "SlicePoint", "SliceDim", });
        internal_static_caffe_SoftmaxParameter_descriptor =
                getDescriptor().getMessageTypes().get(39);
        internal_static_caffe_SoftmaxParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_SoftmaxParameter_descriptor,
                new java.lang.String[] { "Engine", "Axis", });
        internal_static_caffe_TanHParameter_descriptor =
                getDescriptor().getMessageTypes().get(40);
        internal_static_caffe_TanHParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_TanHParameter_descriptor,
                new java.lang.String[] { "Engine", });
        internal_static_caffe_ThresholdParameter_descriptor =
                getDescriptor().getMessageTypes().get(41);
        internal_static_caffe_ThresholdParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_ThresholdParameter_descriptor,
                new java.lang.String[] { "Threshold", });
        internal_static_caffe_WindowDataParameter_descriptor =
                getDescriptor().getMessageTypes().get(42);
        internal_static_caffe_WindowDataParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_WindowDataParameter_descriptor,
                new java.lang.String[] { "Source", "Scale", "MeanFile", "BatchSize", "CropSize", "Mirror", "FgThreshold", "BgThreshold", "FgFraction", "ContextPad", "CropMode", "CacheImages", "RootFolder", });
        internal_static_caffe_V1LayerParameter_descriptor =
                getDescriptor().getMessageTypes().get(43);
        internal_static_caffe_V1LayerParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_V1LayerParameter_descriptor,
                new java.lang.String[] { "Bottom", "Top", "Name", "Include", "Exclude", "Type", "Blobs", "Param", "BlobShareMode", "BlobsLr", "WeightDecay", "LossWeight", "AccuracyParam", "ArgmaxParam", "ConcatParam", "ContrastiveLossParam", "ConvolutionParam", "DataParam", "DropoutParam", "DummyDataParam", "EltwiseParam", "ExpParam", "Hdf5DataParam", "Hdf5OutputParam", "HingeLossParam", "ImageDataParam", "InfogainLossParam", "InnerProductParam", "LrnParam", "MemoryDataParam", "MvnParam", "PoolingParam", "PowerParam", "ReluParam", "SigmoidParam", "SoftmaxParam", "SliceParam", "TanhParam", "ThresholdParam", "WindowDataParam", "TransformParam", "LossParam", "Layer", });
        internal_static_caffe_V0LayerParameter_descriptor =
                getDescriptor().getMessageTypes().get(44);
        internal_static_caffe_V0LayerParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_V0LayerParameter_descriptor,
                new java.lang.String[] { "Name", "Type", "NumOutput", "Biasterm", "WeightFiller", "BiasFiller", "Pad", "Kernelsize", "Group", "Stride", "Pool", "DropoutRatio", "LocalSize", "Alpha", "Beta", "K", "Source", "Scale", "Meanfile", "Batchsize", "Cropsize", "Mirror", "Blobs", "BlobsLr", "WeightDecay", "RandSkip", "DetFgThreshold", "DetBgThreshold", "DetFgFraction", "DetContextPad", "DetCropMode", "NewNum", "NewChannels", "NewHeight", "NewWidth", "ShuffleImages", "ConcatDim", "Hdf5OutputParam", });
        internal_static_caffe_PReLUParameter_descriptor =
                getDescriptor().getMessageTypes().get(45);
        internal_static_caffe_PReLUParameter_fieldAccessorTable = new
                com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_caffe_PReLUParameter_descriptor,
                new java.lang.String[] { "Filler", "ChannelShared", });
    }

    // @@protoc_insertion_point(outer_class_scope)
}
