1. 程式人生 > >唐宇迪深度學習課程上篇——動手完成簡單的神經網絡

唐宇迪深度學習課程上篇——動手完成簡單的神經網絡

random 學習課程 div abs 特征值 唐宇迪 arr 神經網絡 簡單的



#coding:utf-8
‘‘‘
Created on 2017年7月21日

@author: KLKJ
‘‘‘
import numpy as np
def sigmoid(x,deriv=False): #定義激活函數,deriv=False時進行前向傳播的運算,deriv=True進行反向傳播的運算
    if deriv == True:
        return x*(1-x)##這裏x=1/(1+exp(-x)),是sigmoid函數求導後的結果
    return 1/(1+np.exp(-x))

x = np.array([[0,0,1],
              [0,
1,1], [1,0,1], [1,1,1], [0,0,1]] ) #輸入5個樣本,每個樣本三個特征值 y = np.array([[0], [1], [1], [0], [0]]) #期望輸出得分 np.random.seed(1)#隨機種子 w0 = 2 * np.random.random((3,4))-1 #w0的維數與樣本特征與神經元的個數有關,random初始化的值在(0,1)的半開區間內,讓w0的值在(-1.+1)區間上
w1 = 2 * np.random.random((4,1))-1 print w0#查看w0的值 for j in xrange(60000): #叠代六萬次 l0 = x #將x的值給l0,l0為輸入層 l1 = sigmoid(np.dot(l0,w0)) #中間層經過第一層後的得分 l2 = sigmoid(np.dot(l1,w1)) #輸出層的得分 l2_error = y - l2 #輸出層的得分與期望形式得分的差異 if(j%10000) == 0: print Error+str(np.mean(np.abs(l2_error)))#每經過一萬次叠代輸出一次差異值的平均值,以便觀察差異值是否減小
l2_delta = l2_error * sigmoid(l2,deriv=True)#w1對錯誤的貢獻 l1_error = l2_delta.dot(w1.T)#反向傳播根據12_delta得出 l1_delta = l1_error * sigmoid(l1,deriv=True)#w0對錯誤的貢獻 w1 += l1.T.dot(l2_delta) #根據反饋過來的結果對w1進行調節 w0 += l0.T.dot(l1_delta) #根據反饋過來的結果對w0進行調節


唐宇迪深度學習課程上篇——動手完成簡單的神經網絡