見出し画像

ORゲート ニューラルネットワーク


考え方

図1の真理値表のように論理回路は入力が2つの場合、4つの組み合わせを1セットとして考える。

図1 ORゲートの真理値表

そのため、モデルがORゲートを学習できたかどうかは、1セットごとに判定していく。

プログラム

import pandas as pd
import numpy as np

def counterup(x, delta_x):
    if len(set(delta_x)) == 1:
        x = False
    else:
        x = True
    return x


# 誤り訂正学習法
# 初期パラメータの設定
x1data = [0,0,1,1]
x2data = [0,1,0,1]
tdata = [0,1,1,1]
y = 1
w1 = 0
w2 = 0
theta = 0
delta_w1 = []
delta_w2 = []
delta_theta = []
count_w1 = True
count_w2 = True
count_theta = True
# 4つを1単位とするためのカウンター
counter = -1
# 試行回数のカウンター
procount = 0

while count_w1 or count_w2 or count_theta:
    procount = procount + 1
    if counter == 3:
        counter = 0
        delta_w1 = []
        delta_w2 = []
        delta_theta = []
    else:
        counter = counter+1
    
    # データセット
    x1 = x1data[counter]
    x2 = x2data[counter]
    t = tdata[counter]

    # 予測モデルの出力
    if w1*x1+w2*x2-theta >= 0:
        y = 1
    else:
        y = 0

    # 変化分の計算
    delta_w1.append((t-y)*x1)
    delta_w2.append((t-y)*x2)
    delta_theta .append(-(t-y))

    # 経過表示
    # print(procount, x1, x2, t, w1, w2, theta, y, t-y, delta_w1[counter], delta_w2[counter], delta_theta[counter])
    if procount == 1:
        result = np.array([procount, x1, x2, t, w1, w2, theta, y, t-y, delta_w1[counter], delta_w2[counter], delta_theta[counter]])
    else:
        add_data = np.array([procount, x1, x2, t, w1, w2, theta, y, t-y, delta_w1[counter], delta_w2[counter], delta_theta[counter]])
        result = np.vstack([result, add_data])

    # 重みと閾値の再計算
    w1 = w1 + delta_w1[counter]
    w2 = w2 + delta_w2[counter]
    theta = theta + delta_theta[counter]

    # 変化の検出
    if counter == 3:
        count_w1 = counterup(count_w1, delta_w1)
        count_w2 = counterup(count_w2, delta_w2)
        count_theta = counterup(count_theta, delta_theta)

# エクセル保存
result_df = pd.DataFrame(result, columns=["k","x1","x2","t","w1","w2","theta","y","t-y","delta_w1","delta_w2","delta_theta"])
result_df.to_excel("./OR学習結果.xlsx", index=False)

関連記事

ニューラルネットワーク 単純モデル
https://note.com/elemag/n/n7bf117b1c818?sub_rt=share_pw

サイト

https://sites.google.com/view/elemagscience/%E3%83%9B%E3%83%BC%E3%83%A0

いいなと思ったら応援しよう!