如何正确地将2D数组传递给Conv1D?

时间:2019-02-05 20:40:06

标签: python arrays keras

我有一个二维数组,其中包含N行96维向量:

[[n_(1 1), n_(1 2), ... , n_(1 96)]
[n_(2, 1), n_(2, 2), ... , n_(2 96)
...
[n_(N, 1), n_(N, 2), ... , n_(N 96)]]

我想将上面数组的每个行向量传递给下面定义的Conv1D分类器:

from keras.initializers import Constant, RandomNormal
from keras.layers import Conv1D
from keras.activations import softmax

classifier_conv = Conv1D(filters=4,
                         kernel_size=1,
                         activation=softmax,
                         padding='same',
                         kernel_initializer=RandomNormal(stddev=0.01),
                         bias_initializer=Constant(value=0))(multi_array)

考虑到我的数组是二维的,它具有如下形状-(N, 96)(或Keras中的符号(?, 96))。问题是,Conv1D仅接受一个一维矢量(据我所知),但是我们应该传递N矢量。

我们可能要做的是通过迭代传递1D向量(也许像tf.scan这样的向量)。但是我不知道用Keras中的抽象层定义究竟可以做到这一点。


2D这样的数组传递给Conv1D的最简单方法是什么?这样一来,每个96维行都将写入所有预测?

在Keras完全有可能吗?还是我必须创建自己的图层来进行所有迭代?

1 个答案:

答案 0 :(得分:0)

array_new = np.expand_dims(2D_matrix_dense,2)

这将像(87398,513,1)

input =  Input(shape=(513, 1),name='features')

x = Conv1D(filters=128, kernel_size=3, activation='relu',kernel_initializer="he_normal")(input)