Keras LSTM掩蔽多维阵列

wz3gfoph  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(153)

我的数据是具有不同长度的连续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]在训练中工作正常,但在测试中真的很糟糕。我猜这是因为模型没有避免屏蔽值。关于如何屏蔽这种数据有什么建议吗?

jjhzyzn0

jjhzyzn01#

masking layer documentation开始,您的数据应该以samples x timesteps x features的格式进行结构化,当然,您可以将timesteps的概念扩展到您所使用的任何形式的顺序信息。
您可以按如下方式分配掩码值。

data[SHORT_DATA_INDEX, MISSING_SEQUENCE_INDICES, :] = MASKING_VALUE

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

相关问题