在MLP中使用swish激活时,损失函数给出NAN,为什么?

时间:2019-08-07 12:26:35

标签: r keras loss-function activation-function

我正在尝试在R的keras接口中训练带有MLP的二进制分类器。我编写了名为swish(x * sigmoid(alpha * x))的函数,但是我从损失函数中得到了NAN(我正在使用二进制交叉熵当然是用于二进制分类的)。 Swish在第一层也是唯一的隐藏层中,输出层具有S型激活。 alpha越小(摆动中的参数),则在模式历时之后(从模式开始),我得到的NAN就越少。

alpha = 0.5
swish = function(x){
  x*sigmoid::sigmoid(alpha*x)
}

set.seed(60)
model_1HL <- keras_model_sequential() 
model_1HL %>% 
  layer_dense(units = 40, activation = swish, input_shape = dim(X_train[2])) %>%
  layer_dense(units = 1, activation = 'sigmoid')

model_1HL %>% compile(
  loss = 'binary_crossentropy',
  optimizer = optimizer_nadam(),
  metrics = c('accuracy')
)

history_1HL<- model_1HL %>% fit(
  X_train, y_train, 
  epochs = 300, batch_size = 60
)
score_final_1HL <- model_1HL %>% evaluate(X_test, y_test)

我的数据中没有任何NA,并且此体系结构可以正常工作,并且使用ReLu可以提供很好的准确性,而不是挥霍。

0 个答案:

没有答案