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

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

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

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

深層学習

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

CNN (Convolutional Neural Network)

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

機械学習

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

Python

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

受付中

【Python/Keras】CNN(畳み込みニューラルネット)で画像の分類

makuro-rinrin
Moeka_Miyata

総合スコア1

Keras

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

深層学習

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

CNN (Convolutional Neural Network)

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

機械学習

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

Python

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

1回答

0グッド

0クリップ

228閲覧

投稿2022/10/26 15:32

前提

学習用データとテスト用データに分けたい
(例)
Python(Google Colab )でCNNを用いた三つの画像分類を行うシステムを作っています。
分類器の作成中に以下のエラーメッセージが発生しました。

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • 分類器の機能を動作するようにする
  • オリジナルの画像データを用いて画像分類を行いたい(三分類)

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

Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/ Requirement already satisfied: Pillow==7.0.0 in /usr/local/lib/python3.7/dist-packages (7.0.0) --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-4-f0fc28ec8cdd> in <module> 267 268 if __name__ == '__main__': --> 269 main() 2 frames /usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_split.py in _validate_shuffle_split(n_samples, test_size, train_size, default_test_size) 2099 "With n_samples={}, test_size={} and train_size={}, the " 2100 "resulting train set will be empty. Adjust any of the " -> 2101 "aforementioned parameters.".format(n_samples, test_size, train_size) 2102 ) 2103 ValueError: With n_samples=0, test_size=0.2 and train_size=None, the resulting train set will be empty. Adjust any of the aforementioned parameters.

