技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

機械学習と深層学習実習 4 章

※随時更新

ニューロンの実装…ても基礎中の基礎で、ゼロDeep本でも実装したのだけど

import math
import sys

INPUTNO = 2
MAX_INPUTNO = 100


def get_data(e: list) -> int:
    line_no = 0
    for line in sys.stdin:
        e[line_no] = [float(num) for num in line.split()]
        line_no += 1
    return line_no


def forward(w: list, e: list) -> float:
    u = 0.0
    for i in range(INPUTNO):
        u += e[i] * w[i]
    u -= w[INPUTNO]
    o = f(u)
    return o


def f(u: float) -> float:
    # ステップ
    #if u >= 0:
    #    return 1.0
    #else:
    #    return 0.0
    # シグモイド
    return 1.0 / (1.0 + math.exp(-u))


w = [1.0, 1.0, 1.5]
e = [[0.0 for i in range(INPUTNO)] for j in range(MAX_INPUTNO)]

n_of_e = get_data(e)
print(f'Data size: {n_of_e}')

for i in range(n_of_e):
    print(f'{i} : {e[i]} -> {forward(w, e[i])}')

シグモイド関数と、ステップ関数はコード内での切り替え。
ここでは学習ロジックがないので、重み付けは固定値。

ここにデータ(下記)を加えて、重みを弄ると、動作が変わるよーという実験。

0 0
0 1
1 0
1 1