国科大-模式识别-第四次作业-神经网络bp书写代码跌坑总结

本文分享了神经网络编程中常见的误区,如梯度下降更新规则的理解,矩阵运算中的维度匹配问题,以及算法函数的设计思路,适合初学者借鉴。

写前说明:本人代码水平不太好,初学神经网络知识。此文章主要为了记录自己错过的地方,也希望能帮助到有同样困难的同学。

1、梯度下降

	def update(self, grads, lr):
		self.W1 -= lr * grads["dW1"]
		self.W2 -= lr * grads["dW2"]
		self.b1 -= lr * grads["db1"]
		self.b2 -= lr * grads["db2"]

是“减号”啊,下降,不就是减号么!刚开始的我认为w+=dw,dw可以通过计算得出可正可负,所以写正负没有关系。我的天,所以我得出的一直是左图,呜呜呜,要哭了,咋弄咋不对,错误率还上升了。(我觉得这里可以数学分析一波,之后再)

2、关于矩阵、向量、标量的混合计算

****重要****

因为我出现了矩阵相乘时维度缺失;.T(转置)结果没有反应,后来发现是因为是[0,0,0]这种形式,是没有办法实用.T(转置);频繁使用.reshape()添加这个维度结果搞得乱七八槽,复用性极差。

shapes (1,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)

所以应该在一开始读取数据的时候,规整好。假如一个样本是三维的,如[0.1, 0.2, 0.3]。建议不要把samples直接复制成[[0.1, 0.2, 0.3],[0.3,0.4,0.6],……],因为取出第i个数据的时候,X_i = [0.1, 0.2, 0.3],很容易矩阵相乘的时候出问题。搞三个维度,x_0是样本宽度,x_1是样本长度,x_2是样本个数,方法如下

X.reshape(X.shape[0],1,X.shape[1])

把数据规整为[[[0.1, 0.2, 0.3]]\n,[[0.2, 0.3, 0.4]]\n],这样在取出第i个数据的时候X = [[0.1, 0.2, 0.3]],方便后续计算,很规整。

3、关于算法函数如何设计,设计哪些函数,哪些函数之间有调用关系,在询问过我朋友是否愿意公开代码后再补充,写的真的是赏心悦目。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值