現在、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))
を実行すると下のようなエラーが起きました。
何が原因でこのエラーが起きたのかわからないので教えてください。
あなたの回答
tips
プレビュー