前提・実現したいこと
Pythonでtensorflowと自作の画像データでCNNを実装しています。
画像認識を行いたいのですが、学習段階でエラーが出てしまい躓いています。
発生している問題・エラーメッセージ
name 'np_utils' is not defined
該当のソースコード
import urllib.request as req import urllib.parse as parse import os, re, time from PIL import Image import os, glob import numpy as np from keras.utils.np_utils import to_categorical root_dir=r'C:\Users\Fashion' categories=['Blouse','Jacket','Jeans','Parka','Skirt','Tee'] nb_classes=len(categories) image_size=100 X=[] Y=[] def padding(cat, fname, is_train): img=Image.open(fname) img=img.convert("RGB") #RGB変換 img=img.resize((image_size,image_size)) #画像サイズ変更(100×100) data=np.array(img) #numpy形式に変換 X.append(data) Y.append(cat) #学習データのみ水増しするので学習データではない場合は以下のfor文を実行しない if not is_train: return for angle in range(-20, 20, 10): #画像の回転 img2=img.rotate(angle) data=np.asarray(img2) X.append(data) Y.append(cat) #画像の左右反転 img3=img.transpose(Image.FLIP_LEFT_RIGHT) data=np.asarray(img3) X.append(data) Y.append(cat) #カテゴリーごとの処理 def make_train(files, is_train): global X,Y X=[] Y=[] for cat, fname in files: padding(cat, fname, is_train) return np.array(X), np.array(Y) #ディレクトリーごとにファイルを収集する files_all=[] for idx, cat in enumerate(categories): image_dir=root_dir+'/'+cat files=glob.glob(image_dir+'/*.jpg') for f in files: files_all.append((idx, f)) import random, math #シャッフル random.shuffle(files_all) MATH=math.floor(len(files_all)*0.6) train=files_all[0:MATH] test=files_all[MATH:] # データをロード def main(): X_train, y_train=make_train(train,True) X_test, y_test=make_train(test,False) # データを正規化する X_train=X_train.astype("float") / 256 X_test=X_test.astype("float") / 256 y_train=np_utils.to_categorical(y_train, nb_classes) y_test=np_utils.to_categorical(y_test, nb_classes) # モデルを学習し評価する model=model_train(X_train, y_train) model_eval(model, X_test, y_test) # モデルを構築 def build_model(in_shape): model=Sequential() model.add(Convolution2D(64 , 3, 3, border_mode='same',input_shape=in_shape)) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Convolution2D(128, 3, 3, border_mode='same')) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Convolution2D(128, 3, 3)) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(1028)) model.add(Activation('relu')) model.add(Dropout(0.5)) model.add(Dense(nb_classes)) model.add(Activation('softmax')) model.compile(loss='binary_crossentropy',optimizer='rmsprop',metrics=['accuracy']) model.summary() return model # 学習 def model_train(X, y): model=build_model(X.shape[1:]) model.fit(X, y, batch_size=30, nb_epoch=30) return model # 評価 def model_eval(model, X, y): score=model.evaluate(X, y) print('loss=', score[0]) print('accuracy=', score[1]) if __name__=="__main__": main()
試したこと
np_utilsについて調べていろいろやったのですが、
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー