Pytorch 四 訓練模型

2021-08-29 16:31:11 字數 2828 閱讀 3680

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...