1.在前三部分已經分別完成了資料的處理、神經網路的定義,還有優化器、損失函式的選擇,這次我們將開始學習如何訓練模型。
2.模型的訓練其實也是套路,大致分為一下五個部分。
1)載入trainloader中的資料,並將其轉換為variable 形式的資料,作為神經網路的輸入。
2)每次迴圈開始之前,確保梯度的值為0. optimizer.zero_grad()
3)前向傳播。也就是將資料feed進入網路net()。 outputs=net(inputs)
4)反向傳播。loss.backward()實現後傳。 loss=criterion(outputs,labels) loss.backward()
5)更新引數的值。optimizer.step()
每一次迴圈都重複這5步。
3.code實現 把之前的**也融合進來了
import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms
import torch.nn.functional as f
import torch.optim as optim
from torch.utils.data import dataloader
from torch.autograd import variable
import os
os.environ["cuda_visible_devices"]="2"
transform=transforms.compose(
[transforms.totensor(),transforms.normalize((.5,.5,.5),(.5,.5,.5))]
)# trainset=torchvision.datasets.cifar10(root="./dataset_mnist",train=true,download=false,transform=transform)
# trainloader=torch.utils.data.dataloader(trainset,batch_size=4,shuffle=true,num_workers=2)
# testset=torchvision.datasets.cifar10(root="./dtaset_mnist",train=false,download=false,transform=transform)
# testloader=torch.utils.data.dataloader(testset,batch_size=4,shuffle=true,num_workers=2)
dataset=torchvision.datasets.imagefolder("../dataset_cyclegan/mini",transform=transform)
dataloader=torch.utils.data.dataloader(dataset,batch_size=4,shuffle=true,num_workers=2)
class net(nn.module):
def __init__(self):
super(net, self).__init__()
self.conv1=nn.conv2d(3,6,5)
self.pool=nn.maxpool2d(2,2)
self.conv2=nn.conv2d(6,16,5)
self.fc1=nn.linear(16*5*5,120)
self.fc2=nn.linear(120,84)
self.fc3=nn.linear(84,10)
def forward(self,x):
x=self.pool(f.relu(self.conv1(x)))
x=self.pool(f.relu(self.conv2(x)))
x=x.view(-1,16*5*5)
x=f.relu(self.fc1(x))
x=f.relu(self.fc2(x))
x=self.fc3(x)
return x
net=net()
criterion=nn.crossentropyloss()
optimizer=optim.sgd(net.parameters(),lr=0.001,momentum=0.9)
for epoch in range(2):
running_loss=0.0
for i,data in enumerate(dataloader):
inputs,labels=data
inputs,labels=variable(inputs),variable(labels)
optimizer.zero_grad()
outputs=net(inputs)
loss=criterion(outputs,labels)
loss.backward()
optimizer.step()
running_loss +=loss.data[0]
#每2000步輸出乙個loss的平均值
if i %2000==1999:
print("[%d,%5d] loss: %.3f" %(epoch+1,i+1,running_loss/2000))
running_loss=0
print ("finished training")
訓練的結果如下圖
pytorch模型訓練步驟
講解 textcnn模型 1.載入conf檔案 x import module models.model name config x.config dataset,embedding 2.載入model,初始化conf裡面值 model x.model config to config.device...
pytorch 修改預訓練模型
torchvision中提供了很多訓練好的模型,這些模型是在1000類,224 224的imagenet中訓練得到的,很多時候不適合我們自己的資料,可以根據需要進行修改。1 類別不同 coding utf 8 import torchvision.models as models 呼叫模型 mode...
pytorch 載入預訓練模型
pytorch的torchvision中給出了很多經典的預訓練模型,模型的引數和權重都是在imagenet資料集上訓練好的 載入模型 方法一 直接使用預訓練模型中的引數 import torchvision.models as models model models.resnet18 pretrai...