在路缘石中输入形状和Conv1d

2024-05-17 06:21:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我的神经网络的第一层是这样的:

model.add(Conv1D(filters=40,
                 kernel_size=25,
                 input_shape=x_train.shape[1:],
                 activation='relu',
                 kernel_regularizer=regularizers.l2(5e-6),
                 strides=1))

如果我的输入形状是(600,10)

我得到(None, 576, 40)作为输出形状

如果我的输入形状是(6000,1)

我得到(None, 5976, 40)作为输出形状

所以我的问题是这里到底发生了什么?第一个例子只是忽略了90%的输入吗?


Tags: noneaddinputsizemodeltrain神经网络activation
1条回答
网友
1楼 · 发布于 2024-05-17 06:21:46

这并不是“忽略”90%的输入,问题很简单,如果对大小为X的输入执行大小为K的核的一维卷积,卷积的结果将具有大小为X-K+1的结果。如果希望输出与输入具有相同的大小,则需要扩展或“填充”数据。有几种策略可以实现这一点,例如加零、在结尾复制值或环绕。Keras'^{}有一个padding参数,您可以将其设置为"valid"(默认值,无填充)、"same"(在输入两边添加零以获得与输入相同的输出大小)和"causal"(仅在一端使用零填充,这是WaveNet中的概念)。

更新

关于你评论中的问题。所以你说你的输入是(600, 10)。我假设这是一个示例的大小,您有一批大小为(N, 600, 10)的示例。从卷积运算的角度来看,这意味着您有N个例子,每个例子的长度至多为600(这个“长度”可能是时间或其他什么,它只是卷积工作的维度),并且在这些600点中的每个点,您都有大小为10的向量。这些向量中的每一个都被视为具有10特征(例如价格、高度、大小等)的原子样本,或者,如卷积上下文中有时所称的“通道”(来自2D图像卷积中使用的RGB通道)。

关键是,卷积有一个内核大小和多个输出通道,这是Keras中的filters参数。在您的示例中,卷积所做的是取25个连续的10个向量的每个可能片段,并为每个片段生成一个40个向量(当然,对于批处理中的每个示例)。所以你从输入中有10个特征或通道到卷积后有40个。这并不是说它只使用了最后一个维度中10个元素中的一个,而是使用了所有元素来生成输出。

如果输入中维度的含义不是卷积所解释的,或者它执行的操作不是您所期望的,则可能需要重塑输入或使用其他类型的层。

相关问题 更多 >