Pytorch - 推断线性层 in_features

Posted

技术标签:

【中文标题】Pytorch - 推断线性层 in_features【英文标题】:Pytorch - Inferring linear layer in_features 【发布时间】:2019-10-09 06:57:19 【问题描述】:

我正在构建一个玩具模型来获取一些图像并给我一个分类。我的模型看起来像:

conv2d -> pool -> conv2d -> linear -> linear.

我的问题是,当我们创建模型时,我们必须根据输入图像的大小来计算第一个线性层的大小in_features。如果我们得到不同大小的新图像,我们必须为我们的线性层重新计算in_features。为什么我们必须这样做?就不能推断吗?

【问题讨论】:

【参考方案1】:

从 1.8 开始,PyTorch 现在有 LazyLinear 来推断输入维度:

推断出 in_featurestorch.nn.Linear 模块。

【讨论】:

谢谢,我已经习惯了计算它,但是他们把这个包括在内真是太好了。【参考方案2】:

您为什么希望线性层推断其输入大小?如果您有意想要更改此大小(即,conv 层输出通道或其他)怎么办。我相信你的工作应该是参数化的(即,由明确定义的参数控制)。一种解决方法是始终将输入图像转换为定义的形状。但是,我不建议这样做,因为这可能会严重影响模型的准确性,因为转换包括丢失像素(即输入的特征)。

【讨论】:

以上是关于Pytorch - 推断线性层 in_features的主要内容,如果未能解决你的问题,请参考以下文章

pytorch nn.Linear()详解

关于对PyTorch中nn.Linear的官方API文档解读

如何在 PyTorch 中高效实现非全连接线性层?

如何在简单的pytorch模型中重构cnn层的输出张量以供线性层使用

如何正确地为 PyTorch 中的嵌入、LSTM 和线性层提供输入?

在 pytorch 中通过具有线性输出层的 RNN 发送的填充批次的掩码和计算损失