我的数据是具有不同长度的连续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]
在训练中工作正常,但在测试中真的很糟糕。我猜这是因为模型没有避免屏蔽值。关于如何屏蔽这种数据有什么建议吗?
1条答案
按热度按时间jjhzyzn01#
从
masking
layer documentation开始,您的数据应该以samples x timesteps x features
的格式进行结构化,当然,您可以将timesteps
的概念扩展到您所使用的任何形式的顺序信息。您可以按如下方式分配掩码值。
我也会考虑使用一个
[embedding layer][2]
,它可以以一种更简单、更优雅的方式处理这个问题(自动支持0
填充)。