chainer 利用時のハマりどころ

chainerという機械学習フレームワークを使っていて,いくつか引っかかったところがあったのでメモしておく. 基本はエラーメッセージさえ読んだら解決する.

カスタム訓練・テストデータを用意する時

chainer.datasets.tuple_dataset.TupleDataset を使って画像データとラベルデータを紐付けるまでは良かったが trainer.run() で以下のようなエラーメッセージが出る.

    return xp.concatenate([array[None] for array in arrays])
TypeError: string indices must be integers

文字列の添字には整数を使用しなければいけないというエラーメッセージだが,最初どこが悪いのか良くわからなかった.

デバッグすると,ラベルの連結処理で死んでるということが分かった.

結局,ラベルをファイルから読み込んでリストに追加するという前処理をしていたのだが,そのときにラベルを string のままリストにしたのが悪く,np.int32で キャストすると上手く動いた.

配列の扱い

trainer.run() の時には特別意識する必要は無いが,学習済みのモデルに対してある入力に対する出力が欲しい時にひっかかった.

ValueError: numpy and cupy must not be used together
type(W): <class 'cupy.core.core.ndarray'>, type(x): <class 'numpy.ndarray'>, type(b): <class 'cupy.core.core.ndarray'>

numpycupy を同時に使うなというエラーメッセージで,gpu使っているのに numpy.ndarray を使おうとした時に遭遇する. これは注意していればそこまで問題ではない.