該当のソースコード(一番下のソースコードでエラーです。それ以外に問題がある場合の為、仮定を乗せています。長くてすみません(´;ω;`))

Python

1# -*- coding: utf-8 -*- 2import numpy as np 3from tensorflow.keras.models import Sequential, model_from_json 4from tensorflow.keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D 5from tensorflow.keras.optimizers import RMSprop 6from tensorflow.keras.datasets import cifar10 7from tensorflow.keras.preprocessing.image import array_to_img, img_to_array, load_img 8from tensorflow.keras.utils import to_categorical 9from sklearn.model_selection import train_test_split 10import matplotlib.pyplot as plt 11import re 12import os 13import pickle 14!pip install Pillow==7.0.0 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 56def main(): 57 # ハイパーパラメータ 58 batch_size = 5 # バッチサイズ 59 num_classes = 3 # 分類クラス数(今回は3種類) 60 epochs = 200 # エポック数(学習の繰り返し回数) 61 dropout_rate = 0.2 # 過学習防止用:入力の20%を0にする(破棄) 62 63 # 入力画像のパラメータ 64 img_width = 32 # 入力画像の幅 65 img_height = 32 # 入力画像の高さ 66 img_ch = 3 # 3ch画像(RGB)で学習 67 68 # データの保存先(自分の環境に応じて適宜変更) 69 SAVE_DATA_DIR_PATH = "C:/github/sample/python/keras/04_img/ex1_data/" 70 71 # ディレクトリがなければ作成 72 os.makedirs(SAVE_DATA_DIR_PATH, exist_ok=True) 73 74 # グラフ画像のサイズ 75 FIG_SIZE_WIDTH = 12 76 FIG_SIZE_HEIGHT = 10 77 FIG_FONT_SIZE = 25 78 79 data_x = [] 80 data_y = [] 81 num_classes = 3 82 83 # クラス0の画像データ群をロード 84 for filepath in list_imgs(SAVE_DATA_DIR_PATH + "img0"): 85 img = img_to_array(load_img(filepath, target_size=(img_width,img_height, img_ch))) 86 data_x.append(img) 87 data_y.append(0) # 教師データ(正解) 88 89 90 # クラス1の画像データ群をロード 91 for filepath in list_imgs(SAVE_DATA_DIR_PATH + "img1"): 92 img = img_to_array(load_img(filepath, target_size=(img_width,img_height, img_ch))) 93 data_x.append(img) 94 data_y.append(1) # 教師データ(正解) 95 96 # クラス2の画像データ群をロード 97 for filepath in list_imgs(SAVE_DATA_DIR_PATH + "img2"): 98 img = img_to_array(load_img(filepath, target_size=(img_width,img_height, img_ch))) 99 data_x.append(img) 100 data_y.append(2) # 教師データ(正解) 101 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)

試したこと

解説動画ではpillowのダウンロードが必要とのことですので、それをダウンロードしたのみです。(14行目)それもあってるかわからない…

補足情報

参考文献↓
https://algorithm.joho.info/machine-learning/python-keras-convolutional-neural-network/

CNNで画像分類を行ってみたく、画像ファイル(独自)のみ書き換えて実装してみたいです。
Pythonは基礎知識しかありません。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

jbpb0

2022/10/26 23:12

エラーメッセージの「2 frames」をクリックしたら、隠れてるものが表示されるので、それも追記してください
jbpb0

2022/10/26 23:19

エラーが出てるのが > x_train, x_test, y_train, y_test = train_test_split(data_x, data_y, test_size=0.2) なら、そのすぐ上に下記を追加して実行したら、何て表示されますでしょうか? print(data_x.shape) print(data_y.shape)
jbpb0

2022/10/26 23:30 編集

> Python(Google Colab )で > # データの保存先(自分の環境に応じて適宜変更) SAVE_DATA_DIR_PATH = "C:/github/sample/python/keras/04_img/ex1_data/" google colabでは、ローカルパソコンのファイルにはアクセスできません ファイルをgoogle colabにアップロードするか、google driveにアップロードしてマウントするか、します
makuro-rinrin

2022/10/27 00:06

ご回答ありがとうございます。 まず、エラーメッセージについてですが、 ------------------------------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-4-f0fc28ec8cdd> in <module> 267 268 if __name__ == '__main__': --> 269 main() 2 frames <ipython-input-4-f0fc28ec8cdd> in main() 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) /usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_split.py in train_test_split(test_size, train_size, random_state, shuffle, stratify, *arrays) 2419 n_samples = _num_samples(arrays[0]) 2420 n_train, n_test = _validate_shuffle_split( -> 2421 n_samples, test_size, train_size, default_test_size=0.25 2422 ) 2423 /usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_split.py in _validate_shuffle_split(n_samples, test_size, train_size, default_test_size) 2099 "With n_samples={}, test_size={} and train_size={}, the " 2100 "resulting train set will be empty. Adjust any of the " -> 2101 "aforementioned parameters.".format(n_samples, test_size, train_size) 2102 ) 2103 ValueError: With n_samples=0, test_size=0.2 and train_size=None, the resulting train set will be empty. Adjust any of the aforementioned parameters. ----------------------------------------------------------------------------------------------------- 次に、下記を追加したもの。 >print(data_x.shape) print(data_y.shape) ----------------------------------------------------------------------------------------------------- Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/ Collecting Pillow==7.0.0 Downloading Pillow-7.0.0-cp37-cp37m-manylinux1_x86_64.whl (2.1 MB) |████████████████████████████████| 2.1 MB 18.4 MB/s Installing collected packages: Pillow Attempting uninstall: Pillow Found existing installation: Pillow 7.1.2 Uninstalling Pillow-7.1.2: Successfully uninstalled Pillow-7.1.2 ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. bokeh 2.3.3 requires pillow>=7.1.0, but you have pillow 7.0.0 which is incompatible. Successfully installed Pillow-7.0.0 WARNING: The following packages were previously imported in this runtime: [PIL] You must restart the runtime in order to use newly installed versions. --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-1-140cb7325be4> in <module> 269 270 if __name__ == '__main__': --> 271 main() 2 frames /usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_split.py in _validate_shuffle_split(n_samples, test_size, train_size, default_test_size) 2099 "With n_samples={}, test_size={} and train_size={}, the " 2100 "resulting train set will be empty. Adjust any of the " -> 2101 "aforementioned parameters.".format(n_samples, test_size, train_size) 2102 ) 2103 ------------------------------------------------------------------------------------------------------------ 「最後にコラボ上に自前の画像フォルダをアップロードする」 アップロードはしてみたものの、おそらくソースコード上で画像フォルダを指定(展開)できていないと思われます。 >SAVE_DATA_DIR_PATH = "C:/github/sample/python/keras/04_img/ex1_data/" を、Google ドライブ上にフォルダを作成して保存するのでしょうか? >SAVE_DATA_DIR_PATH ="/content/drive/My Drive/test" ???
jbpb0

2022/10/27 00:47 編集

google colabに直接アップロードするより、google driveにアップロードしてマウントする方がいいと思います 理由は二つあります まず、google colabにはファイルを一つずつしかアップロードできないので、ディレクトリ毎アップロードするのが面倒です ファイル数が少なければ一つずつでもいいですが、ファイルがたくさんだとやってられないので、zipとかで一つのファイルにまとめてからアップロードして、google colab上で解凍したりします 一方、google driveはディレクトリを指定したら、中のファイルも全部そのままアップロードできます あと、google colabはノートブックをしばらく放置したら、勝手に切断されてランタイムが削除されてしまいますが、その際にアップロードしたファイルも消えてしまうため、その後に再度アップロードする必要があります 一方、google driveにアップロードしたファイルは、google colabがどうなろうと消えないので、再アップロードの必要はありません
jbpb0

2022/10/27 00:29

> まず、エラーメッセージについてですが、 ここに書くのではなく、質問を編集して、「発生している問題・エラーメッセージ」のところに追記してください
jbpb0

2022/10/27 01:36 編集

> >SAVE_DATA_DIR_PATH = "C:/github/sample/python/keras/04_img/ex1_data/" を、Google ドライブ上にフォルダを作成して保存するのでしょうか? まずは、ローカルパソコンの「C:/github/sample/python/keras/04_img/ex1_data」を、丸ごとgoogle driveのどこかにアップロードしてください google driveで、「新規」→「フォルダのアップロード」とやって、「C:/github/sample/python/keras/04_img/ex1_data」を指定したら、丸ごとアップロードできるはずです アップロードするgoogle drive内の場所は、どこでもいいです 一番上(マイドライブ)でもいいし、後で何が入ってるか分かりやすくなる名前のディレクトリを作って、そこに入れてもいいです
jbpb0

2022/10/27 00:46

google driveへのアップロードが終わったら、google colabでgoogle driveをマウントします 手順は下記を見てください https://startlab.jp/learning-python/colaboratory-gdrive/ マウントができたら、google colabで下記を実行してみてください !ls -la /content/drive/MyDrive 正常にマウントができてれば、上記を実行したらgoogle driveの一番上(マイドライブ)にあるファイルやディレクトリの一覧が表示されるはずですので、実際そうなるか実行して確認してみてください
jbpb0

2022/10/27 01:32 編集

google driveのマウントが正常にできたら、コードを修正します もし、「C:/github/sample/python/keras/04_img/ex1_data」をgoogle driveの一番上(マイドライブ)にアップロードしたなら、google colabで !ls -la /content/drive/MyDrive を実行して表示される中に「ex1_data」があるでしょう その場合は、コードを下記のようにすればファイルが読めると思います SAVE_DATA_DIR_PATH = "/content/drive/MyDrive/ex1_data/" アップロードした場所がgoogle driveの一番上(マイドライブ)ではない場合は、そのパスに変えます たとえば、google driveの一番上(マイドライブ)に「colabimg」というディレクトリを作り、その中にアップロードした場合は、 !ls -la /content/drive/MyDrive/colabimg を実行したら「ex1_data」があるはずなので、コードを下記のようにすればファイルが読めると思います SAVE_DATA_DIR_PATH = "/content/drive/MyDrive/colabimg/ex1_data/" 【追記】 「SAVE_DATA_DIR_PATH」で指定するパスの最後の「/」を付け忘れないようにしてください > >SAVE_DATA_DIR_PATH ="/content/drive/My Drive/test" ??? の場合は、最後は「test"」ではなくて「test/"」とします ただし、「test」の中に「img0」と「img1」と「img2」があるのが前提です そうではない場合は、実際に「img0」と「img1」と「img2」がある場所を指定します
jbpb0

2022/10/27 01:24 編集

> 解説動画ではpillowのダウンロードが必要とのことですので、それをダウンロードした google colabにはpillowはインストール済みなので、別のバージョンが必要とか何か理由が無ければ、改めてインストールする必要はありません > !pip install Pillow==7.0.0 解説動画で7.0.0が必要とバージョンを指定されてたら、インストールする必要があるでしょうけど 【追記】 質問のコードを、 ・「!pip install Pillow==7.0.0」を削除 ・画像ファイルが置いてあるパスを書き換える ・最後に「main()」を追加 して、他はそのままでgoogle colabで実行してみましたけど、エラーは出ずに実行できましたので、pillowのインストールは不要だと思います

回答1

0

Python(Google Colab )で

SAVE_DATA_DIR_PATH = "C:/github/sample/python/keras/04_img/ex1_data/"

google colabでは、ローカルパソコンのファイルにはアクセスできません

ファイルをgoogle colabにアップロードするか、google driveにアップロードしてマウントするか、します

投稿2022/11/03 03:15

jbpb0

総合スコア7489

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Keras

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

深層学習

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

CNN (Convolutional Neural Network)

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

機械学習

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

Python

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