Lenet
网络有关
nn.Conv2d(self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True))
'''
参数:
in_channel: 输入数据的通道数,例RGB图片通道数为3;
out_channel: 输出数据的通道数,这个根据模型调整;
kennel_size: 卷积核大小,可以是int,或tuple;kennel_size=2,意味着卷积大小2, kennel_size=(2,3),意味着卷积在第一维度大小为2,在第二维度大小为3;
stride:步长,默认为1,与kennel_size类似,stride=2,意味在所有维度步长为2, stride=(2,3),意味着在第一维度步长为2,意味着在第二维度步长为3;
padding: 零填充
'''
nn.Liner(self, in_features, out_features, bias=True)
class torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
张量操作有关
# 均匀分布
torch.rand(*sizes, out=None) → Tensor
# 标准正态分布
torch.randn(*sizes, out=None) → Tensor
randn() #初始化一个均值为0,方差为1的随机数Tensor。
ones() #初始化一个全为1的Tensor。
zeros() #初始化一个全为0的Tensor。
'''view'''
x = x.view(-1, 16*5*5) # 任意维度的张量变为适应维度的16*5*5长度张量
# 如上层(40,16,5,5)变为(40,16*5*5)
dataset及dataloader定义
'''MNIST 使用pytorch预定义的接口加载手写数据集'''
train_dataset = mnist.MNIST(root='./data', train=True, transform=transforms.ToTensor(), download=True)
test_dataset = mnist.MNIST(root='./data', train=False, transform=transforms.ToTensor(), download=True)
# Data loader
train_loader = DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False)
损失函数
CrossEntropyLoss(多分类)
该criterion将nn.LogSoftmax()和nn.NLLLoss()方法结合到一个类中
交叉熵
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(net.parameters(), lr=0.1)
'''关于使用gpu'''
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
print(device)
net.to(device)# 将模型转移至device
net.train() # 模型开启训练模式
'''训练中数据'''
for i, data in enumerate(train_loader):
images = data[0].to(device)
labels = data[1].to(device)