人工智能專欄推薦
1. 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))
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用於根據索引返回指定索引位置的樣本。具體來說如下所示:
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,比如搭建一個普通的卷積神經網絡。
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就可以了,這樣在反向傳播的過程中就可以進行該層參數的更新了。
閱讀更多 幻風的AI之路 的文章