大学生必看!!!
第1关:conv
import torch
from torch import nn
# 定义二维卷积函数
def corr2d(X, K):
h, w = K.shape
# 输出矩阵Y
Y = torch.zeros((X.shape[0] - h + 1, X.shape[1] - w + 1))
########## begin ##########
for i in range(Y.shape[0]):
for j in range(Y.shape[1]):
Y[i, j] = (X[i:i + h, j:j + w] * K).sum()
########## end ##########
return Y
# 输入矩阵X与核矩阵K
X = torch.tensor([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
K = torch.tensor([[0, 1], [2, 3]])
print(corr2d(X, K))
第2关:pool
import torch
from torch import nn
def pool2d(X, pool_size,mode='max'):
X = X.float()
p_h, p_w = pool_size
Y = torch.zeros(X.shape[0] - p_h + 1, X.shape[1] - p_w + 1)
########## begin ##########
for i in range(Y.shape[0]):
for j in range(Y.shape[1]):
if mode == 'max':
Y[i, j] = (X[i:i + p_h, j:j +p_w]).max()
elif mode == 'avg':
Y[i,j]= X[i:i+p_h,j:j+p_w].mean()
########## end ##########
return Y
X = torch.tensor([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
print(pool2d(X, (2, 2)))
第3关:stride
import torch
import torch.nn as nn
X = torch.arange(16, dtype=torch.float).view((1, 1, 4, 4))
print("原矩阵为:")
print(X)
########## Begin ##########
pool2d = torch.nn.MaxPool2d(3, stride=1)
########## End ##########
print("最大池化后的矩阵为:")
print(pool2d(X))
第4关:kernel_size
import torch
import torch.nn as nn
########## Begin ##########
conv3_3 = nn.Conv2d(3, 16, 3)
print(conv3_3.kernel_size)
conv5_5 = nn.Conv2d(3, 16, 5)
print(conv5_5.kernel_size)
conv7_7 = nn.Conv2d(3, 16, 7)
print(conv7_7.kernel_size)
conv9_9 = nn.Conv2d(3, 16, 9)
print(conv9_9.kernel_size)
conv11_11 = nn.Conv2d(3, 16, 11)
print(conv11_11.kernel_size)
########## End ##########
第5关:padding
import torch
import torch.nn as nn
########## Begin ##########
conv2d = nn.Conv2d(32, 128, kernel_size=5, stride=2, padding=1)
maxpool2d = nn.MaxPool2d(3, stride=1, padding=2)
########## Begin ##########
print(conv2d)
print(maxpool2d)