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

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

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

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

Q&A

0回答

489閲覧

Python Kerasによる画像認識の学習結果のエラー

1mzmk

総合スコア42

Python 3.x

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

0グッド

0クリップ

投稿2019/09/06 06:32

現在、Pythonでの画像認識の経験がないため、下のURLでの画像認識のAI作成を参考にして、料理を認識するためのAIをPythonを用いてコードを書いています。また、料理は5種類の料理で各種類20枚の画像をディレクトリに保存しています。

https://qiita.com/tomo_20180402/items/e8c55bdca648f4877188

私は、このURLでの画像認識のAI作成のコードに沿って、下のようにコードを書きました。

Python

1from PIL import Image 2import os, glob 3import numpy as np 4import random, math 5 6root_dir = './food/' 7 8categories = ["Okonomiyaki","Ramen","Kaisendon","Mapo Tofu","Temndon"] 9 10# 画像データ用配列 11X = [] 12# ラベルデータ用配列 13Y = [] 14 15#画像データごとにadd_sample()を呼び出し、X,Yの配列を返す関数 16def make_sample(files): 17 global X, Y 18 X = [] 19 Y = [] 20 for cat, fname in files: 21 add_sample(cat, fname) 22 return np.array(X), np.array(Y) 23 24#渡された画像データを読み込んでXに格納し、また、 25#画像データに対応するcategoriesのidxをY格納する関数 26def add_sample(cat, fname): 27 img = Image.open(fname) 28 img = img.convert("RGB") 29 img = img.resize((150, 150)) 30 data = np.asarray(img) 31 X.append(data) 32 Y.append(cat) 33 34#全データ格納用配列 35allfiles = [] 36 37#カテゴリ配列の各値と、それに対応するidxを認識し、全データをallfilesにまとめる 38for idx, cat in enumerate(categories): 39 image_dir = root_dir + "/" + cat 40 files = glob.glob(image_dir + "/*.jpg") 41 for f in files: 42 allfiles.append((idx, f)) 43 44#シャッフル後、学習データと検証データに分ける 45random.shuffle(allfiles) 46th = math.floor(len(allfiles) * 0.8) 47train = allfiles[0:th] 48test = allfiles[th:] 49X_train, y_train = make_sample(train) 50X_test, y_test = make_sample(test) 51xy = (X_train, X_test, y_train, y_test) 52#データを保存する(データの名前を「food_data.npy」としている) 53np.save("保存先パス/food_data.npy", xy) 54 55#モデルの構築 56 57from keras import layers, models 58 59model = models.Sequential() 60model.add(layers.Conv2D(32,(3,3),activation="relu",input_shape=(150,150,3))) 61model.add(layers.MaxPooling2D((2,2))) 62model.add(layers.Conv2D(64,(3,3),activation="relu")) 63model.add(layers.MaxPooling2D((2,2))) 64model.add(layers.Conv2D(128,(3,3),activation="relu")) 65model.add(layers.MaxPooling2D((2,2))) 66model.add(layers.Conv2D(128,(3,3),activation="relu")) 67model.add(layers.MaxPooling2D((2,2))) 68model.add(layers.Flatten()) 69model.add(layers.Dense(512,activation="relu")) 70model.add(layers.Dense(5,activation="sigmoid")) #分類先の種類分設定 71 72#モデル構成の確認 73model.summary() 74 75#モデルのコンパイル 76from keras import optimizers 77 78model.compile(loss="binary_crossentropy", 79 optimizer=optimizers.RMSprop(lr=1e-4), 80 metrics=["acc"]) 81 82#データの準備 83 84from keras.utils import np_utils 85import numpy as np 86 87categories = ["Okonomiyaki", "Ramen", "Kaisendon","Mapo Tofu", "Tendon" ] 88nb_classes = len(categories) 89 90 91#データの正規化 92X_train = X_train.astype("float") / 255 93X_test = X_test.astype("float") / 255 94 95#kerasで扱えるようにcategoriesをベクトルに変換 96y_train = np_utils.to_categorical(y_train, nb_classes) 97y_test = np_utils.to_categorical(y_test, nb_classes) 98 99#モデルの学習 100 101model = model.fit(X_train, 102 y_train, 103 epochs=5, 104 batch_size=6, 105 validation_data=(X_test,y_test))

そして上のコードの
”model.summary()”
の結果は下のようになりました。
イメージ説明

また、上のコードで
model = model.fit(X_train,
y_train,
epochs=5,
batch_size=6,
validation_data=(X_test,y_test))
を実行すると下のようなエラーが起きました。
イメージ説明
何が原因でこのエラーが起きたのかわからないので教えてください。

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

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

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

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

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

tiitoi

2019/09/06 06:43

配列の形状 X_train.shape, X_test.shape を print するとどうなっていますか?
1mzmk

2019/09/06 06:58

(0,) と表示されました。
tiitoi

2019/09/06 07:08

それはおかしいです。 画像が正しく読み込めていれば、X_train, X_test の形状は (サンプル数, 高さ, 幅, 3) の4次元配列になっているはずなので、ファイルを読み込んで配列を作るまでの部分に原因があると思います。 各変数を print しながら、意図通り処理ができているか確認してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問