在神經網路中,最基本的單元為神經元。乙個神經元可以視為具有i=1,2,...,n個輸入,乙個偏移量bias的單元,假設輸入訊號為x1,x2,...,xn,每個輸入訊號的權重為w1,w2,...,wn,則這個神經元的總體輸入為:
而通常我們為了計算方便,我們會額外引入乙個輸入i=0,並設定其輸入權重為w0,在數值上等於偏移量bias,則上面的公式可以簡化為:
下面我們通過**例項來看一下,對乙個實際的神經元,怎樣使用theano來求出總輸入:
[python]view plain
copy
import
theano
import
theano.tensor as t
from
theano
import
function
# 假設神經元有兩個輸入,加上bias結點(其值始終為1)
# 所以我們需要乙個三列的向量
x = t.dvector("x"
) # 設定權值變數,第一列為神經元的bias
w = t.dvector("w"
) # 求神經元的總輸入
s = t.dot(x, w)
# 定義函式
sum = function([x, w], s)
x = [1.0
, 1.5
, 2.5
] w = [0.0
, 0.2
, 0.4
(sum(x, w))
神經元會對輸入訊號進行非線性處理,從而得到乙個輸出,稱為啟用函式,其中用得最多的是下面這個函式:
假設神經元的啟用值為x=10.0,我們可以用上面的啟用函式求出該神經元的輸出,**如下所示:
[python]view plain
copy
import
theano
import
theano.tensor as t
from
theano
import
function
x = t.dscalar("x"
) s = 1
/ (1
+ t.exp(-x))
logistic = function([x], s)
x = 10.0
("logistic=%f"
% logistic(x))
上面**的輸出結果:logistic=0.999955
下面我們來看一下怎麼求實際輸出向量和希望輸出向量的平方差誤差,在這裡我們假設一共有5個輸入樣本,所以希望輸出向量和實際輸出向量均為5列,**如下所示:
[python]view plain
copy
import
theano
import
theano.tensor as t
from
theano
import
function
d = t.dvector("d"
) y = t.dvector("y"
) diff = (d - y ) ** 2
f = function([d, y], diff)
r = t.dvector("r"
) vectorsum = t.sum(r)
vectorsumf = function([r], vectorsum)
d = [1.0
, 2.0
, 3.0
, 4.0
, 5.0
] y = [1.1
, 2.1
, 3.5
, 4.2
, 5.3
(vectorsumf(f(d, y)))
在上面的**中,我們首先求出希望輸出向量和實際輸出向量逐列的平方差,然後定義乙個求向量所有元素和的函式,求出針對所有輸入樣本的平方差誤差,而感知器演算法的目標就是通過調整連線權值,使這個值達到最小。如果感舉趣的話,大家可以在這些方法的基礎上,實現乙個完整的感知器演算法。
機器學習,深度學習,神經網路,深度神經網路
先來說一下這幾者之間的關係 人工智慧包含機器學習,機器學習包含深度學習 是其中比較重要的分支 深度學習源自於人工神經網路的研究,但是並不完全等於傳統神經網路。所以深度學習可以說是在傳統神經網路基礎上的公升級。神經網路一般有輸入層 隱藏層 輸出層,一般來說隱藏層大於2的神經網路就叫做深度神經網路,深度...
深度學習 淺層神經網路 3
目錄 一 神經網路表示 神經網路層數 隱藏數 輸出層 1 輸入不算是一層,可以說是第0層 第i層的值 w 1 可以用來表示是第1層的引數 每一層中有多個神經元,然後它們可以做相同的事,比如第一層中有3個引數,用下標來區分 二 啟用函式 sigmoid a frac 只用於二元分類輸出層 缺點 不是以...
深度學習 深度神經網路
神經網路是由乙個個神經元相互連線並按層次排列構成的,深度神經網路是有任意層的神經網路,這裡的深度是指層次的多,而不是神經元數量的多。有任意層,那麼就要有乙個迴圈來負責遍歷每一層進行計算。所以深度神經網路的計算形式,就必須要適應這個迴圈結構。我們先來說說神經元吧 對於多神經元神經網路,其實也是一樣的。...