【问题标题】:keras predict_classes unexpected dimkeras predict_classes 出乎意料的暗淡
【发布时间】:2018-03-29 15:15:04
【问题描述】:

我只是在学习机器学习基础知识。我正在使用 keras/tensorflow(通过 RStudio)。我正在尝试开发一个网络来模拟与 11 数字向量的输出相关的 4 数字向量之间的关系。这些值都在 0-1 之间。每个向量的和必须小于 1。 型号是

model_l1 <- keras_model_sequential()
model_l1 %>%
layer_dense(units = 64, activation = 'sigmoid', input_shape = c(4),dtype = 'float32') %>% 
layer_dropout(rate = 0.6) %>% 
layer_dense(units = 32, activation = 'sigmoid',dtype = 'float32') %>%
layer_dropout(rate = 0.4) %>%
layer_dense(units = 11, activation = 'sigmoid',dtype = 'float32')


model_l1 %>% compile(
loss = 'mean_squared_error',
optimizer = 'sgd',
metrics = c('mse','acc')
)

训练收敛得很好,损失为:0.0037 - mean_squared_error: 0.0037 - acc: 0.9898。

如果我使用测试集来评估模型:

model_l1 %>% evaluate(l_x_test, l_y_test)

我得到这个:

$损失 [1] 0.001548773

$mean_squared_error [1] 0.001548773

$acc [1] 0.9999

问题是当我尝试使用模型进行预测时(例如使用相同的测试集):

model_l1 %>% predict_classes((l_x_test)

我期待一个 11 列的输出,但我得到了一个带有常数的向量:

[1] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5.....

我有点卡在这里,所以我会感谢任何帮助 亲切的问候

PS: 该网络是使用网页示例创建的,所以我想我的改编不正确(请记住我只是想学习机制,所以我提前道歉以防万一)

【问题讨论】:

  • predict_classes 将返回最终预测的标签,而不是概率。如果你想要概率,你可能应该使用predict_proba

标签: r tensorflow keras


【解决方案1】:
  1. predict_classes 只是输出的 argmax,而不是每个类的概率。非 argmaxed 输出可以通过 predict 获得(在 R 包装器中可能被命名为 predict_proba)。
  2. 如果您希望输出向量概率总和为 1,请在最后一层使用 softmax 激活。
  3. 在您提供的有限背景下,您报告的任何内容都不会显得奇怪或错误。例如,在严重的类不平衡的情况下,单类预测是合理的。

【讨论】:

  • 谢谢!,就这样吧!
猜你喜欢
  • 2019-01-11
  • 1970-01-01
  • 2014-09-11
  • 2013-07-15
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 2014-09-19
相关资源
最近更新 更多