简单的单层神经网络的实现,附代码

据:
吴恩达在网易云课堂的《神经网络和深度学习》 3.9 神经网络的梯度下降法
唐宇迪在网易云课堂的《深度学习入门视频课程》18 动手实现简易神经网络
整理得到一个简单的单层神经网络,现附上代码如下:

# -- coding=utf-8 --

import numpy as np

# 非线性函数
def nonlin(x,deriv=False):
    # 反向传播时
    if(deriv==True):
        return x*(1-x)
    # 正向传播时
    return 1/(1+np.exp(-x))


x = np.array([[0,0,1],
              [0,1,1],
              [1,0,1],
              [1,1,1]])
print 'x.shape: ', x.shape

y = np.array([[0],
              [0],
              [1],
              [1]])
print 'y.shape: ', y.shape

# np.random.seed(1)

# 生成(-1,1)之间的随机数
w1 = 2*np.random.random((3,4)) - 1
w2 = 2*np.random.random((4,1)) - 1
print 'w1.shape: ', w1.shape
print 'w2.shape: ', w2.shape

for i in xrange(80000):
    l1 = x  # 输入层
    l2 = nonlin(np.dot(l1,w1))  # 隐藏层
    l3 = nonlin(np.dot(l2,w2))  # 输出层

    # 损失值loss
    loss = l3 - y  # loss = y - l3

    # 反向求dz2,dw2
    dz2 = loss * nonlin(l3, deriv=True)
    dw2 = l2.T.dot(dz2)

    # 反向求dz1,dw1
    dz1 = dz2.dot(w2.T) * nonlin(l2, deriv=True)
    dw1 = l1.T.dot(dz1)

    # 对w1,w2作出调整
    w2 -= dw2  # w2 += dw2
    w1 -= dw1  # w1 += dw1

    # 循环输出loss值
    if(i % 10000 == 0):
        print "LOSS: ", np.mean(np.abs(loss))  # np.mean()求平均值

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值