機械学習
python3

python3 で ゼロから考える機械学習【工事中】→中止

面倒なのでKeras使うh6

巷にはtensorflowやKerasなど機械学習の助けになるライブラリが沢山あるけど
なんとなく自分で適当に書いてみたので、記録のために残しておく
(使わない函数やよくわからんコメントも残しておく)

「メモ」 なので、、、


qiita.rb
import numpy as np
#%matplotlib inline
import matplotlib.pyplot as plt
import time
from pylab import *
import random

from numba.decorators import jit



#活性化関数(シグモイド関数)の定義
def sigmoid(x):
    return 1 / (1 + np.exp(x))

#層のノード数
def node_size(size):
    n = np.ones((size, 1))
    return n 

#ノードのサイズ
def node_len(node_size):
    return np.size(node_size)

#重みの初期値をランダムで計算
def weight(row, column):
    weight = np.random.rand(row, column)
    return weight

#活性化関数ReLU
def ReLU(x):
    if x <= 0:
        return 0
    else:
        return x

def softmax(x):
    exp_a = np.exp(x)
    sum_exp_a = np.sum(exp_a)
    y = exp_a/sum_exp_a
    return y

def numerical_diff(f, x):
    #f = x**2 + x + 1
    h=e-4
    return ((f(x+h)-f(x-h))/(2*h))

#誤差函数
def Error_function(output, teacher):
    remainder = output - teacher
    square_of_error= 1/2*(np.sum(remainder))**2
    return square_of_error

start = time.time()


#各層のノード行列のディクショナリ
#何層で学習させるかは、ここで決める。(N0は入力層)
node_d = {0:node_size(4),
          1:node_size(4),
          2:node_size(4)}#自分で設定
roop_1 = len(node_d)
###メモ!重みファイルを読み込む。なければ新規作成。ifで条件

node_d[0] = np.array([[0],[1],[0],[1]])#入力信号
print(node_d)
teacher = np.array([[0],[1],[0],[1]])#教師信号(仮

###メモ!重みファイルを読み込む。なければ新規作成。ifで条件分岐

#各層の重み行列のディクショナリ
#何層で学習させるかは、ここで決める。(W0は使わない)
weight_d = {}

for i in range(1,roop_1,1):
    print("number of weight layer = ", i)
    weight_d[i] = weight(node_len(node_d[i]), node_len(node_d[i - 1]))#自分で設定
    print(weight_d[i])

print("\n -> calc. time = ",time.time() - start,"[sec]")

#ノードと重みの計算
#最後の値が出力となる
for i in range(1,roop_1,1):
    print("node = ", i)
    node_d[i] = sigmoid(np.dot(weight_d[i], node_d[i-1]))
    print(node_d[i])

#途中計算結果
print(np.sum(weight_d[1]))
print(np.sum(weight_d[2]))
a=0.5*(np.sum(weight_d[1])-np.sum(weight_d[2]))**2
print("a=",a)
print("erro=",Error_function(weight_d[1],weight_d[2]))

取り敢えずこんな感じで書いていく(まだ途中でこの後に誤差逆伝搬を実装する)