Python神经学习(一)

最近看了一篇文献

      万士宁. 基于卷积神经网络的人脸识别研究与实现[D]. 电子科技大学, 2016.

觉得实现下,基本算从零开始,不知能否成功。


现在是基础学习:可以参考http://python.jobbole.com/82758/

首先选择Anaconda和python3.4,安装Numpy包。


代码:

# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""
import numpy as np
import math 



#sigmoid function
def nonlin(x,deriv=False):
    if(deriv==True):
        return x*(1-x)
    return 1/(1+np.exp(-x))

#input dataset
X=np.array([ [0,0,1],
             [0,1,1],
             [1,0,1],
             [1,1,1] ])
#output dataset
y=np.array([[0,0,1,1]]).T

#seed random numbers to make calculation
#deleteministic (just a good practice)
np.random.seed(1)


#initialize weights randomly with mean 0
syn0 = 2*np.random.random((3, 2)) - 1
 
for iter in range(10000):
     #forward propagation
    l0=X
    l1=nonlin(np.dot(l0,syn0))
         # how much did we miss?
    l1_error = y - l1
 
    # multiply how much we missed by the 
    # slope of the sigmoid at the values in l1
    l1_delta = l1_error * nonlin(l1,True)
 
    # update weights
    syn0 += np.dot(l0.T,l1_delta)
print("Output After Training:")
print(l1)



运行结果
Output After Training:
[[ 0.0096701   0.00966641]
 [ 0.00786242  0.0078625 ]
 [ 0.99359228  0.99359172]
 [ 0.99211639  0.99211881]]
实现简单的BP反向传播算法,用输入去预测输出


定义一个输入输出为:

input         output

0,0,1 0

1.1.1 1

1.0.1 1

0.1.1 0



变量定义说明

X输入数据集,形式为矩阵,每 1 行代表 1 个训练样本。

y输出数据集,形式为矩阵,每 1 行代表 1 个训练样本。l0网络第 1 层,即网络输入层。

l1网络第 2 层,常称作隐藏层。syn0第一层权值,突触 0 ,连接 l0 层与 l1 层。

*逐元素相乘,故两等长向量相乘等同于其对等元素分别相乘,结果为同等长度的向量。

–元素相减,故两等长向量相减等同于其对等元素分别相减,结果为同等长度的向量。

x.dot(y)若 x 和 y 为向量,则进行点积操作;若均为矩阵,则进行矩阵相乘操作;若其中之一为矩阵,则进行向量与矩阵相乘操作。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值