ニューラルネットワークを試してみます。
まずは、基本メソッド、各層の数と学習率をもつニューラルネットワーククラスを定義します。
中身はなにもありませんが、これがニューラルネットワーク・クラスの骨格となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class neural_network: def __init__(self, in_node, hid_node, out_node, learn_rate): self.in_node = in_node self.hid_node = hid_node self.out_node = out_node self.learn_rate = learn_rate
def train(): pass
def query(): pass
|
このクラスに少しずつ実装していきます。
初期化のところで重みを生成し、活性化関数にシグモイド関数を設定してます。
また照会メソッドで、入力に対し入力・隠れ層の重みをかけシグモイド関数で発火させます。
さらにその結果に隠れ・出力層の重みをかけシグモイド関数で発火させ、その結果を返しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| import numpy import scipy.special
class neural_network: def __init__(self, in_node, hid_node, out_node, learn_rate): self.in_node = in_node self.hid_node = hid_node self.out_node = out_node self.learn_rate = learn_rate
self.weight_in_hid = numpy.random.normal(0.0, pow(self.hid_node, -0.5), (self.hid_node, self.in_node)) ''' ↓こんな感じの配列ができる [[ 0.37395332 0.07296579 0.36696637] [-0.1570748 0.28908756 0.99958053] [-0.09054778 -0.20084478 0.31981826]] ''' self.weight_hid_out = numpy.random.normal(0.0, pow(self.out_node, -0.5), (self.out_node, self.hid_node)) ''' ↓こんな感じの配列ができる [[ 0.93304259 0.02641947 0.29506316] [-0.74275445 0.9010841 -0.47840667] [ 0.04494529 0.49177323 1.13985481]] ''' self.activation_func = lambda x: scipy.special.expit(x)
def train(): pass
def query(self, input_list): in_matrix = numpy.array(input_list, ndmin=2).T hid_in = numpy.dot(self.weight_in_hid, in_matrix) hid_out = self.activation_func(hid_in)
final_in = numpy.dot(self.weight_hid_out, hid_out) final_out = self.activation_func(final_in) return final_out
|
上記で定義したクラスが問題なく動くか、テストするコードを簡単に書いて実行してみます。
1 2 3 4 5 6 7 8 9 10 11
| in_node = 3 hid_node = 3 out_node = 3
learn_rate = 0.3
n_network = neural_network(in_node, hid_node, out_node, learn_rate)
n_network.query([1.0, 0.5, -1.5])
|
【結果】
1 2 3
| array([[0.55799198], [0.51430992], [0.30202192]])
|
まだ学習するメソッドを実装していないので意味のない出力ではありますが、エラーなしで動作することを確認できました。
次回は学習メソッドを実装していきます。
(Google Colaboratoryで動作確認しています。)