keras predict_classes意外暗淡

时间:2018-03-29 15:15:05

标签: r tensorflow keras

我刚刚学习ML基础知识。我正在使用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: 网络是使用网页样本创建的,所以我认为我的改编不正确(请记住我只是想学习机制,所以我提前道歉以防万一)

1 个答案:

答案 0 :(得分:0)

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