日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

神经网络Python实现(9行代码)

發(fā)布時(shí)間:2023/12/20 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 神经网络Python实现(9行代码) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.?神經(jīng)網(wǎng)絡(luò)簡介

神經(jīng)網(wǎng)絡(luò)由輸入層、輸出層和之間若干層(一層或多層)隱含層構(gòu)成,每一層可以有若干個(gè)節(jié)點(diǎn)。層與層之間節(jié)點(diǎn)的連接狀態(tài)通過權(quán)重來體現(xiàn)

?下面介紹一下單個(gè)神經(jīng)元:

輸入節(jié)點(diǎn):x1,x2

權(quán)重:w1,w2

偏置:b

激活函數(shù):h()

輸出結(jié)果:y

a = x1*w1 + x2*w2 + b

?2. 代碼解釋

這段代碼是在GitHub上找到的,鏈接如下:

https://github.com/miloharper/simple-neural-network

作者這樣描述這段代碼:

A neural network written in Python, consisting of a single neuron that uses gradient descent to learn.

一種用Python編寫的神經(jīng)網(wǎng)絡(luò),它是由一個(gè)使用梯度下降學(xué)習(xí)的神經(jīng)元組成。

from numpy import exp, array, random, dot training_set_inputs = array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]]) training_set_outputs = array([[0, 1, 1, 0]]).T random.seed(1) synaptic_weights = 2 * random.random((3, 1)) - 1 for iteration in range(10000):output = 1 / (1 + exp(-(dot(training_set_inputs, synaptic_weights))))synaptic_weights += dot(training_set_inputs.T, (training_set_outputs - output) * output * (1 - output)) print( 1 / (1 + exp(-(dot(array([1, 0, 0]), synaptic_weights)))))

from numpy import exp, array, random, dot

#從Numpy庫中調(diào)用exp(指數(shù)函數(shù))、array(數(shù)組)、random(隨機(jī)函數(shù))、dot(矩陣相乘函數(shù))

training_set_inputs = array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]])

#神經(jīng)網(wǎng)絡(luò)訓(xùn)練部分的輸入

training_set_outputs = array([[0, 1, 1, 0]]).T

#神經(jīng)網(wǎng)絡(luò)訓(xùn)練部分的輸出,.T表示矩陣轉(zhuǎn)置

random.seed(1)

#使用隨機(jī)函數(shù)生成隨機(jī)數(shù)(這一行代碼可以省略,目的只是保證測(cè)試結(jié)果與作者一致)

synaptic_weights = 2 * random.random((3, 1)) 1

for iteration in range(10000):
? ?output = 1 / (1 + exp(-(dot(training_set_inputs, synaptic_weights))))

#使用for語句循環(huán)10000次,將訓(xùn)練集的輸入和權(quán)重采用.dot進(jìn)行矩陣相乘,將相乘得到的結(jié)果輸入到sigmoid函數(shù),然后將得到的結(jié)果賦值給output

?? synaptic_weights += dot(training_set_inputs.T, (training_set_outputs - output) * output * (1 - output))

#權(quán)重的調(diào)整采用“誤差加權(quán)導(dǎo)數(shù)”公式(梯度下降)

print (1 / (1 + exp(-(dot(array([1, 0, 0]), synaptic_weights)))))?#[0.99993704]

#synaptic_weights是調(diào)整之后的最終權(quán)重,數(shù)組(矩陣)[1,0,0]與這個(gè)權(quán)重矩陣通過dot函數(shù)進(jìn)行相乘,將相乘的結(jié)果作為輸入引入到sigmoid函數(shù),得到最終的結(jié)果

這段代碼的模型如下圖所示,有三個(gè)輸入,一個(gè)輸出,簡單來說,神經(jīng)網(wǎng)絡(luò)就是一個(gè)通過訓(xùn)練集輸入的數(shù)據(jù)不斷地迭代更新權(quán)重的模型,使之輸出更接近“標(biāo)準(zhǔn)答案”,這里推薦看一下B站上的一個(gè)有關(guān)神經(jīng)網(wǎng)絡(luò)的短視頻:

一分鐘告訴你什么是神經(jīng)網(wǎng)絡(luò)

?這9行代碼就是把上圖的1~4組數(shù)據(jù)作為訓(xùn)練集進(jìn)行模型訓(xùn)練,不斷地更新權(quán)重使其輸出更接近訓(xùn)練集中給出的輸出標(biāo)簽(標(biāo)準(zhǔn)答案),然后將最后一組數(shù)據(jù)當(dāng)做測(cè)試集來檢測(cè)模型的準(zhǔn)確度,它最后的結(jié)果輸出是0.99993704,也是約等于1,其實(shí)不難發(fā)現(xiàn),4組測(cè)試數(shù)據(jù)的輸出都與第一個(gè)輸入數(shù)據(jù)相同,所以說神經(jīng)網(wǎng)絡(luò)模型測(cè)試得到了正確的結(jié)果,這也是說明神經(jīng)網(wǎng)絡(luò)有預(yù)測(cè)結(jié)果的作用。

總結(jié)

以上是生活随笔為你收集整理的神经网络Python实现(9行代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。