質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

解決済

1回答

1867閲覧

RのrbayesianOptimizationパッケージ使用時のエラーの解決方法が知りたいです。

alfastigma4w

総合スコア16

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

0グッド

0クリップ

投稿2018/05/11 00:27

編集2018/05/11 00:31

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) >

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

私は当該の分野の仕事をしていないし再現できる環境も持っていないので、直接的な回答はできませんが、エラーメッセージについていくつか……

predict(model, test.x) at #34

エラーがおきた直接的な原因が当該スクリプトの34行目にあることを示しています。間接的な原因としては、model、test.xの内容のどちらかが妥当ではないのだろうと考えられます。

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

核心となるエラーメッセージ"Input data should be 4D in batch-num_filter-y-x"を丸ごとグーグルに食わせて検索してみると、同じような問題に引っかかったぽい人が掲示板で質疑応答しているのが見つかります。

両者を考え合わせると、関数に与えようとしているデータの構造に何か問題がありそうだというのをまず疑ってみるべきであるように見えますね。…と、私に判断できるのはここまでです。

最後に、teratailではあまりRのパワーユーザの方々が活動しておられないようです。たかだか400ポイントそこそこのスコアしか獲得していない私がダントツでランキング1位をとっているぐらいですから。ある程度専門性の高い質問になると、なかなか回答がつかないです(私は自分の勉強を兼ねて積極的に回答するようにしていますが、守備範囲は限定的です)。もし突っ込んだ議論がお望みなら、RjpWIKIの掲示板をお勧めします。

投稿2018/05/11 04:42

KojiDoi

総合スコア13669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

alfastigma4w

2018/05/11 04:48

細かく教えて下さり、ありがとうございます。 googleさんに投げて同じことしてましたが、やはりtrain_arrayなどのデータ構造が問題みたいですね… train_arrayなどのデータ形式を変えてCNNを動かせる自信がないので、RbayesianOptimizationの方で扱えるデータ形式を変えられないか少し調べてみようと思います…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問