Pytorch入门实例:mnist分类训练
2017-09-11 19:26
651 查看
#!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'denny' __time__ = '2017-9-9 9:03' import torch import torchvision from torch.autograd import Variable import torch.utils.data.dataloader as Data train_data = torchvision.datasets.MNIST( './mnist', train=True, transform=torchvision.transforms.ToTensor(), download=True ) test_data = torchvision.datasets.MNIST( './mnist', train=False, transform=torchvision.transforms.ToTensor() ) print("train_data:", train_data.train_data.size()) print("train_labels:", train_data.train_labels.size()) print("test_data:", test_data.test_data.size()) train_loader = Data.DataLoader(dataset=train_data, batch_size=64, shuffle=True) test_loader = Data.DataLoader(dataset=test_data, batch_size=64) class Net(torch.nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = torch.nn.Sequential( torch.nn.Conv2d(1, 32, 3, 1, 1), torch.nn.ReLU(), torch.nn.MaxPool2d(2)) self.conv2 = torch.nn.Sequential( torch.nn.Conv2d(32, 64, 3, 1, 1), torch.nn.ReLU(), torch.nn.MaxPool2d(2) ) self.conv3 = torch.nn.Sequential( torch.nn.Conv2d(64, 64, 3, 1, 1), torch.nn.ReLU(), torch.nn.MaxPool2d(2) ) self.dense = torch.nn.Sequential( torch.nn.Linear(64 * 3 * 3, 128), torch.nn.ReLU(), torch.nn.Linear(128, 10) ) def forward(self, x): conv1_out = self.conv1(x) conv2_out = self.conv2(conv1_out) conv3_out = self.conv3(conv2_out) res = conv3_out.view(conv3_out.size(0), -1) out = self.dense(res) return out model = Net() print(model) optimizer = torch.optim.Adam(model.parameters()) loss_func = torch.nn.CrossEntropyLoss() for epoch in range(10): print('epoch {}'.format(epoch + 1)) # training----------------------------- train_loss = 0. train_acc = 0. for batch_x, batch_y in train_loader: batch_x, batch_y = Variable(batch_x), Variable(batch_y) out = model(batch_x) loss = loss_func(out, batch_y) train_loss += loss.data[0] pred = torch.max(out, 1)[1] train_correct = (pred == batch_y).sum() train_acc += train_correct.data[0] optimizer.zero_grad() loss.backward() optimizer.step() print('Train Loss: {:.6f}, Acc: {:.6f}'.format(train_loss / (len( train_data)), train_acc / (len(train_data)))) # evaluation-------------------------------- model.eval() eval_loss = 0. eval_acc = 0. for batch_x, batch_y in test_loader: batch_x, batch_y = Variable(batch_x, volatile=True), Variable(batch_y, volatile=True) out = model(batch_x) loss = loss_func(out, batch_y) eval_loss += loss.data[0] pred = torch.max(out, 1)[1] num_correct = (pred == batch_y).sum() eval_acc += num_correct.data[0] print('Test Loss: {:.6f}, Acc: {:.6f}'.format(eval_loss / (len( test_data)), eval_acc / (len(test_data))))
相关文章推荐
- Pytorch入门之mnist分类实例
- mnist入门训练
- 文本分类入门(六)训练Part 3
- 基于PyTorch的深度学习入门教程(五)——训练神经网络分类器
- 用Pytorch训练CNN(数据集MNIST,使用GPU)
- tensorflow - mnist入门实例
- tensorflow 学习笔记(四) - mnist实例--用简单的神经网络来训练和测试
- PyTorch: 训练分类器实战详解(分类CIFAR10)
- caffe入门示例--mnist手写数子集训练
- Pytorch打怪路(二)pytorch进行mnist训练和测试
- TensorFlow入门(二)简单前馈网络实现 mnist 分类
- caffe练习实例(1)——训练mnist数据集
- Tensorflow学习教程------利用卷积神经网络对mnist数据集进行分类_利用训练好的模型进行分类
- NLP用CNN分类Mnist,提取出来的特征训练SVM及Keras的使用(demo)
- Caffe 入门(训练mnist)
- Tensorflow深度学习入门——采用卷积和池化优化训练MNIST数据——代码+注释
- TensorFlow 入门之第一个神经网络训练 MNIST
- Caffe windows下入门级别的从编译到训练然后到分类(用python接口)资源下载(一)
- 文本分类入门(四)训练Part 1
- tensorflow训练分类自己的图片(超详细入门版)