作者主頁(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文網址:https://blog.csdn.net/HiWangWenBing/article/details/120795317
目錄
第1章 神經元的一維輸入模型
1.1 一維線性輸入的原始神經元模型
1.2 一維輸入時神經元的張量運算模型
1.3 一維輸入時神經元的代碼示例
1.4 一維輸入神經元的內積運算
第2章 神經元的二維輸入模型
2.1 二維張量輸入的神經元模型
2.2 二維輸入時神經元的代碼示例
2.3 二元輸入展開成一維輸入的代碼示例
2.4 一維輸入神經元的內積運算
第3章 神經元的三維輸入模型
3.1 三維張量輸入的神經元模型
3.2 二維輸入時神經元的代碼示例
3.3 二元輸入展開成一維輸入的代碼示例
2.4 一維輸入神經元的內積運算
第4章 神經元的本質
4.1 綜合綜述
4.2 神經元數學運算的本質
第1章 神經元的一維輸入模型
1.1 一維線性輸入的原始神經元模型
[人工智能-深度學習-6]:神經網路基礎 - 人工神經元數學模型、激活函式_文火冰糖(王文兵)的博客-CSDN博客第1章 人的神經系統1.1人體神經系統/神經網路的功能神經系統(nervoussystem)是機體內起主導作用的系統,(1)神經系統調節和控制人體各其他系統的復雜活動,使機體成為一個完整的統一有機體,例如,當參加體育運動時,隨著骨骼肌的收縮,出現呼吸加快加深、心跳加速、出汗等一系列變化,(2)神經系統通過調整機體功能活動,使機體適應不斷的外界環境,維持機體與外界環境的平衡,如氣溫低時,通過神經系統的調節,使周圍小血管收縮,減少體內熱量散發;氣溫高時,周圍小血管擴張,增加...https://blog.csdn.net/HiWangWenBing/article/details/120169493?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163405246716780265445855%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=163405246716780265445855&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v29-1-120169493.pc_v2_rank_blog_default&utm_term=%E7%A5%9E%E7%BB%8F%E5%85%83&spm=1018.2226.3001.4450


就得到了最簡化的模型 =》 W * X = Y
其中:
- X:為n+1長度的列矩陣
- W:為n+1長度的行矩陣
- Y:為0維的數值標量
1.2 一維輸入時神經元的張量運算模型

1.3 一維輸入時神經元的代碼示例
print("定義一維格式的輸入資料")
x1 = np.array([0,1,1,1])
print("x.shape=",x1.shape)
print("x=\n",x1)
print("")
print("定義一維格式的神經元引數")
w1 = np.array([1,0,0,1])
print("w.shape=",w1.shape)
print("w=\n",w1)
print("")
print("W * X的線性運算")
z = w1 * x1
print("z.shape=", z.shape)
print("z=\n",z)
print("")
print("累加和的神經元輸出")
y = np.sum(z)
print("y.shape=", y.shape)
print("y=",y)
定義一維格式的輸入資料 x.shape= (4,) x= [0 1 1 1] 定義一維格式的神經元引數 w.shape= (4,) w= [1 0 0 1] W * X的線性運算 z.shape= (4,) z= [0 0 0 1] 累加和的神經元輸出 y.shape= () y= 1
1.4 一維輸入神經元的內積運算
x = x1
w = w1
print("x.shape=",x.shape)
print("x=\n",x)
print("")
print("w.shape=",w.shape)
print("w=\n",w)
print("")
print("w, w的dot運算")
y = np.dot(x, w)
print("y.shape=", y.shape)
print("y=",y)
print("")
print("x, w的matmul運算")
y = np.matmul(x, w)
print("y.shape=", y.shape)
print("y=",y)
print("")
print("x, w的matmul運算")
y = np.multiply(x, w)
print("y.shape=", y.shape)
print("y=",y)
x.shape= (4,) x= [0 1 1 1] w.shape= (4,) w= [1 0 0 1] w, w的dot運算 y.shape= () y= 1 x, w的matmul運算 y.shape= () y= 1 x, w的matmul運算 y.shape= (4,) y= [0 0 0 1]
第2章 神經元的二維輸入模型
2.1 二維張量輸入的神經元模型

2.2 二維輸入時神經元的代碼示例
print("定義二維格式的輸入資料")
print("把一維資料擴展成二維資料")
x2 = np.expand_dims(x1,0)
print("把一維資料復制到新擴展的二維空間")
x2 = np.repeat(x2,len(x1),axis=0)
print("x.shape=",x2.shape)
print("x=\n",x2)
print("")
print("定義二維格式的神經元引數")
print("把一維引數擴展成二維引數")
w2 = np.expand_dims(w1,0)
print("把一維引數復制到新擴展的二維空間")
w2 = np.repeat(w2, len(x1), axis=0)
print("w.shape=",w2.shape)
print("w=\n",w2)
print("")
print("W * X的線性運算")
z = w2 * x2
print("z.shape=", z.shape)
print("z=\n",z)
print("")
print("累加和的神經元輸出")
y = np.sum(z)
print("y.shape=", y.shape)
print("y=",y)
輸出:
定義二維格式的輸入資料 把一維資料擴展成二維資料 把一維資料復制到新擴展的二維空間 x.shape= (4, 4) x= [[0 1 1 1] [0 1 1 1] [0 1 1 1] [0 1 1 1]] 定義二維格式的神經元引數 把一維引數擴展成二維引數 把一維引數復制到新擴展的二維空間 w.shape= (4, 4) w= [[1 0 0 1] [1 0 0 1] [1 0 0 1] [1 0 0 1]] W * X的線性運算 z.shape= (4, 4) z= [[0 0 0 1] [0 0 0 1] [0 0 0 1] [0 0 0 1]] 累加和的神經元輸出 y.shape= () y= 4
2.3 二元輸入展開成一維輸入的代碼示例

print("把二維展現成一維輸入資料")
x = x2.reshape(-1)
print("x2.shape=",x.shape)
print("x2=\n",x)
print("")
print("把二維展現成一維神經元引數")
w = w2.reshape(-1)
print("w.shape=",w.shape)
print("w=\n",w)
print("")
print("W * X的線性運算")
z = w * x
print("z.shape=", z.shape)
print("z=\n",z)
print("")
print("累加和的神經元輸出")
y = np.sum(z)
print("y.shape=", y.shape)
print("y=",y)
把二維展現成一維輸入資料 x2.shape= (16,) x2= [0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1] 把二維展現成一維神經元引數 w.shape= (16,) w= [1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1] W * X的線性運算 z.shape= (16,) z= [0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1] 累加和的神經元輸出 y.shape= () y= 4
2.4 一維輸入神經元的內積運算
print("x.shape=",x.shape)
print("x=\n",x)
print("")
print("w.shape=",w.shape)
print("w=\n",w)
print("")
print("w, w的dot運算")
y = np.dot(x, w)
print("y.shape=", y.shape)
print("y=",y)
print("")
print("x, w的matmul運算")
y = np.matmul(x, w)
print("y.shape=", y.shape)
print("y=",y)
print("")
print("x, w的multiply運算(不是神經元的形態,僅僅作為比較)")
y = np.multiply(x, w)
print("y.shape=", y.shape)
print("y=",y)
x.shape= (16,) x= [0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1] w.shape= (16,) w= [1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1] w, w的dot運算 y.shape= () y= 4 x, w的matmul運算 y.shape= () y= 4 x, w的multiply運算(不是神經元的形態,僅僅作為比較) y.shape= (16,) y= [0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1]
第3章 神經元的三維輸入模型
3.1 三維張量輸入的神經元模型

3.2 二維輸入時神經元的代碼示例
print("定義三維格式的輸入資料")
print("把二維資料擴展成三維資料")
x3 = np.expand_dims(x2, 0)
print("把二維資料復制到新擴展的三維空間")
x3 = np.repeat(x3, 3, axis=0)
print("x.shape=",x3.shape)
print("x=\n",x3)
print("")
print("定義三維格式的神經元引數")
print("把二維引數擴展成三維引數")
w3 = np.expand_dims(w2, 0)
print("把二維引數復制到新擴展的三維空間")
w3 = np.repeat(w3, 3,axis=0)
print("w.shape=",w3.shape)
print("w=\n",w3)
print("")
print("W * X的線性運算")
z = w3 * x3
print("z.shape=", z.shape)
print("z=\n",z)
print("")
print("累加和的神經元輸出")
y = np.sum(z)
print("y.shape=", y.shape)
print("y=",y)
定義三維格式的輸入資料
把二維資料擴展成三維資料
把二維資料復制到新擴展的三維空間
x.shape= (3, 4, 4)
x=
[[[0 1 1 1]
[0 1 1 1]
[0 1 1 1]
[0 1 1 1]]
[[0 1 1 1]
[0 1 1 1]
[0 1 1 1]
[0 1 1 1]]
[[0 1 1 1]
[0 1 1 1]
[0 1 1 1]
[0 1 1 1]]]
定義三維格式的神經元引數
把二維引數擴展成三維引數
把二維引數復制到新擴展的三維空間
w.shape= (3, 4, 4)
w=
[[[1 0 0 1]
[1 0 0 1]
[1 0 0 1]
[1 0 0 1]]
[[1 0 0 1]
[1 0 0 1]
[1 0 0 1]
[1 0 0 1]]
[[1 0 0 1]
[1 0 0 1]
[1 0 0 1]
[1 0 0 1]]]
W * X的線性運算
z.shape= (3, 4, 4)
z=
[[[0 0 0 1]
[0 0 0 1]
[0 0 0 1]
[0 0 0 1]]
[[0 0 0 1]
[0 0 0 1]
[0 0 0 1]
[0 0 0 1]]
[[0 0 0 1]
[0 0 0 1]
[0 0 0 1]
[0 0 0 1]]]
累加和的神經元輸出
y.shape= ()
y= 12
3.3 二元輸入展開成一維輸入的代碼示例

print("把二維展現成一維輸入資料")
x = x3.reshape(-1)
print("x.shape=",x.shape)
print("x=\n",x)
print("")
print("把二維展現成一維神經元引數")
w = w3.reshape(-1)
print("w.shape=",w.shape)
print("w=\n",w)
print("")
print("W * X的線性運算")
z = w * x
print("z.shape=", z.shape)
print("z=\n",z)
print("")
print("累加和的神經元輸出")
y = np.sum(z)
print("y.shape=", y.shape)
print("y=",y)
把二維展現成一維輸入資料
x.shape= (48,)
x=
[0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0
1 1 1 0 1 1 1 0 1 1 1]
把二維展現成一維神經元引數
w.shape= (48,)
w=
[1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
0 0 1 1 0 0 1 1 0 0 1]
W * X的線性運算
z.shape= (48,)
z=
[0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0
0 0 1 0 0 0 1 0 0 0 1]
累加和的神經元輸出
y.shape= ()
y= 12
2.4 一維輸入神經元的內積運算
print("x.shape=",x.shape)
print("x=\n",x)
print("")
print("w.shape=",w.shape)
print("w=\n",w)
print("")
print("w, w的dot運算")
y = np.dot(x, w)
print("y.shape=", y.shape)
print("y=",y)
print("")
print("x, w的matmul運算")
y = np.matmul(x, w)
print("y.shape=", y.shape)
print("y=",y)
print("")
print("x, w的matmul運算")
y = np.multiply(x, w)
print("y.shape=", y.shape)
print("y=",y)
x.shape= (48,) x= [0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1] w.shape= (48,) w= [1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1] w, w的dot運算 y.shape= () y= 12 x, w的matmul運算 y.shape= () y= 12 x, w的matmul運算 y.shape= (48,) y= [0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1]
第4章 神經元的本質
4.1 綜合綜述
(1)W*X之間的乘法是算術乘,即按位相乘!!!
(2)相乘后的累加和為神經元的輸出
(3)展開前后的運算不變,指示輸入形式的改變,
(4)展開前后的結果不變,
(5)為了支持多個神經元構成的神經網路運算,無論神經元的輸入形式是什么(一維、二維圖片、三維圖片),通常會展開成一維形式,

(6)無論輸入形式如何變化,無論W,B的矩陣如何變化,輸出只有一路,即為所有Wi * Xi的累加和!!!!!
4.2 神經元數學運算的本質
(1)多維輸入形式是的本質:算術乘+累加和

(2)轉換成一維輸入形式后的本質:一維矩陣的點乘(內積)

備注:在后續的討論中,無論神經元的輸入形式如何,都會轉換成一維輸入模型,
(3)多樣本輸入并發運算的模型

(4)單樣本,多個神經元輸出并發運算的模型

(4)多樣本,多個神經元輸出并發運算的模型

作者主頁(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文網址:https://blog.csdn.net/HiWangWenBing/article/details/120795317
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/320965.html
標籤:AI
