[英]Keras: Should I use an 1D or a 2D convolutional layer in this case?
假设我们有一个包含 N 个标记实例的数据集,每个实例是一个 2 X M 的二维矩阵。也就是说,每个实例有两行,其中每一行是一个大小为 M(M 列)的向量。
我想构建一个 NN,其第一层执行卷积操作,kernel 有两行一列。 想法是将此 kernel 应用于输入矩阵的每一列,为每一列生成一个值作为结果。 这个想法将生成为 output 大小为 M 的向量,其中向量的每个 position P 将由 P 列中的两行的卷积生成。下图说明了这个想法。
我不知道如何构建这个卷积层。 在这种情况下,我需要 1D 还是 2D 卷积?
我想构建一个具有以下架构的神经网络:
你能帮我建立这个架构吗?
您想为此目的使用 2D CNN。 一维 CNN 只需要 1 个空间维度,但您有 2 个空间维度,即使您没有任何“宽度”可以进行多次卷积。
2D CNN 需要 4D (batch, height, width, channels)
。 您的 kernel 也相应地是 4D。
检查此代码以获取更多详细信息 -
import tensorflow as tf
inp = np.array([[[[2.1],[0.8]],[[1.3],[2.4]],[[1.8],[1.3]]]])
kernel = np.array([[[[1.0]],[[2.0]]]])
print('input shape ->',inp.shape)
print('kernel shape ->',kernel.shape)
result = tf.nn.conv2d(x, kernel, strides=(1,1,1,1), padding='VALID')
print('result shape ->',result.shape)
print(result.numpy())
input shape -> (1, 3, 2, 1)
kernel shape -> (1, 2, 1, 1)
result shape -> (1, 3, 1, 1)
[[[[3.6999998]]
[[6.1000004]]
[[4.3999996]]]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.