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

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

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

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

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

Q&A

解決済

1回答

500閲覧

Tensorflow,Kerasを用いた画像判定におけるresizeのエラー

退会済みユーザー

退会済みユーザー

総合スコア0

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

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

0グッド

1クリップ

投稿2019/03/01 08:24

前提・実現したいこと

Pythonで3種類の動物の画像を用意し、別の画像がそのいずれかを推定するプログラムを実行したいです。
画像はFlickrからとってきています。

発生している問題・エラーメッセージ

ValueError: Error when checking input: expected conv2d_1_input to have shape (75, 75, 3) but got array with shape (50, 50, 3)

該当のソースコード

Python

1from keras.models import Sequential, load_model 2from keras.layers import Conv2D, MaxPooling2D 3from keras.layers import Activation, Dropout, Flatten, Dense 4# from keras.utils import np_utils 5import keras,sys 6import numpy as np 7from PIL import Image 8 9classes = ["monkey","boar","crow"] 10num_classes = len(classes) 11image_size = 50 12 13def build_model(): 14 model = Sequential() 15 model.add(Conv2D(32,(3,3), padding='same',input_shape=(50,50,3))) 16 model.add(Activation('relu')) 17 model.add(Conv2D(32,(3,3))) 18 model.add(Activation('relu')) 19 model.add(MaxPooling2D(pool_size=(2,2))) 20 model.add(Dropout(0.25)) 21 22 model.add(Conv2D(64,(3,3), padding='same')) 23 model.add(Activation('relu')) 24 model.add(Conv2D(64,(3,3))) 25 model.add(Activation('relu')) 26 model.add(MaxPooling2D(pool_size=(2,2))) 27 model.add(Dropout(0.25)) 28 29 model.add(Flatten()) 30 model.add(Dense(512)) 31 model.add(Activation('relu')) 32 model.add(Dropout(0.5)) 33 model.add(Dense(3)) 34 model.add(Activation('softmax')) 35 36 opt = keras.optimizers.rmsprop(lr=0.0001, decay=1e-6) 37 38 model.compile(loss='categorical_crossentropy',optimizer=opt,metrics=['accuracy']) 39 40 # モデルのロード 41 model = load_model('./animal_cnn_aug.h5') 42 43 return model 44 45def main(): 46 image = Image.open(sys.argv[1]) 47 image = image.convert('RGB') 48 image = image.resize((image_size,image_size)) 49 data = np.asarray(image)/255 50 X = [] 51 X.append(data) 52 X = np.array(X) 53 model = build_model() 54 55 result = model.predict([X])[0] 56 predicted = result.argmax() 57 percentage = int(result[predicted] * 100) 58 print("{0} ({1} %)".format(classes[predicted], percentage)) 59 60if __name__ == "__main__": 61 main()

なお、モデルのロードに記載してあるモデルの保存は以下から行なっています

python

1from keras.models import Sequential 2from keras.layers import Conv2D, MaxPooling2D 3from keras.layers import Activation, Dropout, Flatten, Dense 4from keras.utils import np_utils 5import keras 6import numpy as np 7 8classes = ["monkey","boar","crow"] 9num_classes = len(classes) 10image_size = 50 11 12#メインの関数を定義する 13def main(): 14 X_train, X_test, y_train, y_test = np.load("./animal_aug.npy") 15 X_train = X_train.astype("float") / 256 16 X_test = X_test.astype("float") / 256 17 y_train = np_utils.to_categorical(y_train, num_classes) 18 y_test = np_utils.to_categorical(y_test, num_classes) 19 20 model = model_train(X_train, y_train) 21 model_eval(model, X_test, y_test) 22 23def model_train(X, y): 24 model = Sequential() 25 model.add(Conv2D(32,(3,3), padding='same',input_shape=X.shape[1:])) 26 model.add(Activation('relu')) 27 model.add(Conv2D(32,(3,3))) 28 model.add(Activation('relu')) 29 model.add(MaxPooling2D(pool_size=(2,2))) 30 model.add(Dropout(0.25)) 31 32 model.add(Conv2D(64,(3,3), padding='same')) 33 model.add(Activation('relu')) 34 model.add(Conv2D(64,(3,3))) 35 model.add(Activation('relu')) 36 model.add(MaxPooling2D(pool_size=(2,2))) 37 model.add(Dropout(0.25)) 38 39 model.add(Flatten()) 40 model.add(Dense(512)) 41 model.add(Activation('relu')) 42 model.add(Dropout(0.5)) 43 model.add(Dense(3)) 44 model.add(Activation('softmax')) 45 46 opt = keras.optimizers.rmsprop(lr=0.0001,decay=1e-6) 47 model.compile(loss='categorical_crossentropy',optimizer=opt,metrics=['accuracy']) 48 model.fit(X, y, batch_size=32, epochs=100) 49 50#モデルの保存 51 model.save('./animal_cnn_aug.h5') 52 53 return model 54 55def model_eval(model, X, y): 56 scores = model.evaluate(X, y, verbose=1) 57 print('Test Loss:', scores[0]) 58 print('Test Accuracy:', scores[1]) 59 60if __name__ == "__main__": 61 main()

試したこと

  • 75というサイズで入力した箇所がないか確認(ありませんでした)
  • image_sizeを変更して実行
  • パッケージのアップグレード

補足情報(FW/ツールのバージョンなど)

macOS/anaconda/Jupyter Notebook/Atom
PillowやTensorflowは最新のものにアップグレードしています。

はじめてプログラミングをはじめたところなのでオンライン教材の一貫です。コピーしている箇所が多く、単語も都度本を見ながらという感じなので初歩的なミスかもしれませんが、ご覧いただければ幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーの内容は、75×75の画像を期待していたのに、50×50の画像が入力されちゃったよ、ということですね。
モデルを保存する際に、50×50の画像をinputとするようなモデルを作れておらず、75×75の画像をinputするように作ったようです。
解決策としては、モデルを作り直すか、判定するプログラム(上側のソースコード)のimage_sizeの値を75にしてみる、のいずれかかと思います。

補足ですが、モデルを作り直す場合、X_trainのshapeにinput画像の大きさは依存しているようなので(75×75のモデルができた原因も多分これ)、def_main()の2行目の256で割る前の段階でX_train(だけだと、途中でエラー吐くと思うので、X_testも)の画像を全てリサイズすれば良いかと思います。

投稿2019/03/01 08:31

編集2019/03/01 08:53
ilove2dgirl

総合スコア50

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

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

退会済みユーザー

退会済みユーザー

2019/03/09 21:20 編集

ご返信が遅くなって申し訳ありません! 丁寧に教えていただいたのに申し訳ないです 解決法についても詳しく教えていただいてありがとうございました。 どちらも試してみました。結果前者は「AttributeError: 'NoneType' object has no attribute 'shape'」と出てしまい、numpy配列について問題がありそうなのでそれはまた単語なども含めて別途本などをあたっています。後者は結果が望んだ通りではなかったのですが、実行できました!ありがとうございます。イノシシの画像を入れたけど猿と予想が出てきたのですが、原因は学習した画像の選定などにありそうです。 ひとまずこちらで以降のレッスンを進めてみます。
ilove2dgirl

2019/03/09 04:02

良かったです。お役に立てて何よりです。報告ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問