上記のようにndimは2以下なのですが、Found array with dim 3. Estimator expected <= 2.と言われてしまいます。
原因がわかる方いらっしゃいましたら、お願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
<原因の分析>
Traceback(エラーが生じた経緯の遡り)を読んでゆきましょう。
"most recent call last"(最近の呼び出しが、最後)なので、下のほうから
[3] check_array関数の実行中に、"not allow_nd"と"array.ndim>=3"の2条件が共に成立したため、ValueErrorの例外が生じました(コードの449,450行目)。 arrayはcheck_array関数の第一仮引数です。
[2] fit関数の実行中に、check_array関数が呼び出されています。check関数の第1仮引数であるarrayに渡される実引数はfit関数の第一引数 X、allow_ndに関する記述が無いのでFALSEが渡されます。check_array関数の中で"not allow_nd"が成立した原因はここにあります。
[1] fit関数は、第一引数を train_data 、第2引数を train_labels として呼び出されています。
===
発生順に並び変えると、
fit関数が第一引数を train_data として呼び出された。
fit関数の第一引数(仮引数名は X)は、fit関数の中で check_array関数の第一引数として使われた。
check_array関数の第一引数(仮引数名は array)はcheck_array関数の中で、"array.ndim>=3"の式の評価に使われた結果がTRUEだったので例外を発生した。
これは、array.ndimが3以上であったことを示しており、元をたどるとfit関数の第一引数であるtrain_dataの ndim が3以上であったことを示している。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
質問の「上記のようにndimは2以下なのですが」の行の上に書かれた数字の羅列は、for a in train_data: と for b in train_labels:、2つのfor文で書き出されたものなのでしょう。
"ndimは2以下なのです"が、16行ある(16個ある)"2"の事を指しているのだとすれば、"train_data
.ndim=16"という事になります。 "16 >= 3"は、TRUEになりますよね。
以上が質問で示された内容から判ることの全てだと思います。
この回答が問題解決のヒントになることを祈ります。
投稿2018/06/10 09:51
総合スコア6915
0
ベストアンサー
X
のndimを2にする必要があります。そのコードだとforで1減ったのが見えていて、3です。
追記
状況的には、たぶんこんな感じになっています。
python
1>>> import numpy as np 2>>> a = np.arange(27).reshape((3,3,3)) # shapeは適当。質問者様のXとは違うと思います 3>>> a 4array([[[ 0, 1, 2], 5 [ 3, 4, 5], 6 [ 6, 7, 8]], 7 8 [[ 9, 10, 11], 9 [12, 13, 14], 10 [15, 16, 17]], 11 12 [[18, 19, 20], 13 [21, 22, 23], 14 [24, 25, 26]]]) 15>>> a.ndim 163 17>>> for x in a: 18... print(x) 19... print(x.ndim) 20... 21[[0 1 2] 22 [3 4 5] 23 [6 7 8]] 242 25[[ 9 10 11] 26 [12 13 14] 27 [15 16 17]] 282 29[[18 19 20] 30 [21 22 23] 31 [24 25 26]] 322
どう直せばよいかと言うと、X
の形式に依存します。質問の画像を見る限り、こんなshapeになっているような気がします。
python
1>>> a = np.arange(27).reshape((9,1,3)) 2>>> a 3array([[[ 0, 1, 2]], 4 5 [[ 3, 4, 5]], 6 7 [[ 6, 7, 8]], 8 9 [[ 9, 10, 11]], 10 11 [[12, 13, 14]], 12 13 [[15, 16, 17]], 14 15 [[18, 19, 20]], 16 17 [[21, 22, 23]], 18 19 [[24, 25, 26]]])
python
1>>> a.reshape((a.shape[0], -1)) 2array([[ 0, 1, 2], 3 [ 3, 4, 5], 4 [ 6, 7, 8], 5 [ 9, 10, 11], 6 [12, 13, 14], 7 [15, 16, 17], 8 [18, 19, 20], 9 [21, 22, 23], 10 [24, 25, 26]])
こんな操作でいけたりしないかなぁ(当然X
に対してこれをやる)。あるいは、データ読み込み段階でこの形になるように書き換えるか。
投稿2018/06/10 09:25
編集2018/06/10 10:56総合スコア30933
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/10 10:56
退会済みユーザー
2018/06/10 13:53
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/10 10:00 編集
2018/06/10 10:10
退会済みユーザー
2018/06/10 13:52