学习记录:神经网络之二维卷积conv2d操作

import torch
import torch.nn.functional as F
# 输入(矩阵的行数和列数分别代表样本的高和宽)
input = torch.tensor([[1,0,2,2,1],
                      [2,1,0,2,1],
                      [0,1,3,1,2],
                      [3,2,1,2,3],
                      [0,2,3,1,3]])
 
# 卷积核
kernel = torch.tensor([[2,1,1],
                       [0,2,0],
                       [1,2,0]])

print("输入矩阵:")
print(input)
print("卷积核矩阵:")
print(kernel)
print("输入大小:", input.shape)
print("卷积核大小:", kernel.shape)

# 重新定义尺寸,把尺寸改成四维张量。
print("---------重新定义尺寸--------------")
# 第一维代表张量包含的样本或数据(batch size),第二维代表张量的通道(channel),第三维和第四维代表张量的大小
input = torch.reshape(input,(1,1,5,5))
# 第一维代表卷积核的个数,第二维代表每个卷积核的通道数,第三维和第四维代表卷积核的大小
kernel = torch.reshape(kernel,(1,1,3,3))
 
print(input.shape)
print(kernel.shape)

print("---------进行卷积操作--------------")
output = F.conv2d(input,kernel)# 默认步长stride为1
print(output)

# 卷积核是在输入矩阵上移动后遍历每一个像素,每次移动的大小就是步长stride
# stride=1或2时的输出
print("---------不同步长的对比--------------")
output1 = F.conv2d(input,kernel,stride=1)
print(output1)
output2 = F.conv2d(input,kernel,stride=2)
print(output2)

# 对输入矩阵周围采用0填充,每填充一次,矩阵大小的高和宽会在原来基础上+2*padding
# padding=1或2时的输出
print("---------不同填充的对比--------------")
output3 = F.conv2d(input,kernel,stride=1,padding=1)# 输入7*7,卷积核3*3
print(output3)# 输出5*5
output4 = F.conv2d(input,kernel,stride=1,padding=2)# 输入9*9,卷积核3*3
print(output4)# 输出7*7

 代码运行结果:

输入矩阵:
tensor([[1, 0, 2, 2, 1],
        [2, 1, 0, 2, 1],
        [0, 1, 3, 1, 2],
        [3, 2, 1, 2, 3],
        [0, 2, 3, 1, 3]])
卷积核矩阵:
tensor([[2, 1, 1],
        [0, 2, 0],
        [1, 2, 0]])
输入大小: torch.Size([5, 5])
卷积核大小: torch.Size([3, 3])
---------重新定义尺寸--------------
torch.Size([1, 1, 5, 5])
torch.Size([1, 1, 3, 3])
---------进行卷积操作--------------
tensor([[[[ 8, 11, 16],
          [14, 14, 10],
          [12, 16, 18]]]])
---------不同步长的对比--------------
tensor([[[[ 8, 11, 16],
          [14, 14, 10],
          [12, 16, 18]]]])
tensor([[[[ 8, 16],
          [12, 18]]]])
---------不同填充的对比--------------
tensor([[[[ 6,  4,  5,  8,  6],
          [ 5,  8, 11, 16, 12],
          [ 9, 14, 14, 10, 17],
          [ 7, 12, 16, 18, 17],
          [ 5, 13, 13,  9, 13]]]])
tensor([[[[ 0,  2,  1,  4,  6,  4,  1],
          [ 0,  6,  4,  5,  8,  6,  1],
          [ 1,  5,  8, 11, 16, 12,  4],
          [ 2,  9, 14, 14, 10, 17,  5],
          [ 0,  7, 12, 16, 18, 17,  7],
          [ 3,  5, 13, 13,  9, 13,  6],
          [ 0,  2,  5,  8, 10,  5,  6]]]])

猜你喜欢

转载自blog.csdn.net/weixin_47247597/article/details/130573697