CNNのハイパーパラメータ―の探索のためにrbayesianOptimizationを使用しました。
以下にコードとそのエラー、tracebackの結果を載せています。
tracebackを簡単な関数でしか使ったことがなく、このようなエラーが出た場合どう対応していいかが分かりません。エラーの解決策を教えていただけると幸いです。
> options(max.print=2147483647) > library(mxnet) > train <- read.csv('C:/Users/User/R/train/getimage_1/train.csv', header = TRUE) > test <- read.csv('C:/Users/User/R/train/getimage_1/test.csv', header = TRUE) > train <- data.matrix(train) > test <- data.matrix(test) > train.x <- t(train[,-1]) > train.y <- train[,1] > test.x <- t(test[,-1]) > test.y <- test[,1] > dim <- 30 > channels <- 1 > test_array <- test.x > dim(test_array) <- c(dim,dim,channels,ncol(test.x)) > train_array <- train.x > dim(train_array) <- c(dim,dim,channels,ncol(train.x)) > > mxnet_bayes <- function(unit1, unit2, unit3, unit4){ + # Model + data <- mx.symbol.Variable('data') + # 1st convolutional layer 5x5 kernel + conv_1 <- mx.symbol.Convolution(data= data, kernel = c(5,5), num_filter = unit1) + tanh_1 <- mx.symbol.Activation(data= conv_1, act_type = "relu") + pool_1 <- mx.symbol.Pooling(data = tanh_1, pool_type = "max", kernel = c(2,2), stride = c(2,2)) + # 2nd convolutional layer 5x5 kernel + conv_2 <- mx.symbol.Convolution(data = pool_1, kernel = c(5,5), num_filter = unit2) + tanh_2 <- mx.symbol.Activation(data = conv_2, act_type = "relu") + pool_2 <- mx.symbol.Pooling(data = tanh_2, pool_type = "max", kernel = c(2,2), stride = c(2,2)) + # 1st fully connected layer + + fcl_1 <- mx.symbol.FullyConnected(data = pool_2, num_hidden = unit3) + tanh_3 <- mx.symbol.Activation(data = fcl_1, act_type = "tanh") + # 2nd fully connected layer + fcl_2 <- mx.symbol.FullyConnected(data = tanh_3, num_hidden = unit4) + # Output + model <- mx.symbol.SoftmaxOutput(data = fcl_2) + # Set seed for reproducibility + mx.set.seed(5000) + # Device used. Sadly not the GPU :-( + device <- mx.cpu() + model <- mx.model.FeedForward.create(model, X = train_array, y = train.y, + ctx = device, + num.round = 20, + array.batch.size = 100, + learning.rate = 0.07, + momentum = 0.99, + wd = 0.0000001, + eval.metric = mx.metric.rmse, + epoch.end.callback = mx.callback.log.train.metric(100), verbose=TRUE) + preds <- predict(model, test.x) + holdout_score <- rmse(preds, test.y) + list(Score=-holdout_score, Pred=-holdout_score) + } > library(Metrics) > library(rBayesianOptimization) > opt_res <- BayesianOptimization(mxnet_bayes, + bounds=list(unit1=c(200L,300L), + unit2=c(10L,50L), + unit3=c(100L,150L), + unit4=c(80L,150L)), + init_points=20, n_iter=1, acq='ei', + kappa=2.576, eps=0.0, verbose=TRUE) Start training with 1 devices [1] Train-rmse=0.694788357881959 [2] Train-rmse=0.698895939954201 [3] Train-rmse=0.702352686365657 [4] Train-rmse=0.703651129075772 [5] Train-rmse=0.704188237229376 [6] Train-rmse=0.704072243436174 [7] Train-rmse=0.704307457989986 [8] Train-rmse=0.704044050930675 [9] Train-rmse=0.704189340228431 [10] Train-rmse=0.704024917141773 [11] Train-rmse=0.704088730139514 [12] Train-rmse=0.704510854642202 [13] Train-rmse=0.704353378706923 [14] Train-rmse=0.704272895208268 [15] Train-rmse=0.704260412182352 [16] Train-rmse=0.704688375203385 [17] Train-rmse=0.704331001542547 [18] Train-rmse=0.704090463144038 [19] Train-rmse=0.704570122472829 [20] Train-rmse=0.704810586026211 symbol$infer.shape(list(...)) でエラー: Error in operator convolution10: [08:26:02] d:\program files (x86)\jenkins\workspace\mxnet\mxnet\src\operator./convolution-inl.h:377: Check failed: dshp.ndim() == 4U (2 vs. 4) Input data should be 4D in batch-num_filter-y-x Timing stopped at: 721.7 39.89 440.3 > traceback() 16: stop(list(message = "Error in operator convolution10: [08:26:02] d:\program files (x86)\jenkins\workspace\mxnet\mxnet\src\operator\./convolution-inl.h:377: Check failed: dshp.ndim() == 4U (2 vs. 4) Input data should be 4D in batch-num_filter-y-x", call = symbol$infer.shape(list(...)), cppstack = list(file = "", line = -1L, stack = "C++ stack not available on this system"))) 15: .External(list(name = "CppMethod__invoke_notvoid", address = <pointer: 0x000000000858fda0>, dll = list(name = "Rcpp", path = "C:/Users/User/Documents/R/win-library/3.4/Rcpp/libs/x64/Rcpp.dll", dynamicLookup = TRUE, handle = <pointer: 0x000000006abc0000>, info = <pointer: 0x000000000652a390>), numParameters = -1L), <pointer: 0x0000000006522b90>, <pointer: 0x0000000008791920>, .pointer, ...) 14: symbol$infer.shape(list(...)) 13: mx.symbol.infer.shape(model$symbol, data = c(dimX[[2]], 1)) 12: mx.model.select.layout.predict(X, model) 11: predict.MXFeedForwardModel(model, test.x) 10: predict(model, test.x) at #34 9: (function (unit1, unit2, unit3, unit4) { data <- mx.symbol.Variable("data") conv_1 <- mx.symbol.Convolution(data = data, kernel = c(5, 5), num_filter = unit1) tanh_1 <- mx.symbol.Activation(data = conv_1, act_type = "relu") pool_1 <- mx.symbol.Pooling(data = tanh_1, pool_type = "max", kernel = c(2, 2), stride = c(2, 2)) conv_2 <- mx.symbol.Convolution(data = pool_1, kernel = c(5, 5), num_filter = unit2) tanh_2 <- mx.symbol.Activation(data = conv_2, act_type = "relu") pool_2 <- mx.symbol.Pooling(data = tanh_2, pool_type = "max", kernel = c(2, 2), stride = c(2, 2)) fcl_1 <- mx.symbol.FullyConnected(data = pool_2, num_hidden = unit3) tanh_3 <- mx.symbol.Activation(data = fcl_1, act_type = "tanh") fcl_2 <- mx.symbol.FullyConnected(data = tanh_3, num_hidden = unit4) model <- mx.symbol.SoftmaxOutput(data = fcl_2) mx.set.seed(5000) device <- mx.cpu() model <- mx.model.FeedForward.create(model, X = train_array, y = train.y, ctx = device, num.round = 20, array.batch.size = 100, learning.rate = 0.07, momentum = 0.99, wd = 1e-07, eval.metric = mx.metric.rmse, epoch.end.callback = mx.callback.log.train.metric(100), verbose = TRUE) preds <- predict(model, test.x) holdout_score <- rmse(preds, test.y) list(Score = -holdout_score, Pred = -holdout_score) })(unit1 = 296, unit2 = 37, unit3 = 118, unit4 = 95) 8: do.call(what = FUN, args = as.list(This_Par)) 7: system.time({ This_Score_Pred <- do.call(what = FUN, args = as.list(This_Par)) }) 6: eval(expr, pf) 5: eval(expr, pf) 4: withVisible(eval(expr, pf)) 3: evalVis(expr) 2: utils::capture.output({ This_Time <- system.time({ This_Score_Pred <- do.call(what = FUN, args = as.list(This_Par)) }) }) 1: BayesianOptimization(mxnet_bayes, bounds = list(unit1 = c(200L, 300L), unit2 = c(10L, 50L), unit3 = c(100L, 150L), unit4 = c(80L, 150L)), init_points = 20, n_iter = 1, acq = "ei", kappa = 2.576, eps = 0, verbose = TRUE) >
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/11 04:48