Я пытаюсь использовать многослойную нейронную сеть для прогнозирования прочности бетона, используя пакет R neura lnet. Все отлично работает с одним слоем, но когда добавляется второй слой, все прогнозы становятся постоянными. Кто-нибудь знает, почему это? Как я могу это исправить?
Как рекомендовано в других потоках, я пытался играть с параметрами (изменение размера шага, количества узлов, количества слоев, скорости обучения и т. Д. c.) И I ' нам не повезло.
Воспроизводимый код включен ниже. Спасибо!
library (readr)
library(neuralnet)
library(caret)
#preping data
concreteData <-read_csv(url("https://raw.githubusercontent.com/ncuongce/AI-Machine-Learning/master/Concrete_Data.csv"))
names(concreteData)=c("Cement", "Blast_Furnance_Slag", "Fly_Ash", "Water", "Superplasticizer",
"Coarse_Aggregate", "Fine_Aggregate", "Age", "Strength")
target <- concreteData$Strength
predictors <- concreteData[,-9]
preprocessor <- preProcess(predictors,method='range',rangeBounds = c(0,1))
concreteDataScaled <- cbind(predict(preprocessor, predictors),"Strength"=target)
partition <- createDataPartition(concreteDataScaled$Strength, p=.75, list=FALSE)
concreteDataScaledTrain <- concreteDataScaled[partition,]
concreteDataScaledTest <- concreteDataScaled[-partition,]
#fitting neural net
nn <- neuralnet(Strength ~ ., as.matrix(concreteDataScaledTrain), hidden = c(7,5,3))
prediction <- compute(nn, as.matrix(concreteDataScaledTest[,-9]))
#evaluating the strength the strength of the predictions, only to find an error
cor(prediction$net.result, concreteDataScaledTest$Strength)
#which was evidently caused by the fact all the predictions are the same:
summary(prediction$net.result)
#importantly, this problem does not occur when there is only one hidden layer:
nn <- neuralnet(Strength ~ ., as.matrix(concreteDataScaledTrain), hidden = c(1))
prediction <- compute(nn, as.matrix(concreteDataScaledTest[,-9]))
cor(prediction$net.result, concreteDataScaledTest$Strength)
summary(prediction$net.result)