人工AI — 神經網路構建初步
在之前我就一直對人工智能感興趣,就去了解那些基本原理啊包括其他一些人的博客,后面就干脆直接實戰了,我會從“新”電腦的角度開講,我會參考我之前參考的博客結合我后期我自己的實際操作步奏,盡量讓你一看就會吧,,,
先來簡單的了解一下吧,(。?﹃?。)阿巴阿巴阿巴
神經網路并不是一個新概念,1943年,由沃倫·麥卡洛克(Warren McCulloch)和沃爾特·皮茨(Walter Pitts)首次提出,
我們將構建一個沒有隱藏層或感知器的單層神經網路,它由一個包含訓練示例、突觸或權重以及神經元的輸入層和一個含有正確答案的輸出層組成,神經網路圖形如下所示:

此外,需要了解一些如sigmoid和導數之類的數學概念,以清楚神經元的學習方式,神經元只需進行簡單操作,即取一個輸入值,乘以突觸權重,之后,對所有這些乘法結果求和,并使用sigmoid函式獲得0到1內的輸出值,
神經元表示:

Sigmoid函式:

問題界定
輸入層上有數字序列,我們預期的理想結果是,在資料集樣本中,如果輸入第一個數字是1,則神經網路回傳1;如果第一個數字是0,則回傳0,結果在輸出層中顯示,問題集如下圖:

那么現在開始吧?( ‘ω’ )? get!
如果是剛安裝Linux(全代碼那種),可能還要先配置一下網路環境(動態配置網路環境:dhclient)和安裝一下ssh(后期可以在內網的另一臺機子上控制輸入指令,這樣就可以更好的粘貼復制了(斜眼笑))
先是要安裝一下pip(pip 是 Python 包管理工具,該工具提供了對Python 包的查找、下載、安裝、卸載的功能,),后面是要用pip安裝numpy的,下載安裝腳本:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
部分 Linux 發行版可直接用包管理器安裝 pip,如 Debian 和 Ubuntu:
sudo apt-get install python-pip
當然如果你已經下載好了pip(如果你在 python.org 下載最新版本的安裝包,則是已經自帶了該工具,Python 2.7.9 + 或 Python 3.4+ 以上版本都自帶 pip 工具,)
則查看一下版本或升級:
查看版本:
pip --version
升級pip:
pip install -U pip
如果升級出現了問題就用這個 QAQ:
sudo easy_install --upgrade pip
NumPY(NumPy(Numerical Python) 是 Python 語言的一個擴展程式庫,支持大量的維度陣列與矩陣運算,此外也針對陣列運算提供大量的數學函式庫,)安裝命令:
pip3 install --user numpy scipy matplotlib
–user 選項可以設定只安裝在當前的用戶下,而不是寫入到系統目錄,
默認情況使用國外線路,如果國外線路太慢,那我們使用清華的鏡像就可以了:
pip3 install numpy scipy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
Linux 下安裝:
Ubuntu & Debian
sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose
CentOS/Fedora
sudo dnf install numpy scipy python-matplotlib ipython python-pandas sympy python-nose atlas-devel
Mac的話就用這個:
pip3 install numpy scipy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
安裝成功,即可進入編碼部分,將NumPy匯入Python檔案中:
import numpy as np
訓練神經網路?( ‘ω’ )? get!
首先,創建一個sigmoid函式:
def sigmoid(x):
return 1 / (1+np.exp(-x))
其次,定義訓練示例、輸入(4×5矩陣)和輸出:
training_inputs = np.array([[0,0,1,0],[1,1,1,0],[1,0,1,0],[0,1,1,1],[0,1,0,1]])
trainign_outputs = np.array([[0,1,1,0,0]]).T
接下來,通過生成隨機值來初始化突觸權重,并將結果排列在4×1的矩陣中:
np.random.seed(1)
synaptic_weights = 2 * np.random.random((4,1)) - 1
最后,構建訓練模型,使用for回圈,所有的訓練都將在此回圈中進行,呼叫sigmoid函式,并將所有輸入的總和乘以sigmoid權重,然后采用Np.dot進行矩陣乘法,程序如下圖:
for i in range(1):
output = sigmoid(np.dot(training_inputs, synaptic_weights))
print('Synaptic weights:')
print(synaptic_weights)
print('Output:')
print(output)
輸出結果如下圖:

現在進行神經網路模型訓練,方法是計算sigmoid函式的輸出和實際輸出之間的差值,之后可以根據誤差的嚴重性調整權重,多次重復這個程序,比如說一萬次,定義sigmoid導數:
def sigmoid_der(x):
return x * (1 - x)
以下是計算和調整權重的方法:
for i in range(1):
output = sigmoid(np.dot(training_inputs, synaptic_weights))
error = trainign_outputs - outputs
adjustments = error * sigmoid_der(outputs)
synaptic_weights += np.dot(inputs.T, adjustments)
print('Synaptic weights:')
print(synaptic_weights)
print('Output:')
print(output)
開始學習,觀察學習時長會如何影響結果,從100次迭代開始:

開始情況比較樂觀——我們的人工智能已經學會了識別模式,但錯誤率仍然居高不下,現在進行1000次迭代:

情況好轉,繼續進行10000次迭代:

10萬次迭代:

我們可以繼續更多次的學習迭代,但永遠無法達到100%的準確性,因為這需要進行無限次的計算,但即使在最壞的情況下,準確率也達到了99.77%,這也相當不錯,
對于最終代碼,我通過函式將其分開了,除此之外,在文本檔案中,我還添加了一種非常復雜方法以存盤權重,這樣只需進行一次學習,而且需要使用AI時,只需匯入權重并利用sigmoid函式即可,
import numpy as np
from tempfile import TemporaryFile
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def sigmoid_der(x):
return x * (1 - x)
def training():
training_inputs = np.array([[0,0,1,0], [1,1,1,0], [1,0,1,0], [0,1,1,1], [0,1,0,1]])
trainign_outputs = np.array([[0,1,1,0,0]]).T
np.random.seed(1)
synaptic_weights = 2 * np.random.random((4,1)) - 1
for i in range(50000):
inputs = training_inputs
outputs = sigmoid(np.dot(inputs, synaptic_weights))
error = trainign_outputs - outputs
adjustments = error * sigmoid_der(outputs)
synaptic_weights += np.dot(inputs.T, adjustments)
data_file = open("data.txt", "w")
for row in synaptic_weights:
np.savetxt(data_file, row)
data_file.close()
def thinking(inputs):
synaptic_weights = np.loadtxt("data.txt").reshape(4, 1)
outputs = sigmoid(np.dot(inputs, synaptic_weights))
print(outputs)
return outputs
training()
thinking(np.array([1,1,0,1]))
這樣就差不多完成了,但是后期還是需要自己投入時間去開發的, (づ ̄3 ̄)づ╭?~
這篇是我參考了一些其他文章的文段,然后進行修改整合,然后再結合我私下的操作完成的,希望能夠幫助到你,如果有什么疑問麻煩私信我,謝謝你,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/246846.html
標籤:python
上一篇:酷狗音樂的爬取,基于python,從無到有完整教程-下:功能代碼講解
下一篇:起點中文網月票榜爬取及資料分析
