如果要做人工智能,為什麼深度學習框架 PyTorch 為何值得學?

人工智能專欄推薦

1. Pytorch的安裝

可以登錄pytorch官方網站根據自己的實際情況組合安裝pytorch的命令,如下圖所示。

如果要做人工智能,為什麼深度學習框架 PyTorch 為何值得學?

2. Pytorch的基礎知識

1. 張量Tensor的類型介紹

常用的tensor類型有一下幾種:

32 位浮點型 torch.FloatTensor(默認)

64 位浮點型 torch.DoubleTensor

16 位整型 torch.ShortTensor

32 位整型 torch.lntTensor

64 位整型 torch.LongTensor

2. 創建Tensor

創建一個三行兩列的元素矩陣(默認類型是FloatTensor)

a=torch.Tensor([[1,2],[3,4],[5,6]])

創建一個LongTensor類型的Tensor

b=torch.LongTensor([[1,2],[3,4],[5,6]])

創建全是0的Tensor

c=torch.zeros((3,2))

創建符合正太分佈的Tensor

d=torch.randn((3,2))

如果要做人工智能,為什麼深度學習框架 PyTorch 為何值得學?

3. Numpy和Tensor之間類型轉換

a=np.array([[2,3],[4,5]])

torch_e=torch.from_numpy(a)#將numpy轉成tensor類型

b=torch_e.numpy()#將tensor轉成numpy類型

4. 將tensor放到Gpu上

a=torch.Tensor([[1,2],[3,4],[5,6]])

a_cuda=a.cuda()#這就將張量a放到Gpu上了

5. 數據預處理和數據的讀取

要想實現數據的讀取操作,可以定義一個類繼承和重寫torch.utils.data.Dataset,然後只需要定義__init__,__len__和__getitem__這三個函數,init用於讀取原始數據,並將數據賦值給類屬性,方便len和getitem方法獲取到。len用於返回該數據集的樣本數量,getitem用於根據索引返回指定索引位置的樣本。具體來說如下所示:

如果要做人工智能,為什麼深度學習框架 PyTorch 為何值得學?

6. DataLoader

剛剛定義的myDataset搭配使用DataLoader可以快速加載一個batch_size大小的數據樣本。

dataiter=DataLoader(myDataset,batch_size=32, shuffle=True , collate_fn=default collate)

其中參數batch_size表示每次加載32個樣本,shuffle表示打亂數據,就是不按順序從頭到尾取數據。collate fn 是表示如何取樣本的,我們可以定義 自己的函數來準確地實現想要的功能,默認的函數在一般情況下都是可以使用的。

7. torchvision包

torchvision主要包含三個方面

第一個方面是models:提供深度學習中各種經典網絡的網絡結構以及預訓練好的模型,包括AlexNet、VGG系列、ResNet系列、Inception系列等。

第二個方面是:datasets: 提供常用的數據集加載,設計上都是繼承torhc.utils.data.Dataset,主要包括`MNIST`、`CIFAR10/100`、`ImageNet`、`COCO`等。

第三個方面是transforms:提供常用的數據預處理操作,主要包括對Tensor以及PIL Image對象的操作。

比如現在加載已經預訓練好的Resnet模型用於遷移學習,可以model=models.resnet18(pretrained=True)

#pretrained=True表示不光加載模型同時加載模型參數

#pretrained=False表示只加載模型

比如下載要加載常用的CIFAR10數據集,可以

train_set = CIFAR10('./adata', train=True,download=True)

test_set = CIFAR10('./adata', train=False,download=True)

./adata表示數據存儲的位置

train=True表示訓練集,train=False表示測試集

download=True表示若數據存儲位置沒有數據則下載數據,若有數據則直接加載使用

8. 保存模型和加載模型

在 PyTorch 裡面使用 torch.save 來保存模型的結構和參數,有兩種保存方式:

方式一

即保存模型又保存模型的參數

torch.save(model , './model.pth ' )

方式二

只保存模型參數

torch.save(model.state_dict(),'./model_state.pth')

相應的加載模型也有兩種方式:

方式一:

加載完整的模型結構和參數信息,使用 load model = torch.load('model. pth' )

方式二:

加載模型參數信息,需要先導人模型的結構,然後通過 model.load state dic (torch.load('model_state.pth')) 來導入

9. Pytorch的nn模塊

在PyTorch裡面編寫神經網絡,所有的層結構都來自於torch.nn,所有的模型構建都是從這個基類 nn.Module,比如搭建一個普通的卷積神經網絡。

如果要做人工智能,為什麼深度學習框架 PyTorch 為何值得學?

10. torch.optim (優化)

在pytorch中使用torch.optim指定優化方式

優化方式一

隨機梯度下降優化算法:optimzier = torch.optim.SGD(net.parameters(), 1e-2)

#net.parameters()也就是神經網絡的所有的參數

#1e-2表示學習率

優化方式二

動量梯度下將優化算法:optimizer = torch.optim.SGD(net.parameters(), lr=1e-2, momentum=0.9)#momentum表示設置動量為0.9

優化方式三

Adam優化算法:optimizer = torch.optim.Adam(net.parameters(), lr=1e-3)

11. 固定神經網絡的參數

每個神經網絡模型的參數都有一個屬性requires_grad,只要設置這個屬性的值為False,就表示關閉這個參數的梯度,這樣在反向傳播的過程中就不會對這個參數進行更新,這就起到了凍結的作用了。比如我們想要凍結神經網絡的所有層,我們只需要設置神經網絡所有層的參數require_grad=False就可以了。具體實現代碼如下

for param in model.parameters():

param.requires_grad=False

我們要想訓練哪層,只需要把該層的神經網絡的參數的屬性require_grad設置為True就可以了,這樣在反向傳播的過程中就可以進行該層參數的更新了。


分享到:


相關文章: