亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? neuralnet.cs

?? 設置字體的顏色以和字體的樣式,如果有什么錯誤請你們多多指教,請請在家了!
?? CS
字號:
using System;
using System.Collections.Generic;
using System.Text;

namespace ValidationCode
{
    public class NeuralNet
    {
        //相關系數
        const double momentum = 0;
        //最小均方誤差
        const double minex = 0.001;
        //BP網絡隱層結點的數目
        const int hidden = 10;
        //訓練步長
        const double eta = 0.015;
        //網絡輸出層結點的個數
        const int output = 4;
        //輸入層結點個數,,待識別圖片的像素點個數
        const int input = 156;


        //理想輸出模板
        static double[] output0 = { 0.1, 0.1, 0.1, 0.1 };
        static double[] output1 = { 0.1, 0.1, 0.1, 0.9 };
        static double[] output2 = { 0.1, 0.1, 0.9, 0.1 };
        static double[] output3 = { 0.1, 0.1, 0.9, 0.9 };
        static double[] output4 = { 0.1, 0.9, 0.1, 0.1 };
        static double[] output5 = { 0.1, 0.9, 0.1, 0.9 };
        static double[] output6 = { 0.1, 0.9, 0.9, 0.1 };
        static double[] output7 = { 0.1, 0.9, 0.9, 0.9 };
        static double[] output8 = { 0.9, 0.1, 0.1, 0.1 };
        static double[] output9 = { 0.9, 0.1, 0.1, 0.9 };

        static double[][] outnumber = { output0, output1, output2, output3, output4, output5, output6, output7, output8, output9 };

        //指向輸入層于隱層之間權值的指針
        static double[][] input_weights;
        //指向隱層與輸出層之間的權值的指針
        static double[][] hidden_weights;
        //指向上一此輸入層于隱層之間權值的指針
        static double[][] input_prev_weights;
        //指向上一此隱層與輸出層之間的權值的指針
        static double[][] hidden_prev_weights;

        static NeuralNet()
        {
            ran = new Random();
            input_weights = new double[input + 1][];
            hidden_weights = new double[hidden + 1][];
            input_prev_weights = new double[input + 1][];
            hidden_prev_weights = new double[hidden + 1][];

            //對各種權值進行初始化            
            randomize_weights(input_weights, input, hidden);
            randomize_weights(hidden_weights, hidden, output);
            zero_weights(input_prev_weights, input, hidden);
            zero_weights(hidden_prev_weights, hidden, output);
        }



        static double squash(double x)
        {
            return (1.0 / (1.0 + Math.Exp(-x)));
        }

        //生成-1~1的隨機數
        static Random ran;
        static double getrandom()
        {
            double a = ran.NextDouble();
            double b = ran.NextDouble();
            return a - b;
        }

        /// <summary>
        /// 隨機初始化權值
        /// </summary>
        /// <param name="w"></param>
        /// <param name="m"></param>
        /// <param name="n"></param>
        static void randomize_weights(double[][] w, int m, int n)
        {
            for (int i = 0; i <= m; i++)
            {
                double[] temp = new double[n + 1];
                for (int j = 0; j <= n; j++)
                    temp[j] = getrandom();
                w[i] = temp;
            }
        }
        /// <summary>
        /// 0初始化權值
        /// </summary>
        /// <param name="?"></param>
        /// <param name="m"></param>
        /// <param name="n"></param>
        static void zero_weights(double[][] w, int m, int n)
        {
            for (int i = 0; i <= m; i++)
            {
                double[] temp = new double[n + 1];
                for (int j = 0; j <= n; j++)
                    temp[j] = 0.0;
                w[i] = temp;
            }
        }

        /// <summary>
        /// 前向傳輸
        /// </summary>
        /// <param name="l1"></param>
        /// <param name="l2"></param>
        /// <param name="conn"></param>
        /// <param name="n1"></param>
        /// <param name="n2"></param>
        static void LayerForward(double[] curr, double[] next, double[][] weights, int n1, int n2)
        {
            double sum;
            /*** 設置偏置對應輸入層值 ***/
            curr[0] = 1.0;
            /*** 對于第二層的每個神經元 ***/
            for (int j = 1; j <= n2; j++)
            {
                /*** 計算輸入的加權總和 ***/
                sum = 0.0;
                for (int k = 0; k <= n1; k++)
                    sum += weights[k][j] * curr[k];
                next[j] = squash(sum);
            }
        }

