🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Keras

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

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Python

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

Q&A

1回答

881閲覧

Kerasを使った複数入力の画像認識

退会済みユーザー

退会済みユーザー

総合スコア0

Keras

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

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Python

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

0グッド

0クリップ

投稿2020/12/06 06:21

前提・実現したいこと

現在、145種類の画像認識を行おうとしています。
そこで、2つの画像を2入力を行い、画像認識を行っています。

学習データとして、145種類6000枚の画像
テスト用データとして、145種類
2枚の画像

そこでテスト用データを順番にInputしたいと考えています。
(input1 = "1-1.jpg", input2 = "2-1.jpg")
という風に1-1,2-1と後半の数字が同じ数字のものを順番に入れたいです。

しかしfor文で以下のように回してしまうと、以下のエラーになります。

z_test1,z_test2からランダムに要素を抽出し、それをevaluate、その後1度evaluateしたものを削除、
工程を145枚分試したいです。
どのように行えば可能でしょうか?

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

Error when checking input: expected x_1 to have 4 dimensions, but got array with shape (64, 64, 3)

該当のソースコード

classes = ["1","2","3",...,"145"] x_1 = ["1-1.jpg","1-2.jpg",...,"1-145.jpg"] x_2 = ["2-1.jpg","2-1.jpg",...,"2-145.jpg"] X = [] Y1 = [] for index, classlabel in enumerate(classes): dir = "./" + classlabel files = glob.glob(dir + "/*.jpg") for i, file in enumerate(files): image = Image.open(file) image = image.convert("RGB") image = image.resize((64, 64)) data = np.asarray(image) X.append(data) Y1.append(index) Z1 = [] Z2 = [] Y2 =[] for i, file in enumerate(x_1): image = Image.open(file) image = image.convert("RGB") image = image.resize((64, 64)) data = np.asarray(image) Z1.append(data) Y2.append(i) for i, file in enumerate(x_2): image = Image.open(file) image = image.convert("RGB") image = image.resize((64, 64)) data = np.asarray(image) Z2.append(data) X = np.array(X) Y1 = np.array(Y1) Y2 = np.array(Y2) Z1 = np.array(Z1) Z2 = np.array(Z2) X = X.astype('float32')/255.0 Z1 = Z1.astype('float32')/255.0 Z2 = Z2.astype('float32')/255.0 Y1 = np_utils.to_categorical(Y1, len(classes)) Y2 = np_utils.to_categorical(Y2, len(x_1)) x_train1 = X x_train2 = X y_train = Y1 y_test = Y2 z_test1 = Z1 z_test2 = Z2 input = Input(shape=(64,64,3)) a = Conv2D(32,(3,3), padding="same", activation="relu")(input) a = Conv2D(32,(3,3), padding="same", activation="relu")(a) a = MaxPooling2D(2,2)(a) a = Dropout(0.25)(a) a = Conv2D(64,(3,3), padding="same", activation="relu")(a) a = Conv2D(64,(3,3), padding="same", activation="relu")(a) a = MaxPooling2D(2,2)(a) a = Dropout(0.25)(a) a = Flatten()(a) out = Dense(50, activation="relu")(a) vision_model = Model(input, out) input1 = Input(shape=(64,64,3), name="x_1") input2 = Input(shape=(64,64,3), name="x_2") out_a = vision_model(input1) out_b = vision_model(input2) concatenated = Concatenate(axis=-1)([out_a, out_b]) # 密結合 out = Dense(len(classes), activation='softmax')(concatenated) model = Model([input1, input2], out) # モデルコンパイル opt = keras.optimizers.Adam(lr=0.0005, decay=1e-5) model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy']) model.summary() hist = model.fit([x_train1,x_train2], y_train, batch_size=2000, epochs=20) print("X_train1 : ", x_train1.shape) print("X_train2 : ", x_train2.shape) print("y_train : ", y_train.shape) print("Z_test1 : ", z_test1.shape) print("Z_test2 : ", z_test2.shape) print("y_test : ", y_test.shape) # ここから先で悩んでいます for _ in range(145): a = random.randint(0,145) if z_test1[a] is None: continue else : score=model.evaluate([z_test1[a], z_test2[a]], y_test) print('Test loss:', score[0]) print('test acc:', score[1])

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

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

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

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

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

guest

回答1

0

質問に記載のエラーメッセージがソースのどこで発生しているかわかりませんが、
仮に、
score=model.evaluate([z_test1[a], z_test2[a]], y_test)
で発生しているとすると、
z_test1[a]とz_test2[a]のshapeが4次元でなく、(64, 64, 3)であるのが問題ということになります。

z_test1[a]とz_test2[a]のshapeを4次元の(1, 64, 64, 3)とすればよいので、
次のように変更してはいかがでしょうか。

python

1score=model.evaluate([z_test1[a:a+1], z_test2[a:a+1]], y_test)

これでうまくいかない場合は、
"y_test"も"y_test[a:a+1]"として試してみて下さい。

投稿2021/02/15 15:08

aipy2020

総合スコア35

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問