顺序学习中 CNN 的任意长度输入
Arbitrary length inputs for CNNs in sequential learning
在 An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling 中,作者指出 TCN 网络,一种适用于顺序数据的特定类型的一维 CNN,"can also take in inputs of arbitrary lengths by sliding the 1D convolutional kernels",就像循环网络一样.我在问自己如何做到这一点。
对于 RNN,直接应用相同函数的频率与输入长度一样高。然而,对于 CNN(或任何一般的前馈神经网络),必须预先指定输入神经元的数量。因此,我可以看到 TCN 处理任意长度输入的唯一方法是指定 固定 长度输入神经元 space,然后向任意长度输入添加零填充。
我的理解正确吗?
如果您有一个全卷积神经网络,则没有理由具有完全指定的输入形状。你肯定需要一个固定的排名,最后一个维度可能应该是相同的,但除此之外,你绝对可以指定一个输入形状,在 tensorflow
中看起来像 Input((None, 10))
在 1D-CNNs 的情况下。
事实上,卷积核的形状不依赖于输入在时间维度上的长度(它可以依赖于最后一个维度,尽管通常在卷积神经网络中),你可以将它应用于任何输入具有相同的排名(和相同的最后一个维度)。
例如,假设您仅应用一个一维卷积,内核对 2 个相邻元素求和 (kernel = (1, 1)
)。此操作可以应用于任何输入长度,因为它始终是 1D。
但是,当遇到序列到标签的任务并需要在堆栈中进行进一步操作(例如全连接层)时,输入必须具有固定长度(或者必须通过零填充来实现) .
在 An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling 中,作者指出 TCN 网络,一种适用于顺序数据的特定类型的一维 CNN,"can also take in inputs of arbitrary lengths by sliding the 1D convolutional kernels",就像循环网络一样.我在问自己如何做到这一点。
对于 RNN,直接应用相同函数的频率与输入长度一样高。然而,对于 CNN(或任何一般的前馈神经网络),必须预先指定输入神经元的数量。因此,我可以看到 TCN 处理任意长度输入的唯一方法是指定 固定 长度输入神经元 space,然后向任意长度输入添加零填充。
我的理解正确吗?
如果您有一个全卷积神经网络,则没有理由具有完全指定的输入形状。你肯定需要一个固定的排名,最后一个维度可能应该是相同的,但除此之外,你绝对可以指定一个输入形状,在 tensorflow
中看起来像 Input((None, 10))
在 1D-CNNs 的情况下。
事实上,卷积核的形状不依赖于输入在时间维度上的长度(它可以依赖于最后一个维度,尽管通常在卷积神经网络中),你可以将它应用于任何输入具有相同的排名(和相同的最后一个维度)。
例如,假设您仅应用一个一维卷积,内核对 2 个相邻元素求和 (kernel = (1, 1)
)。此操作可以应用于任何输入长度,因为它始终是 1D。
但是,当遇到序列到标签的任务并需要在堆栈中进行进一步操作(例如全连接层)时,输入必须具有固定长度(或者必须通过零填充来实现) .