使用Python矩阵运算实现双层神经网络

import numpy as np
import matplotlib.pyplot as plt

#选择激活函数及导数
def active(x):
   return 1/(1 + np.exp(-x))
def active_der(x):
   s = 1/(1 + np.exp(-x))
   return s * (1 - s)
def initialize(n,p,q):
   w = np.random.randn(p,n)
   v = np.random.randn(q,p)
   a = 0
   b = 0
   return w,v,a,b
def train(x,d):
   #更新输入层,隐藏层,输出层神经元数
   n = 5
   p = 3
   q = 5
   learn_rate = 0.2
   w,v,a,b = initialize(n,p,q)
   loss_path = []
   for i in range(200):#更新迭代次数
      H_in = w.dot(x) + a
      H_out = active(H_in)
      Y_in = v.dot(H_out) + b
      Y_out = Y_in
      loss = 0.5 * np.sum(np.square(Y_out - d))
      loss_path.append(loss)

      detla2 = (Y_out - d)
      detla1 = v.T.dot(detla2) * active_der(H_in)

      dv = detla2.dot(H_out.T)
      dw = detla1.dot(x.T)

      db = detla2
      da = detla1

      v -= learn_rate * dv
      w -= learn_rate * dw

      b -= db
      a -= da
      print("本次训练结束%d"%(i))
   print("Y_out",Y_out)
   print("w",w)
   print("v",v)
   print("a",a)
   print("b",b)
   return loss_path

x = np.array([[1,3,5,7,9]]).T
d  = np.array([[2,4,6,8,10]]).T
X = np.arange(200)#在此选择迭代次数
Y = train(x,d)

plt.plot(X,Y)
plt.show()
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值