我的情况是:刚刚接触神经网络、深度学习半年。目前跟着一些教学视频和书来学习相关理论知识。
慢慢地,我对神经网络整体上有了大概的了解。大部分的教学视频课程都是介绍一下某种神经网络的基本思路,以及核心的数学公式,数学公式这里有的一笔带过,详细一点的会推理一遍。但到了真正应用实战的时候,往往都是直接import 某个库,然后实例化,调参。这个过程是完全没有用到前面铺垫的数学知识的,这让我感到迷茫。
所以基于python做神经网络、深度学习需不需要自己写代码,需要写到什么程度呢?
我自己也只是能够跟着教程推一下像梯度下降,反向传播这些公式。可是如果说让我自己根据这些公式来写神经网络,我感觉我是写不出来的。包括像正则化,CNN,RNN等,这些我都能够用keras实现,也理解背后的含义,但我无法做到从头开始搭建网络啊,我觉得这跟使用一些便捷的函数是不同的(比如可以直接用.sort(),没必要自己写冒泡法排序)。
所以能不能请大家给我一些指点,后续应该学什么,怎么做,需不需要自己编程,编程到哪种程度呢,如果仅仅在import keras 的基础上,可以实现对神经网络做哪些创新工作呢?
谢谢。
的确是很多第三方库给你去用,直接import就可以,但是问题是,如果目前出了问题,第三方库无法满足你的需求,你需要进一步修改代码你怎么办?而且这个问题在实际应用中是经常碰见的,这时候你会不会神经网络基础和代码基础的差距就出来了。
就像你自己说的,看着都会,实际上你自己写一个网络模块就知道怎么回事了。别的不说,简单的vgg自己搭建一个试试看下分类效果就知道了,而实际上很多情况下SOTA网络只有数学公式和效果而没有具体的代码,这时候你又很需要用到这个网络你怎么办?你只能根据人家给出的公式自己搭建网络来用。
所以,不会相关原理和相关代码能力(手里无剑)和掌握原理而调用第三方库(手里有剑而不用)是两回事。
从头开始搭建网络没有必要,你会用然后明白大概的原理就可以,python的优点就是写好了很多库,不知道你是打算从事这方面工作还是其他,如果想从事这方面工作肯定是要多做项目来实践
能读懂代码、会调用函数库、会设置参数能用就可以了,如果你是要创新的话,那必须得深入了解其中的原理,加入自己的想法,并修改代码。
站在前人的肩膀上就好了 基础要学 但不必精通
多看看最新论文的开源代码
用框架吧,自己从头开始写这种除非你真想研究基础,如果是做开发,还是用现成框架,比如,pytorch,TensorFlow,mxnet,caffe,paddlepaddle都行