Neuralnet 包阈值和神经元数量

问题描述

我正在使用 caret 的神经网络包实现来构建 MLP。我正在构建神经网络包,因为它是插入符号中唯一允许多个隐藏层的神经网络实现之一。

我正在使用 softplus 激活函数(因为神经网络不支持 ReLu),并且想根据几何金字塔方案 (8/4/2) 在我的情况下选择每一层上的神经元。

我按如下方式调用插入符

train(
x = x.train,y = y.train,method = "neuralnet",stepmax = 1000000
threshold = 40,err.fct = "sse",act.fct = softplus,tuneGrid = grid,# only includes the number of neurons each layer as mentioned above
trControl = ctrl,# some basic LGOCV with caret
preProcess = c("center","scale"))

我的问题有两个:

  1. 如您所见,我的门槛真的很高。这是因为当我选择接近认值 (0.01) 的阈值时,模型总是会抛出错误
Error in if (reached.threshold < min.reached.threshold) { : 
  missing value where TRUE/FALSE needed

这在调整 stepmax 参数时不会改变。一旦我以如此低的阈值启动网络,它就会立即抛出错误。有人明白为什么吗?

  1. 当我在第一层使用 8 个隐藏神经元时,模型也会抛出错误(这次没有具体的错误消息)并立即退出训练。这与阈值和 stepmax 无关,例如我可以将阈值设置为 1000,将 stepmax 设置为 10 亿,它仍然会立即抛出错误。如果我将激活功能更改为例如tanh 激活此错误不会发生。此外,当将第一个隐藏层上的神经元数量更改为 7 时,模型也能正常工作。为什么在第一个隐藏层上添加单个神经元时模型的训练会失败?我不明白为什么这个额外神经元的偏导数(以及权重)无法计算,从而导致模型失败。

我知道,如果没有可重现的示例,可能很难理解,但我无法转发数据集,也无法在开源数据集上重现错误。所以我只是希望有人遇到过类似的问题并且已经解决了。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)