Keras LSTM掩蔽多维数组



我的数据是具有不同长度的顺序3D阵列,类似于这样(这只是示例数据,而不是我的真实数据(:

data1 = [
[
[-1,2,3],
[1,0,-3],
[1,-2,0]
],
[
[1,-2,3],
[1,0,-3],
[-1,2,0]
]
]
data2 = [
[
[-1,2,3],
[1,0,-3],
[1,-2,0]
],
[
[1,-2,3],
[1,0,-3],
[1,-2,0]
],
[
[-1,2,3],
[-1,0,3],
[1,2,0]
]
]

因此,我使用填充来均衡数据的长度,将所有数组填充到最长数组的长度,即(3,3(

data1 = [
[
[-1,2,3],
[1,0,-3],
[1,-2,0]
],
[
[1,-2,3],
[1,0,-3],
[-1,2,0]
],
[
[-99,-99,-99],
[-99,-99,-99],
[-99,-99,-99]
]
]
data2 = [
[
[-1,2,3],
[1,0,-3],
[1,-2,0]
],
[
[1,-2,3],
[1,0,-3],
[1,-2,0]
],
[
[-1,2,3],
[-1,0,3],
[1,2,0]
]
]

我的问题是,Masking()层中正确的mask_value值是多少?整个[-99,-99,-99]还是仅仅-99?或者甚至可以更改掩码?

这是建立的模型:

model = Sequential()
model.add(Masking(mask_value=n, input_shape=(None,3)))
model.add(LSTM(64, return_sequences=True, activation='tanh'))
model.add(Dropout(0.25))
model.add(LSTM(128, return_sequences=True, activation='tanh'))
model.add(Dropout(0.2))
model.add(LSTM(64, return_sequences=False, activation='tanh'))
model.add(Dense(64, activation='tanh'))
model.add(Dense(32, activation='tanh'))
model.add(Dense(label_total, activation='softmax'))
model.compile(optimizer='Adam', loss='categorical_crossentropy', metrics=['accuracy'])

编辑:我试着使用这两个值,-99和NaN值的回波损耗和[-99,-99,-99]在训练中效果很好,但在测试中真的很差。我想这是因为模型没有避免掩蔽值。关于如何屏蔽此类数据,有什么建议吗?

根据masking层文档,您的数据应采用samples x timesteps x features格式进行结构化。当然,您可以将timesteps的概念扩展到您正在使用的任何形式的序列信息。

您可以按照如下方式指定遮罩值。

data[SHORT_DATA_INDEX, MISSING_SEQUENCE_INDICES, :] = MASKING_VALUE

我也会考虑使用[embedding layer][2],它可以以更简单、更优雅的方式处理这个问题(自动支持0填充(。

最新更新