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