        /// <summary>
        /// 輸出誤差
        /// </summary>
        /// <param name="delta"></param>
        /// <param name="target"></param>
        /// <param name="output"></param>
        /// <param name="nj"></param>
        static void OutputError(double[] delta, double[] target, double[] output, int nj)
        {
            double o, t;
            for (int j = 1; j <= nj; j++)
            {
                o = output[j];
                t = target[j];
                delta[j] = o * (1.0 - o) * (t - o);
            }
        }

        /// <summary>
        /// 隱含層誤差
        /// </summary>
        /// <param name="delta_h"></param>
        /// <param name="nh"></param>
        /// <param name="delta_o"></param>
        /// <param name="no"></param>
        /// <param name="who"></param>
        /// <param name="hidden"></param>
        static void HiddenError(double[] delta_h, int nh, double[] delta_o, int no, double[][] weights, double[] hidden)
        {
            double h, sum;
            for (int j = 1; j <= nh; j++)
            {
                h = hidden[j];
                sum = 0.0;
                for (int k = 1; k <= no; k++)
                    sum += delta_o[k] * weights[j][k];
                delta_h[j] = h * (1.0 - h) * sum;
            }
        }



        /* 調整權值 */
        static void AdjustWeights(double[] delta, int ndelta, double[] ly, int nly, double[][] w, double[][] oldw, double eta, double momentum)
        {
            double new_dw;
            ly[0] = 1.0;
            for (int j = 1; j <= ndelta; j++)
            {
                for (int k = 0; k <= nly; k++)
                {
                    new_dw = ((eta * delta[j] * ly[k]) + (momentum * oldw[k][j]));
                    w[k][j] += new_dw;
                    oldw[k][j] = new_dw;
                }
            }
        }

        /// <summary>
        /// 根據輸入的特征向量和期望的理想輸出向量對BP網絡盡行訓練,訓練結束后將權值保存
        /// </summary>
        /// <param name="data_in">輸入的特征向量</param>
        /// <param name="data_out">理想輸出特征向量</param>
        public static bool Train(List<List<double>> data_in, List<int> data_out)
        {
            //循環變量
            int i, l, k, flag;
            //指向輸入層數據的指針
            double[] input_layer = new double[input + 1];
            //指向隱層數據的指針
            double[] hidden_layer = new double[input + 1];
            //指向輸出層數據的指針
            double[] output_layer = new double[hidden + 1];
            //指向隱層誤差數據的指針
            double[] hidden_deltas = new double[hidden + 1];
            //指向輸出層誤差數劇的指針
            double[] output_deltas = new double[output + 1];
            //指向理想目標輸出的指針
            double[] target = new double[output + 1];
            //每次循環后的均方誤差誤差值 
            double ex = double.MaxValue;

            //開始進行BP網絡訓練
            //這里設定最大的迭代次數為15000次
            for (l = 0; l < 15000; l++)
            {
                //對均方誤差置零
                ex = 0;
                for (k = 0; k < data_in.Count; k++)
                {
                    //將提取的樣本的特征向量輸送到輸入層上
                    for (i = 1; i <= input; i++)
                        input_layer[i] = data_in[k][i - 1];

                    flag = data_out[k];
                    //將預定的理想輸出輸送到BP網絡的理想輸出單元
                    for (i = 1; i <= output; i++)
                        target[i] = outnumber[flag][i - 1];

                    //前向傳輸激活
                    //將數據由輸入層傳到隱層 
                    LayerForward(input_layer, hidden_layer, input_weights, input, hidden);
                    //將隱層的輸出傳到輸出層
                    LayerForward(hidden_layer, output_layer, hidden_weights, hidden, output);
                    //誤差計算
                    //將輸出層的輸出與理想輸出比較計算輸出層每個結點上的誤差
                    OutputError(output_deltas, target, output_layer, output);
                    //根據輸出層結點上的誤差計算隱層每個節點上的誤差
                    HiddenError(hidden_deltas, hidden, output_deltas, output, hidden_weights, hidden_layer);
                    //權值調整
                    //根據輸出層每個節點上的誤差來調整隱層與輸出層之間的權值
                    AdjustWeights(output_deltas, output, hidden_layer, hidden, hidden_weights, hidden_prev_weights, eta, momentum);
                    //根據隱層每個節點上的誤差來調整隱層與輸入層之間的權值    	
                    AdjustWeights(hidden_deltas, hidden, input_layer, input, input_weights, input_prev_weights, eta, momentum);
                    //誤差統計
                    for (i = 1; i <= output; i++)
                        ex = (output_layer[i] - outnumber[flag][i - 1]) * (output_layer[i] - outnumber[flag][i - 1]);
                }
                ex = ex / Convert.ToDouble(data_in.Count*output);
                if (ex < minex) break;
            }

            if (ex <= minex)
                return true;
            else
                return false;
        }

