【发布时间】:2018-06-01 18:20:04
【问题描述】:
我正在训练一个文本分类模型,其中输入数据由 4096 个词频 - 逆文档频率组成。
我的输出是 416 个可能的类别。每条数据有 3 个类别,因此在 413 个零的数组中有 3 个 1(one-hot-encodings)
我的模型如下所示:
model = Sequential()
model.add(Dense(2048, activation="relu", input_dim=X.shape[1]))
model.add(Dense(512, activation="relu"))
model.add(Dense(416, activation="sigmoid"))
当我使用 binary_crossentropy 损失对其进行训练时,它的损失为 0.185,一个 epoch 后的准确率为 96%。 5 个 epoch 后,损失为 0.037,准确率为 99.3%。我想这是错误的,因为我的标签中有很多 0,它可以正确分类。
当我使用 categorical_crossentropy 损失对其进行训练时,它在前几个时期的损失为 15.0,准确率低于 5%,之后在几次之后陷入 5.0 的损失和 12% 的准确率(超过 50 个)纪元。
其中哪一个适合我的情况(带有多个 1 的大型 one-hot-encodings)?这些分数告诉我什么?
编辑:这些是model.compile() 声明:
model.compile(loss='categorical_crossentropy',
optimizer=keras.optimizers.Adam(),
metrics=['accuracy'])
和
model.compile(loss='binary_crossentropy',
optimizer=keras.optimizers.Adam(),
metrics=['accuracy'])
【问题讨论】:
-
对于这篇文章的评论者:这是一个与 Keras 相关的编码问题,与统计/机器学习理论或实践无关;因此,它的位置就在这里,而不是在交叉验证中......
-
只是好奇,为什么你在最后一层使用 'sigmoid' 而不是首选的 'softmax' 激活?
标签: python machine-learning keras neural-network deep-learning