Tensorflow 凯拉斯:在这种情况下,我应该使用一维还是二维卷积层?

Tensorflow 凯拉斯:在这种情况下,我应该使用一维还是二维卷积层?,tensorflow,machine-learning,keras,neural-network,conv-neural-network,Tensorflow,Machine Learning,Keras,Neural Network,Conv Neural Network,假设我们有一个带有N个标记实例的数据集,每个实例是一个2 X M的2D矩阵。也就是说,每个实例有两行,其中每行是一个大小为M(M列)的向量 我想构建一个NN,它的第一层执行卷积运算,内核有两行一列。其思想是将此内核应用于输入矩阵的每一列,为每一列生成一个值作为结果。该想法将生成一个大小为M的向量作为输出,其中向量的每个位置P将由P列中两行的卷积生成。下图说明了该想法 我不知道如何构建这个卷积层。在这种情况下,我需要一维卷积还是二维卷积 我想构建一个具有以下体系结构的NN: 输入为2xm,输出

假设我们有一个带有N个标记实例的数据集,每个实例是一个2 X M的2D矩阵。也就是说,每个实例有两行,其中每行是一个大小为M(M列)的向量

我想构建一个NN,它的第一层执行卷积运算,内核有两行一列。其思想是将此内核应用于输入矩阵的每一列,为每一列生成一个值作为结果。该想法将生成一个大小为M的向量作为输出,其中向量的每个位置P将由P列中两行的卷积生成。下图说明了该想法

我不知道如何构建这个卷积层。在这种情况下,我需要一维卷积还是二维卷积

我想构建一个具有以下体系结构的NN:

  • 输入为2xm,输出为M.I的卷积层 喜欢应用k个内核(生成大小为M的k个向量)
  • 致密层有500个神经元和relu激活
  • 0.2的辍学率
  • 致密层有2个神经元和softmax激活

你能帮我建立这个架构吗?

你想为此使用2D CNN。一个1D CNN只需要一个空间维度,但你有两个空间维度,即使你没有任何“宽度”可以多次卷积

2D CNN需要4D
(批次、高度、宽度、频道)
。您的内核也将相应地为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())

为此,您需要使用2D CNN。一个1D CNN只需要一个空间维度,但你有两个空间维度,即使你没有任何“宽度”可以多次卷积

2D CNN需要4D
(批次、高度、宽度、频道)
。您的内核也将相应地为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())