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

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

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

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

CNN (Convolutional Neural Network)

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

Python 3.x

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

Python

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

解決済

chainerで学習データの個数があっていないときのエラーを改善したい

seyu0930
seyu0930

総合スコア20

Chainer

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

CNN (Convolutional Neural Network)

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

Python 3.x

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

Python

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

2回答

0リアクション

0クリップ

974閲覧

投稿2021/07/18 08:58

chainerで犬と猫の画像認識しようとしていますが、エラーが出ました。
どのようなエラーかは以下のサイトでわかるのですが、具体的にどう直せば良いのかわかりません。
よろしくお願いいたします。
https://rti7743.hatenadiary.org/entry/20170105/1483602327

https://segafreder.hatenablog.com/entry/2016/01/17/234707

python

import chainer import numpy as np from PIL import Image import os from chainer.datasets import LabeledImageDataset from chainer.datasets import TransformDataset from chainer import datasets import chainer import chainer.functions as F import chainer.links as L from chainer import training, serializers, Chain, optimizers, iterators from chainer.training import extensions, Trainer #学習データと検証データを分ける cats_images_train_path = "/Users/haru/dogscats/train/cats/" dogs_images_train_path = "/Users/haru/dogscats/train/dogs/" cats_images_valid_path = "/Users/haru/dogscats/valid/cats/" dogs_images_valid_path = "/Users/haru/dogscats/valid/dogs/" image_and_teacher_label_list = [] #画像と教師ラベルを紐付ける0:猫,1:犬 def get_image_teacher_label_list(dir, label): filepath_list = [] #引数dir内の画像ファイルを取得 files = os.listdir(dir) #ひとつずつ取り出してディレクトリ名+画像ファイル名,ラベル(パス,ラベル)でfilepath_listに追加 for file in files: filepath_list.append((dir + file, label)) return filepath_list #学習データと検証データをリストにする #学習データ猫の画像フォルダ。ラベルは0:猫 image_and_teacher_label_list.extend(get_image_teacher_label_list(cats_images_train_path, 0)) #学習データ犬の画像フォルダ。ラベルは1:犬 image_and_teacher_label_list.extend(get_image_teacher_label_list(dogs_images_train_path, 1)) #検証データ猫の画像フォルダ。ラベルは0:猫 image_and_teacher_label_list.extend(get_image_teacher_label_list(cats_images_valid_path, 0)) #検証データ犬の画像フォルダ。ラベルは1:犬 image_and_teacher_label_list.extend(get_image_teacher_label_list(dogs_images_valid_path, 1)) #画像データをchainerのconvoluntion2Dに使えるように整備する #配列の順序を入れ替える関数 def data_reshape(width_height_channel_image): #ndarryの生成 image_array = np.array(width_height_channel_image) #配列の順序を(0,1,2)から(2,0,1)の順にする(499, 495, 3)が(3, 499, 495)になる return image_array.transpose(2, 0, 1) #畳み込みの準備をする関数 def adapt_data_to_convolution2d_format(input_image): image, label = input_image #imageのデータを8ビットの符号なしの整数に変換する(dtypeの変換) image = image.astype(np.uint8) #imageを文字列から画像ファイルに変換 image = Image.fromarray(image.transpose(1,2,0)) #画像サイズを変更 result_image = image.resize((INPUT_WIDTH, INPUT_HEIGHT), Image.LANCZOS) #data_reshape関数でデータ構造を再変換 image = data_reshape(result_image) #0~255の整数を取るデータを0〜1の間の値に変換する(0~1のfloat32型で定義しておかないとChainerがエラーになる) image = image.astype(np.float32) / 255 return image, label #データセットを作成する dogscats_dataset = LabeledImageDataset(image_and_teacher_label_list) transformed_dataset = TransformDataset(dogscats_dataset, adapt_data_to_convolution2d_format) #学習データと検証データを分ける #前処理済みのデータをランダムに8:2の割合で分割する train_data, test_data = datasets.split_dataset_random(transformed_dataset, int(len(transformed_dataset) * 0.8), seed=0) GPU_ID = 0 BATCH_SIZE = 64 MAX_EPOCH = 10 #CNN(畳み込みニューラルネットワーク)の設定 class CNN(Chain): #コンストラクタ def __init__ (self): super(CNN, self).__init__() with self.init_scope(): #ここが原因っぽい? self.conv1 = L.Convolution2D(None, out_channels=32, ksize=3, stride=1, pad=1) self.conv2 = L.Convolution2D(in_channels=32, out_channels=64, ksize=3, stride=1, pad=1) self.conv3 = L.Convolution2D(in_channels=64, out_channels=128, ksize=3, stride=1, pad=1) self.conv4 = L.Convolution2D(in_channels=128, out_channels=256, ksize=3, stride=1, pad=1) self.layer1 = L.Linear(None, 1000) self.layer2 = L.Linear(1000, 2) def __call__(self, input): func = F.max_pooling_2d(F.relu(self.conv1(input)), ksize=2, stride=2) func = F.max_pooling_2d(F.relu(self.conv2(input)), ksize=2, stride=2) func = F.max_pooling_2d(F.relu(self.conv3(input)), ksize=2, stride=2) func = F.max_pooling_2d(F.relu(self.conv4(input)), ksize=2, stride=2) func = F.dropout(F.relu(self.layer1(func)), ratio=0.80) func = self.layer2(func) return func model = L.Classifier(CNN()) model.to_gpu(GPU_ID) #学習用の反復子 train_iterator = iterators.MultiprocessIterator(train_data, BATCH_SIZE) #検証用の反復子 test_iterator = iterators.MultiprocessIterator(test_data, BATCH_SIZE, False, False) optimizer = optimizers.Adam().setup(model) updater = training.StandardUpdater(train_iterator, optimizer, device=GPU_ID) trainer = Trainer(updater, stop_trigger=(MAX_EPOCH, "epoch")) #これを実行した際にエラー trainer.run()