        ///<summary>
        ///讀入輸入樣本的特征相量并根據訓練所得的權值,進行識別
        ///</summary>
        ///<param name="data_in"></param>
        public static int Recognize(List<double> data_in)
        {
            int i, result;

            result = 0;
            //指向輸入層數據的指針
            double[] input_layer = new double[input + 1];
            //指向隱層數據的指針
            double[] hidden_layer = new double[input + 1];
            //指向輸出層數據的指針
            double[] output_layer = new double[hidden + 1];


            //將提取的樣本的特征向量輸送到輸入層上
            for (i = 1; i <= input; i++)
                input_layer[i] = data_in[i - 1];

            //前向輸入激活
            LayerForward(input_layer, hidden_layer, input_weights, input, hidden);
            LayerForward(hidden_layer, output_layer, hidden_weights, hidden, output);

            //考察每一位的輸出
            //如果大于0.5判為1
            for (i = 1; i <= output; i++)
            {
                if (output_layer[i] > 0.5)
                    result += (int)Math.Pow(2, Convert.ToDouble(4 - i));
            }
            return result;
        }

    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一二三区不卡| 日本高清免费不卡视频| 91精品国产欧美一区二区18| 亚洲成av人片一区二区梦乃| 91精品黄色片免费大全| 精品一区中文字幕| 亚洲精品中文在线观看| 欧美精品777| 国产99久久久国产精品潘金| 亚洲午夜羞羞片| 精品久久久久一区二区国产| 91亚洲国产成人精品一区二区三 | 欧美国产日韩在线观看| 日本二三区不卡| 蜜桃视频第一区免费观看| 一区免费观看视频| 91精品国产综合久久精品| 风间由美一区二区av101| 婷婷丁香激情综合| 亚洲丝袜自拍清纯另类| 日韩欧美电影一二三| 91原创在线视频| 美美哒免费高清在线观看视频一区二区| 国产亚洲欧美色| 欧美精品在线一区二区三区| 色综合天天综合网国产成人综合天 | 91色视频在线| 国产一区二三区好的| 亚洲精选视频在线| 久久精品欧美一区二区三区麻豆| 欧美在线不卡视频| 99久久er热在这里只有精品15 | 狠狠v欧美v日韩v亚洲ⅴ| 亚洲国产精品欧美一二99| 欧美国产精品一区二区三区| 精品久久五月天| 欧美一级片在线观看| 91高清在线观看| 99久久综合色| av一本久道久久综合久久鬼色| 国产成人在线网站| 国产成a人亚洲精| 国产老肥熟一区二区三区| 久久成人免费网| 捆绑调教一区二区三区| 蜜桃av一区二区在线观看| 天天操天天色综合| 亚洲第一成人在线| 天堂一区二区在线| 日本三级亚洲精品| 视频一区视频二区中文字幕| 亚洲va中文字幕| 亚洲电影在线免费观看| 一区二区三区日韩欧美| 亚洲精品v日韩精品| 一个色妞综合视频在线观看| 亚洲欧美电影一区二区| 亚洲一区二区三区精品在线| 亚洲视频在线一区二区| 欧美国产精品v| 中文字幕一区二区三区在线观看 | 中文字幕一区二区三区精华液 | 亚洲精品欧美专区| 亚洲乱码国产乱码精品精98午夜| 最新热久久免费视频| 曰韩精品一区二区| 午夜国产精品影院在线观看| 日韩**一区毛片| 日韩电影免费一区| 国产精品一区二区在线观看网站 | 欧美专区日韩专区| 欧美人与z0zoxxxx视频| 日韩欧美一区二区久久婷婷| 国产亚洲综合av| 伊人性伊人情综合网| 五月综合激情日本mⅴ| 免费视频最近日韩| 成人激情av网| 欧美在线视频你懂得| 日韩精品一区二区在线| 国产欧美一区二区在线| 亚洲欧美区自拍先锋| 美女脱光内衣内裤视频久久网站| 精品亚洲aⅴ乱码一区二区三区| 国产成人一级电影| 欧美日本韩国一区二区三区视频 | 国产精品18久久久久久久久久久久 | 国产蜜臀97一区二区三区| ●精品国产综合乱码久久久久 | 久久久精品黄色| 亚洲免费伊人电影| 蜜桃视频一区二区| 91在线精品一区二区三区| 精品视频免费看| 欧美精品一区二区三区在线| 国产精品久久久久久亚洲伦 | 欧美一区二区免费视频| 久久久久97国产精华液好用吗| 亚洲欧美一区二区三区国产精品| 日韩电影在线看| 91在线porny国产在线看| 精品久久久久久久一区二区蜜臀| 一区二区免费视频| 岛国精品在线观看| 日韩精品一区二区三区视频在线观看| 亚洲美女一区二区三区| 成人动漫精品一区二区| 欧美一卡二卡在线观看| 一区二区在线免费| 成人av网站大全| 精品国产三级电影在线观看| 亚洲国产成人av网| 波多野洁衣一区| 久久精品视频在线看| 亚洲v日本v欧美v久久精品| eeuss鲁一区二区三区| 久久精品视频网| 久久99国产精品尤物| 欧美日韩国产片| 一区二区三区成人| 一本大道久久a久久综合| 欧美激情中文不卡| 国产成人精品免费| 久久久久久夜精品精品免费| 久草精品在线观看| 日韩视频123| 日本在线观看不卡视频| 欧美丰满嫩嫩电影| 日本麻豆一区二区三区视频| 日韩亚洲欧美高清| 久久99国内精品| 2023国产精品| 成人高清免费观看| 亚洲午夜私人影院| 欧美日韩一区二区三区四区五区| 亚洲一区二区三区视频在线| 欧美精品成人一区二区三区四区| 婷婷一区二区三区| 欧美第一区第二区| 国产成人精品影院| 亚洲精品福利视频网站| 欧美日韩国产成人在线91| 日韩av在线免费观看不卡| 欧美电视剧在线看免费| 成人免费精品视频| 亚洲国产欧美在线人成| 欧美成人a视频| 成人午夜激情片| 亚洲一区二区高清| 久久午夜免费电影| 色综合久久久久综合体桃花网| 一区二区三区成人| 欧美sm极限捆绑bd| 成人美女视频在线观看| 一区二区三区在线观看国产| 欧美日韩一区成人| 九九在线精品视频| 国产精品家庭影院| 欧美肥妇free| 国产成人免费在线视频| 亚洲天堂av一区| 91高清视频免费看| 经典一区二区三区| 成人免费一区二区三区视频| 欧美日韩三级一区| 久久99热国产| 亚洲欧美成aⅴ人在线观看| 欧美一区二区人人喊爽| 国产精品18久久久久久久久| 久久久777精品电影网影网| 91久久人澡人人添人人爽欧美| 六月丁香综合在线视频| 亚洲男帅同性gay1069| 欧美变态tickle挠乳网站| 99re这里只有精品首页| 久久精品国产成人一区二区三区 | 久久亚洲免费视频| 日本精品一区二区三区四区的功能| 麻豆91在线看| 亚洲一区影音先锋| 中文字幕一区二区在线播放| 日韩一区二区免费高清| 91亚洲精品一区二区乱码| 免费观看91视频大全| 又紧又大又爽精品一区二区| 国产欧美一区二区精品性色| 91精品国产色综合久久ai换脸| 99re成人在线| 国产 日韩 欧美大片| 国内精品免费在线观看| 亚洲国产精品影院| 欧美成人猛片aaaaaaa| 99re在线视频这里只有精品| 国产馆精品极品| 捆绑调教美女网站视频一区| 亚洲大片精品永久免费| 亚洲美女一区二区三区| 国产精品色噜噜| 久久精品日产第一区二区三区高清版| 欧美精品乱码久久久久久|