微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Keras 多分类器总是给出 0 输出

如何解决Keras 多分类器总是给出 0 输出

我为多分类构建了这个 keras 模型

model = tf.keras.Sequential([
  tf.keras.layers.Dense(32,activation='relu'),tf.keras.layers.Dense(16,tf.keras.layers.Dropout(0.2),tf.keras.layers.Dense(8,tf.keras.layers.Dense(1,activation='sigmoid')
])

model.compile(optimizer='adam',loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True))

这是我的数据,归一化

Normalized Data

这些是我从 0 到 5 的目标值

Target values

我用这段代码准备数据集

train_dataset = tf.data.Dataset.from_tensor_slices((dff[:92000],target[:92000]))
test_dataset = tf.data.Dataset.from_tensor_slices((dff[500:520]))
# random slice of test dataset

train_dataset = train_dataset.batch(100)
test_dataset = test_dataset.batch(1)

然后我用这个训练和测试了我的模型

model.fit(train_dataset,epochs=20) 

predictions = model.predict(test_dataset)
classes = np.argmax(predictions,axis = 1)

classes 输出始终为 0:[0,0]

我已经尝试过没有标准化我的数据,但输出仍然相同。

解决方法

来自评论

将其更改为 Dense(5,activation='softmax') 后已解决问题(转述自 M.Innat)

工作代码如下图

model = tf.keras.Sequential([
  tf.keras.layers.Dense(32,activation='relu'),tf.keras.layers.Dense(16,tf.keras.layers.Dropout(0.2),tf.keras.layers.Dense(8,tf.keras.layers.Dense(5,activation='softmax')
])

model.compile(optimizer='adam',loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True))

Keras 多分类器总是给出 0 输出是因为你的最后一个 > 密集层只有 1 个单元,这意味着你的输出有一个 大小 (1,) 并且您正在应用结果获得的 argmax 操作 index 0 每次(从 Frightera 转述)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。