简单神经网络手算笔记

神经网络学习笔记

简单神经网络手算!

通过简单神经网络的手算过程。了解代码每步的效果。为以后复杂的网络打个好的基础。
在这里插入图片描述
简单的神经网络如上图所示:输入两个参数x1和x2,分别乘权重w1和w2,再加一个偏置参数,最终得到值z,然后将得到的z经过激活函数后,得到预测值a。
如下图所示:
在这里插入图片描述
流程图如下:
在这里插入图片描述
以代码为例,计算如下:

# 计算dw和db
def propagate(w,b,X,Y):
    #  dz= a-y ; dw=x*dz; db =dz ; cost = (1/m)Loss; Loss =-( y*loga+(1-y)*log(1-a)); a = sigmoid(z) ; z=x*w+b;
    m=X.shape[1]
    z = np.dot(w.T,X)+b
    print("z:",z)
    a = sigmoid(z)
    print("a:", a)
    loss = -(Y*np.log(a)+(1-Y)*np.log(1-a))
    print("loss:",loss)
    cost = (1/X.shape[1])*np.sum(loss)
    print("cost:",cost)
    dz = a-Y
    print("dz:",dz)
    dw=(1/m)*np.dot(X,dz.T)
    print("dw:",dw)
    db=(1/m)*np.sum(dz)
    print("db:",db)
    # 使用断言确保数据正确
    assert (dw.shape == w.shape)
    assert (db.dtype == float)
    cost = np.squeeze(cost)
    assert (cost.shape == ())

    # 创建一个字典,把dw 和 db保存起来
    grads = {
        "dw": dw,
        "db": db
    }
    return (grads, cost)

#测试一下propagate
print("====================测试propagate====================")
#初始化一些参数
w, b, X, Y = np.array([[1], [2]]), 2, np.array([[1,2,3], [4,5,6]]), np.array([[1, 0,1]])
grads, cost = propagate(w, b, X, Y)
print ("dw = " + str(grads["dw"]))
print ("db = " + str(grads["db"]))
print ("cost = " + str(cost))

输出结果为:

====================测试propagate====================
z: [[11 14 17]]
a: [[0.9999833  0.99999917 0.99999996]]
loss: [[1.67015613e-05 1.40000008e+01 4.13993765e-08]]
cost: 4.6666725247884155
dz: [[-1.67014218e-05  9.99999168e-01 -4.13993756e-08]]
dw: [[0.6666605 ]
 [1.66664293]]
db: 0.3333274752169162
dw = [[0.6666605 ]
 [1.66664293]]
db = 0.3333274752169162
cost = 4.6666725247884155

代码中给的初试数据如下图:
在这里插入图片描述
第一步计算z=wx+b

 z = np.dot(w.T,X)+b

即将w转置后和矩阵A求积。
其中w是21的。理解为有两个参数,w1和w2。X为23的。理解为有三个输入集合。Y为1*3的。有三个真实值。
数学公式如下图:
在这里插入图片描述

 a = sigmoid(z)
 loss = -(Y*np.log(a)+(1-Y)*np.log(1-a))
 cost = (1/X.shape[1])*np.sum(loss)
 dz = a-Y

计算步骤如下图所示:
在这里插入图片描述

dw=(1/m)*np.dot(X,dz.T)

在这里插入图片描述

np.dot(X,dz.T)

做的运算就是将所有样本的每个x和对应的dz相乘后相加。除以样本数量后,得到的就是平均值。
db运算同dw。

神经网络知识参考吴恩达视频:B站视频
代码参考:代码参考

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值