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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

用 Python 运行神经网络

發布時間:2023/12/14 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用 Python 运行神经网络 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一個神經網絡類

我們在神經網絡教程的前一章中學到了關于權重的最重要的事實。我們看到了它們的使用方式以及如何在 Python 中實現它們。我們看到,通過應用矩陣乘法,可以使用 Numpy 中的數組完成權重與輸入值的乘法。

然而,我們沒有做的是在真實的神經網絡環境中測試它們。我們必須先創造這個環境。我們現在將在 Python 中創建一個類,實現一個神經網絡。我們將分步進行,以便一切都易于理解。

我們班級需要的最基本的方法是:

  • __init__?初始化一個類,即我們將設置每一層的神經元數量并初始化權重矩陣。
  • run:一種應用于我們想要分類的樣本的方法。它將此樣本應用于神經網絡。我們可以說,我們“運行”網絡以“預測”結果。此方法在其他實現中通常稱為predict.
  • train: 該方法獲取一個樣本和對應的目標值作為輸入。如有必要,它可以通過此輸入調整重量值。這意味著網絡從輸入中學習。從用戶的角度來看,我們“訓練”了網絡。在sklearn例如,這種方法被稱為fit

我們將把trainandrun方法的定義推遲到以后。權重矩陣應該在__init__方法內部初始化。我們是間接這樣做的。我們定義一個方法create_weight_matrices并在__init__.?這樣,init 方法就清晰了。

我們還將推遲向層添加偏置節點。

以下 Python 代碼包含應用我們在前一章中得出的知識的神經網絡類的實現:

導入 numpy的 NP scipy.stats 導入 truncnormdef truncated_normal ( mean = 0 , sd = 1 , low = 0 , upp = 10 ): return truncnorm ( ( low - mean ) / sd , ( upp - mean ) / sd , loc = mean , scale = sd ) 神經網絡def __init__ ( self , no_of_in_nodes , no_of_out_nodes , no_of_hidden_??nodes , learning_rate ): self no_of_in_nodes = no_of_in_nodes self no_of_out_nodes = no_of_out_nodes self no_of_hidden_??nodes = no_of_hidden_??nodes self learning_rate = learning_rate self . create_weight_matrices ()def create_weight_matrices ( self ): rad = 1 / np SQRT (自我no_of_in_nodes )X = truncated_normal (平均值= 0 , SD = 1 , 低= -弧度, UPP =弧度)自我weights_in_hidden = X RVS ((自我no_of_hidden_??nodes , 自我no_of_in_nodes )) rad = 1 / np SQRT (自我no_of_hidden_??nodes )X = truncated_normal (平均值= 0 , SD = 1 , 低= -弧度, UPP =弧度)自我weights_hidden_??out = X RVS ((自我no_of_out_nodes , 自我no_of_hidden_??nodes ))def train ( self ):通過def run ( self ):通過

我們不能用這段代碼做很多事情,但我們至少可以初始化它。我們也可以看看權重矩陣:

simple_network = NeuralNetwork (no_of_in_nodes = 3 , no_of_out_nodes = 2 , no_of_hidden_??nodes = 4 ,learning_rate = 0.1 ) 打印(simple_network weights_in_hidden ) 打印(simple_network weights_hidden_??out )

輸出:

[[-0.38364195 0.22655694 0.08684721][ 0.2767437 0.28723294 -0.27309445][ 0.25638328 -0.34340133 -0.37399997][-0.1468639 0.54354951 0.08970088]] [[ 0.34758695 0.41193854 -0.02512014 0.4407185 ][ 0.21963126 0.37803538 0.40223143 0.13695252]]

激活函數、Sigmoid 和 ReLU

在我們對run方法進行編程之前,我們必須處理激活函數。我們在神經網絡的介紹章節中有下圖:

感知器的輸入值由求和函數處理,然后是激活函數,將求和函數的輸出轉換為所需的更合適的輸出。求和函數意味著我們將有一個權重向量和輸入值的矩陣乘法。

神經網絡中使用了許多不同的激活函數。可以在 Wikipedia 上找到對可能的激活函數的最全面的概述之一。

sigmoid 函數是常用的激活函數之一。我們使用的 sigmoid 函數也稱為 Logistic 函數。

它被定義為

σ(X)=11+電子-X

讓我們看一下 sigmoid 函數的圖形。我們使用 matplotlib 繪制 sigmoid 函數:

import numpy as np import matplotlib.pyplot as plt def sigma ( x ): return 1 / ( 1 + np . exp ( - x ))X = np linspace ( - 5 , 5 , 100 )PLT 繪圖( X , sigma ( X ), 'b' ) plt xlabel ( 'X 軸' ) plt ylabel ( 'Y 軸' ) plt 標題('Sigmoid 函數' )PLT 網格()PLT 文本( 2.3 , 0.84 , r '$\sigma(x)=\frac {1} {1+e^{-x}}$' , fontsize = 16 )PLT 顯示()

