成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

手把手教你用Python創(chuàng)建簡單的神經(jīng)網(wǎng)絡(luò)(附代碼)

人工智能 深度學(xué)習(xí) 后端
了解神經(jīng)網(wǎng)絡(luò)工作方式的最佳途徑莫過于親自創(chuàng)建一個神經(jīng)網(wǎng)絡(luò),本文將演示如何做到這一點。

 [[251984]]

了解神經(jīng)網(wǎng)絡(luò)工作方式的***途徑莫過于親自創(chuàng)建一個神經(jīng)網(wǎng)絡(luò),本文將演示如何做到這一點。

神經(jīng)網(wǎng)絡(luò)(NN)又稱人工神經(jīng)網(wǎng)絡(luò)(ANN),是機器學(xué)習(xí)領(lǐng)域中基于生物神經(jīng)網(wǎng)絡(luò)概念的學(xué)習(xí)算法的一個子集。

擁有五年以上經(jīng)驗的德國機器學(xué)習(xí)專家Andrey Bulezyuk聲稱:“神經(jīng)網(wǎng)絡(luò)正在徹底改變機器學(xué)習(xí),因為它們能夠在廣泛的學(xué)科和行業(yè)中為抽象對象高效建模。”

人工神經(jīng)網(wǎng)絡(luò)基本上由以下組件組成:

  •  輸入層:接收并傳遞數(shù)據(jù)
  •  隱藏層
  •  輸出層
  •  各層之間的權(quán)重
  •  每個隱藏層都有一個激活函數(shù)。在這個簡單的神經(jīng)網(wǎng)絡(luò)Python教程中,我們將使用Sigmoid激活函數(shù)。

神經(jīng)網(wǎng)絡(luò)有多種類型。在本項目中,我們將創(chuàng)建前饋或感知神經(jīng)網(wǎng)絡(luò)。這種類型的ANN直接將數(shù)據(jù)從前向后傳遞。

前饋神經(jīng)元的訓(xùn)練往往需要反向傳播,它為網(wǎng)絡(luò)提供了相應(yīng)的輸入和輸出集。當(dāng)輸入數(shù)據(jù)被傳送到神經(jīng)元時,經(jīng)過處理后,產(chǎn)生一個輸出。

下面的圖表顯示了一個簡單的神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu):

了解神經(jīng)網(wǎng)絡(luò)如何工作的***方法是學(xué)習(xí)如何從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)(而不是采用任何庫)。

在本文中,我們將演示如何利用Python編程語言創(chuàng)建一個簡單的神經(jīng)網(wǎng)絡(luò)。

問題

如下是一個展示問題的表格。

我們將提供一個新的數(shù)據(jù)集,利用它訓(xùn)練神經(jīng)網(wǎng)絡(luò),從而能夠預(yù)測正確的輸出值。

正如上表所示,輸出值總是等于輸入部分中的***個值。因此,我們期望輸出的值為1。

讓我們看看是否可以使用Python代碼來得出相同的結(jié)果(你可以在本文末尾仔細(xì)閱讀這個項目的代碼,然后再繼續(xù)閱讀本文)。

創(chuàng)建一個NeuralNetwork類

我們將用Python創(chuàng)建一個NeuralNetwork類來訓(xùn)練神經(jīng)元,以期給出準(zhǔn)確的預(yù)測。這個類還會有其他的幫助函數(shù)。

即使我們不會在這個簡單的神經(jīng)網(wǎng)絡(luò)示例中使用神經(jīng)網(wǎng)絡(luò)庫,我們也將導(dǎo)入numpy庫來輔助計算。

numpy庫提供了以下四種重要方法:

  •  exp—用于生成自然指數(shù)
  •  array—用于生成矩陣
  •  dot—用于矩陣相乘
  •  random—用于生成隨機數(shù)。請注意,我們將生成隨機數(shù),以確保它們的有效分布。

1. 應(yīng)用Sigmoid函數(shù)

我們將使用Sigmoid函數(shù),來繪制一個特征“S”型曲線,作為神經(jīng)網(wǎng)絡(luò)的激活函數(shù)。

此函數(shù)可以將任何值映射到0到1之間的值,它將有助于我們對輸入的加權(quán)和歸一化。

此后,我們將創(chuàng)建Sigmoid函數(shù)的導(dǎo)數(shù),以幫助計算權(quán)重的調(diào)整參數(shù)。

