LoginSignup
15
20

More than 5 years have passed since last update.

chainerのvariableについて

Last updated at Posted at 2017-05-20

ChainerのVariable関連

本記事はpython3.xを想定しています。またpython素人なのでご了承ください。機械学習で最初に私がやりたかったのは自分で用意したデータセットに対してなんらかの学習を実行することだったのですが、最初に詰まったのがこのvariableでした。

import numpy as np
import chainer as Variable

chainerを使って定義した機械学習ネットワークにデータを投げる時には型をVariableにしなければいけません。その時、引数に与えるデータは常にnp.arrayを用いる必要があります。このnp.arrayはpythonのnumpyで用いられる配列のことで、python標準のリスト([])とは異なります。Chainerのドキュメントを見ると、variableについて指定できるのは
[data – Data array of type either numpy.ndarray or cupy.ndarray.]
と記述されていますのでリストのデータをそのまま使うのではなく、一度numpyの配列に変換する必要があります。また浮動小数点を用いる場合、float32への変換も必要になることがあります。float32にする理由はchainerがfloat64に対応していないのでエラーが起こるからだったと思います。今回はvariableまでの変換のパターンをいくつか考えてみました。

例1: 配列

x_train = [0,0,0,0,0]
x_np_train = np.array(x_train, dtype=np.float32)
x_val_train = Variable(x_np_train, 1)

とすることによって配列をfloat32を指定しつつnp.arrayに変換し、それをさらにんvariableに変換しています。

例2: 多次元配列
同様の手順でいけます。

x_train = [[0.1, 0,2],[0.3, 0.4]]
x_np_train = np.array(x_train, dtype=np.float32)
x_val_train = Variable(x_np_train, 1)

例3: np.arrayがすでに存在する場合

x_train = [[0.1, 0,2],[0.3, 0.4]]
x_np_train = np.array(x_train)
x_np_train.dtype

とするとdtype('float64')となっています。最初からnp.arrayのデータを扱う場合float32にキャストしなければいけないことが多々あると思います。

x_np_train.dtype = np.float32
x_val_train = Variable(x_np_train, 1)

例4: Variableが他の型ですでに作られている

x_train = [[0.1, 0,2],[0.3, 0.4]]
x_np_train = np.array(x_train, dtype=np.float64)
x_val_train = Variable(x_np_train, 1)
x_val_train.data.dtype

とした場合、dtype('float64')と表示されます。
このままではエラーが出てしまうため

x_val_train.data.dtype = np.float32
x_val_train.data.dtype

とすると、dtype('float32')と表示されます。

15
20
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
20