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

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

ただいまの
回答率

90.83%

  • R

    258questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 58

alfastigma4w

score 3

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)
> 
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

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 13:48

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

    キャンセル

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

  • ただいまの回答率 90.83%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    Rにて手書き数字MNISTをnnetで学習させたい

    前提・実現したいこと Rにて手書き数字データMNISTをnnetで学習させたいと考えています。 サイトを参考に実行してみましたが、エラーが出てしまいうまくいきません。 発

  • 受付中

    CentOS7の起動サービスの詳細説明

    CentOS7の設定時に利用しない不要なサービスは停止させたいと考えております。 各サービスを停止するか否かを1つずつ検討したいのですが、各サービスについて説明しているサイト

  • 受付中

    Kerasを用いたCNN3によるcifar10の画像認識

    Keras初心者です。 CNNを理解するためにKerasでモデルを作り、cifar10のデータを元にモデルの認識精度を出力しようとしています。 以下のプログラムに対するエラーの

  • 解決済

    Tensorflowのfully_connected_feedの実行にエラーが続く

    tensoflowのfully_connected_feed.pyを実行しようとしているのですが、どう試行錯誤してもエラーが続きます。 tensorflowのインストールの仕方、

  • 受付中

    Tensorflowで異なるセッションでのrestoreして値の復元する際に、uninitializ...

    savar.save()で保存した値を異なるセッションでrestore()する際に初期化しているにも関わらず初期化されていない(uninitialize)とエラーが表示される。 4

  • 解決済

    tf.get_variablesが定義されないためtf.train.AdamOptimizerが使え...

    下記のようにGeneratorとDiscriminatorを定義したあとにtf.train.AdamOptimizerを使おうとすると下記エラーが出て使用できないのは何故なのでしょ

  • 解決済

    Pyhon : k 近傍の混同行列

    前提・実現したいこと k 近傍法の実装の正解率の結果を元に混同行列を作成したいのですがどうすればいいのか。(kの大きさごとに混合行列を作成したいため) 該当のソースコード fr

  • 解決済

    CNNの比較、改善点

     知りたいこと cyfer10に使用したCNNでなぜこのような差が出たのか、してはいけないことが含まれていたのか。 aidemyに使われていたCNNと層よりも、より層を増やして適当

同じタグがついた質問を見る

  • R

    258questions

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