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

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

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

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

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

0回答

1725閲覧

chainerで画像の学習させようとdataset作成部分でエラーが出ます。

yuya_murakami

総合スコア12

Chainer

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

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2019/07/13 12:39

編集2019/07/13 23:54

前提・実現したいこと

chainer、pythonを用いて犬猫を分類するプログラムを作ろうとしています。
dataset作成の際に、augmentationをして検証データと訓練データを分割しようとしたところ、エラーが生じています。

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

Exception in main training loop: Traceback (most recent call last): File "/usr/local/lib/python3.5/dist-packages/chainer/training/trainer.py", line 306, in run update() File "/usr/local/lib/python3.5/dist-packages/chainer/training/updaters/standard_updater.py", line 149, in update self.update_core() File "/usr/local/lib/python3.5/dist-packages/chainer/training/updaters/standard_updater.py", line 154, in update_core in_arrays = self.converter(batch, self.device) File "/usr/local/lib/python3.5/dist-packages/chainer/dataset/convert.py", line 133, in concat_examples [example[i] for example in batch], padding[i]))) File "/usr/local/lib/python3.5/dist-packages/chainer/dataset/convert.py", line 163, in _concat_arrays return xp.concatenate([array[None] for array in arrays]) Will finalize trainer extensions and updater before reraising the exception. --------------------------------------------------------------------------- MemoryError Traceback (most recent call last) <ipython-input-150-3287ea1d3afc> in <module>() ----> 1 trainer.run() /usr/local/lib/python3.5/dist-packages/chainer/training/trainer.py in run(self, show_loop_exception_msg) 318 print('Will finalize trainer extensions and updater before ' 319 'reraising the exception.', file=sys.stderr) --> 320 six.reraise(*sys.exc_info()) 321 finally: 322 for _, entry in extensions: /usr/local/lib/python3.5/dist-packages/six.py in reraise(tp, value, tb) 691 if value.__traceback__ is not tb: 692 raise value.with_traceback(tb) --> 693 raise value 694 finally: 695 value = None /usr/local/lib/python3.5/dist-packages/chainer/training/trainer.py in run(self, show_loop_exception_msg) 304 self.observation = {} 305 with reporter.scope(self.observation): --> 306 update() 307 for name, entry in extensions: 308 if entry.trigger(self): /usr/local/lib/python3.5/dist-packages/chainer/training/updaters/standard_updater.py in update(self) 147 148 """ --> 149 self.update_core() 150 self.iteration += 1 151 /usr/local/lib/python3.5/dist-packages/chainer/training/updaters/standard_updater.py in update_core(self) 152 def update_core(self): 153 batch = self._iterators['main'].next() --> 154 in_arrays = self.converter(batch, self.device) 155 156 optimizer = self._optimizers['main'] /usr/local/lib/python3.5/dist-packages/chainer/dataset/convert.py in concat_examples(batch, device, padding) 131 for i in six.moves.range(len(first_elem)): 132 result.append(to_device(device, _concat_arrays( --> 133 [example[i] for example in batch], padding[i]))) 134 135 return tuple(result) /usr/local/lib/python3.5/dist-packages/chainer/dataset/convert.py in _concat_arrays(arrays, padding) 161 xp = cuda.get_array_module(arrays[0]) 162 with cuda.get_device_from_array(arrays[0]): --> 163 return xp.concatenate([array[None] for array in arrays]) 164 165 MemoryError:

該当のソースコード

python

1%matplotlib inline 2from PIL import Image 3from glob import glob 4import numpy as np 5import pandas as pd 6import matplotlib.pyplot as plt 7import chainer 8import chainer.functions as F 9import chainer.links as L 10import scipy 11from scipy.ndimage.interpolation import rotate 12import cv2 13from glob import glob 14 15import random 16def reset_seed(seed=0): 17 random.seed(seed) 18 np.random.seed(seed) 19if chainer.cuda.available: 20 chainer.cuda.cupy.random.seed(seed) 21reset_seed() 22 23cat_paths = 'data/cat/*.jpg' 24dog_paths = 'data/dog/*.jpg' 25cat_files = glob(cat_paths) 26dog_files = glob(dog_paths) 27 28#cat元画像格納場所 29x_basec,t_basec = [],[] 30for filepath in cat_files: 31 img = Image.open(filepath) 32 img = np.array(img, 'f')#この下に水増し関数いれる 33 img = np.transpose(img,(2, 0, 1)) 34 x_basec.append(img) 35 t_basec.append(np.array(0, 'i')) # 猫は0 36#dog元画像格納場所 37x_based,t_based = [],[] 38for filepath in dog_files: 39 img = Image.open(filepath) 40 img = np.array(img, 'f')#この下に水増し関数いれる 41 img = np.transpose(img,(2, 0, 1)) 42 x_based.append(img) 43 t_based.append(np.array(1, 'i')) # 犬は1 44x_train, x_test = [],[] 45t_train, t_test = [],[] 46for filepath in cat_files: 47 if random.random() <0.7 : #訓練とテストの分割をランダム化 48 x_train.append(x_basec) 49 t_train.append(t_basec) 50 else: 51 x_test.append(x_basec) 52 t_test.append(t_basec) 53 54for filepath in dog_files: 55 if random.random() <0.7 : #訓練とテストの分割をランダム化 56 x_train.append(x_based) 57 t_train.append(t_based) 58 59 else: 60 x_test.append(x_based) 61 t_test.append(t_based) 62 63**train = chainer.datasets.TupleDataset(x_train,t_train) 64test = chainer.datasets.TupleDataset(x_test,t_test) ** 65 66class CNN(chainer.Chain): 67 68 def __init__(self, n_mid=100, n_out=2): 69 super().__init__() 70 with self.init_scope(): 71 self.conv1 = L.Convolution2D(in_channels=1, out_channels=3, ksize=3, stride=1, pad=1) 72 self.fc1 = L.Linear(None, n_mid) 73 self.fc2 = L.Linear(None, n_out) 74 75 def __call__(self, x): 76 h = F.relu(self.conv1(x)) 77 h = F.max_pooling_2d(h, 3, 3) 78 h = self.fc1(h) 79 h = self.fc2(h) 80 return h 81import random 82 83def reset_seed(seed=0): 84 random.seed(seed) 85 np.random.seed(seed) 86 if chainer.cuda.available: 87 chainer.cuda.cupy.random.seed(seed) 88# CPUとGPU関連のシードをすべて固定 89reset_seed(0) 90 91gpu_id = 0 # 使用したGPUに割り振られているID 92model.to_gpu(gpu_id) 93# Optimizerの定義とmodelとの紐づけ 94optimizer = chainer.optimizers.Adam() 95optimizer.setup(model) 96batchsize = 128 97train_iter = chainer.iterators.SerialIterator(train, batchsize) 98test_iter = chainer.iterators.SerialIterator(test, batchsize, repeat=False, shuffle=False) 99from chainer import training 100from chainer.training import extensions 101 102epoch = 30 103 104updater = training.StandardUpdater(train_iter, optimizer, device=gpu_id) 105 106trainer = training.Trainer(updater, (epoch, 'epoch'), out='dc0') 107 108# バリデーション用のデータで評価 109trainer.extend(extensions.Evaluator(test_iter, model, device=gpu_id)) 110

試したこと

augmentation部分は文字数の関係で省いていますがそれでも本エラーが発生しています。
augmentationせずにdatasetを一気に作成し、tupledataset_randomしたところプログラムが通ったため、
dataset作成orそれ以前の個所にエラーが発生していると考えられます。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問