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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

372閲覧

TensorFlowでエラーが出ます

memu2

総合スコア16

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/03/23 07:09

現在tensorflowとtflearnを使用して画像の分類をしているのですが、学習を実行させようとしたところ、こんなエラーが出てしまいました。

python

1Training samples: 11364 2Validation samples: 2841 3-- 4Exception in thread Thread-3: 5Traceback (most recent call last): 6 File "C:\Users\suter\Anaconda3\envs\ForTensorFlow_env\lib\threading.py", line 914, in _bootstrap_inner 7 self.run() 8 File "C:\Users\suter\Anaconda3\envs\ForTensorFlow_env\lib\threading.py", line 862, in run 9 self._target(*self._args, **self._kwargs) 10 File "C:\Users\suter\Anaconda3\envs\ForTensorFlow_env\lib\site-packages\tflearn\data_flow.py", line 187, in fill_feed_dict_queue 11 data = self.retrieve_data(batch_ids) 12 File "C:\Users\suter\Anaconda3\envs\ForTensorFlow_env\lib\site-packages\tflearn\data_flow.py", line 222, in retrieve_data 13 utils.slice_array(self.feed_dict[key], batch_ids) 14 File "C:\Users\suter\Anaconda3\envs\ForTensorFlow_env\lib\site-packages\tflearn\utils.py", line 187, in slice_array 15 return X[start] 16IndexError: index 13813 is out of bounds for axis 0 with size 4735

実行したコードは以下の通りです

python

1trainX, trainY, testX, testY = np.load("./face.npy") 2 3 # 画像ピクセルデータを1次元から2次元へ変換 4 trainX = trainX.reshape( [-1, 96, 96, 1]) 5 6 # 1枚目の画像ピクセル値を表示 7 print(trainX[0]) 8 9 # 1枚目の画像ピクセル値のサイズを表示 10 print(len(trainX[0])) 11 12 ## 3.ニューラルネットワークの作成 13 ## 初期化 14 tf.reset_default_graph() 15 16 ## 入力層の作成 17 net = input_data(shape=[None, 96, 96, 1]) 18 19 ## 中間層の作成\n", 20 # 畳み込み層の作成\n", 21 net = conv_2d(net, 32, 5, activation='relu') 22 # プーリング層の作成\n", 23 net = max_pool_2d(net, 2) 24 # 畳み込み層の作成\n", 25 net = conv_2d(net, 64, 5, activation='relu') 26 # プーリング層の作成\n", 27 net = max_pool_2d(net, 2) 28 # 全結合層の作成\n", 29 net = fully_connected(net, 128, activation='relu') 30 net = dropout(net, 0.5) 31 ## 出力層の作成\n", 32 net = tflearn.fully_connected(net, 7, activation='softmax') 33 34 net = tflearn.regression(net, optimizer='sgd', learning_rate=0.5, loss='categorical_crossentropy') 35 36 ## 4.モデルの作成(学習) ##\n", 37 # 学習の実行 38 model = tflearn.DNN(net) 39 model.fit(trainX, trainY, n_epoch=20, batch_size=32, validation_set=0.2, show_metric=True) 40 #モデルの保存 41 for n in range(100): 42 save_name = "./cnn_models/" + "face_classifier_cnn{}.h5".format(n) 43 if os.path.exists(save_name): 44 continue 45 else: 46 model.save(save_name) 47 break 48 49 #モデルの適用 50 pred = np.array(model.predict(testX)).argmax(axis=1) 51 priint(pred) 52 53 label = testY.argmax(axis=1) 54 print(label) 55 56 accuracy = np.mean(pred == label, axis=0) 57 print(accuracy)

np.load("./face.npy")で読み込んだファイルは以下の方法で生成しました

python

1classes = ['dog', 'cat', 'monkey', 'zebra', 'rabbit', 'lion', 'bird'] 2num_classes = len(classes) 3image_size = 96 4 5# 画像の読み込み 6 7X = [] 8Y = [] 9for index, classlabel in enumerate(classes): 10 image_dir = "./images/" + classlabel 11 files = glob.glob(image_dir + "/*.jpg") 12 for file in files: 13 image = Image.open(file) 14 # グレースケールへ変換\n", 15 gray_image = image.convert('L') 16 # 画像のリサイズ 17 small_gray_image = gray_image.resize((96,96)) 18 # 画像ファイルをピクセル値へ変換 19 gray_image_px = np.array(small_gray_image) 20 gray_image_flatten = gray_image_px.flatten().astype(np.float32)/255.0 21 X.append(gray_image_flatten) 22 # one_hot_vectorを作りラベルとして追加\n", 23 tmp = np.zeros(7) 24 tmp[index] = 1 25 Y.append(tmp) 26 27X = np.array(X) 28Y = np.array(Y) 29 30X_train, X_test, Y_train, Y_test = model_selection.train_test_split(X, Y) 31xy = (X_train, X_test, Y_train, Y_test) 32np.save("./face.npy", xy)

エラーメッセージで調べてみたところ、indexの値が実際には存在しない大きさになってしまっているということまではわかったのですが、どのように解決したらいいかが分かりません。
似たようなエラーを見つけてもkeyerrorばかりで参考になりませんでした。
解決法がわかる方いらっしゃるでしょうか?
何か基本的なミスをしているような気もするのですが…

参考サイト
http://kyudy.hatenablog.com/entry/2016/12/09/172735
https://ja.stackoverflow.com/questions/39980/index-2-is-out-of-bounds-for-axis-1-with-size-2%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95
https://github.com/openyou/emokit/issues/225

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

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

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

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

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

guest

回答1

0

ベストアンサー

メインのコードのどこでエラーが発生したのかわからないようになっていますが、これはtflearnの、threadingのせいでしょうか?
それとも--になにか省略されていますか?

Training samples: 11364
Validation samples: 2841

IndexError: index 13813 is out of bounds for axis 0 with size 4735

といっていますので、
エラー行の直前にprint(trainX.shape)などしてデータの数に問題がないか確認して見てはいかがでしょうか?

また、それに加えて、
trainX = trainX.reshape( [-1, 96, 96, 1])
があるのに
testXについては同様の変形がないので、将来的にバグに遭遇するものと予想されます。

priintもどこかにあったような…

投稿2018/03/23 15:37

mkgrei

総合スコア8560

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問