Pytorch學習筆記01----pytorch框架介紹


1.深度學習框架

 

pytorch與其他框架的比較

pytorch的學習方法:

課程安排:

PyTorch是一個基於Python的科學計算庫,它有以下特點:

  • 類似於NumPy,但是它可以使用GPU
  • 可以用它定義深度學習模型,可以靈活地進行深度學習模型的訓練和使用

2.tensor的運算

Tensor類似與NumPy的ndarray,唯一的區別是Tensor可以在GPU上加速運算。

(1)加法

x = torch.rand(5,3)
y = torch.rand(5,3)
z=x+y
print(x)
print(y)
print(z)

效果圖:

(2)Torch Tensor和NumPy array會共享內存,所以改變其中一項也會改變另一項。

把Torch Tensor轉變成NumPy Array

# Torch Tensor和NumPy array會共享內存,所以改變其中一項也會改變另一項。
# 把Torch Tensor轉變成NumPy Array
a = torch.ones(5)
b = a.numpy()
print(a)
print(b)
b[1] = 2
print(a)

效果圖:

(3)在Torch Tensor和NumPy array之間相互轉化非常容易。

# 把NumPy ndarray轉成Torch Tensor
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print(a)
print(b)

效果圖:

3.利用Pytorch的nn庫來構建神經網絡

這次我們使用PyTorch中nn這個庫來構建網絡。 用PyTorch autograd來構建計算圖和計算gradients, 然后PyTorch會幫我們自動計算gradient。

import torch.nn as nn
import torch
N, D_in, H, D_out = 64, 1000, 100, 10

# 隨機創建一些訓練數據
x = torch.randn(N, D_in)
y = torch.randn(N, D_out)

model = torch.nn.Sequential(
    torch.nn.Linear(D_in, H, bias=False),  # w_1 * x + b_1
    torch.nn.ReLU(),
    torch.nn.Linear(H, D_out, bias=False),
)

torch.nn.init.normal_(model[0].weight)
torch.nn.init.normal_(model[2].weight)

# model = model.cuda()

loss_fn = nn.MSELoss(reduction='sum')

learning_rate = 1e-6
for it in range(500):
    # Forward pass
    y_pred = model(x)  # model.forward()

    # compute loss
    loss = loss_fn(y_pred, y)  # computation graph
    print(it, loss.item())

    # Backward pass
    loss.backward()

    # update weights of w1 and w2
    with torch.no_grad():
        for param in model.parameters():  # param (tensor, grad)
            param -= learning_rate * param.grad

    model.zero_grad()

效果圖:

4.自定義nn modules

我們可以定義一個模型,這個模型繼承自nn.Module類。如果需要定義一個比Sequential模型更加復雜的模型,就需要定義nn.Module模型。

import torch.nn as nn
import torch

N, D_in, H, D_out = 64, 1000, 100, 10

# 隨機創建一些訓練數據
x = torch.randn(N, D_in)
y = torch.randn(N, D_out)

# 自定義模型,定義一個類繼承torch.nn.Module
class TwoLayerNet(torch.nn.Module):
    def __init__(self, D_in, H, D_out):
        super(TwoLayerNet, self).__init__()
        # define the model architecture
        self.linear1 = torch.nn.Linear(D_in, H, bias=False)
        self.linear2 = torch.nn.Linear(H, D_out, bias=False)

    def forward(self, x):
        y_pred = self.linear2(self.linear1(x).clamp(min=0))
        return y_pred


model = TwoLayerNet(D_in, H, D_out)
# 定義損失函數
loss_fn = nn.MSELoss(reduction='sum')
learning_rate = 1e-4
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)

for it in range(500):
    # Forward pass
    y_pred = model(x)  # model.forward()

    # compute loss
    loss = loss_fn(y_pred, y)  # computation graph
    print(it, loss.item())

    optimizer.zero_grad()
    # Backward pass
    loss.backward()

    # update model parameters
    optimizer.step()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM