【Chainer基礎2】Linksってなに?分かりやすく5分で解説

【Chainer基礎2】Linksってなに?分かりやすく5分で解説

葉桜には毛虫が多いといいますが、自分の肩に振ってくるほど多いとは思いませんでした。

「ぱひいいいぃぃぃ!!!」と言ったのは人生で初だと思います。

アイーンです。

 

本日はChainerを使いこなすための基礎固め2回目

Linksについて解説したいと思います。

それでは早速いってみましょう

 

Linksってなに?

Linksとは、よく「学習可能なパラメータを持った関数」だといわれます。

図解すると

コレ!

入力xに対し重み w を掛け、バイアス b を足したものが出力値となります。

y = x1w1 + x2w2 + b

その学習可能なパラメータである「重み w」と「バイアス b」等を持つのがLinksです。

 

Linksの使い方

 

いつもどおり、Python内でChainerとnumpyを使えるようにimportしましょう。

import chainer

import numpy as np

from chainer import Variable

それに加えて今回は、下の分を書いておいてください。

import chainer.links as L

links を L として使えるようにしておきます。

 

それでは早速組み込みましょう。

 

l = L.Linear (3 , 2 )

LinksのLinearを呼び出して、lというオブジェクトを作成しました。

後ろに書かれた引数(3、2)

このlに入っていく要素が3つ、出ていく要素が2つあると指定しています。

はい完成。

 

これで、重みとバイアスを設定できました。

 

の中身を見るために、こう書いてみましょう。

重みwのデータを参照するための

print(l.W.data) 

そしてバイアスbのデータを参照するための

print(l.b.data) 

 

 

重みの初期値にはランダムな数字が入っています。

バイアスは、学習前は0が入っています。

 

 

この2つは、学習が進めばどんどんと出力結果を正解に近づけるために

内容が計算により変化していきます。

 

それでは、このLinksを使って、実際に計算してみると

input_array = np.array([[ 1 , 2 , 3 ]] , dtype = np.float32)

入力をlに合わせて3つにしました。

[1. 2. 3.]

 

x = Variable( input_array )

xをVariableオブジェクトに変換し…

y = l( x )

yという変数にlを使ってxを変換したものをぶち込みます。

print( y.data )

出力してみると

1.1317656 と -3.361598

という結果になりました。

入力が3つなのに対し、出力が2つになりました。

 

 

はい!ここで電卓準備!!

めんどくさいとか言わない!(でも別にやらなくてもいいよ)

 

 

出力値 y[1]には

入力値[1.] × 重み[0.03894597]

入力値[2.] × 重み[-0.03310522 ]

入力値[3.] × 重み[0.5849747]

 が個別に掛けられ、バイアス0と全部が足された数字

それが

1.1317656

という出力値になっています。

出力値 y[2]も同様です。

 

よかった~、正解でた~w

 

これで貴方の肩書は「Chainerちょい知ってる人です」

友達に「Chainerちょい知ってるよ」と言ってください。

羨望のまなざしで見られます。

 

次回も基礎編をすすめていきましょう。

 

それでは。