查看圖表,我們可以看到 sigmoid 函數將給定的數字映射x到 0 到 1 之間的數字范圍內。不包括 0 和 1!隨著 的值x變大,sigmoid 函數的值越來越接近 1,隨著xsigmoid 函數的值越來越小,sigmoid 函數的值越來越接近 0。

除了我們自己定義 sigmoid 函數之外,我們還可以使用來自 的 expit 函數scipy.special,它是 sigmoid 函數的一個實現。它可以應用于各種數據類,如 int、float、list、numpy、ndarray 等。結果是一個與輸入數據 x 形狀相同的 ndarray。

scipy.special 進口 expit 打印(expit (3.4 )) 打印(expit ([ 3 , 4 , 1 )) 打印(expit (NP 陣列([ 0.8 , 2.3 , 8 ])))

輸出:

0.9677045353015494 [0.95257413 0.98201379 0.73105858] [0.68997448 0.90887704 0.99966465]

在神經網絡中經常使用邏輯函數來在模型中引入非線性并將信號映射到指定的范圍,即 0 和 1。它也很受歡迎,因為在反向傳播中需要的導數很簡單。

σ(X)=11+電子-X

及其衍生物:

σ′(X)=σ(X)(1-σ(X))

import numpy as np import matplotlib.pyplot as plt def sigma ( x ): return 1 / ( 1 + np . exp ( - x ))X = np linspace ( - 5 , 5 , 100 )PLT 繪圖(X , 西格瑪(X )) plt 繪圖( X , sigma ( X ) * ( 1 - sigma ( X )))PLT xlabel ( 'X 軸' ) plt ylabel ( 'Y 軸' ) plt 標題('Sigmoid 函數' )PLT 網格()PLT 文本( 2.3 , 0.84 , r '$\sigma(x)=\frac {1} {1+e^{-x}}$' , fontsize = 16 ) plt 文本( 0.3 , 0.1 , r '$\sigma \' (x) = \sigma(x)(1 - \sigma(x))$' , fontsize = 16 )PLT 顯示()

我們還可以使用來自 numpy 的裝飾器 vectorize 定義我們自己的 sigmoid 函數:

@np 矢量化 DEF 乙狀結腸(X ):返回 1 / (1 + NP ? ** - X )#sigmoid = np.vectorize(sigmoid) sigmoid ([ 3 , 4 , 5 ])

輸出:

數組([0.95257413,0.98201379,0.99330715])

另一個易于使用的激活函數是 ReLU 函數。ReLU 代表整流線性單元。它也稱為斜坡函數。它被定義為其論點的積極部分,即是=最大限度(0,X).?這是“目前,最成功和最廣泛使用的激活函數是整流線性單元 (ReLU)”?1?ReLu 函數在計算上比 Sigmoid 類函數更高效,因為 Relu 意味著只選擇 0 和參數 之間的最大值x。而 Sigmoids 需要執行昂貴的指數運算。

# 替代激活函數 def ReLU ( x ): return np . 最大值( 0.0 , x )# relu 的推導 def ReLU_derivation ( x ): if x <= 0 : return 0 else : return 1 導入 numpy 作為 np 導入 matplotlib.pyplot 作為 pltX = np linspace (- 5 , 6 , 100 ) PLT 繪圖( X , ReLU ( X ), 'b' ) plt xlabel ( 'X 軸' ) plt ylabel ( 'Y 軸' ) plt 標題('ReLU 函數' ) plt 網格() plt 文本( 0.8 , 0.4 , r '$ReLU(x)=max(0, x)$' , fontsize = 14 ) plt 顯示()

添加運行方法

我們現在擁有一切來實現我們的神經網絡類的run(或predict)方法。我們將scipy.special用作激活函數并將其重命名為activation_function:

from scipy.special import expit as activation_function

我們在該run方法中要做的所有事情包括以下內容。

  • 輸入向量和 weights_in_hidden 矩陣的矩陣乘法。
  • 將激活函數應用于步驟 1 的結果
  • 步驟 2 的結果向量和 weights_in_hidden 矩陣的矩陣乘法。
  • 得到最終結果:將激活函數應用于 3 的結果
  • scipy.special import expit as activation_function from scipy.stats import truncnorm導入numpy 作為 npdef truncated_normal ( mean = 0 , sd = 1 , low = 0 , upp = 10 ): return truncnorm ( ( low - mean ) / sd , ( upp - mean ) / sd , loc = mean , scale = sd ) 神經網絡def __init__ ( self , no_of_in_nodes , no_of_out_nodes , no_of_hidden_??nodes , learning_rate ): self no_of_in_nodes = no_of_in_nodes self no_of_out_nodes = no_of_out_nodes self no_of_hidden_??nodes = no_of_hidden_??nodes self learning_rate = learning_rate self . create_weight_matrices ()def create_weight_matrices ( self ): """ 一種初??始化神經網絡權重矩陣的方法""" rad = 1 / np . SQRT (自我no_of_in_nodes )X = truncated_normal (平均值= 0 , SD = 1 , 低= -弧度, UPP =弧度)自我weights_in_hidden = X 房車((自我no_of_hidden_??nodes , self no_of_in_nodes )) rad = 1 / np SQRT (自我no_of_hidden_??nodes )X = truncated_normal (平均值= 0 , SD = 1 , 低= -弧度, UPP =弧度)自我weights_hidden_??out = X RVS ((自我no_of_out_nodes , 自我no_of_hidden_??nodes ))def train ( self , input_vector , target_vector ):通過def run ( self , input_vector ): """ 使用輸入向量 'input_vector' 運行網絡 。'input_vector' 可以是元組、列表或 ndarray """ # 將輸入向量轉換為列向量input_vector = np 數組(input_vector , ndmin = 2 )T input_hidden = activation_function ( self . weights_in_hidden @ input_vector ) output_vector = activation_function( self . weights_hidden_??out @ input_hidden )返回 output_vector

    我們可以實例化這個類的一個實例,這將是一個神經網絡。在以下示例中,我們創建了一個具有兩個輸入節點、四個隱藏節點和兩個輸出節點的網絡。

    simple_network = NeuralNetwork (no_of_in_nodes = 2 , no_of_out_nodes = 2 , no_of_hidden_??nodes = 4 ,learning_rate = 0.6 )

    我們可以將 run 方法應用于所有形狀為 (2,) 的數組,以及具有兩個數字元素的列表和元組。調用的結果由權重的隨機值定義:

    simple_network 運行([( 3 , 4 )])

    輸出:

    數組([[0.62128186],[0.58719777]])

    腳注

    1拉馬錢德蘭,普拉吉特;巴雷特,佐夫;Quoc, V. Le(2017 年 10 月 16 日)。

    總結

    以上是生活随笔為你收集整理的用 Python 运行神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 午夜91 | 人妻少妇精品一区二区 | 少妇4p| 中国一区二区三区 | 大黑人交交护士xxxxhd | 国产良妇出轨视频在线观看 | 天天干天天爽天天操 | 久久久成人免费视频 | sm在线看| 国产精品第157页 | 国产精品a久久久久 | 1515hh成人免费看 | 可以免费观看的毛片 | 日韩欧美中文字幕一区二区三区 | 天天操中文字幕 | 免费av网址在线观看 | 91成人在线观看喷潮蘑菇 | 免费黄色国产视频 | 免费精品视频 | 国产日韩视频在线观看 | 草久网| 欧美性jizz18性欧美 | 日韩中文字幕网站 | 黄色大网站 | 理论片av | 翔田千里88av中文字幕 | 国产欧美一区二区三区在线 | 热久久伊人| 办公室荡乳欲伦交换bd电影 | 成人在线免费网址 | 日韩福利在线视频 | 蜜芽在线视频 | av在线播放不卡 | 午夜精品久久久久久久久久久久久蜜桃 | 91极品国产 | 日韩无码电影 | 日韩a级片在线观看 | 男生舔女生的屁股 | 国产精品v日韩精品v在线观看 | 中文字幕一区二区三区av | 日本精品影院 | 色妞www精品视频 | 操操操爽爽爽 | 精品国产自在精品国产精小说 | 日本久久久久久久久久 | 在线观看日韩一区 | 亚洲图片欧美激情 | 操碰人人 | 免费网站观看www在线观 | 日韩精品免费播放 | 99爱免费视频 | 国模私拍大尺度裸体av | 亚洲一区二区网站 | 婷婷中文在线 | 亚洲精品小说 | 幸福,触手可及 | 日日噜噜夜夜爽爽 | jizz日本在线观看 | 亚洲精品亚洲人成人网 | av天天射 | 日韩精品在线播放 | www.亚洲欧美 | 久久精品一本 | 国产又粗又猛又黄又爽 | 欧美一区二区激情视频 | 最新日韩一区 | 永久免费未满蜜桃 | 色a视频| 欧美男优 | 国产成人精品a视频 | 波多野结衣 一区 | 免费古装一级淫片潘金莲 | 日韩激情在线视频 | 国产一级精品视频 | 三上悠亚在线一区 | 污视频免费在线 | 欧美一区免费观看 | 青草视频在线播放 | 国产区在线视频 | 伊人久在线 | 欧美精品激情视频 | www.人人草 | 免费看美女被靠到爽的视频 | 伦理亚洲 | 国产精品第 | 国产精品极品白嫩在线 | 女同激情久久av久久 | 爱臀av| 色播视频在线播放 | 欧美黄色免费看 | 操操日日 | 狠狠干夜夜草 | 国产理论一区 | www亚洲| 好爽…又高潮了毛片免费看 | 国产偷拍一区二区 | 欧美激情性生活 | 日韩理论在线 | 黄色大片网址 |