学生党还在学习中,看b站刘二大人的深度学习视频,看到卷积神经网络这里有问题没太懂,前来请教问题。
#1.prepare dataset
train_dataset = datasets.MNIST(root='../dataset/minst/', train=True, download=True, transform=transforms)
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True, num_workers=2)
test_dataset = datasets.MNIST(root='../dataset/minst/', train=True, download=True, transform=transforms)
test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=True, num_workers=2)
#2. use model by class
class Net(torch.nn.Module):
def __init__(self):
super(Net, self).__init__()
#MNIST 默认 1*28*28
self.conv1 = torch.nn.Conv2d(1, 10, kernel_size=5) #5*5的卷积核 5/2=2 一次少2圈 2*2=4 图像少4 10*24*24
self.conv2 = torch.nn.Conv2d(10, 20, kernel_size=5)
self.pooling = torch.nn.MaxPool2d(2) # Maxpool就像sigmoid一样 内不包含权重 同一层实例一个就行,包含w的代码需要单独实例
self.fc = torch.nn.Linear(320, 10) #320是 20*4*4的结果,可是我咋没理解20*4*4怎么变过来的 ?
上述代码,MNIST默认大小是1×28×28,通过第一次conv1卷积,图像大小变为10×24×24,然后执行conv2的第二次卷积,图像大小应该变成是20×20×20,再池化图小大小变为原来的1/2,也就是20×10×10,我看代码结合自己的理解就是这样
但是原视频中讲的过程最后是这样的,图像变成20×4×4
求解,问题就是这样啦,没理解卷积过程的图像大小变化
怎么代码的操作过程和视频中的不一样呢 我看代码的顺序是做了两次卷积,而视频里的是卷积了一次后池化再卷积