我有一百万个序列,我试图将其归类为0或1.结果相当平衡(0级:70%,1级:30%)。最大序列长度为50,并且我用带有零的序列进行后填充。有100个独特的序列符号。嵌入长度为30.它是在两个输出上训练的LSTM NN(一个是主输出节点,另一个是LSTM之后)。代码如下。
作为一个完整性检查,我运行了三个版本:一个是我随机化结果标签(我期望可怕的表现),另一个标签是正确的,但我随机化每个序列中的事件序列但结果标签是正确的(我也期望糟糕的表现),最后一个是没有洗过的东西(我期望良好的表现)。
相反,我找到了以下内容:
你对此有何看法?我所能想到的是,从分析序列中获得的信号很少,并且可能大部分信号来自序列中是否存在符号。也许RNN和LSTM在这里有点过分了吗?
# Input 1: event type sequences
# Take the event integer sequences, run them through an embedding layer to get float vectors, then run through LSTM
main_input = Input(shape =(max_seq_length,), dtype = 'int32', name = 'main_input')
x = Embedding(output_dim = embedding_length, input_dim = num_unique_event_symbols, input_length = max_seq_length, mask_zero=True)(main_input)
lstm_out = LSTM(32)(x)
# Auxiliary loss here from first input
auxiliary_output = Dense(1, activation='sigmoid', name='aux_output')(lstm_out)
# An abitrary number of dense, hidden layers here
x = Dense(64, activation='relu')(lstm_out)
# The main output node
main_output = Dense(1, activation='sigmoid', name='main_output')(x)
## Compile and fit the model
model = Model(inputs=[main_input], outputs=[main_output, auxiliary_output])
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'], loss_weights=[1., 0.2])
print(model.summary())
np.random.seed(21)
model.fit([train_X1], [train_Y, train_Y], epochs=1, batch_size=200)
答案 0 :(得分:1)
假设你已经玩过LSTM的大小,你的结论似乎是合理的。除此之外,很难说它取决于数据集是什么。例如,可能是较短的序列更难以预测,如果您的大多数序列都很短,那么这也将支持结论。
值得尝试截断你的序列长度,说前25个条目。