エラー内容の抜粋

python

InvalidType: Invalid operation is performed in: Convolution2DFunction (Forward) Expect: in_types[0].shape[1] == in_types[1].shape[1] * 1 Actual: 3 != 32

文字数の関係上エラー内容が入りきらないので説明不足な点があればコメントよろしくお願いします

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

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

jbpb0

2021/07/18 09:29

func = F.max_pooling_2d(F.relu(self.conv1(input)), ksize=2, stride=2) 以外に、 func = F.max_pooling_2d(F.relu(self.conv2(input)), ksize=2, stride=2) func = F.max_pooling_2d(F.relu(self.conv3(input)), ksize=2, stride=2) func = F.max_pooling_2d(F.relu(self.conv4(input)), ksize=2, stride=2) でも入力を「input」にしてますが、それらの入力は一つ前の出力の「func」なのでは?
seyu0930

2021/07/18 10:53

ありがとうございます! 修正したところ以下のようなエラーに変わりました Exception in thread prefetch_loop: multiprocessing.pool.RemoteTraceback: """ Traceback (most recent call last): File "/usr/lib/python3.7/multiprocessing/pool.py", line 121, in worker result = (True, func(*args, **kwds)) File "/usr/lib/python3.7/multiprocessing/pool.py", line 44, in mapstar return list(map(*args)) File "/usr/local/lib/python3.7/dist-packages/chainer/iterators/multiprocess_iterator.py", line 545, in _fetch_run data = _fetch_dataset[index] File "/usr/local/lib/python3.7/dist-packages/chainer/dataset/dataset_mixin.py", line 67, in __getitem__ return self.get_example(index) File "/usr/local/lib/python3.7/dist-packages/chainer/datasets/sub_dataset.py", line 76, in get_example return self._dataset[index] File "/usr/local/lib/python3.7/dist-packages/chainer/dataset/dataset_mixin.py", line 67, in __getitem__ return self.get_example(index) File "/usr/local/lib/python3.7/dist-packages/chainer/datasets/transform_dataset.py", line 52, in get_example return self._transform(in_data) File "<ipython-input-9-74915ea256fe>", line 13, in adapt_data_to_convolution2d_format image = data_reshape(result_image) File "<ipython-input-7-f056548796cb>", line 6, in data_reshape image_array = np.array(width_height_channel_image) File "/usr/local/lib/python3.7/dist-packages/cupy/_creation/from_data.py", line 41, in array return _core.array(obj, dtype, copy, order, subok, ndmin) File "cupy/_core/core.pyx", line 2124, in cupy._core.core.array File "cupy/_core/core.pyx", line 2203, in cupy._core.core.array File "cupy/_core/core.pyx", line 2277, in cupy._core.core._send_object_to_gpu File "cupy/_core/core.pyx", line 164, in cupy._core.core.ndarray.__init__ File "cupy/cuda/memory.pyx", line 735, in cupy.cuda.memory.alloc File "cupy/cuda/memory.pyx", line 1412, in cupy.cuda.memory.MemoryPool.malloc File "cupy/cuda/memory.pyx", line 1432, in cupy.cuda.memory.MemoryPool.malloc File "cupy/cuda/device.pyx", line 47, in cupy.cuda.device.get_device_id File "cupy_backends/cuda/api/runtime.pyx", line 289, in cupy_backends.cuda.api.runtime.getDevice File "cupy_backends/cuda/api/runtime.pyx", line 261, in cupy_backends.cuda.api.runtime.check_status cupy_backends.cuda.api.runtime.CUDARuntimeError: cudaErrorInitializationError: initialization error """ The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/usr/lib/python3.7/threading.py", line 926, in _bootstrap_inner self.run() File "/usr/lib/python3.7/threading.py", line 870, in run self._target(*self._args, **self._kwargs) File "/usr/local/lib/python3.7/dist-packages/chainer/iterators/multiprocess_iterator.py", line 488, in _run alive = self._task() File "/usr/local/lib/python3.7/dist-packages/chainer/iterators/multiprocess_iterator.py", line 512, in _task data_all = future.get(_response_time) File "/usr/lib/python3.7/multiprocessing/pool.py", line 657, in get raise self._value cupy_backends.cuda.api.runtime.CUDARuntimeError: cudaErrorInitializationError: initialization error epoch main/loss main/accuracy validation/main/loss validation/main/accuracy elapsed_time /usr/local/lib/python3.7/dist-packages/chainer/iterators/multiprocess_iterator.py:27: TimeoutWarning: Stalled dataset is detected. See the documentation of MultiprocessIterator for common causes and workarounds: https://docs.chainer.org/en/stable/reference/generated/chainer.iterators.MultiprocessIterator.html MultiprocessIterator.TimeoutWarning)
jbpb0

2021/07/19 23:55 編集

質問のエラーが直って、次に進んで別のエラーが出てきたわけだから、それは別の質問にしてください あと、GPUが絡むとエラーの分析がしにくいので、 GPU_ID = -1 としてCPUのみで実行してみてどうなるのか、も確認した方がいいですよ CPUのみ実行では別のエラーが出た場合でも、そのエラーを直したら、GPU使用実行のエラーも直る、ということもあります

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

Chainer

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

CNN (Convolutional Neural Network)

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

Python 3.x

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

Python

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