機械学習初心者です。Chainerを使った画像分類をしようとしています。
フォルダのパスを渡してデータセットを作り、学習するという流れなのですが、trainer.run()を実行すると
ValueError: all the input array dimensions except for the concatenation axis must match exactly
というエラーが出てしまい、学習ができません。
データセットを作る際に渡しているfnameとlabelsには、同数の要素が入っていることを確認しています。
このエラーの出る理由と、解決方法をご教授いただけないでしょうか。
以下にコードとエラーを載せさせていただきます。
python3
1import numpy as np 2import os 3import glob 4import chainer 5from itertools import chain 6from chainer.datasets import LabeledImageDataset 7from chainer import iterators, training, optimizers, datasets, serializers 8 9from mymodell import MyChain 10 11chainer.config.train = True 12 13# 画像フォルダのパス 14IMG_DIR = 'Z:trainf' 15 16# 各フォルダ 17dnames = glob.glob('{}/*'.format(IMG_DIR)) 18# 画像ファイルパス一覧 19fnames = [glob.glob('{}/*.PNG'.format(d)) for d in dnames] 20fnames = list(chain.from_iterable(fnames)) 21 22# それぞれにフォルダ名から一意なIDを付与 23labels = [os.path.basename(os.path.dirname(fn)) for fn in fnames] 24dnames = [os.path.basename(d) for d in dnames] 25labels = [dnames.index(l) for l in labels] 26d = LabeledImageDataset(list(zip(fnames, labels))) 27 28def transform(data): 29 img, label = data 30 img = img / 255. 31 return img, label 32 33 34train = chainer.datasets.TransformDataset(d, transform) 35 36epoch = 10 37batch = 5 38 39model = MyChain() 40model = L.Classifier(model) 41 42optimizer = optimizers.Adam() 43optimizer.setup(model) 44 45train_iter = iterators.SerialIterator(train, batch) 46updater = training.StandardUpdater(train_iter, optimizer) 47trainer = training.Trainer(updater, (epoch, 'epoch'), out='result') 48trainer.run() 49 50serializers.save_npz("c_mymo.npz", model)
error
1 return xp.concatenate([array[None] for array in arrays]) 2 3ValueError: all the input array dimensions except for the concatenation axis must match exactly
コードの作成にはこちらのサイト様を参考にさせていただきました。
###補足情報(FW/ツールのバージョンなど)
開発環境
Windows10
WinPython-64bit-3.6.3(Python3.6)
あなたの回答
tips
プレビュー