Я новичок в нейронных сетях и пытаюсь воспроизвести результаты симуляционного исследования, в котором авторы создали нейронную сеть с одним скрытым слоем, состоящим из пяти нейронов. Они использовали функцию активации ReLU во входном слое, поэтому я следовал this и использовал аргумент
relu <-function(x) {log(1+exp(x))}
для реализации этого. Они также использовали кросс-энтропийную потерю для вывода, поэтому я использовал аргумент
err.fct="ce"
. Я предоставил полностью воспроизводимый код ниже. Этот код дает следующую ошибку
Error in
"if (reached.threshold < min.reached.threshold) {" :
missing value where TRUE/FALSE needed
и, следуя этому совету, я включил аргумент
learningrate = 0.0001
, но я все еще получаю ту же ошибку. Я также пытался установить stepmax = 1e7
и масштабировать данные, но мне не повезло. Любая помощь будет принята с благодарностью.
В качестве примечания, авторы достигли уровня ошибочной классификации около 0,1 при использовании NN и нескольких других алгоритмов классификации (RF, SVM, LR и др. c.) I смог воспроизвести эти показатели ошибочной классификации, используя эти другие методы.
library(neuralnet)
library(MASS)
n_0=300
n_1=300
cov<-diag(1,5,5)
for(i in 1:5){
for(j in 1:5){
cov[i,j]=0.5^(abs(i-j))
}
}
### training data ###
set.seed(123)
x<-mvrnorm(n = n_0, rep(0,5), Sigma=cov)
set.seed(123)
y<-mvrnorm(n = n_1, c(1,1.5,2,1.5,1), Sigma=cov)
train<-rbind(x,y)
z<-c(rep(0,n_0),rep(1,n_1))
training.dat<-cbind(train,z)
training.dat<-as.data.frame(training.dat)
training.dat[,1:5]<-scale(training.dat[,1:5])
### testing data ###
set.seed(123)
x<-mvrnorm(n = n_0, rep(0,5), Sigma=cov)
set.seed(123)
y<-mvrnorm(n = n_1, c(1,1.5,2,1.5,1), Sigma=cov)
test<-rbind(x,y)
z<-c(rep(0,n_0),rep(1,n_1))
testing.dat<-cbind(test,z)
testing.dat<-as.data.frame(testing.dat)
relu <-function(x) {log(1+exp(x))}
nn=neuralnet(as.factor(z) ~ ., data=training.dat, hidden=5, act.fct = relu, err.fct="ce",
linear.output = FALSE, learningrate = 0.0001, stepmax = 1e7)