可以利用Sigmoid函數(shù)的輸出來生成它的導(dǎo)數(shù)。例如,如果輸出變量為“x”,則其導(dǎo)數(shù)為x*(1-x)。

2. 訓(xùn)練模型

這是我們教神經(jīng)網(wǎng)絡(luò)做出準(zhǔn)確預(yù)測的階段。每個輸入都有一個權(quán)重-可為正值或負(fù)值。這意味著:有較大的正權(quán)重或負(fù)權(quán)重的輸入會對結(jié)果的輸出產(chǎn)生更大的影響。請記住,我們最初是通過為每個隨機數(shù)分配一個權(quán)重后開始的。

下面是這個神經(jīng)網(wǎng)絡(luò)示例的訓(xùn)練過程:

***步:從訓(xùn)練數(shù)據(jù)集中提取輸入,根據(jù)訓(xùn)練數(shù)據(jù)集的權(quán)重進行調(diào)整,并通過一種計算神經(jīng)網(wǎng)絡(luò)輸出的方法對其進行篩選。

第二步:計算反向傳播錯誤率。在這種情況下,它是神經(jīng)元的預(yù)測輸出與訓(xùn)練數(shù)據(jù)集的期望輸出之間的差異。

第三步:利用誤差加權(quán)導(dǎo)數(shù)公式,根據(jù)所得到的誤差范圍,進行了一些較小的權(quán)值調(diào)整。

第四步:對這一過程進行15000次迭代。在每次迭代中,整個訓(xùn)練集被同時處理。

我們使用“.T”函數(shù)將矩陣從水平位置轉(zhuǎn)換為垂直位置。因此,數(shù)字將以如下方式存儲: 

最終,神經(jīng)元的權(quán)重將根據(jù)所提供的訓(xùn)練數(shù)據(jù)進行優(yōu)化。隨后,如果讓神經(jīng)元考慮一個新的狀態(tài),與先前的狀態(tài)相同,它便可以作出一個準(zhǔn)確的預(yù)測。這就是反向傳播的方式。

打包運行

***,NeuralNetwork類初始化成功后,可以運行代碼了。

下面是如何在Python項目中創(chuàng)建神經(jīng)網(wǎng)絡(luò)的完整代碼:   

  1. import numpy as np   
  2.     class NeuralNetwork():     
  3.         def __init__(self):  
  4.             # seeding for random number generation  
  5.             np.random.seed(1)    
  6.             #converting weights to a 3 by 1 matrix with values from -1 to 1 and mean of 0  
  7.             self.synaptic_weights = 2 * np.random.random((3, 1)) - 1     
  8.         def sigmoid(self, x):  
  9.             #applying the sigmoid function  
  10.             return 1 / (1 + np.exp(-x))    
  11.         def sigmoid_derivative(self, x):  
  12.             #computing derivative to the Sigmoid function  
  13.             return x * (1 - x)     
  14.         def train(self, training_inputs, training_outputs, training_iterations):      
  15.             #training the model to make accurate predictions while adjusting weights continually  
  16.             for iteration in range(training_iterations):  
  17.                 #siphon the training data via  the neuron  
  18.                 output = self.think(training_inputs)     
  19.                 #computing error rate for back-propagation  
  20.                 error = training_outputs - output    
  21.                 #performing weight adjustments  
  22.                 adjustments = np.dot(training_inputs.T, error * self.sigmoid_derivative(output))    
  23.                 self.synaptic_weights += adjustments     
  24.         def think(self, inputs):  
  25.             #passing the inputs via the neuron to get output     
  26.             #converting values to floats   
  27.             inputsinputs = inputs.astype(float)  
  28.             output = self.sigmoid(np.dot(inputs, self.synaptic_weights))  
  29.             return output  
  30.     if __name__ == "__main__":  
  31.         #initializing the neuron class  
  32.         neural_network = NeuralNetwork()  
  33.         print("Beginning Randomly Generated Weights: ")  
  34.         print(neural_network.synaptic_weights)  
  35.         #training data consisting of 4 examples--3 input values and 1 output  
  36.         training_inputs = np.array([[0,0,1],  
  37.                                     [1,1,1],  
  38.                                     [1,0,1],  
  39.                                     [0,1,1]])  
  40.         training_outputs = np.array([[0,1,1,0]]).T  
  41.         #training taking place  
  42.         neural_network.train(training_inputs, training_outputs, 15000)     
  43.         print("Ending Weights After Training: ")  
  44.         print(neural_network.synaptic_weights)     
  45.         user_input_one = str(input("User Input One: "))  
  46.         user_input_two = str(input("User Input Two: "))  
  47.         user_input_three = str(input("User Input Three: "))   
  48.         print("Considering New Situation: ", user_input_one, user_input_two, user_input_three)  
  49.         print("New Output data: ")  
  50.         print(neural_network.think(np.array([user_input_one, user_input_two, user_input_three])))  
  51.     print("Wow, we did it!") 

