Keras类别预测始终相同分布

ltqd579y  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(194)

刚接触Keras/机器学习。我想我犯了一个愚蠢的错误,但我不知道是什么。
我有3个标签,每个时间步序列的训练数据被标记为[1, 0, 0][0, 1, 0],或[0, 0, 1]
我总是得到这样的分布,你在照片上看不出来,但是当你放大或者看实际的数据结果时,数字是不一样的。
https://imgur.com/a/o04cS97
实际结果只是根据上面的类别对斑点进行颜色编码,因此值都是1,但标签总是上面的一个。

model = Sequential()
model.add(LSTM(units=50, return_sequences=False, input_shape=(num_timesteps, num_features))
model.add(Dense(3, activation="softmax"))
model.compile(optimizer='adam', loss="categorical_crossentropy", metrics=["accuracy"])
model.fit(x_train, y_train, epochs=100, validation_data=(x_test, y_test))

results = model.predict(x_train)

我可以改变序列、时间步、特征、时间点的数量,添加其他的lstm层。分布会改变,但总是这样。我期望基于数据(甚至基于随机化),概率会变化,而不总是离散分层。
我最初只使用常规的Dense图层,然后使用Dense(3)图层进行分类,得到的结果符合预期。由于数据类型,切换到LSTM,不再得到预期结果,而是得到相同的数据

yhived7q

yhived7q1#

您的模型似乎过度拟合了训练数据。这意味着它在训练数据上表现良好,但在新数据上泛化效果不佳。
过度拟合的一个常见原因是所使用的模型相对于您拥有的定型数据量而言过于复杂。在您的情况下,使用50个单位的LSTM可能相对于您的数据而言过于复杂,尤其是在您没有大量定型示例的情况下。
若要避免过度拟合,您可以尝试使用正则化技术,例如在模型中加入舍弃图层。您也可以尝试使用参数较少的较简单模型,或使用更多训练数据。
此外,最好在定型过程中监视模型在验证集上的性能,以确保模型没有过度拟合。为此,您可以将验证集传递给模型的拟合方法,并将validation_split参数设置为介于0和1之间的值。这将使模型在每个定型阶段后评估其在验证集上的性能。

相关问题