!!! I am just starting to understand PyTorch !!!

假设该模型具有以下体系 struct :

(conv1): Conv2d(2, 6, kernel_size=(5, 5), stride=(1, 1))
(pool): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))
(fc1): Linear(in_features=256, out_features=120, bias=True)
(fc2): Linear(in_features=120, out_features=84, bias=True)
(fc3): Linear(in_features=84, out_features=10, bias=True)

例如,我应该怎么做才能在Conv1和Pool层之间添加一些MyFunction?

以下是我当前的代码:

class CNN(Module):
    def __init__(self) -> None:
        super(CNN, self).__init__()
        self.cnn_layer = Sequential(
            Conv2d(in_channels=2, out_channels=6, kernel_size=5),
            # MyFunction here
            ReLU(inplace=True),
            MaxPool2d(kernel_size=2, stride=2),
        )
        self.linear_layers = Sequential(
            Linear(256, 120), Linear(120, 84), Linear(84, 10)
        )

    def forward(self, image):
        image = self.cnn_layer(image)

        image = image.view(-1, 4 * 4 * 16)
        image = self.linear_layers(image)
        return image

推荐答案

注意,Sequential层只是一种将多个前馈层Bundle 成"一层"的方法.这意味着,您不需要将数据显式地传递给每个层(与我下面所做的形成对比).我重写了你的例子,没有Sequential层,这样你就能看到下面发生了什么.这样做可以方便地访问层输出/输入,并根据需要更改它们.当然,你可以重新排列你的Sequential个Bundle 包,在你需要访问xBundle 包的地方进行拆分以实现你的"功能".

class CNN(Module):
    def __init__(self) -> None:
        super(CNN, self).__init__()
        self.conv1 = Conv2d(in_channels=2, out_channels=6, kernel_size=5)
        self.relu1 = ReLU(inplace=True)
        self.maxpool1 = MaxPool2d(kernel_size=2, stride=2)
        self.flatten = Flatten()
        self.linear1 = Linear(256, 120)
        self.linear2 = Linear(120, 84)
        self.linear3 = Linear(84, 10)

    def forward(self, image):
        x = self.conv1(image)
        x = x * 2 - 123  # arbitrary stuff
        x = self.relu1(x)
        x = self.maxpool(x)
        x = self.flatten(x)  # shorter than your reshaping
        x = linear1(x)
        x = linear2(x)
        x = linear3(x)
        return x

Python相关问答推荐

使用plotnine和Python构建地块

使用SciPy进行曲线匹配未能给出正确的匹配

大Pandas 胚胎中产生组合

无法通过python-jira访问jira工作日志(log)中的 comments

如何列举Pandigital Prime Set

如何从.cgi网站刮一张表到rame?

如何使用Python以编程方式判断和检索Angular网站的动态内容?

无论输入分辨率如何,稳定扩散管道始终输出512 * 512张图像

python中csv. Dictreader. fieldname的类型是什么?'

在Python中从嵌套的for循环中获取插值

如何删除重复的文字翻拍?

使用Python异步地持久跟踪用户输入

如何在Gekko中处理跨矢量优化

应用指定的规则构建数组

在我融化极点数据帧之后,我如何在不添加索引的情况下将其旋转回其原始形式?

如何设置nan值为numpy数组多条件

Python OPCUA,modbus通信代码运行3小时后出现RuntimeError

如何根据一定条件生成段id

用来自另一个数据框的列特定标量划分Polars数据框中的每一列,

两个名称相同但值不同的 Select 都会产生相同的值(discord.py)