머 신 러 닝 - 주지 화 - 방과 후 문제 답 5.5
6737 단어 독학 연습
프로 그래 밍 실천 을 통 해 본 사례 에서 특정한 한 정 된 평균 오차 에 도달 하려 면 표준 BP 알고리즘 이 누적 BP 알고리즘 보다 현저히 수렴 이 빠 르 고 특히 본 사례 에서 ABP 알고리즘 오 차 를 0.01 로 설정 할 때 업데이트 가중치 횟수 가 매우 크다 는 것 을 발견 했다.
본인 은 표준 BP 알고리즘 (은 층 10 개 신경원) 을 사용 하여 데이터 집합 을 얻 었 는데 오차 가 0.01 보다 적 을 때의 각 권 중 은 그 오류 율 을 2 / 17 로 계산 하고 291 회 훈련 하 며 갱신 권 중 은 2910 회 입 니 다.이에 따라 ABP 알고리즘 (은 층 10 개 뉴 런) 의 오차 가 0.2 보다 적 을 때의 가중치 계 수 는 그 오류 율 을 2 / 17 로 계산 하고 1884 라운드 훈련 을 하 며 가중치 1884 회 를 업데이트 한다.이 를 통 해 알 수 있 듯 이 ABP 는 수렴 이 더 느 릴 수 있 지만 같은 조건 에서 의 BP 알고리즘 보다 분류 정밀도 가 높다.
아래 에 코드 를 첨부 합 니 다:
# -*- coding: utf-8 -*-
# STANDARD BP-NN & ACCUMULATED BP-NN
import numpy as np
class Data(object):
def __init__(self, data):
self.data = np.array(data)
self.rows = len(self.data[:,0])
self.cols = len(self.data[0,:]) # it include the column of labels
self.__eta = 0.1 # initial eta=0.1
self.__in = self.cols - 1 # number of input neurons
self.__out = len(np.unique(self.data[:,-1])) # number of output neurons
def set_eta(self, n):
self.__eta = n
def get_eta(self):
return self.__eta
def get_in(self):
return self.__in
def get_out(self):
return self.__out
def BP_NN(self,q=10,err=0.1):
X = self.data[:,:-1]
# X -1 vx-gama, b , wb-theta
X = np.insert(X,[0],-1,axis=1)
Y = np.array([self.data[:,-1], 1-self.data[:,-1]]).transpose()
d, l = self.__in, self.__out
v = np.mat(np.random.random((d+1, q))) # v_0 = gama
w = np.mat(np.random.random((q+1, l))) # w_0 = theta
def f(x): # sigmoid function
s = 1/(1+np.exp(-x))
return s
n = self.__eta
gap = 1
counter = 0
while gap > err: # set E_k<=0.01 to quit the loop
counter += 1
for i in range(self.rows):
alpha = np.mat(X[i,:]) * v # 1*q matrix
b_init = f(alpha) # 1*q matrix
# b_init b_0, b_0 = -1, b
b = np.insert(b_init.T,[0],-1,axis=0) # (q+1)*1 matrix
beta = b.T * w # 1*l matrix
y_cal = np.array(f(beta)) # 1*l array
g = y_cal * (1-y_cal) * (Y[i,:]-y_cal) # 1*l array
w_g = w[1:,:] * np.mat(g).T # q*1 matrix
e = np.array(b_init) * (1-np.array(b_init)) * np.array(w_g.T) # 1*q array
d_w = n * b * np.mat(g)
d_v = n * np.mat(X[i,:]).T * np.mat(e)
w += d_w
v += d_v
gap = 0.5 * np.sum((Y[i, :] - y_cal) ** 2)
print('BP_round:', counter)
return v,w
def ABP_NN(self,q=10,err=0.1):
X = self.data[:,:-1]
# X -1 vx-gama, b , wb-theta
X = np.insert(X,[0],-1,axis=1)
Y = np.array([self.data[:,-1], 1-self.data[:,-1]]).transpose()
d, l = self.__in, self.__out
v = np.mat(np.random.random((d+1, q))) # v_0 = gama
w = np.mat(np.random.random((q+1, l))) # w_0 = theta
def f(x): # sigmoid function
s = 1/(1+np.exp(-x))
return s
n = self.__eta
gap = 1
counter = 0
while gap > err: # set E_k<=1 to quit the loop
d_v,d_w,gap = 0,0,0
counter += 1
for i in range(self.rows):
alpha = np.mat(X[i,:]) * v # 1*q matrix
b_init = f(alpha) # 1*q matrix
# b_init b_0, b_0 = -1, b
b = np.insert(b_init.T,[0],-1,axis=0) # (q+1)*1 matrix
beta = b.T * w # 1*l matrix
y_cal = np.array(f(beta)) # 1*l array
g = y_cal * (1-y_cal) * (Y[i,:]-y_cal) # 1*l array
w_g = w[1:,:] * np.mat(g).T # q*1 matrix
e = np.array(b_init) * (1-np.array(b_init)) * np.array(w_g.T) # 1*q array
d_w += n * b * np.mat(g)
d_v += n * np.mat(X[i,:]).T * np.mat(e)
gap += 0.5 * np.sum((Y[i, :] - y_cal) ** 2)
w += d_w/self.rows
v += d_v/self.rows
gap = gap/self.rows
print('ABP_round:', counter)
return v,w
def test_NN(a,v,w):
X = a.data[:,:-1]
X = np.insert(X,[0],-1,axis=1)
Y = np.array([a.data[:,-1], 1-a.data[:,-1]]).transpose()
y_cal = np.zeros((a.rows,2))
def f(x): # sigmoid function
s = 1 / (1 + np.exp(-x))
return s
for i in range(a.rows):
alpha = np.mat(X[i,:]) * v # 1*q matrix
b_init = f(alpha) # 1*q matrix
b = np.insert(b_init.T,[0],-1,axis=0) # (q+1)*1 matrix
beta = b.T * w # 1*l matrix
y_cal[i,:] = np.array(f(beta)) # 1*l array
print(y_cal)
D = np.array([
[1, 1, 1, 1, 1, 1, 0.697, 0.460, 1],
[2, 1, 2, 1, 1, 1, 0.774, 0.376, 1],
[2, 1, 1, 1, 1, 1, 0.634, 0.264, 1],
[1, 1, 2, 1, 1, 1, 0.608, 0.318, 1],
[3, 1, 1, 1, 1, 1, 0.556, 0.215, 1],
[1, 2, 1, 1, 2, 2, 0.403, 0.237, 1],
[2, 2, 1, 2, 2, 2, 0.481, 0.149, 1],
[2, 2, 1, 1, 2, 1, 0.437, 0.211, 1],
[2, 2, 2, 2, 2, 1, 0.666, 0.091, 0],
[1, 3, 3, 1, 3, 2, 0.243, 0.267, 0],
[3, 3, 3, 3, 3, 1, 0.245, 0.057, 0],
[3, 1, 1, 3, 3, 2, 0.343, 0.099, 0],
[1, 2, 1, 2, 1, 1, 0.639, 0.161, 0],
[3, 2, 2, 2, 1, 1, 0.657, 0.198, 0],
[2, 2, 1, 1, 2, 2, 0.360, 0.370, 0],
[3, 1, 1, 3, 3, 1, 0.593, 0.042, 0],
[1, 1, 2, 2, 2, 1, 0.719, 0.103, 0]])
a = Data(D)
v,w = a.ABP_NN(err=0.2)
v1,w1 = a.BP_NN(err=0.01)
test_NN(a,v,w)
test_NN(a,v1,w1)
실행 결과:
ABP_round: 1884 BP_round: 291
[[ 0.52207288 0.45324987] [ 0.52987926 0.44755556] [ 0.54584984 0.42441809] [ 0.4985367 0.48468109] [ 0.56875787 0.39464855] [ 0.52142392 0.47297261] [ 0.46626988 0.53539895] [ 0.50013411 0.49477303] [ 0.41035128 0.60548034] [ 0.42516587 0.59000489] [ 0.3507589 0.67957016] [ 0.40119524 0.61470023] [ 0.43723545 0.57121177] [ 0.46565608 0.532883 ] [ 0.54464163 0.43843949] [ 0.37772451 0.64457881] [ 0.40085134 0.61430352]]
[[ 0.84115947 0.13747515] [ 0.80969383 0.17228699] [ 0.86565802 0.11538309] [ 0.6917523 0.2886161 ] [ 0.8867624 0.09633574] [ 0.80368707 0.17604059] [ 0.4655449 0.52490606] [ 0.53996253 0.44998827] [ 0.07757502 0.9308757 ] [ 0.10231002 0.90658563] [ 0.03851867 0.96698173] [ 0.12009371 0.88737141] [ 0.16490322 0.8421109 ] [ 0.17730987 0.83332648] [ 0.84579538 0.13594652] [ 0.05885429 0.94756339] [ 0.10192718 0.90597301]]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
머 신 러 닝 - 주지 화 - 방과 후 문제 답 5.5프로 그래 밍 실천 을 통 해 본 사례 에서 특정한 한 정 된 평균 오차 에 도달 하려 면 표준 BP 알고리즘 이 누적 BP 알고리즘 보다 현저히 수렴 이 빠 르 고 특히 본 사례 에서 ABP 알고리즘 오 차 를 0...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.