運行代碼之后的輸出: 

這樣,我們便成功地創(chuàng)建了一個簡單的神經(jīng)網(wǎng)絡(luò)。

神經(jīng)元首先給自己分配一些隨機權(quán)重,接著,利用訓(xùn)練實例進行了自我訓(xùn)練。

之后,如果出現(xiàn)新的狀態(tài)[1,0,0],則它得出的數(shù)值為0.9999584。

還記得我們想要的正確答案是1嗎?

這個數(shù)值非常接近,Sigmoid函數(shù)輸出值在0到1之間。 

當(dāng)然,在這個例子中,我們只使用一個神經(jīng)元網(wǎng)絡(luò)來完成簡單的任務(wù)。如果我們把幾千個人工神經(jīng)網(wǎng)絡(luò)連接在一起,情況將會是怎樣呢?我們能不能完全模仿人類的思維方式呢? 

責(zé)任編輯:龐桂玉 來源: THU數(shù)據(jù)派
相關(guān)推薦

2021-08-09 13:31:25

PythonExcel代碼

2022-10-19 14:30:59

2017-06-23 19:08:23

大數(shù)據(jù)PyTorch自然語言

2021-02-02 13:31:35

Pycharm系統(tǒng)技巧Python

2021-12-11 20:20:19

Python算法線性

2021-05-10 06:48:11

Python騰訊招聘

2021-01-30 10:37:18

ScrapyGerapy網(wǎng)絡(luò)爬蟲

2017-10-29 21:43:25

人臉識別

2022-08-04 10:39:23

Jenkins集成CD

2011-03-28 16:14:38

jQuery

2021-02-04 09:00:57

SQLDjango原生

2021-02-06 14:55:05

大數(shù)據(jù)pandas數(shù)據(jù)分析

2009-04-22 09:17:19

LINQSQL基礎(chǔ)

2021-04-01 09:02:38

Python小說下載網(wǎng)絡(luò)爬蟲

2021-05-17 21:30:06

Python求均值中值

2021-02-10 09:34:40

Python文件的壓縮PyCharm

2021-03-23 09:05:52

PythonExcelVlookup

2012-01-11 13:40:35

移動應(yīng)用云服務(wù)

2021-08-02 23:15:20

Pandas數(shù)據(jù)采集

2020-03-08 22:06:16

Python數(shù)據(jù)IP
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲一区二区视频在线播放 | 亚洲在线 | 欧美精三区欧美精三区 | 99国产精品久久久 | 欧美久久电影 | 白浆在线 | 日本亚洲欧美 | 最新高清无码专区 | 国产精品不卡一区二区三区 | 欧美国产日韩在线 | 日韩亚洲视频 | 欧美老少妇一级特黄一片 | 久久精品久久久久久 | 女同久久另类99精品国产 | 欧美 日韩 在线播放 | 国产乱码精品1区2区3区 | 成人h电影在线观看 | 亚洲36d大奶网 | 日韩欧美在线一区 | 久久er99热精品一区二区 | 激情五月综合网 | 日韩视频一区二区 | 农村妇女毛片精品久久久 | 粉嫩粉嫩芽的虎白女18在线视频 | 国产免费观看久久黄av片涩av | 91精品国产色综合久久不卡蜜臀 | 亚洲精品9999 | 91久久 | 麻豆a级片| 狠狠热视频 | 国产91在线播放 | 请别相信他免费喜剧电影在线观看 | 中文字幕精品一区二区三区精品 | 天天曰夜夜操 | 欧美精品久久久久 | 日韩欧美三级在线 | 久久精品欧美一区二区三区麻豆 | 伊人影院在线观看 | 高清视频一区二区三区 | av片免费观看 | 亚洲97|