knitr::opts_chunk$set(echo = TRUE)
require(mlbench)
## Loading required package: mlbench
require(mxnet)
## Loading required package: mxnet
## Init Rcpp
a <- mx.nd.ones(c(2,3))
a
##      [,1] [,2] [,3]
## [1,]    1    1    1
## [2,]    1    1    1
data(Sonar, package="mlbench")

mx.set.seed(0)

Sonar[,61] = as.numeric(Sonar[,61])-1
   train.ind = c(1:50, 100:150)
   train.x = data.matrix(Sonar[train.ind, 1:60])
   train.y = Sonar[train.ind, 61]
   test.x = data.matrix(Sonar[-train.ind, 1:60])
   test.y = Sonar[-train.ind, 61]

   
   
mx.set.seed(0)
   model <- mx.mlp(train.x, train.y, hidden_node=10, out_node=2, out_activation="softmax",
               num.round=20, array.batch.size=15, learning.rate=0.07, momentum=0.9, 
               eval.metric=mx.metric.accuracy)   
## Warning in mx.model.select.layout.train(X, y): Auto detect layout of input matrix, use rowmajor..
## Start training with 1 devices
## [1] Train-accuracy=0.488888888888889
## [2] Train-accuracy=0.514285714285714
## [3] Train-accuracy=0.514285714285714
## [4] Train-accuracy=0.514285714285714
## [5] Train-accuracy=0.514285714285714
## [6] Train-accuracy=0.523809523809524
## [7] Train-accuracy=0.619047619047619
## [8] Train-accuracy=0.695238095238095
## [9] Train-accuracy=0.695238095238095
## [10] Train-accuracy=0.761904761904762
## [11] Train-accuracy=0.828571428571429
## [12] Train-accuracy=0.771428571428571
## [13] Train-accuracy=0.742857142857143
## [14] Train-accuracy=0.733333333333333
## [15] Train-accuracy=0.771428571428571
## [16] Train-accuracy=0.847619047619048
## [17] Train-accuracy=0.857142857142857
## [18] Train-accuracy=0.838095238095238
## [19] Train-accuracy=0.838095238095238
## [20] Train-accuracy=0.838095238095238
   graph.viz(model$symbol$as.json())