Pytorch:MNIST十分类

import torch
import torch.nn as nn
import torchvision.datasets as normal_datasets
import torchvision.transforms as transforms


train_dataset = normal_datasets.MNIST(
	root='./mnist/',
	train=True,
	transform=transforms.ToTensor(),
	download=True)

test_dataset = normal_datasets.MNIST(
	root='./mnist/',
	train=False,
	transform=transforms.ToTensor())

train_loader = torch.utils.data.DataLoader(dataset=train_dataset,
										   batch_size=100,
										   shuffle=True)

test_loader = torch.utils.data.DataLoader(dataset=test_dataset,
										  batch_size=100,
										  shuffle=False)

class CNN(nn.Module):
	def __init__(self):
		super(CNN, self).__init__()
		self.conv1 = nn.Sequential(
			nn.Conv2d(1, 8, kernel_size=3, stride=1, padding=1),
			nn.BatchNorm2d(8),
			nn.ReLU(),
			nn.MaxPool2d(2))
		self.conv2 = nn.Sequential(
			nn.Conv2d(8, 16, kernel_size=3, stride=1, padding=1),
			nn.BatchNorm2d(16),
			nn.ReLU(),
			nn.MaxPool2d(2))
		self.conv3 = nn.Sequential(
			nn.Conv2d(16, 32, kernel_size=3, stride=1, padding=1),
			nn.BatchNorm2d(32),
			nn.ReLU(),
			nn.MaxPool2d(kernel_size=2,stride=1))
		self.fc = nn.Linear(6 * 6 * 32, 10)

	def forward(self, x):
		x = self.conv1(x)
		x = self.conv2(x)
		x = self.conv3(x)
		x = x.view(x.size(0), -1)
		x = self.fc(x)
		return x


cnn=CNN()
cnn = cnn.cuda()

loss_func = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(cnn.parameters(), lr=0.001)

for epoch in range(5):
	train_loss = 0.0
	train_correct = 0.0
	test_loss = 0.0
	test_correct = 0.0
	cnn.train()
	for i, (images, labels) in enumerate(train_loader):
		images = images.cuda()
		labels = labels.cuda()
		outputs = cnn(images)
		loss = loss_func(outputs, labels)
		_, pred = torch.max(outputs, 1)
		optimizer.zero_grad()
		loss.backward()
		optimizer.step()
		train_loss += loss.item()
		train_correct += torch.sum(pred == labels).item()

	cnn.eval()
	for i, (images, labels) in enumerate(test_loader):
		images = images.cuda()
		labels = labels.cuda()
		outputs = cnn(images)
		loss = loss_func(outputs, labels)
		test_loss += loss.item()
		_, pred = torch.max(outputs, 1)
		test_correct += torch.sum(pred == labels).item()

	print("Epoch:{}, Train_loss:{:.5f}, Train Accuracy:{:.2f}%, "
		  "Test_loss:{:.5f}, Test Accuracy:{:.2f}%".format(
		epoch + 1,train_loss/len(train_dataset),100 * float(train_correct) / len(train_dataset),
		test_loss / len(test_dataset),100 * float(test_correct) / len(test_dataset)))

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch是一个开源的机器学习框架,支持Python编程语言。在机器学习领域中,深度学习是一个热门的课题,而PyTorch框架则是实现深度学习的工具之一,被广泛用于图像识别、自然语言处理、语音识别等领域。 MNIST是一个著名的手写数字数据集,一共包含60,000个训练集和10,000个测试集,每个图像的大小都是28x28的灰度图像。分MNIST数据集是深度学习的入门练习之一,而在PyTorch中分MNIST数据集十分便捷。 首先要做的就是导入需要的库,如torch、torchvision等。其次需要对数据进行预处理,包括读取数据、定义数据转换、构建数据加载器等。在PyTorch中,可以使用torchvision.datasets.MNIST函数来读取MNIST数据集,可以使用torchvision.transforms来对数据进行压缩、翻转、裁剪等预处理,最后利用torch.utils.data.DataLoader函数将数据封装成批次。 接着就是定义模型。PyTorch中模型的定义非常灵活,可以直接继承nn.Module来自己构建网络结构。在分MNIST数据集中,可以使用卷积神经网络(CNN)来进行训练。CNN是针对图像等二维数据的深度学习方法,可以提取图像的局部特征,并减少模型的参数量,增加模型的泛化能力。 训练模型的核心就是定义损失函数和优化器。PyTorch中常用的损失函数是交叉熵损失,可以使用torch.nn.CrossEntropyLoss进行定义,而优化器则可以选择Adam、SGD等方法。 最后就是模型的训练和测试。训练阶段使用for循环对每个批次的数据进行计算并反向传播,优化模型参数;测试阶段则是利用训练好的模型对新的数据进行预测,并计算模型的准确率。可以使用torch.save函数将训练好的模型保存下来,以便之后的使用。 总之,PyTorchMNIST的分可以通过简单的几步实现。在实际应用中,可以针对不同的数据集和任务,利用PyTorch快速搭建和训练自己的深度学习模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值