Keras中LSTM的“ Y”输入的维度

时间:2018-10-09 12:55:58

标签: python tensorflow keras lstm

LSTM输出应为什么尺寸?目前,我正在使用return_sequences=False,而model.summary()建议Dense(1, activation='sigmoid')层应具有输出:

(None, 1)

None是批次大小。

这是否意味着我的y也必须是二维的?

当前,我正在使用形状为y.shape = (None,)的一维数组,它看起来可以正常工作,但是我想知道是否应该添加新轴来匹配尺寸,例如: y = y[:, np.newaxis]


编辑:

下面是我的模型摘要。

本质上,我正在对一个二进制分类器(0或1)建模,并且正在同时以batch_sizetime steps的形式输入可变大小的批次。因此,X.shape = (None, None, no_of_features)的尺寸。

如下所示,Dense()层的输出为(None, 1),其中我的Y实际上是(Batch_size, ),即一维numpy数组。我应该添加一个新轴以使Y变成2d吗?例如。 (batch_size, 1)

我都尝试过,而且似乎都可以。那有什么区别?

__________________________________________________________________________________________________
concatenate_8 (Concatenate)     (None, None, 285)    0           numeric_input[0][0]              
                                                                 concatenate_7[0][0]              
__________________________________________________________________________________________________
dropout_3 (Dropout)             (None, None, 285)    0           concatenate_8[0][0]              
__________________________________________________________________________________________________
lstm_4 (LSTM)                   (None, 64)           89600       dropout_3[0][0]                  
__________________________________________________________________________________________________
main_output (Dense)             (None, 1)            65          lstm_4[0][0]                     
==================================================================================================

1 个答案:

答案 0 :(得分:0)

两者都是等效的,任一种方法都可以。原因是(None,1)(None,)这两个形状是兼容的,并且会自动广播到相同的形状。这等效于您手动添加大小为1的新尺寸。Here是有关tensorflow广播的一些补充读物。