1 Setup

1.1 Packages and options

library(NNbenchmark)
library(kableExtra)
options(scipen = 999)

1.2 Datasets to test

NNdataSummary(NNdatasets)
##      Dataset n_rows n_inputs n_neurons n_parameters
## 1     mDette    500        3         5           26
## 2  mFriedman    500        5         5           36
## 3  mIshigami    500        3        10           51
## 4    mRef153    153        5         3           22
## 5     uDmod1     51        1         6           19
## 6     uDmod2     51        1         5           16
## 7  uDreyfus1     51        1         3           10
## 8  uDreyfus2     51        1         3           10
## 9    uGauss1    250        1         5           16
## 10   uGauss2    250        1         4           13
## 11   uGauss3    250        1         4           13
## 12 uNeuroOne     51        1         2            7

1.3 ANN2 trainPredict arguments - inputs x, y

if(dir.exists("D:/GSoC2020/Results/2020run03/"))
{  
  odir <- "D:/GSoC2020/Results/2020run03/"
}else if(dir.exists("~/Documents/recherche-enseignement/code/R/NNbenchmark-project/NNtempresult/"))
{  
  odir <- "~/Documents/recherche-enseignement/code/R/NNbenchmark-project/NNtempresult/"
}else
  odir <- "~"

nrep <- 10
maxit2ndorder  <-    200
maxit1storderA <-   1000
maxit1storderB <-  10000
maxit1storderC <- 100000

#library(ANN2)
ANN2.method <- c("sgd", "adam", "rmsprop")
hyperParams.ANN2 <- function(optim_method, ...) {
    
    if (optim_method == "sgd")     { iter <- maxit1storderA; lr <- 0.01} 
    if (optim_method == "adam")    { iter <- maxit1storderA; lr <- 0.01} 
    if (optim_method == "rmsprop") { iter <- maxit1storderA; lr <- 0.01} 
    
    out <- list(iter = iter, lr = lr)
    return(out)
}

NNtrain.ANN2 <- function(x, y, dataxy, formula, hidden_neur, optim_method, hyperParams, ...){
    
    hyper_params <- do.call(hyperParams, list(optim_method, ...))
    
    iter <- hyper_params$iter
    lr <- hyper_params$lr
    
    NNreg <- ANN2::neuralnetwork(X = x, y = y, 
                           val.prop = 0, 
                           standardize = FALSE, 
                           hidden.layers = hidden_neur, 
                           regression = TRUE,
                           loss.type = "squared",
                           n.epochs = iter,
                           optim.type = optim_method,
                           learn.rates = lr,
                           verbose = FALSE,
                           random.seed = as.integer(runif(1)*10000000))
    
   return (NNreg)
}
NNpredict.ANN2 <- function(object, x, ...)
    as.numeric(predict(object, x)$predictions)    
NNclose.ANN2 <- function()
  if("package:ANN2" %in% search())
    detach("package:ANN2", unload=TRUE)
ANN2.prepareZZ <- list(xdmv = "m", ydmv = "m", zdm = "d", scale = TRUE)

if(FALSE)
res <- train_and_predict_1data(1, ANN2.method, "NNtrain.ANN2", "hyperParams.ANN2", "NNpredict.ANN2", 
                               NNsummary, "NNclose.ANN2", NA, ANN2.prepareZZ, nrep=2, echo=TRUE, doplot=FALSE,
                               pkgname="ANN2", pkgfun="neuralnetwork", rdafile=TRUE, odir=odir)

2 Launch package’s trainPredict

res <- trainPredict_1pkg(1:12, pkgname = "ANN2", pkgfun = "neuralnetwork", ANN2.method,
  prepareZZ.arg = ANN2.prepareZZ, nrep = nrep, doplot = FALSE,
  csvfile = TRUE, rdafile = TRUE, odir = odir, echo = FALSE)

3 Results

#print(res)
kable(apply(res[,,1,], c(3,1), min), caption = "sgd")%>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
sgd
RMSE MSE MAE WAE time
mDette 1.0794 1.1651 0.7815 6.2998 0.17
mFriedman 0.0179 0.0003 0.0141 0.0449 0.18
mIshigami 0.7507 0.5635 0.5727 2.8148 1.02
mRef153 3.3665 11.3335 2.4208 12.7772 0.01
uDmod1 0.2832 0.0802 0.2370 0.6137 0.00
uDmod2 0.2717 0.0738 0.2371 0.4805 0.00
uDreyfus1 0.3401 0.1156 0.2655 0.7467 0.00
uDreyfus2 0.3641 0.1326 0.2780 0.9345 0.00
uGauss1 5.6746 32.2006 4.4060 17.6233 0.07
uGauss2 7.3355 53.8096 5.6616 20.2730 0.06
uGauss3 4.9299 24.3043 3.8940 13.5305 0.06
uNeuroOne 0.3057 0.0934 0.2504 0.6017 0.00
kable(apply(res[,,2,], c(3,1), min), caption = "adam")%>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
adam
RMSE MSE MAE WAE time
mDette 0.4764 0.2270 0.3445 1.9013 0.20
mFriedman 0.0165 0.0003 0.0130 0.0503 0.22
mIshigami 0.7178 0.5153 0.5509 2.7656 1.03
mRef153 3.1487 9.9142 2.2287 12.7430 0.03
uDmod1 0.2203 0.0485 0.1741 0.5159 0.00
uDmod2 0.1648 0.0271 0.1285 0.3765 0.00
uDreyfus1 0.2766 0.0765 0.2268 0.6076 0.00
uDreyfus2 0.2886 0.0833 0.2216 0.7302 0.00
uGauss1 3.7599 14.1372 3.0289 10.3446 0.06
uGauss2 2.7069 7.3272 2.1519 8.2788 0.06
uGauss3 2.7411 7.5134 2.2167 7.7006 0.06
uNeuroOne 0.2948 0.0869 0.2442 0.6013 0.01
kable(apply(res[,,3,], c(3,1), min), caption = "rmsprop")%>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
rmsprop
RMSE MSE MAE WAE time
mDette 0.4975 0.2475 0.3631 2.4228 0.17
mFriedman 0.0258 0.0007 0.0209 0.0735 0.18
mIshigami 0.7597 0.5772 0.5672 3.4488 1.03
mRef153 3.1876 10.1606 2.2463 11.9919 0.03
uDmod1 0.2253 0.0508 0.1766 0.5399 0.00
uDmod2 0.1694 0.0287 0.1335 0.3788 0.01
uDreyfus1 0.2231 0.0498 0.1478 0.6429 0.00
uDreyfus2 0.2745 0.0754 0.1980 0.6799 0.00
uGauss1 5.1283 26.2993 3.8756 15.0177 0.07
uGauss2 2.9072 8.4518 2.2943 9.2093 0.07
uGauss3 2.5864 6.6894 2.0802 7.6802 0.07
uNeuroOne 0.2853 0.0814 0.2312 0.5946 0.00