文章目錄
- 深度學習基本原理
-
- 數學基礎
-
- 線代
- numpy 常用操作
- 導數, 梯度
- 梯度下降法
-
- 梯度下降代碼 GradientDescent.py
- 反向傳播
- 完整的反向傳播過程
- 權重更新方式
- pytorch
-
-
- 網絡結構
-
- 全連接層 (線性層)
-
- 例子 - 手動實現模擬一個線性層 DNNforward.py
- 激活函數
-
- 激活函數-Sigmoid
- 激活函數-tanh
- 激活函數-relu
- 激活函數-Gelu
- 激活函數-Softmax
- 損失函數
-
- 均方差
- 交叉熵
-
- 例子-手動實現交叉熵-CrossEntropy.py
- 代碼 - 二分類任務
-
深度學習基本原理
數學基礎
線代
向量運算
- 加和
- 內積
- 向量夾角余旋值
矩陣
- 加法
- 乘法
- 轉置
向量到矩陣的互轉
reshape
張量 tensor
將三個 2x2的矩陣排列在一起,就可以稱之為3x2x2的張量
是神經網絡的訓練中最為常見的數據形式,維度相同的幾個矩陣放在一起
這是2x2x2的張量
[ [ [ 1 , 2 ] , [ 3 , 4 ] ] , [ [ 5 , 6 ] , [ 7 , 8 ] ] ] \begin{bmatrix} [[1,2],\\ [3,4]],\\ [[5,6],\\ [7,8]]\end{bmatrix} ?[[1,2],[3,4]],[[5,6],[7,8]]? ?
張量的常見操作
轉置 x.transpose(1,2)
[ [ [ 1 , 3 ] , [ 2 , 4 ] ] , [ [ 5 , 7 ] , [ 6 , 8 ] ] ] \begin{bmatrix} [[1,3],\\ [2,4]],\\ [[5,7],\\ [6,8]]\end{bmatrix} ?[[1,3],[2,4]],[[5,7],[6,8]]? ?
在上面的基礎上轉置 x.transpose(0,1)
[ [ [ 1 , 2 ] , [ 5 , 6 ] ] , [ [ 3 , 4 ] , [ 7 , 8 ] ] ] \begin{bmatrix} [[1,2],\\ [5,6]],\\ [[3,4],\\ [7,8]]\end{bmatrix} ?[[1,2],[5,6]],[[3,4],[7,8]]? ?
numpy 常用操作
import numpy as np
import torchx = np.array([[1,2,3],[4,5,6]])print(x)
print(x.ndim)#維度 2
print(x.shape)# 獲取行列維度 (2, 3)
print(x.size)#一共多少個數字 6
print(x.dtype)#類型 int64
print(np.sum(x))#矩陣內所有元素的和 21
print(np.sum(x,axis=0))#行相加 [5 7 9]
print(np.sum(x,axis=1))#列相加 [ 6 15]
print(np.reshape(x,(3,2)))#變換維度[[1 2]#[3 4]#[5 6]]#[[1. 1.41421356 1.73205081]#[2. 2.23606798 2.44948974]]
print(np.sqrt(x))#每個數字開平方#[[ 2.71828183 7.3890561 20.08553692]
# [ 54.59815003 148.4131591 403.42879349]]
print(np.exp(x))#每個數求指數
print(x.transpose())#轉置
print(x.flatten())#變成一維向量 [1 2 3 4 5 6]x = torch.FloatTensor(x)
print(x.shape)#torch.Size([2, 3])
#tensor([[ 2.7183, 7.3891, 20.0855],# [ 54.5981, 148.4132, 403.4288]])
print(torch.exp(x))
print(torch.sum(x))#tensor(21.)
print(torch.sum(x,dim=0))#tensor([5., 7., 9.])
print(torch.sum(x,dim=1))#tensor([ 6., 15.])
'''
tensor([[1., 4.],[2., 5.],[3., 6.]])
'''
print(x.transpose(1,0))
print(x.flatten())#tensor([1., 2., 3., 4., 5., 6.])
導數, 梯度
表示函數變化的方向
f ′ ( x 0 ) = l i m Δ y Δ x = l i m f ( x 0 + Δ x ) ? f ( x 0 ) Δ x f'(x_0) = lim\frac{\Delta y}{\Delta x} = lim \frac{f(x_0 + \Delta x) - f(x_0)}{\Delta x} f′(x0?)=limΔxΔy?=limΔxf(x0?+Δx)?f(x0?)?
求導法則
- 加法
- 乘法
- 除法
- 鏈式求導
梯度
多元函數的導數
原函數: y = 3 x 1 2 + 4 x 2 2 + 5 x 3 2 y = 3x_1^2 + 4x_2^2 + 5x_3^2 y=3x12?+4x22?+5x32?
導函數: y = 6 x 1 + 8 x 2 + 10 x 3 y = {6x_1 + 8x_2 + 10x_3} y=6x