Beispiel #1
0
        protected void SaveError(Layer lyr)
        {
            bool convtype = lyr.GetType().ToString() == "AI.ML.CNN.Layers.Convolution" ? true : false;
            bool conctype = lyr.GetType().ToString() == "AI.ML.CNN.Layers.Connected" ? true : false;

            switch (convtype)
            {
            case true:
                Layers.Convolution        convLyr = (Layers.Convolution)lyr;
                Layers.Convolution.Kernel krn;
                for (int j = 0; j < convLyr.Filters.Count; j++)
                {
                    krn = (AI.ML.CNN.Layers.Convolution.Kernel)((AI.ML.CNN.Layers.Convolution.Filter)convLyr.Filters[j]).Kernels[0];
                    //bwc = (double?)krn.Element;
                    krn.Weights[0][0][2] += krn.WeightCorrection[0][0].Value;
                    // j: indexing filters
                    for (int k = 1; k < ((AI.ML.CNN.Layers.Convolution.Filter)convLyr.Filters[j]).Kernels.Length; k++)
                    {
                        //k: indexing kernels
                        krn = (AI.ML.CNN.Layers.Convolution.Kernel)((AI.ML.CNN.Layers.Convolution.Filter)convLyr.Filters[j]).Kernels[k];
                        for (int m = 0; m < krn.Weights.Length; m++)
                        {
                            for (int n = 0; n < krn.Weights.Length; n++)
                            {
                                krn.Weights[m][n][2] += krn.WeightCorrection[m][n].Value;
                            }
                        }
                    }
                }
                break;

            case false:
                switch (conctype)
                {
                case true:
                    Layers.Connected connLyr = (Layers.Connected)lyr;
                    Neuron           n; Synapse syn;
                    for (int j = 0; j < connLyr.Neurons.Length; j++)
                    {
                        n = connLyr.Neurons[j];
                        n.Synapse[0].Weights[2] += n.Synapse[0].dW.Value;
                        for (int k = 1; k < n.Synapse.Count; k++)
                        {
                            syn             = n.Synapse[k];
                            syn.Weights[2] += syn.dW.Value;
                        }
                    }
                    break;

                case false:
                    break;
                }
                break;

            default:
                break;
            }
        }
Beispiel #2
0
        protected void ClearError()
        {
            for (int i = 1; i < Model.Layers.Length; i++)
            {
                Model.Unit lyr;
                lyr = Model.Layers[i];
                bool convtype = lyr.GetType().ToString() == "AI.ML.CNN.Layers.Convolution" ? true : false;
                bool conctype = lyr.GetType().ToString() == "AI.ML.CNN.Layers.Connected" ? true : false;

                switch (convtype)
                {
                case true:
                    Layers.Convolution        convLyr = (Layers.Convolution)lyr;
                    Layers.Convolution.Kernel krn;
                    for (int j = 0; j < convLyr.Filters.Count; j++)
                    {
                        krn = (AI.ML.CNN.Layers.Convolution.Kernel)((AI.ML.CNN.Layers.Convolution.Filter)convLyr.Filters[j]).Kernels[0];
                        krn.Weights[0][0][2] = 0;
                        // j: indexing filters
                        for (int k = 1; k < ((AI.ML.CNN.Layers.Convolution.Filter)convLyr.Filters[j]).Kernels.Length; k++)
                        {
                            //k: indexing kernels
                            krn = (AI.ML.CNN.Layers.Convolution.Kernel)((AI.ML.CNN.Layers.Convolution.Filter)convLyr.Filters[j]).Kernels[k];
                            for (int m = 0; m < krn.Weights.Length; m++)
                            {
                                for (int n = 0; n < krn.Weights.Length; n++)
                                {
                                    krn.Weights[m][n][2] = 0;
                                }
                            }
                        }
                    }
                    break;

                case false:
                    switch (conctype)
                    {
                    case true:
                        Layers.Connected connLyr = (Layers.Connected)lyr;
                        Neuron           n; Synapse syn;
                        for (int j = 0; j < connLyr.Neurons.Length; j++)
                        {
                            n = connLyr.Neurons[j];
                            n.Synapse[0].Weights[2] = 0;
                            for (int k = 1; k < n.Synapse.Count; k++)
                            {
                                syn            = n.Synapse[k];
                                syn.Weights[2] = 0;
                            }
                        }
                        break;

                    case false:
                        break;
                    }
                    break;

                default:
                    break;
                }
            }
        }