神经网络的底层实现

def H(x,theta):
    return np.dot(x,theta)
# 4、创建激活函数
def S(h):
    return 1.0/(1.0+np.exp(-h))
# 5、代价函数
def J(s,y):
    return -np.mean(y*np.log(s)+(1-y)*np.log(1-s))
# 6、创建正向传播函数
def FP(x,theta1,theta2):
    a1=x
    h2=H(a1,theta1)
    a2=S(h2)
    h3=H(a2,theta2)
    a3=S(h3)
    return a1,a2,a3
# 7、创建反向传播函数
def BP(a1,a2,a3,theta2,y):
    m=len(y)
    delta3=a3-y  #输出层误差
    delta2=np.dot(delta3,theta2.T)*a2*(1-a2)  #隐藏层误差
    deltheta2=1.0/m*np.dot(a2.T,delta3)  #隐藏层梯度值
    deltheta1=1.0/m*np.dot(a1.T,delta2)  # 输入层梯度值
    return deltheta1,deltheta2
# 8、创建梯度下降函数
# 9、隐藏神经元8个
def G(x,y,lr=0.01):
    hidden=8
    xm,xn=x.shape  # 获取 x 的特征和数量
    ym,yn=y.shape  # 获取 y 的特征和数量
    theta1=np.ones((xn,hidden)) #随机生成theta1的值
    theta2=np.ones((hidden,yn)) #随机生成theta2的值
    j_list=[]
    for i  in range(1000):
        a1, a2, a3=FP(x,theta1,theta2)  #计算模型值
        j=J(a3,y) #计算代价值
        j_list.append(j)
        deltheta1, deltheta2=BP(a1,a2,a3,theta2,y) #计算梯度值
        theta1=theta1-deltheta1*lr # 更新theta值
        theta2=theta2-deltheta2*lr
    return theta1,theta2,j_list

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值