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

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

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

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

Q&A

解決済

1回答

1141閲覧

python conv2dについて

22Go

総合スコア55

Python

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

0グッド

0クリップ

投稿2019/05/06 05:52

python3
jupyter notebook
にて起動してます。

犬と猫の画像で学習済みで未知の犬の画像を読み込んだ時に
エラーが出てきました。
改善方法がわからないので教えてください。

python

1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3from keras.models import Sequential 4from keras.layers import Convolution2D, MaxPooling2D 5from keras.layers import Activation, Dropout, Flatten, Dense 6from keras.preprocessing.image import ImageDataGenerator 7 8batch_size = 32 9epochs = 1 10 11model = Sequential() 12model.add(Convolution2D(32, 3, 3, input_shape=(128, 128, 3))) 13model.add(Activation('relu')) 14model.add(MaxPooling2D(pool_size=(2, 2))) 15 16model.add(Convolution2D(64, 3, 3)) 17model.add(Activation('relu')) 18model.add(MaxPooling2D(pool_size=(2, 2))) 19 20model.add(Flatten()) 21model.add(Dense(64)) 22model.add(Activation('relu')) 23model.add(Dropout(0.5)) 24model.add(Dense(2)) 25model.add(Activation('softmax')) 26 27model.summary() 28 29model.compile(loss='categorical_crossentropy', 30 optimizer='adam', 31 metrics=['accuracy']) 32 33 34train_datagen = ImageDataGenerator( 35 rescale=1.0 / 255, 36 shear_range=0.2, 37 zoom_range=0.2, 38 horizontal_flip=True) 39 40test_datagen = ImageDataGenerator(rescale=1.0 / 255) 41 42 43train_generator = train_datagen.flow_from_directory( 44 '/Users/name/Desktop/photo/train', 45 target_size=(128, 128), 46 batch_size=batch_size, 47 class_mode='categorical') 48 49validation_generator = test_datagen.flow_from_directory( 50 '/Users/name/Desktop/photo/validation', 51 target_size=(128, 128), 52 batch_size=batch_size, 53 class_mode='categorical') 54 55 56history = model.fit_generator( 57 train_generator, 58 samples_per_epoch=200, 59 nb_epoch=epochs, 60 validation_data=validation_generator, 61 nb_val_samples=200) 62 63# モデルデータを保存 64model.save_weights('inu.neko.test.h5') 65 66import matplotlib.pyplot as plt 67import cv2 68import numpy as np 69# ラベル情報 70labels = ["dog", "cat"] 71 72# モデルデータを読み込み 73model.load_weights('inu.neko.test.h5') 74 75# OpenCVを使って画像を読み込む 76im = cv2.imread('/Users/name/Desktop/inu.test.jpg') 77im = cv2.cvtColor(im, cv2.COLOR_BGR2RGB) 78im = cv2.resize(im, (32, 32)) 79plt.imshow(im) # 画像を出力 80plt.show() 81 82# 学習した画像データに合わせる 83im = im.reshape(batch_size, 8*4*3).astype('float32') / 255 84# 予測する 85r = model.predict(np.array([im]), batch_size=32,verbose=1) 86res = r[0] 87# 結果を表示する 88for i, acc in enumerate(res): 89 print(labels[i], "=", int(acc * 100)) 90print("---") 91print("予測した結果=", labels[res.argmax()]) 92 93

batch_sizeはよくわからずエラーが出ない数値にしたのですが、推奨される値はどの様に決めたらいいでしょうか?

吐いたエラーはこちらです

python

1ValueError Traceback (most recent call last) 2<ipython-input-14-88a6f388bd50> in <module> 3 18 im = im.reshape(batch_size, 8*4*3).astype('float32') / 255 4 19 # 予測する 5---> 20 r = model.predict(np.array([im]), batch_size=128,verbose=1) 6 21 res = r[0] 7 22 # 結果を表示する 8 9~/anaconda3/lib/python3.6/site-packages/keras/models.py in predict(self, x, batch_size, verbose, steps) 10 1023 self.build() 11 1024 return self.model.predict(x, batch_size=batch_size, verbose=verbose, 12-> 1025 steps=steps) 13 1026 14 1027 def predict_on_batch(self, x): 15 16~/anaconda3/lib/python3.6/site-packages/keras/engine/training.py in predict(self, x, batch_size, verbose, steps) 17 1822 x = _standardize_input_data(x, self._feed_input_names, 18 1823 self._feed_input_shapes, 19-> 1824 check_batch_axis=False) 20 1825 if self.stateful: 21 1826 if x[0].shape[0] > batch_size and x[0].shape[0] % batch_size != 0: 22 23~/anaconda3/lib/python3.6/site-packages/keras/engine/training.py in _standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix) 24 111 ': expected ' + names[i] + ' to have ' + 25 112 str(len(shape)) + ' dimensions, but got array ' 26--> 113 'with shape ' + str(data_shape)) 27 114 if not check_batch_axis: 28 115 data_shape = data_shape[1:] 29 30ValueError: Error when checking : expected conv2d_1_input to have 4 dimensions, but got array with shape (1, 32, 96)

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーの内容は、「推論させるデータ(ソースコード内im)の次元が不味いです。」とのこと。
kerasにはいろいろ便利なものが揃っているのでcv2を開く必要が果たしてあるかどうか…
参考)keras.preprocessing.image以下のload_img, img_to_array, あとはnumpy.reshapeを使ってHWC形式で(128, 128, 3)のarrayを得て、後はもう一度reshapeで(1, 128, 128, 3)とかにしてpredictさせるとよさそうです。

投稿2019/05/14 05:10

npkk

総合スコア58

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問