繁体   English   中英

Conv1D 的 CNN 的输入

[英]The input to the CNN of Conv1D

我在机器学习领域工作。

对于更强大的网络,我将采用有关 Conv1D 的技术。

输入数据是一维列表数据,所以我认为 Conv1D 是最佳选择。

如果输入大小是(1, 740)会发生什么? 输入通道为1可以吗?

我的意思是,我感觉(1, 740)张量的 conv1D output 应该与简单的线性网络相同。

当然,我还将包括其他 conv1d 层,如下所示。

self.conv1 = torch.nn.Conv1d(in_channels=1, out_channels=64, kernel_size=5)
self.conv2 = torch.nn.Conv1d(in_channels=64,out_channels=64, kernel_size=5)
self.conv3 = torch.nn.Conv1d(in_channels=64, out_channels=64, kernel_size=5)
self.conv4 = torch.nn.Conv1d(in_channels=64, out_channels=64, kernel_size=5)

当输入通道为 1 时有意义吗?

提前致谢。 :)

我认为这很好。 注意Conv1D的输入应该是(B, N, M),其中B是batch size,N是通道数(例如RGB是3),M是特征数。 out_channels 是指要使用的 5x5 过滤器的数量。 看下面代码的 output 形状:

k = nn.Conv1d(1,64,kernel_size=5)
input = torch.randn(1, 1, 740)
print(k(input).shape) # -> torch.Size([1, 64, 736])

736 是不使用填充的结果,不保留尺寸。

nn.Conv1d层采用形状(b, c, w)的输入(其中b是批量大小, c是通道数, w是输入宽度)。 它的 kernel 尺寸是一维的。 它在输入维度上执行卷积操作(除了批处理和通道轴)。 这意味着 kernel 将对整个输入(无论是 1D、2D 还是 3D)应用相同的操作。 就像一个“滑动窗口”。 因此,它只有kernel_size参数。 这是卷积层的主要特征。

Conv1d 允许提取输入上的特征,而不管它在输入数据中的位置:在w -width 输入的开头或结尾。 如果您的输入是时间的(随时间变化的输入序列)或空间数据(图像),这将是有意义的。

另一方面, nn.Linear将一维张量作为输入并返回另一个一维张量。 您可以将w视为神经元的数量。 你最终会得到w*output_dim参数。 如果您的输入包含彼此独立的组件(例如 One/Multi-Hot-Encoding),则最好使用完全连接的层作为nn.Linear实现。

这两个行为不同。 当使用nn.Linear时——在你应该使用nn.Conv1d的场景中——如果这有意义的话,你的训练理想地会导致具有相同权重的神经元......但你可能不会。 过去,全密集连接层用于计算机视觉的深度学习。 今天使用卷积是因为有更有效且更适合这些类型的任务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM