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

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

新規登録して質問してみよう
ただいま回答率
85.48%
CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

1回答

871閲覧

畳み込みニューラルネットワークでのエラーで困ってます。

退会済みユーザー

退会済みユーザー

総合スコア0

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2021/08/31 08:15

以下のプログラムでエラーが出ます。
画像もちゃんとディレクトリ内に存在しており、パスも間違いがないと思います。
Jupiternotebookを使ってます。

Python

1 2import numpy as np 3from keras.models import Sequential, model_from_json 4from keras.layers import Dense, Dropout, Flatten 5from keras.layers import Conv2D, MaxPooling2D 6from keras.optimizers import RMSprop 7from keras.datasets import cifar10 8from keras.preprocessing.image import array_to_img, img_to_array, load_img 9from keras.utils import np_utils, to_categorical 10from sklearn.model_selection import train_test_split 11import matplotlib.pyplot as plt 12import re 13import os 14import pickle 15 16def list_imgs(directory, ext='jpg|jpeg|bmp|png|ppm'): 17 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())] 18 19def plot_history(history, 20 save_graph_img_path, 21 fig_size_width, 22 fig_size_height, 23 lim_font_size): 24 25 acc = history.history['accuracy'] 26 val_acc = history.history['val_accuracy'] 27 loss = history.history['loss'] 28 val_loss = history.history['val_loss'] 29 30 epochs = range(len(acc)) 31 32 # グラフ表示 33 plt.figure(figsize=(fig_size_width, fig_size_height)) 34 plt.rcParams['font.family'] = 'Times New Roman' 35 plt.rcParams['font.size'] = lim_font_size # 全体のフォント 36 #plt.subplot(121) 37 38 # plot accuracy values 39 plt.plot(epochs, acc, color = "blue", linestyle = "solid", label = 'train acc') 40 plt.plot(epochs, val_acc, color = "green", linestyle = "solid", label= 'valid acc') 41 #plt.title('Training and Validation acc') 42 #plt.grid() 43 #plt.legend() 44 45 # plot loss values 46 #plt.subplot(122) 47 plt.plot(epochs, loss, color = "red", linestyle = "solid" ,label = 'train loss') 48 plt.plot(epochs, val_loss, color = "orange", linestyle = "solid" , label= 'valid loss') 49 #plt.title('Training and Validation loss') 50 plt.legend() 51 plt.grid() 52 53 plt.savefig(save_graph_img_path) 54 plt.close() # バッファ解放 55 56 57def main(): 58 # ハイパーパラメータ 59 batch_size = 5 # バッチサイズ 60 num_classes = 3 # 分類クラス数(今回は3種類) 61 epochs = 200 # エポック数(学習の繰り返し回数) 62 dropout_rate = 0.2 # 過学習防止用:入力の20%を0にする(破棄) 63 64 # 入力画像のパラメータ 65 img_width = 32 # 入力画像の幅 66 img_height = 32 # 入力画像の高さ 67 img_ch = 3 # 3ch画像(RGB)で学習 68 69 print(os.getcwd()) 70 # データ格納用のディレクトリパス 71 SAVE_DATA_DIR_PATH = "/content/drive/MyDrive/ai/momotaro/" 72 73 # ディレクトリがなければ作成 74 # os.makedirs(SAVE_DATA_DIR_PATH, exist_ok=True) 75 76 # グラフ画像のサイズ 77 FIG_SIZE_WIDTH = 12 78 FIG_SIZE_HEIGHT = 10 79 FIG_FONT_SIZE = 25 80 81 data_x = [] 82 data_y = [] 83 num_classes = 3 84 85 # クラス0の画像データ群をロード 86 for filepath in list_imgs(SAVE_DATA_DIR_PATH + "dog"): 87 img = img_to_array(load_img(filepath, target_size=(img_width,img_height, img_ch))) 88 data_x.append(img) 89 data_y.append(0) # 教師データ(正解) 90 91 # クラス1の画像データ群をロード 92 for filepath in list_imgs(SAVE_DATA_DIR_PATH + "monkey"): 93 img = img_to_array(load_img(filepath, target_size=(img_width,img_height, img_ch))) 94 data_x.append(img) 95 data_y.append(1) # 教師データ(正解) 96 97 # クラス2の画像データ群をロード 98 for filepath in list_imgs(SAVE_DATA_DIR_PATH + "pheasant"): 99 img = img_to_array(load_img(filepath, target_size=(img_width,img_height, img_ch))) 100 data_x.append(img) 101 data_y.append(2) # 教師データ(正解) 102 103 # NumPy配列に変換 104 data_x = np.asarray(data_x) 105 106 # 学習データはNumPy配列に変換し 107 data_y = np.asarray(data_y) 108 109 # 学習用データとテストデータに分割 110 x_train, x_test, y_train, y_test = train_test_split(data_x, data_y, test_size=0.2) 111 112 # 学習データはfloat32型に変換し、正規化(0~1) 113 x_train = x_train.astype('float32') 114 x_test = x_test.astype('float32') 115 x_train = x_train / 255.0 116 x_test = x_test / 255.0 117 118 # 正解ラベルをone hotエンコーディング 119 y_train = to_categorical(y_train, num_classes) 120 y_test = to_categorical(y_test, num_classes) 121 122 # データセットの個数を表示 123 print(x_train.shape, 'x train samples') 124 print(x_test.shape, 'x test samples') 125 print(y_train.shape, 'y train samples') 126 print(y_test.shape, 'y test samples') 127 128 """ 129 (12, 32, 32, 3) x train samples 130 (12, 32, 32, 3) x train samples 131 (4,) y test samples 132 (4,) y test samples 133 """ 134 # モデルの構築 135 model = Sequential() 136 137 # 入力層:32×32*3 138 # 【2次元畳み込み層】 139 # Conv2D:2次元畳み込み層で、画像から特徴を抽出(活性化関数:relu) 140 # 入力データにカーネルをかける(「3×3」の32種類のフィルタを各マスにかける) 141 # 出力ユニット数:32(32枚分の出力データが得られる) 142 model.add(Conv2D(32,(3,3), 143 padding='same', 144 input_shape=x_train.shape[1:], 145 activation='relu')) 146 147 # 【2次元畳み込み層】 148 # 画像から特徴を抽出(活性化関数:relu) 149 # relu(ランプ関数)は、フィルタ後の入力データが0以下の時は出力0(入力が0より大きい場合はそのまま出力) 150 # 入力データにカーネルをかける(「3×3」の32種類のフィルタを使う) 151 # 出力ユニット数:32(32枚分の出力データが得られる) 152 # 問題が複雑ならフィルタの種類を増やす 153 # padding="same"は:の入力と同じ長さを出力がもつように入力にパディング 154 model.add(Conv2D(32,(3,3), 155 padding='same', 156 activation='relu')) 157 158 # 【プーリング層】 159 # 特徴量を圧縮する層。(ロバスト性向上、過学習防止、計算コスト抑制のため) 160 # 畳み込み層で抽出された特徴の位置感度を若干低下させ、対象とする特徴量の画像内での位置が若干変化した場合でもプーリング層の出力が普遍になるようにする。 161 # 画像の空間サイズの大きさを小さくし、調整するパラメーターの数を減らし、過学習を防止 162 # pool_size=(2, 2):「2×2」の大きさの最大プーリング層。 163 # 入力画像内の「2×2」の領域で最大の数値を出力。 164 model.add(MaxPooling2D(pool_size=(2, 2))) 165 166 # ドロップアウト(過学習防止用, dropout_rate=0.2なら20%のユニットを無効化) 167 model.add(Dropout(dropout_rate)) 168 169 # 【2次元畳み込み層】 170 # 画像から特徴を抽出(活性化関数:relu) 171 # relu(ランプ関数)は、フィルタ後の入力データが0以下の時は出力0(入力が0より大きい場合はそのまま出力) 172 # 入力データにカーネルをかける(「3×3」の64種類のフィルタを使う) 173 # 出力ユニット数:64(64枚分の出力データが得られる) 174 # 問題が複雑ならフィルタの種類を増やす 175 model.add(Conv2D(64,(3,3), 176 padding='same', 177 activation='relu')) 178 179 # 【2次元畳み込み層】 180 # 画像から特徴を抽出(活性化関数:relu) 181 # relu(ランプ関数)は、フィルタ後の入力データが0以下の時は出力0(入力が0より大きい場合はそのまま出力) 182 # 入力データにカーネルをかける(「3×3」の64種類のフィルタを使う) 183 # 出力ユニット数:64(64枚分の出力データが得られる) 184 # 問題が複雑ならフィルタの種類を増やす 185 model.add(Conv2D(64,(3,3), 186 padding='same', 187 activation='relu')) 188 189 # 【プーリング層】 190 # 特徴量を圧縮する層。(ロバスト性向上、過学習防止、計算コスト抑制のため) 191 # 畳み込み層で抽出された特徴の位置感度を若干低下させ、対象とする特徴量の画像内での位置が若干変化した場合でもプーリング層の出力が普遍になるようにする。 192 # 画像の空間サイズの大きさを小さくし、調整するパラメーターの数を減らし、過学習を防止 193 # pool_size=(2, 2):「2×2」の大きさの最大プーリング層。 194 # 入力画像内の「2×2」の領域で最大の数値を出力。 195 model.add(MaxPooling2D(pool_size=(2, 2))) 196 197 # ドロップアウト(過学習防止用, dropout_rate=0.2なら20%のユニットを無効化) 198 model.add(Dropout(dropout_rate)) 199 200 # 平坦化(次元削減) 201 # 1次元ベクトルに変換 202 model.add(Flatten()) 203 204 # 全結合層 205 # 出力ユニット数:512 206 model.add(Dense(512, activation='relu')) 207 208 # ドロップアウト(過学習防止用, dropout_rate=0.2なら20%のユニットを無効化) 209 model.add(Dropout(dropout_rate)) 210 211 # 全結合層 212 # 10分類(0から9まで)なので、ユニット数10, 分類問題なので活性化関数はsoftmax関数 213 # Softmax関数で総和が1となるように、各出力の予測確率を計算 214 model.add(Dense(num_classes, activation='softmax')) # 活性化関数:softmax 215 216 # モデル構造の表示 217 model.summary() 218 219 # コンパイル(多クラス分類問題) 220 # 最適化:RMSpropを使用 221 model.compile(loss='categorical_crossentropy', optimizer=RMSprop(), metrics=['accuracy']) 222 223 # 構築したモデルで学習(学習データ:trainのうち、10%を検証データ:validationとして使用) 224 # verbose=1:標準出力にログを表示 225 history = model.fit(x_train, 226 y_train, 227 batch_size=batch_size, 228 epochs=epochs, 229 verbose=1, 230 validation_split=0.1) 231 232 # テスト用データセットで学習済分類器に入力し、パフォーマンスを計測 233 score = model.evaluate(x_test, 234 y_test, 235 verbose=0 236 ) 237 238 # パフォーマンス計測の結果を表示 239 # 損失値(値が小さいほど良い) 240 print('Test loss:', score[0]) 241 242 # 正答率(値が大きいほど良い) 243 print('Test accuracy:', score[1]) 244 245 """ 246 Test loss: 0.04433278796807406 247 Test accuracy: 0.9916999936103821 248 """ 249 250 # 学習過程をプロット 251 plot_history(history, 252 save_graph_img_path = SAVE_DATA_DIR_PATH + "graph.png", 253 fig_size_width = FIG_SIZE_WIDTH, 254 fig_size_height = FIG_SIZE_HEIGHT, 255 lim_font_size = FIG_FONT_SIZE) 256 257 # モデル構造の保存 258 open(SAVE_DATA_DIR_PATH + "model.json","w").write(model.to_json()) 259 260 # 学習済みの重みを保存 261 model.save_weights(SAVE_DATA_DIR_PATH + "weight.hdf5") 262 263 # 学習履歴を保存 264 with open(SAVE_DATA_DIR_PATH + "history.json", 'wb') as f: 265 pickle.dump(history.history, f) 266 267if __name__ == '__main__': 268 main() 269

以下エラーメッセージです。

ValueError: With n_samples-0, test size=0. 2 and train_size=None, the resulting train set will be empty. Adjust any of the aforement ioned par ameters

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

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

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

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

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

meg_

2021/08/31 10:51

エラーメッセージは抜粋ではなく全文掲載してください。
jbpb0

2021/08/31 10:54

> x_train, x_test, y_train, y_test = train_test_split(data_x, data_y, test_size=0.2) で0.8:0.2の割合で分割してるのだから、x_trainはx_testよりも約4倍多くなるはずだから、 > print(x_train.shape, 'x train samples') print(x_test.shape, 'x test samples') は > (12, 32, 32, 3) x train samples (12, 32, 32, 3) x train samples のようにサンプル数が同じ12にはならないはず > print(y_train.shape, 'y train samples') print(y_test.shape, 'y test samples') > (4,) y test samples (4,) y test samples は形がおかしい > print(x_train.shape, 'x train samples') > (12, 32, 32, 3) x train samples とサンプル数が12で、クラスが0〜2の3通りなら、 > print(y_train.shape, 'y train samples') は「(12, 3) y train samples」となるはず
jbpb0

2021/08/31 11:06 編集

質問のコードの > SAVE_DATA_DIR_PATH =... だけ変えて、他はそのままで、当方のパソコンでエラー出ずに動きました ただし、ディレクトリ指定を間違えて、画像ファイルが読み込めなかった場合は、質問に記載のエラーと同じエラーが出ました 画像を読み込んでる3ヶ所の > for filepath in list_imgs(... のループ内の先頭にそれぞれ print(filepath) を追加して実行してみたら、画像ファイルのファイルパスが正しく表示されますでしょうか?
guest

回答1

0

データが見つからないために発生します。したがって、指定されたパスでデータが存在することを確認してください。

投稿2021/09/06 04:27

holy_

総合スコア364

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問