国科大-模式识别-第四次作业-神经网络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可以通过计算得出可正可负,所以写正负没有关系。我的天,所以我得出的一直是左图,呜呜呜,要哭了,咋弄咋不对,错误率还上升了。(我觉得这里可以数学分析一波,之后再)

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

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

你可能感兴趣的:(国科大课程,python,课程作业,矩阵运算,神经网络,bp反馈网络)