您好,我刚学python,目前在用python写一个BP神经网络,我想请问下,为什么创建一个BP神经网络必须要使用到class创建对象,不使用class也可以根据误差梯度下降的方法调整权重矩阵,进行预测啊,这是我的疑问,希望能够得到您的回答,谢谢
神经网络的权重调整和你使用不使用类是没有关系的,用到class是因为要用框架才这样,你可以选择不适应框架来实现。
应该不是必须但是面向对象可以让代码更简洁,也更好维护
可以不用啊,没说必须要用。但是类和函数是面向对象的思想,面向对象思想有几个特性:继承,封装,多态和抽象,而这些功能在使用框架搭建神经网络的时候是很经常会用到的。
举个例子来说,你写个CNN网络层继承torch.nn.Model,这样你可以使用Model这个抽象类的接口,只要定义前向传播就行,反向传播就不需要你自己实现。比如正向计算f=x+y,只要两个相加即可正向传播,但是反向你得先求loss,根据loos和优化函数反向计算x和y的偏导数,一个简单的加法,一个是求两次偏导,你觉得这两个难度差距多少?更不用说对于一些比较复杂的网络来说,反向传播实现难度可能会是前向的好几倍甚至更多。