在Pytorch的torchvision中集成了很多常用的数据集,例如MNIST、CIFA-10、COCO等,使用的方法就是在torchvision.dataset内直接使用,如torchvision.datasets.cifa10(),一般加载数据集有这样几个参数:
root(str): 表示数据集文件的路径train(bool): 如果是True表示从train set中创建,否则从test set中创建transform: 用于数据转换操作,是一个transforms对象, 接受一个PIL image输入,返回转换后的数据(如tensor)download(bool): 表示是否从网上下载数据集,True表示下载。 import torch import torchvision import torchvision.transforms as transforms import torch.optim as optim #transforms.Compose([transform_list])可以将多个数据转换操作串联 #transforms.ToTensor()会将0-255的灰度图转化为0-1的tensor #transforms.Normalize(mean_tuple, std_tuple) 进行 data = (data - mean) / std #范围(0,1)经过变换会得到(-1,1) transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))]) #num_workers表示使用多少个进程来导入数据, 0代表使用主进程, 2表示使用两个子进程 trainset = torchvision.datasets.CIFAR10(root='.\data',train=True, download=True, transform = transform) trainloder = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=2) testset = torchvision.datasets.CIFAR10(root='.\data',train=False, download=True, transform = transform) testloder = torch.utils.data.DataLoader(testset, batch_size=4, shuffle=True, num_workers=2) Files already downloaded and verified Files already downloaded and verifiedPytorch自定义模型时,所有的模型均要继承自torch.nn.Module,并且需要重写以下两个方法:
__int__():初始化函数, 需要调用super(Model, self).__init__()完成父类(nn.Module)部分的初始化,而后需要定义网络结构,nn模块的层结构都是可以直接使用layer(x)获得层输出。另外, 也可以采用nn.Sequential([layer1, layer2,…])对多个层进行串联forward(): 定义前向传播:返回一个前向传播的结果 #Pytorch 神经网络 #torch.nn import torch import torch.nn as nn import torch.nn.functional as F class Net(nn.Module): #自定义模型,继承自nn.Module def __init__(self): super(Net, self).__init__() #在模型初始化中调用父类初始化 #定义模型结构 layer self.conv1 = nn.Conv2d(3, 6, 5) self.conv2 = nn.Conv2d(6, 16, 5) #定义结构时需要考虑已经pooling对Feature map的维度影响 self.fc1 = nn.Linear(16*5*5, 120) self.fc2 = nn.Linear(120,84) self.fc3 = nn.Linear(84,10) def num_flat_feature(self,x): size = x.size()[1:] num_feature = 1 for dim in size: num_feature *= dim return num_feature def forward(self, x): #定义前向传播 x = F.max_pool2d(F.relu(self.conv1(x)),(2,2)) x = F.max_pool2d(F.relu(self.conv2(x)), (2,2)) x = x.reshape(-1,self.num_flat_feature(x)) x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x完整代码:Github