tensorflow - 序列元素打乱后的奇怪序列分类性能

标签 tensorflow machine-learning deep-learning keras lstm

我有 100 万个序列,我试图将其分类为 0 或 1。结果相当平衡(0 类:70%,1 类:30%)。最大序列长度为 50,并且我已用带零的序列进行后填充。有 100 个独特的序列符号。嵌入长度为 30。它是一个在两个输出上训练的 LSTM 神经网络(一个是主输出节点,另一个在 LSTM 之后)。代码如下。

作为健全性检查,我运行了三个版本:一个是随机化结果标签(我预计性能会很糟糕),另一个是标签是正确的,但我随机化每个序列中的事件序列,但结果标签是正确的(我也期望表现不佳),最后是一个一切都保持原样的标签(我期望表现良好)。

相反,我发现了以下内容:

  • 打乱标签:准确度 = 69.5%(模型预测每个序列均为 0 类)
  • 打乱序列符号:准确度 = 88%!
  • 没有任何内容被打乱:准确率 = 90%

你对此有何看法?我能想到的是,从分析序列中获得的信号很少,也许大部分信号来自序列中符号的存在或不存在。也许 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)

最佳答案

假设您已经研究过 LSTM 的大小,您的结论似乎是合理的。除此之外,很难说,因为这取决于数据集是什么。例如,较短的序列可能更难以预测,并且如果大多数序列都很短,那么这也将支持结论。

尝试截断序列长度(例如前 25 个条目)也是值得的。

关于tensorflow - 序列元素打乱后的奇怪序列分类性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50159492/

相关文章:

python - Keras:无法在我的模型中使用自定义损失函数

python-3.x - Keras 模型适合 ValueError 预期 input_1 比我的数组大小大一个数字

machine-learning - 遗传算法是无监督学习的一种形式吗?

opencv - 机器学习,经过训练,它到底是如何得到预测的呢?开放式计算机视觉

deep-learning - 生成 "artificial"图像用于训练 CNN

python - Ubuntu : libcublas. so.10 中的 Tensorflow 2.3.0:无法打开共享对象文件

python - 如何在Pycharm中运行Tensorflow GPU?

Tensorflow:如何将张量的 channel 从 RGB 切换到 BGR?

python - 如何清理大型图像数据集以用于深度学习目的?

deep-learning - 我们是否应该使用 Huggingface(预)训练一个 BERT 无框模型的小写输入数据?