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

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

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

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

機械学習

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

Python

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

Q&A

0回答

629閲覧

Chainerでの画像セグメンテーションでエラーが出ます

vessl

総合スコア5

Chainer

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

機械学習

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

Python

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

0グッド

0クリップ

投稿2019/12/02 09:14

前提・実現したいこと

現在、セマンティックセグメンテーションを用いた物体検出を勉強しています。
そこで、https://japan-medical-ai.github.io/medical-ai-course-materials/notebooks/05_Image_Segmentation.htmlを参照して、サイト通りにMRI画像から左心室を検出するモデルを実践したところ、うまく動作させることができました。

しかし、この学習モデルを使用して自前の別のデータセットで試しましたが、エラーが出てしまいます。
エラーコードで検索を行ったのですが、自分の勉強不足で理解できず、原因の究明・解決ができませんでした。

上記サイトで用いているデータセットは、元画像:256×256のグレースケール(PNG)、ラベル画像:256×256の2値画像(PNG)です。
また、自前で用意したデータセットは、元画像:64×64のグレースケール(PNG)、ラベル画像:64×64の2値画像(PNG)です。

実行コード

Python

1%%time 2trainer = create_trainer(16, train, val, (20, 'epoch'), device=0) 3trainer.run()

エラーメッセージ

Python

1Exception in main training loop: all the input array dimensions for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 4 and the array at index 3 has size 1 2Traceback (most recent call last): 3 File "/usr/local/lib/python3.6/dist-packages/chainer/training/trainer.py", line 316, in run 4 update() 5 File "/usr/local/lib/python3.6/dist-packages/chainer/training/updaters/standard_updater.py", line 175, in update 6 self.update_core() 7 File "/usr/local/lib/python3.6/dist-packages/chainer/training/updaters/standard_updater.py", line 181, in update_core 8 in_arrays = convert._call_converter(self.converter, batch, self.device) 9 File "/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py", line 73, in _call_converter 10 return converter(batch, device) 11 File "/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py", line 58, in wrap_call 12 return func(*args, **kwargs) 13 File "/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py", line 223, in concat_examples 14 [example[i] for example in batch], padding[i]))) 15 File "/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py", line 254, in _concat_arrays 16 [array[None] for array in arrays]) 17 File "<__array_function__ internals>", line 6, in concatenate 18Will finalize trainer extensions and updater before reraising the exception. 19--------------------------------------------------------------------------- 20ValueError Traceback (most recent call last) 21<ipython-input-13-d8605bf9739d> in <module>() 22----> 1 get_ipython().run_cell_magic('time', '', "trainer = create_trainer(16, train, val, (20, 'epoch'), device=0)\ntrainer.run()") 23 24/usr/local/lib/python3.6/dist-packages/IPython/core/interactiveshell.py in run_cell_magic(self, magic_name, line, cell) 25 2115 magic_arg_s = self.var_expand(line, stack_depth) 26 2116 with self.builtin_trap: 27-> 2117 result = fn(magic_arg_s, cell) 28 2118 return result 29 2119 30 31</usr/local/lib/python3.6/dist-packages/decorator.py:decorator-gen-60> in time(self, line, cell, local_ns) 32 33/usr/local/lib/python3.6/dist-packages/IPython/core/magic.py in <lambda>(f, *a, **k) 34 186 # but it's overkill for just that one bit of state. 35 187 def magic_deco(arg): 36--> 188 call = lambda f, *a, **k: f(*a, **k) 37 189 38 190 if callable(arg): 39 40/usr/local/lib/python3.6/dist-packages/IPython/core/magics/execution.py in time(self, line, cell, local_ns) 41 1191 else: 42 1192 st = clock2() 43-> 1193 exec(code, glob, local_ns) 44 1194 end = clock2() 45 1195 out = None 46 47<timed exec> in <module>() 48 49/usr/local/lib/python3.6/dist-packages/chainer/training/trainer.py in run(self, show_loop_exception_msg) 50 347 f.write('Traceback (most recent call last):\n') 51 348 traceback.print_tb(sys.exc_info()[2]) 52--> 349 six.reraise(*exc_info) 53 350 finally: 54 351 for _, entry in extensions: 55 56/usr/local/lib/python3.6/dist-packages/six.py in reraise(tp, value, tb) 57 691 if value.__traceback__ is not tb: 58 692 raise value.with_traceback(tb) 59--> 693 raise value 60 694 finally: 61 695 value = None 62 63/usr/local/lib/python3.6/dist-packages/chainer/training/trainer.py in run(self, show_loop_exception_msg) 64 314 self.observation = {} 65 315 with reporter.scope(self.observation): 66--> 316 update() 67 317 for name, entry in extensions: 68 318 if entry.trigger(self): 69 70/usr/local/lib/python3.6/dist-packages/chainer/training/updaters/standard_updater.py in update(self) 71 173 72 174 """ 73--> 175 self.update_core() 74 176 self.iteration += 1 75 177 76 77/usr/local/lib/python3.6/dist-packages/chainer/training/updaters/standard_updater.py in update_core(self) 78 179 iterator = self._iterators['main'] 79 180 batch = iterator.next() 80--> 181 in_arrays = convert._call_converter(self.converter, batch, self.device) 81 182 82 183 optimizer = self._optimizers['main'] 83 84/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py in _call_converter(converter, batch, device) 85 71 if getattr(converter, '__is_decorated_converter', False): 86 72 # New-style converter 87---> 73 return converter(batch, device) 88 74 89 75 # Old-style converter 90 91/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py in wrap_call(*args, **kwargs) 92 56 elif 'device' in kwargs: 93 57 kwargs['device'] = _get_device(kwargs['device']) 94---> 58 return func(*args, **kwargs) 95 59 96 60 return wrap_call 97 98/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py in concat_examples(batch, device, padding) 99 221 for i in six.moves.range(len(first_elem)): 100 222 result.append(to_device(device, _concat_arrays( 101--> 223 [example[i] for example in batch], padding[i]))) 102 224 103 225 return tuple(result) 104 105/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py in _concat_arrays(arrays, padding) 106 252 with chainer.using_device(device): 107 253 arr_concat = device.xp.concatenate( 108--> 254 [array[None] for array in arrays]) 109 255 110 256 return arr_concat 111 112<__array_function__ internals> in concatenate(*args, **kwargs) 113 114ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 4 and the array at index 3 has size 1

参照元プログラムからの変更点

Python

1def create_trainer(batchsize, train, val, stop, device=-1): 2 # 先程定義したモデルを使用 3 model = MultiLayerPerceptron(out_h=256, out_w=256)

MultiLayerPerceptronの引数を256から64に変更しています。

補足情報(FW/ツールのバージョンなど)

使用しているデータセットと上記変更点以外は参照元のプログラムをそのまま使用させていただきました。
環境構築などもすべて同一のものを使用しています。
https://japan-medical-ai.github.io/medical-ai-course-materials/notebooks/05_Image_Segmentation.html

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

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

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

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

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

Q71

2019/12/07 01:47 編集

> all the input array dimensions for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 4 and the array at index 3 has size 1 結合する入力配列の次元は厳密に一致しなければなりません。次元1について、入力配列の0番目は4ですが、3番目は1です。 ということなので、おそらくグレースケールの仕方が違うのではないかと思います。 元のデータの shape と、ご自身で用意されたデータの shape を比べてみて下さい。 pycharmなどのデバッグ環境をお持ちなら、エラーが発生したところから呼び出し元に戻っていけば(スタックトレースをたどれば)、判別しやすいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問