Help us understand the problem. What is going on with this article?

chainerのvariableについて

More than 3 years have passed since last update.

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')と表示されます。

rerere0101
大学、大学院ではコンピュータサイエンス専修/現在は放送業界でシステムエンジニア 現場の技術、興味関心のある内容を投稿。Noteも書いてます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away