【问题标题】:zero acc and val_acc using keras in r在 r 中使用 keras 将 acc 和 val_acc 归零
【发布时间】:2019-07-23 15:47:17
【问题描述】:

我是 ANN 和 ML 的新手。我使用 keras 编写了一段简单的代码来训练我的 ANN。该 ANN 有 165 个输入和 1 个输出,具有多个观察值(回归模型)。我的问题是 acc 和 val_acc 都为零,这对我来说毫无意义。我不确定根本原因是什么,我的模型设置或我的数据。另外两个问题是 1)如果我训练这个模型两次,会得到不同的结果; 2)对于模型评估,我应该使用哪些数据集,训练数据还是测试数据?谢谢!

model = keras_model_sequential()
model %>% layer_dense(units = 10, activation = 'relu', input_shape = 165)
model %>% layer_dense(units = 6, activation = 'relu')
model %>% layer_dense(units = 1)

summary(model)

model %>% compile(
  loss = "mean_absolute_percentage_error",
  optimizer = optimizer_adam(lr = 0.001, beta_1 = 0.9, beta_2 = 0.999 ),
  metrics = c('accuracy')
)

Fitted_model = model %>% fit(
  x_train, y_train,
  epochs = 50, batch_size = 20,
  validation_split = 0.2
)

score <- model %>% evaluate(
  x_train, y_train
)

cat('Test loss:', score$loss, '\n')
cat('test accuracy:', score$acc, '\n')

y_predict <- model %>% predict(x_test, batch_size = 128)

【问题讨论】:

  • 如果我将最后一层的节点#设置为2或更多,就会得到非零的acc和val_acc。但这对我来说毫无意义。

标签: r keras


【解决方案1】:

我在这里问我的问题,因为我没有获得评论的特权...... 如果是您的数据或模型导致了您的问题,要获得答案,我们需要查看数据,或者至少了解数据的形状。此外,模型的某些输出(例如准确性等)也不会受到伤害。

对于您的问题 1:您所说的不同结果是什么意思?通常你初始化每一层的权重。如果你不设置你的 kernel_initializer 属性,keras 使用

kernel_initializer ='glorot_uniform'

如 API 中所示。 https://keras.io/layers/core/ 因此,如果您不设置种子,则每次跑步的体重都会有所不同。这就是为什么即使使用相同的数据进行训练也会得到不同的结果。

问题 2: 通常您使用训练数据的子集作为验证数据。有关这方面的更多信息,您可以阅读https://towardsdatascience.com/train-validation-and-test-sets-72cb40cba9e7

总体而言,即使您使用模型已经看到的数据(您的训练数据),您的 0% 验证准确度也表明您的模型在训练时并没有真正学习。这可能是因为您的网络非常小,但功能很多。您可能会尝试更仔细地选择您的特征并进行特征选择。你可以在这里找到一些输入https://towardsdatascience.com/feature-selection-techniques-in-machine-learning-with-python-f24e7da3f36e 您还可以增加网络并调整超参数以获得更好的结果(但我将从特征选择开始)。要了解超参数调整,这可能会有所帮助:https://www.analyticsvidhya.com/blog/2018/11/neural-networks-hyperparameter-tuning-regularization-deeplearning/

我希望这会有所帮助。如果有任何不清楚的地方,请随时询问。

【讨论】:

  • 嗨 Fabian,感谢您的回复。我发现一个帖子说度量“准确度”适用于分类,不适用于回归。所以我改变了指标。对于第一季度,您的回答让我很清楚。对于第二季度,这些链接非常有用,我将详细介绍。对我来说,训练集、验证集和测试集的概念很清楚。我不确定应该为“model %>% evaluate()”选择哪个。顺便问一下,有没有关于 ANN 和 ML 的好资源,因为我是新手,我很难理解一些高级概念,比如正则化和优化器的属性。
  • 这里是帖子的链接:stackoverflow.com/questions/41819457/…
  • 嗨,Harry,我想我必须在阅读技巧上再努力一点。但是很高兴你自己想出来了。对我有很大帮助的一本书是this one 另一个好的资源可能是this。我想你也可以在那里找到一些关于优化器的东西......或者你看看here希望它有帮助!
猜你喜欢
  • 2019-12-14
  • 2018-04-28
  • 2023-03-30
  • 2017-05-16
  • 2018-05-03
  • 2020-03-25
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多