在一些最新的论文中,经常会看到有framework多次使用同一检测头对不同的输入进行检测,理论上讲,这是很合理的分而治之思想,但是在torch中,同一卷积块的复用究竟会产生怎样的影响,我觉得并不会那么顺人意。尤其是在类似cascade等迭代网络结构中,因为同一卷积块在前向传播时,其权重等参数是固定不变的,只会在计算损失后更新,并在下一轮前向传播中起作用,并不会因为在一次前向传播中先后使用而先后更新。
代码如下,简单定义了一个卷积神经网络模型,主要有conv1、conv2、conv3和classification中的权重需要训练和更新。
from torch import nn
import torch
import torch as t
from PIL import Image
import numpy as np
from tqdm import tqdm
from tensorboardX import SummaryWriter # 用于进行可视化
from torchviz import make_dot
class MyNetk(t.nn.Module):
def __init__(self):
super(MyNetk, self).__init__()
# print("卷积网络")
self.conv1 = nn.Sequential(
nn.Conv2d(
in_channels=3,
out_channels=4,
kernel_size=3,
stride=1,
padding=1,
b