二维的互相关运算(图像卷积)
代码实现
此处为2d卷积的实现,
import torch
from torch import nn
# 定义输入和预期输出
x = torch.randn(1,1,6,8)# (批量,通道数,行,列)
y = torch.randn(1,1,6,7)# 输出的行大小 = 输入行大小-卷积核行大小+1,列大小计算类似
# 定义卷积层
net = nn.Sequential(nn.Conv2d(1, 1, kernel_size=(1,2), bias=False))# 前面两个1,依次代表输入通道和输出通道
nn.init.normal_(net[0].weight, std=0.01)
# 定义损失函数及优化方法
loss = nn.MSELoss()
trainer = torch.optim.SGD(net.parameters(), lr=0.14)
# 训练
for epoch in range(10):
l = loss(net(x), y)
trainer.zero_grad()
l.backward()
trainer.step()
if (0 == epoch%2):
print('epoch:{}, loss:{}'.format(epoch, l))
'''
epoch:0, loss:1.1252577304840088
epoch:2, loss:1.0844213962554932
epoch:4, loss:1.0697766542434692
epoch:6, loss:1.0644114017486572
epoch:8, loss:1.0624078512191772
'''