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

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

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

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

深層学習

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

1回答

711閲覧

【Python】KerasとCNNで画像分類したいが「ValueError: Error when checking target: expected dense_2 to have 2」エラーが出る

tantan1

総合スコア31

Keras

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

深層学習

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2020/05/05 06:19

編集2020/05/05 06:36

問題

Python3.7とKeras2.3.1で3種類の画像の分類器を作成中です。
class0, class1, class2の3つのフォルダに、それぞれ画像を入れてCNNで分類器を作成したいのですが、以下のプログラムを実行するとエラーが出てしまします。
解決法をご教示ください。

## エラー

python

1Model: "sequential_1" 2_________________________________________________________________ 3Layer (type) Output Shape Param # 4================================================================= 5conv2d_1 (Conv2D) (None, 32, 32, 32) 896 6_________________________________________________________________ 7conv2d_2 (Conv2D) (None, 32, 32, 32) 9248 8_________________________________________________________________ 9max_pooling2d_1 (MaxPooling2 (None, 16, 16, 32) 0 10_________________________________________________________________ 11dropout_1 (Dropout) (None, 16, 16, 32) 0 12_________________________________________________________________ 13conv2d_3 (Conv2D) (None, 16, 16, 64) 18496 14_________________________________________________________________ 15conv2d_4 (Conv2D) (None, 16, 16, 64) 36928 16_________________________________________________________________ 17max_pooling2d_2 (MaxPooling2 (None, 8, 8, 64) 0 18_________________________________________________________________ 19dropout_2 (Dropout) (None, 8, 8, 64) 0 20_________________________________________________________________ 21flatten_1 (Flatten) (None, 4096) 0 22_________________________________________________________________ 23dense_1 (Dense) (None, 512) 2097664 24_________________________________________________________________ 25dropout_3 (Dropout) (None, 512) 0 26_________________________________________________________________ 27dense_2 (Dense) (None, 3) 1539 28================================================================= 29Total params: 2,164,771 30Trainable params: 2,164,771 31Non-trainable params: 0 32_________________________________________________________________ 33Traceback (most recent call last): 34 File "/Users/python/test2/test1.py", line 128, in <module> 35 main() 36 File "/Users/python/test2/test1.py", line 113, in main 37 validation_split=0.1) 38 File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/keras/engine/training.py", line 1154, in fit 39 batch_size=batch_size) 40 File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/keras/engine/training.py", line 621, in _standardize_user_data 41 exception_prefix='target') 42 File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/keras/engine/training_utils.py", line 135, in standardize_input_data 43 'with shape ' + str(data_shape)) 44ValueError: Error when checking target: expected dense_2 to have 2 dimensions, but got array with shape (12, 3, 3)

ソースコード

python

1from keras.layers import Dense, Dropout, Flatten 2from keras.layers import Conv2D, MaxPooling2D 3from keras.models import Sequential, model_from_json 4from keras.optimizers import RMSprop 5from keras.preprocessing.image import array_to_img, img_to_array, load_img 6from keras.utils import np_utils, to_categorical 7from sklearn.model_selection import train_test_split 8import matplotlib.pyplot as plt 9import numpy as np 10import re, os 11 12def list_pictures(directory, ext='jpg|jpeg|bmp|png|ppm'): 13 return [os.path.join(root, f) for root, _, files in os.walk(directory) for f in files if re.match(r'([\w]+.(?:' + ext + '))', f.lower())] 14 15def main(): 16 batch_size = 5 # バッチサイズ 17 num_classes = 3 # 0, 1, 2の3分類 18 epochs = 20 19 dropout_rate = 0.2 20 21 img_width = 32 # 入力画像の幅 22 img_height = 32 # 入力画像の高さ 23 img_ch = 3 # 3ch画像で学習 24 25 # データ格納用のディレクトリパス 26 dirpath= "/Users/python/test2/data/" 27 28 data_x = [] 29 data_y = [] 30 num_classes = 3 31 32 # クラス0, 1, 2の画像をロード 33 for filepath in list_pictures(dirpath + "class0"): 34 img = img_to_array(load_img(filepath, target_size=(img_width,img_height, img_ch))) 35 data_x.append(img) 36 data_y.append(0) 37 38 for filepath in list_pictures(dirpath + "class1"): 39 img = img_to_array(load_img(filepath, target_size=(img_width,img_height, img_ch))) 40 data_x.append(img) 41 data_y.append(1) 42 43 for filepath in list_pictures(dirpath + "class2"): 44 img = img_to_array(load_img(filepath, target_size=(img_width,img_height, img_ch))) 45 data_x.append(img) 46 data_y.append(2) 47 48 # NumPy配列に変換 49 data_x = np.asarray(data_x) 50 data_y = np.asarray(data_y) 51 52 # 学習データとテストデータに分割 53 x_train, x_test, y_train, y_test = train_test_split(data_x, data_y, test_size=0.2) 54 55 # float32型に変換し、正規化(0~1) 56 x_train = x_train.astype('float32') 57 x_test = x_train.astype('float32') 58 x_train = x_train / 255.0 59 x_test = x_train / 255.0 60 61 # one hotエンコーディング 62 y_train = to_categorical(y_train, num_classes) 63 y_train = to_categorical(y_train, num_classes) 64 65 66 # モデルの構築 67 model = Sequential() 68 69 model.add(Conv2D(32,(3,3), 70 padding='same', 71 input_shape=x_train.shape[1:], 72 activation='relu')) 73 74 model.add(Conv2D(32,(3,3), 75 padding='same', 76 activation='relu')) 77 78 model.add(MaxPooling2D(pool_size=(2, 2))) 79 80 model.add(Dropout(dropout_rate)) 81 82 model.add(Conv2D(64,(3,3), 83 padding='same', 84 activation='relu')) 85 86 model.add(Conv2D(64,(3,3), 87 padding='same', 88 activation='relu')) 89 90 model.add(MaxPooling2D(pool_size=(2, 2))) 91 92 model.add(Dropout(dropout_rate)) 93 94 model.add(Flatten()) 95 96 model.add(Dense(512, activation='relu')) 97 98 model.add(Dropout(dropout_rate)) 99 100 model.add(Dense(num_classes, activation='softmax')) # 活性化関数:softmax 101 102 model.summary() 103 104 model.compile(loss='categorical_crossentropy', optimizer=RMSprop(), metrics=['accuracy']) 105 106 # 学習 107 history = model.fit(x_train, 108 y_train, 109 batch_size=batch_size, 110 epochs=epochs, 111 verbose=1, 112 validation_split=0.1) 113 114 # スコアを計算 115 score = model.evaluate(x_test, 116 y_test, 117 verbose=0 118 ) 119 120 # 損失 121 print('Test loss:', score[0]) 122 123 # 精度 124 print('Test accuracy:', score[1]) 125 126if __name__ == '__main__': 127 main()

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

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

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

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

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

guest

回答1

0

自己解決

自己解決しました。
コードの記述ミスでした。

投稿2020/05/05 10:03

tantan1

総合スコア31

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問