深度学习基础课程1笔记-神经网络算法(ANN)

本篇内容是xxxx深度学习基础课程视频上的,如有侵权,请与我联系,谢谢!
1)前向计算(由输入层向前传输)
《深度学习基础课程1笔记-神经网络算法(ANN)》

《深度学习基础课程1笔记-神经网络算法(ANN)》

2)根据误差(error)反向传送
《深度学习基础课程1笔记-神经网络算法(ANN)》

3)终止条件
a)权重的更新低于某个阈值
b)预测的错误率低于某个阈值
c)达到预设的循环次数

4)Backpropagation算法举例
a)前向计算
《深度学习基础课程1笔记-神经网络算法(ANN)》

b)反向传送
《深度学习基础课程1笔记-神经网络算法(ANN)》

《深度学习基础课程1笔记-神经网络算法(ANN)》

手动计算过程:
《深度学习基础课程1笔记-神经网络算法(ANN)》
5)非线性转化方程(Sigmoid函数)
《深度学习基础课程1笔记-神经网络算法(ANN)》
《深度学习基础课程1笔记-神经网络算法(ANN)》

6) 代码

#神经网络算法
import numpy as np

def tanh(x):
    return np.tanh(x)

def tanh_deriv(x):
    return 1.0-np.tanh(x)*np.tanh(x)

def logistic(x):
    return 1/(1+np.exp(-x))

def logistic_derivative(x):
    return logistic(x)*(1-logistic(x))

class NeuralNetwork:
    def __init__(self,layers,activation='tanh'):
        if activation=='Logistic':
            self.activation=logistic
            self.activation_deriv=logistic_derivative
        elif activation=='tanh':
            self.activation=tanh
            self.activation_deriv=tanh_deriv

        self.weights=[]
        for i in range(1,len(layers)-1):
            self.weights.append((2 * np.random.random((layers[i - 1] + 1,layers[i]+1))-1)*0.25)
            self.weights.append((2 * np.random.random((layers[i ] + 1,layers[i+1]))-1)*0.25)

    def fit(self,X,y,learning_rate=0.2,epochs=10000):
        X=np.atleast_2d(X)
        temp=np.ones([X.shape[0],X.shape[1]+1])
        temp[:,0:-1]=X
        X=temp
        y=np.array(y)

        for k in range(epochs):
           i=np.random.randint(X.shape[0])
           a=[X[i]]

           for l in range(len(self.weights)):
               a.append(self.activation(np.dot(a[l],self.weights[l])))
           error=y[i]-a[-1]
           deltas=[error*self.activation_deriv(a[-1])]

           for l in  range(len(a)-2,0,-1):
               deltas.append(deltas[-1].dot(self.weights[l].T)*self.activation_deriv(a[l]))
           deltas.reverse()
           for i in range(len(self.weights)):
               layer=np.atleast_2d(a[i])
               delta=np.atleast_2d(deltas[i])
               self.weights[i]+=learning_rate*layer.T.dot(delta)


    def predict(self,x):
        x=np.array(x)
        temp=np.ones(x.shape[0]+1)
        temp[0:-1]=x
        a=temp
        for l in range(0,len(self.weights)):
            a=self.activation(np.dot(a,self.weights[l]))
        return a

测试上面神经网络的例子
《深度学习基础课程1笔记-神经网络算法(ANN)》

from NN import NeuralNetwork
import numpy as np

nn=NeuralNetwork([2,2,1],'tanh')
X=np.array([[0,0],[0,1],[1,0],[1,1]])
y=np.array([0,1,1,0])
nn.fit(X,y)
for i in [[0,0],[0,1],[1,0],[1,1]]:
    print(i,nn.predict(i))

7)结果
《深度学习基础课程1笔记-神经网络算法(ANN)》

8)手写字体识别

# from sklearn.datasets import load_digits
#
# digits=load_digits()
# print(digits.data.shape)
#
# import pylab as pl
# pl.gray()
# pl.matshow(digits.images[0])
# pl.show()

import numpy as np
from sklearn.datasets import load_digits
from sklearn.metrics import confusion_matrix,classification_report
from sklearn.preprocessing import LabelBinarizer
from NN import NeuralNetwork
from sklearn.cross_validation import train_test_split

digits=load_digits()
X=digits.data
y=digits.target
X-=X.min()
X/=X.max()

nn=NeuralNetwork([64,100,10],'Logistic')
X_train,X_test,y_train,y_test=train_test_split(X,y)
labels_train=LabelBinarizer().fit_transform(y_train)
labels_test=LabelBinarizer().fit_transform(y_test)
print("Start Fitting")
nn.fit(X_train,labels_train,epochs=3000)
predictions=[]
for i in range(X_test.shape[0]):
    o=nn.predict(X_test[i])
    predictions.append(np.argmax(o))
print (confusion_matrix(y_test,predictions))
print (classification_report(y_test,predictions))

9)结果
《深度学习基础课程1笔记-神经网络算法(ANN)》

欢迎扫码关注我的微信公众号

《深度学习基础课程1笔记-神经网络算法(ANN)》

    原文作者:神经网络算法
    原文地址: https://blog.csdn.net/sxlsxl119/article/details/80874997
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