通過前面兩講,大家已經學會安裝Visual Studio 2019編碼工具、創建WinForm應用程式。
C#與人工智慧(第1講)安裝C#編程環境
C#與人工智慧(第2講)創建WinForm程序
從本講開始,正式講述人工智慧編程。#人工智慧#
筆者不想講述太多理論,而是側重於實際應用開發。對理論感興趣的讀者,建議去參考書籍《神經網絡與機器學習》,這本書非常經典。
首先,按照《C#與人工智慧(第2講)創建WinForm程序》所述,創建一個Windows窗體應用項目。
然後,滑鼠右擊解決方案面板裡的項目名稱WindowsFormsApp3。從彈出菜單裡,選擇「管理NuGet程序包」。
在NuGet面板裡,左上角選擇【瀏覽】,右上角程序包源選擇【nuget org】。
在【搜索】位置,查找「Accord MachineLearning」。VS會去nuget org庫裡,搜索與您Net framework版本相匹配的Accord插件版本,並列舉出來。依次選擇Accord、Accord MachineLearning、Accord Neuro,逐個單擊右側【安裝】按鈕,完成所需插件的下載與安裝。
安裝完成後,向窗體面板裡,拖拽一個Button控制項,Text屬性改成:與運算。
雙擊【與運算】按鈕,編寫它的Click事件代碼。完整代碼如下:
using Accord.Neuro;
using Accord.Neuro.Learning;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp3 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) {
// 新建樣本數組
double[][] inputData = new double[4][]; // 輸入的數據
double[][] outputData = new double[4][]; // 輸出的數據
// 初始化樣本數組
// 在計算機裡,0表示假、非0表示真。
inputData[0] = new double[] { 0, 0 }; outputData[0] = new double[] { 0 }; // 輸入0與0,輸出0
inputData[1] = new double[] { 0, 1 }; outputData[1] = new double[] { 0 }; // 輸入0與1,輸出0
inputData[2] = new double[] { 1, 0 }; outputData[2] = new double[] { 0 }; // 輸入1與0,輸出0
inputData[3] = new double[] { 1, 1 }; outputData[3] = new double[] { 1 }; // 輸入1與1,輸出1
// 創建神經網絡
ActivationNetwork AN = new ActivationNetwork(new ThresholdFunction(), 2, 1);
// 選擇感知器類型的機器學習方法
PerceptronLearning PL = new PerceptronLearning(AN);
// 開始進行機器學習,訓練神經網絡
double error = 1.0; // 誤差
int iterations = 0; // 學習次數
while (error > 0.001) // 循環,直至誤差低於0.001
{
error = PL.RunEpoch(inputData, outputData); // 對同一樣本數組進行多次學習,直至誤差降至0.001以下
iterations++;
}
// 學習完畢。
// 開始識別陌生樣本(例程仍用同一樣本數組,實際使用中,此處輸入的是陌生的、待識別的樣本)。
// 由於與運算相對簡單,識別率都是100%
for (int k = 0; k < 4; k++)
{
Console.WriteLine(" 輸入陌生樣本: {1},{2} 識別與輸出: {3} ", k, inputData[k][0], inputData[k][1], AN.Compute(inputData[k])[0]);
}
}
}
}
編碼完成後,單擊上面的綠色右箭頭【啟動】,或按快捷鍵F5,運行程序。
單擊【與運算】按鈕。選擇菜單「視圖-輸出」,調出【輸出】面板。可以看到程序的運行結果。
通過這個簡單例子,可以了解到「神經網絡與機器學習」的應用原理:
【1】事先準備大量樣本庫,提取樣本特徵,組建inputData數組。樣本越多越好、質量越高越好。樣本特徵、樣本數、樣本質量直接決定了神經網絡的識別效果。其中,樣本特徵定義最重要。深度學習之所以成功,是它通過多層網絡等技術手段,自動提取樣本特徵!
【2】創建一個新的神經網絡,指定神經元數量。神經元越多,識別效果越好、運算性能越差。
【3】指定訓練神經網絡的方法,也就是機器學習的方法。方法種類很多,各具特色。身為程式設計師,必須通曉,然後根據項目特徵,選取最合適的那種。
【4】輸入樣本庫,多輪多次學習,訓練神經網絡,完善神經元之間的關聯,降低對樣本的識別誤差。對於海量樣本庫來講,比如手寫數字0-9的百萬樣本庫、自然語言處理的上億文本庫,切勿用自己的筆記本電腦去訓練!建議租用百度雲的一臺虛擬機,選擇圖形計算類型(GPU強悍),然後在虛擬機上安裝VS2019,搭建編碼環境,再用它去7x24小時地訓練神經網絡。
【5】使用訓練後的神經網絡,識別不在樣本庫裡的、陌生的樣本。