这个是关于pytorch训练图片和验证图片数据集的简单程序历程
这个程序是学习b站上土堆的pytorch教程而写下的程序,欢迎大家学习土堆的有关教程,讲的挺好的。
import torchvision
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
from model import *
train_data = torchvision.datasets.CIFAR10(root='dataset', train=True, transform=torchvision.transforms.ToTensor(),
download=True)
test_data = torchvision.datasets.CIFAR10(root='dataset', train=False, transform=torchvision.transforms.ToTensor(),
download=True)
train_data_dataloader = DataLoader(train_data, batch_size=64)
test_data_dataloader = DataLoader(test_data, batch_size=64)
total_test = len(test_data)
class Tudui(nn.Module):
def __init__(self):
super(Tudui, self).__init__()
self.s1 = nn.Sequential(
Conv2d(3,32,5,1,2),
MaxPool2d(2),
Conv2d(32, 32, 5,1, 2),
MaxPool2d(2),
Conv2d(32, 64, 5,1, 2),
MaxPool2d(2),
Flatten(),
Linear(1024, 64),
Linear(64, 10)
)
def forward(self, x):
x = self.s1(x)
return x
total_train_step = 0
total_test_step = 0
tudui = Tudui()
writer = SummaryWriter('logs_fn')
step = 0
loss_fn = nn.CrossEntropyLoss()
learning_rate = 1e-2
optimizer = torch.optim.SGD(tudui.parameters(), lr=learning_rate)
epochs = 20
for i in range(epochs):
tudui.train()
for data in train_data_dataloader:
imgs, tars = data
output = tudui(imgs)
loss = loss_fn(output, tars)
optimizer.zero_grad()
loss.backward()
optimizer.step()
total_train_step = total_train_step + 1
if total_train_step % 100 == 0:
print("第{}轮训练,损失值是:{}".format(total_train_step, loss.item()))
writer.add_scalar('train', loss, total_train_step)
# 测试开始
tudui.eval()
total_test_loss = 0
total_accuracy = 0
with torch.no_grad():
for data in test_data_dataloader:
imgs, tars = data
output = tudui(imgs)
loss = loss_fn(output, tars)
total_test_loss = total_test_loss + loss.item()
accuracy = (output.argmax(1) == tars).sum()
total_accuracy = total_accuracy + accuracy
print('第{}测试,损失值是:{}'.format(total_test_step, total_test_loss))
writer.add_scalar('test', total_test_loss, step)
print('正确率是{}'.format(total_accuracy / total_test))
writer.add_scalar('accuracy', total_accuracy, total_test_step)
step = step + 1
total_test_step = total_test_step + 1
torch.save(tudui, "tudui_{}.pth".format(i))
print('模型已保存')
writer.close()
这个是一个简单的程序