摘要:有研究證明,三層的人工神經(jīng)網(wǎng)絡(luò)可以模擬各種函數(shù)。三神經(jīng)網(wǎng)絡(luò)神經(jīng)網(wǎng)絡(luò)是一種按誤差反向傳播算法訓(xùn)練的多層前饋網(wǎng)絡(luò),是目前應(yīng)用最廣泛的神經(jīng)網(wǎng)絡(luò)模型之一。
一.閾值邏輯單元
閾值邏輯單元(threshold logic unit ,TLU),它可以輸入一組加權(quán)系數(shù)的量,對它們進(jìn)行求和,如果這個和達(dá)到或者超過了某個閾值,輸出一個量。例如,輸入為a1, a2, ..., an和權(quán)值 w1, w2,?..., wn。接著是求和計(jì)算出的 ai x wi?,產(chǎn)生了激發(fā)層 t,換一種方法表示: t = f((a1 x w1)+(a2 x w2)+...+(aI x wI)+...+ (an x wn)+b)
我理解的閾值邏輯單元就是用于解決多維線性加權(quán)求和問題的工具,那么遇到復(fù)雜問題該如何做呢?
二.人工神經(jīng)網(wǎng)絡(luò)
人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Networks,簡寫為ANNs)也簡稱為神經(jīng)網(wǎng)絡(luò)(NNs)或稱作連接模型(Connection Model),它是一種模仿動物神經(jīng)網(wǎng)絡(luò)行為特征,進(jìn)行分布式并行信息處理的算法數(shù)學(xué)模型。這種網(wǎng)絡(luò)依靠系統(tǒng)的復(fù)雜程度,通過調(diào)整內(nèi)部大量節(jié)點(diǎn)之間相互連接的關(guān)系,從而達(dá)到處理信息的目的。
通過將多個閾值邏輯單元組合,形成網(wǎng)絡(luò),用來模擬非線性的問題。有研究證明,三層的人工神經(jīng)網(wǎng)絡(luò)可以模擬各種函數(shù)。
三.BP神經(jīng)網(wǎng)絡(luò)
BP(Back Propagation)神經(jīng)網(wǎng)絡(luò)是一種按誤差反向傳播算法訓(xùn)練的多層前饋網(wǎng)絡(luò),是目前應(yīng)用最廣泛的神經(jīng)網(wǎng)絡(luò)模型之一。BP網(wǎng)絡(luò)能學(xué)習(xí)和存貯大量的輸入-輸出模式映射關(guān)系,而無需事前揭示描述這種映射關(guān)系的數(shù)學(xué)方程。它的學(xué)習(xí)規(guī)則是使用梯度下降法,通過反向傳播來不斷調(diào)整網(wǎng)絡(luò)的權(quán)值和閾值,使網(wǎng)絡(luò)的誤差平方和最小。 這里利用了偏導(dǎo)數(shù)的知識去推導(dǎo)計(jì)算公式,具體我沒有列出,我自己在理解的時候是讀了《人工智能》(機(jī)械工業(yè)出版社),感興趣的朋友可以自己看一下。 BP神經(jīng)網(wǎng)絡(luò)調(diào)整權(quán)值的過程更像是一種函數(shù)圖像逼近的過程,首先猜測一個函數(shù),然后讀入一個數(shù)據(jù)點(diǎn),根據(jù)數(shù)據(jù)點(diǎn)和函數(shù)圖像之間的差距調(diào)整函數(shù),使得函數(shù)圖像更符合數(shù)據(jù)。不斷迭代,使得整個數(shù)據(jù)樣本都較為符合我們估計(jì)得函數(shù)。
四.步驟:
1.對權(quán)系數(shù)置初值
2.輸入一組樣本及它的希望輸出
3.計(jì)算實(shí)際輸出值
4.計(jì)算誤差值
5.反向傳播誤差值并調(diào)整權(quán)值
6.不斷訓(xùn)練(重復(fù)步驟2~5)
7.利用完成后的神經(jīng)網(wǎng)絡(luò)進(jìn)行預(yù)測
五.Java代碼:
import java.io.File;
import java.io.RandomAccessFile;
import java.util.Random;
public class FaceRecognition {
private int picSize = 19 * 19;// 圖像大小 private int hiddenSize = 12;// 隱藏層節(jié)點(diǎn)個數(shù) private byte[] imageinfor = new byte[374];// 存放圖像信息 private double[] input = new double[picSize + 1];// 歸一化后的圖像信息 private double[][] inputWeight = new double[hiddenSize][picSize + 1];// 輸入層參數(shù) private double[] alpha1 = new double[hiddenSize];// 隱藏層調(diào)整的梯度 private double[] hiddenWeight = new double[hiddenSize + 1];// 隱藏層參數(shù) private double[] hiddenOutput = new double[hiddenSize + 1];// 隱藏層輸出 private double alpha2;// 輸出層調(diào)整的梯度 private double output;// 輸出層 private double ci = 0.3;// 學(xué)習(xí)率 private double opt;// 期望輸出 Random random = new Random(); private double [] pro; public FaceRecognition() { } // 初始化 public void init() { for (int i = 0; i < hiddenSize; i++) { for (int j = 0; j < picSize + 1; j++) inputWeight[i][j] = random.nextDouble() * 2 - 1; // inputWeight[i][j] =0; } for (int i = 0; i < hiddenSize + 1; i++) { hiddenWeight[i] = random.nextDouble() * 2 - 1; // hiddenWeight[i]=0; } } // sigmoid private double Sigmoid(double x) { return 1.0d / (1.0d + Math.exp(-x)); } // 圖像文件讀入 public void PGMReader(String filename) { File file = new File(filename); try { RandomAccessFile in = new RandomAccessFile(file, "r"); in.read(imageinfor); in.close(); } catch (Exception e) { e.printStackTrace(); } for (int i = 0; i < picSize; i++) { int temp = (int) imageinfor[i + 13]; input[i] = (double) (temp + 128) / 255; } input[picSize] = 1.0; } public void PGMReader(File file) { try { RandomAccessFile in = new RandomAccessFile(file, "r"); in.read(imageinfor); in.close(); } catch (Exception e) { e.printStackTrace(); } for (int i = 0; i < picSize; i++) { int temp = (int) imageinfor[i + 13]; input[i] = (double) (temp + 128) / 255; } input[picSize] = 1.0; } public void setOpt(double opt) { this.opt = opt; } private void forward() { for (int i = 0; i < hiddenSize; i++) { double temp = 0; for (int j = 0; j < picSize + 1; j++) { temp += input[j] * inputWeight[i][j]; } hiddenOutput[i] = Sigmoid(temp); } hiddenOutput[hiddenSize] = 1.0; double temp = 0; for (int i = 0; i < hiddenSize + 1; i++) { temp += hiddenOutput[i] * hiddenWeight[i]; } output = Sigmoid(temp); } public void BP() { // 計(jì)算各層的梯度 alpha2 = (opt - output) * output * (1 - output); for (int i = 0; i < hiddenSize; i++) { alpha1[i] = hiddenOutput[i] * (1 - hiddenOutput[i]) * alpha2 * hiddenWeight[i]; } // 反向傳播 for (int i = 0; i < hiddenSize; i++) { hiddenWeight[i] += ((hiddenOutput[i] * alpha2 * ci) ); for (int j = 0; j < picSize + 1; j++) { inputWeight[i][j] +=((input[j] * alpha1[i] * ci)); } } hiddenWeight[hiddenSize]+=(hiddenOutput[hiddenSize] * alpha2 * ci); } public void train() { String non_facePath = "D://人工智能//face.train//train//non-face"; File non_facFile = new File(non_facePath); File[] non_faceList = non_facFile.listFiles(); String facePath = "D://人工智能//face.train//train/face"; File faceFile = new File(facePath); File[] faceList = faceFile.listFiles(); init(); pro =new double [151]; for(int i =0;i<151;i++){ int right = 0; int facenumber =0; int nonfacenumber =0; for (int j = 0; j < 4000; j++) { int temp = random.nextInt(); if(temp%2 ==0) { // 正例訓(xùn)練 this.setOpt(1.0); this.PGMReader(faceList[facenumber]); this.forward(); this.BP(); facenumber++; } else{ // 反例訓(xùn)練 this.setOpt(0.0); this.PGMReader(non_faceList[nonfacenumber]); this.forward(); this.BP(); nonfacenumber++; } } for (int j = 2000; j <2400; j++) { { // 正例測試 this.PGMReader(faceList[j]); this.forward(); if (output > 0.5) right++; } { // 反例測試 this.PGMReader(non_faceList[j]); this.forward(); if (output < 0.5) right++; } } pro[i] = (double) right / 800; if(i%10==0) { System.out.println("第"+i+"次迭代估算正確率為:" + pro[i]); } if(pro[i]>=0.95){ System.out.println("第"+i+"次迭代估算正確率為:" + pro[i]); break; } } }
}
這里我采用的數(shù)據(jù)的格式是PGM,19*19大小的,訓(xùn)練集一共有4800張,一半正例一半反例。
具體的實(shí)現(xiàn),我感覺代碼寫的比較清楚,我就不贅述了。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/19604.html
摘要:有研究證明,三層的人工神經(jīng)網(wǎng)絡(luò)可以模擬各種函數(shù)。三神經(jīng)網(wǎng)絡(luò)神經(jīng)網(wǎng)絡(luò)是一種按誤差反向傳播算法訓(xùn)練的多層前饋網(wǎng)絡(luò),是目前應(yīng)用最廣泛的神經(jīng)網(wǎng)絡(luò)模型之一。 一.閾值邏輯單元 閾值邏輯單元(threshold logic unit ,TLU),它可以輸入一組加權(quán)系數(shù)的量,對它們進(jìn)行求和,如果這個和達(dá)到或者超過了某個閾值,輸出一個量。例如,輸入為a1, a2, ..., an和權(quán)值 w1, w2...
摘要:據(jù)悉,上海的人工智能和物聯(lián)網(wǎng)實(shí)驗(yàn)室是微軟全球的第四個實(shí)驗(yàn)室。微軟實(shí)驗(yàn)室致力于為來自各個行業(yè)的企業(yè)創(chuàng)造價值,全球已累計(jì)服務(wù)企業(yè)余個,超過半數(shù)的企業(yè)有多個項(xiàng)目在不同時段獲得了微軟實(shí)驗(yàn)室的指導(dǎo)。 showImg(https://segmentfault.com/img/bVbrOPB?w=1280&h=719);在過去的兩周,RuffChain 完成了測試網(wǎng)絡(luò)的代碼審計(jì)工作,目前正在進(jìn)行主網(wǎng)...
摘要:近幾年以卷積神經(jīng)網(wǎng)絡(luò)有什么問題為主題做了多場報(bào)道,提出了他的計(jì)劃。最初提出就成為了人工智能火熱的研究方向。展現(xiàn)了和玻爾茲曼分布間驚人的聯(lián)系其在論文中多次稱,其背后的內(nèi)涵引人遐想。 Hinton 以深度學(xué)習(xí)之父 和 神經(jīng)網(wǎng)絡(luò)先驅(qū) 聞名于世,其對深度學(xué)習(xí)及神經(jīng)網(wǎng)絡(luò)的諸多核心算法和結(jié)構(gòu)(包括深度學(xué)習(xí)這個名稱本身,反向傳播算法,受限玻爾茲曼機(jī),深度置信網(wǎng)絡(luò),對比散度算法,ReLU激活單元,Dropo...
摘要:人臉識別技術(shù)所獨(dú)具的活性判別能力保證了他人無法以非活性的照片木偶蠟像來欺騙識別系統(tǒng)。人臉識別技術(shù)所采用的依據(jù)是人臉照片或?qū)崟r攝取的人臉圖像,因而無疑是最容易獲得的。 人臉識別是近年來模式識別、圖像處理、機(jī)器視覺、神經(jīng)網(wǎng)絡(luò)以及認(rèn)知科學(xué)等領(lǐng)域研究的熱點(diǎn)課題之一,被廣泛應(yīng)用于公共安全(罪犯識別等)...
閱讀 3361·2021-11-25 09:43
閱讀 3153·2021-10-11 10:58
閱讀 2757·2021-09-27 13:59
閱讀 3088·2021-09-24 09:55
閱讀 2179·2019-08-30 15:52
閱讀 1840·2019-08-30 14:03
閱讀 2267·2019-08-30 11:11
閱讀 2033·2019-08-28 18:12