/** @copydoc LayerParameterBase::Load */
        public override object Load(System.IO.BinaryReader br, bool bNewInstance = true)
        {
            RawProto proto            = RawProto.Parse(br.ReadString());
            DataNormalizerParameter p = FromProto(proto);

            if (!bNewInstance)
            {
                Copy(p);
            }

            return(p);
        }
        /// <summary>
        /// Parses the parameter from a RawProto.
        /// </summary>
        /// <param name="rp">Specifies the RawProto to parse.</param>
        /// <param name="p">Optionally, specifies an instance to load.  If <i>null</i>, a new instance is created and loaded.</param>
        /// <returns>A new instance of the parameter is returned.</returns>
        public static DataNormalizerParameter FromProto(RawProto rp, DataNormalizerParameter p = null)
        {
            string strVal;

            if (p == null)
            {
                p = new DataNormalizerParameter();
            }

            List <string> rgstrStep = rp.FindArray <string>("step");

            p.steps = new List <NORMALIZATION_STEP>();

            foreach (string strStep in rgstrStep)
            {
                p.steps.Add(convertStep(strStep));
            }

            if ((strVal = rp.FindValue("across_data_and_label")) != null)
            {
                p.across_data_and_label = bool.Parse(strVal);
            }

            p.ignore_channels = rp.FindArray <int>("ignore_ch");

            if ((strVal = rp.FindValue("input_min")) != null)
            {
                p.input_min = ParseDouble(strVal);
            }

            if ((strVal = rp.FindValue("input_max")) != null)
            {
                p.input_max = ParseDouble(strVal);
            }

            if ((strVal = rp.FindValue("output_min")) != null)
            {
                p.output_min = ParseDouble(strVal);
            }

            if ((strVal = rp.FindValue("output_max")) != null)
            {
                p.output_max = ParseDouble(strVal);
            }

            if ((strVal = rp.FindValue("input_mean")) != null)
            {
                p.input_mean = ParseDouble(strVal);
            }
            else
            {
                p.input_mean = null;
            }

            if ((strVal = rp.FindValue("input_stdev")) != null)
            {
                p.input_stdev = ParseDouble(strVal);
            }
            else
            {
                p.input_stdev = null;
            }

            if ((strVal = rp.FindValue("label_data_channel")) != null)
            {
                p.label_data_channel = int.Parse(strVal);
            }
            else
            {
                p.label_data_channel = null;
            }

            return(p);
        }
 /** @copydoc LayerParameterBase::Copy */
 public override void Copy(LayerParameterBase src)
 {
     DataNormalizerParameter p = (DataNormalizerParameter)src;
 }