/// <summary>
        /// Construct a Manhattan propagation training object.
        /// </summary>
        /// <param name="network">The network to train.</param>
        /// <param name="training">The training data to use.</param>
        /// <param name="profile">The learning rate.</param>
        /// <param name="learnRate">The OpenCL profile to use, null for CPU.</param>
        public ManhattanPropagation(BasicNetwork network,
                                    INeuralDataSet training, OpenCLTrainingProfile profile, double learnRate)
            : base(network, training)
        {
            if (profile == null)
            {
                FlatTraining = new TrainFlatNetworkManhattan(
                    network.Structure.Flat,
                    this.Training,
                    learnRate);
            }
#if !SILVERLIGHT
            else
            {
                TrainFlatNetworkOpenCL rpropFlat = new TrainFlatNetworkOpenCL(
                    network.Structure.Flat, this.Training,
                    profile);
                rpropFlat.LearnManhattan(learnRate);
                this.FlatTraining = rpropFlat;
            }
#endif
        }
 /// <summary>
 /// Construct a Manhattan propagation training object.
 /// </summary>
 ///
 /// <param name="network">The network to train.</param>
 /// <param name="training">The training data to use.</param>
 /// <param name="learnRate">The learning rate.</param>
 public ManhattanPropagation(IContainsFlat network,
                             IMLDataSet training, double learnRate) : base(network, training)
 {
     FlatTraining = new TrainFlatNetworkManhattan(network.Flat,
                                                  Training, learnRate);
 }