2

我正在尝试重复一项研究(https://www.sciencedirect.com/science/article/pii/S0957417410011711

在研究中,他们使用了两种不同的函数,一种用于隐藏层,一种用于输出。在第 5314 页上,他们写道“在隐藏层上选择了一个正切 sigmoid 传递函数。另一方面,在输出层上使用了一个逻辑 sigmoid 传递函数。”

我在 R 中使用包“neuralnet”。

为了对隐藏层有一个切线 sigmoid 传递函数,我可以使用以下代码:

act.fct = 'tanh'

但这会产生一个问题,我要么 A) 对输出层具有相同的功能。

或者 B)我使用linear.output = Twhich 给我一个线性输出,但不是一个 sigmoid 函数。有什么方法可以让我为输出层设置另一个功能吗?

同样:如果我使用act.fct = 'logistic',我将在整个网络中获得一个逻辑 sigmoid 传递函数,为输出层提供正确的函数,但为隐藏层提供错误的函数。这又只带我走了一半。

我有一个粗略的替代方法来解决这个问题,我不想使用这种方法,应该可以使用err.fct =并创建一个自定义的误差函数,该函数使用线性输出并通过所需的 sigmoid 函数运行它,用于输出。compute然后我通过 sigmoid 函数分别运行命令的输出。但这似乎很麻烦,很可能我会在途中的某个地方搞砸。对此有任何适当/更好的解决方案吗?

4

1 回答 1

2

R 包似乎不neuralnet支持隐藏层中的激活函数。查看包keras为您解决这个问题。

model <- keras_model_sequential() 
model %>% 
  layer_dense(units = 100, activation = 'tanh') %>% 
  layer_dropout(rate = 0.2) %>% 
  layer_dense(units = 1, activation = 'sigmoid')
于 2018-12-10T16:03:18.843 回答