pytorch relu函数实现_什么是pytorch?
PyTorch是一個:
機器學習框架,簡單易學
可以看做是支持GPU計算和自動微分計算的“Numpy”庫
支持100多種Tensor常規算子,包括:創建、索引、切片、轉置、連接、隨機數、形狀改變,線性代數、數學計算
Tensor是一個有值有屬性的多維數組對象,跟NumPy ndarray對象比,還支持自動微分(.requires_grad)和選擇計算硬件(.device)
Tensor是多維數組
PyTorch中的所有CPU上的Tensor除了CharTensor以外,都支持跟 NumPy ndarray類型相互轉換
從神經網絡角度來看,PyTorch是一個自動微分(autograd)工具包
使用PyTorch構架神經網絡,用戶只需要定義forward()方法,而backward()無需用戶定義,PyTorch框架已經實現了,這就是所謂的自動微分。
可訓練的參數,包含在net.parameters()里面
下面的Python源代碼是用Numpy來實現一個簡單的神經網絡,并完成前向計算和反向傳播。可以看出用Numpy來編寫神經網絡的不方便性:沒有自動微分功能,需要手動編寫微分計算程序
沒有支持常用的神經網絡層的算子,需要動手編寫
需要手動實現額外的計算圖和微分參數,numpy.ndarray類型沒有把微分和計算圖的參數封裝起來
沒有支持GPU
torch.tensor = numpy.ndarray + 計算圖參數 + 微分參數 + GPU支持
若希望某個Tensor支持自動微分,則需要將其屬性requires_grad設置為True.當神經網絡層數多的時候,手動編寫微分程序和反向傳播程序,是非常令人抓狂的一件事情
# N:batch size; D_in:輸入層神經個數
# H:隱藏層神經元個數; D_out:輸出層神經元個數
N, D_in, H, D_out = 64, 1000, 100, 10
# 創建隨機的輸入輸出數據
x = np.random.randn(N, D_in)
y = np.random.randn(N, D_out)
# 用隨機數初始化權重
w1 = np.random.randn(D_in, H)
w2 = np.random.randn(H, D_out)
learning_rate = 1e-6
for t in range(500):
# 前向傳播,計算預測值y_pred
h = x.dot(w1)
h_relu = np.maximum(h, 0)
y_pred = h_relu.dot(w2)
# 計算Loss值
loss = np.square(y - y_pred).sum()
print(t, loss)
# 反向傳播,計算w1和w2 對 loss函數的梯度
grad_y_pred = 2.0 * (y_pred - y)
grad_w2 = h_relu.T.dot(grad_y_pred)
grad_h_relu = grad_y_pred.dot(w2.T)
grad_h = grad_h_relu.copy()
grad_h[h < 0] = 0
grad_w1 = x.T.dot(grad_h)
# 更新權重
w1 -= learning_rate * grad_w1
w2 -= learning_rate * grad_w2
總結
以上是生活随笔為你收集整理的pytorch relu函数实现_什么是pytorch?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卖内裤的标语文案30句
- 下一篇: 女生好听唯美的网名96个