第392章 深度卷积神经网络(2/2)
明天再找个时间,发送到真实电脑上,调试、修改、编译,然后上传到服务器上训练……
此外,这样做还有一个莫大的好处,那就是可以节省大量的时间。
毕竟在这里工作100个小时,外面只过去大约1个小时……
江寒思考了一会儿,很快就有了大概的思路。
首先,既然是图像识别,那么最适合的模型,自然是卷积神经网络cnn了。
以cnn为基础,打造一个深度学习网络,再进行一番优化,结合一些小技巧,大概率能取得极其优秀的成果。
江寒设想了一个多达十几层的卷积神经网络。
首先是输入层。
输入的图像数据,是nxnx3的rgb彩色图像,所以这一层的数据格式,可以定义为一个三维数组。
接下来是卷积层。
对于卷积神经网络来说,这自然是重中之重。
江寒花费了很大的心血,终于设计出一个全新的结构。
通过反复地卷积、池化和标准化,一步步提取图像的特征……
经过前面这些步骤,需要处理的神经元个数,和输入层相比,已经减少了很多。
接下来,就可以把数据送进全连接层,用softmax函数进行分类了。
最后还要有个输出层,对应1000种分类标签……
确定了大体思路之后,江寒又设计了一下网络的具体结构。
比如,应该有几层卷积层,每一层如何实现……
一般的神经网络里,激活函数主要使用函数。
但这两个函数……
在网络层次较浅时,问题可能还不是很大,网络层次一深,就容易梯度爆炸或者梯度消失。
江寒在研制ocr软件的时候,就发现了这个问题,所以这一次,他准备引入relu,作为卷积层的激活函数。
ifiedlinearunit),一般称作“线整流函数”,也可以翻译成“修正线单元”。
这个函数其实很简单,表达式为f函数,;
当自变量≤0时,y≡0。
这个函数其实不是什么新鲜东西,只是在机器学习中,以前没人用过罢了。
所以这也算是一点小小的创举……
要说relu的好处嘛,那自然是不少的了。
一方面,可以有效缓解梯度消失、梯度爆炸。
并且,还能让梯度下降得更快,有效地提高训练效率。
另一方面,也比较符合仿生学原理。
生物神经细胞的工作模式,就和这个函数差不多……
江寒思考了一下,又在网络的最后几个全连接层中,使用了dropout方法。
所谓dropout,就是在前向传导时,以某个概率p,随机忽略部分神经元。
这样做,可以有效地避免过拟合。
在编写池化层时,江寒考虑了一下,使用了重叠的最大池化方法,而没有使用他此前在cnn论文中提到的平均池化。
因为后者有个副作用,容易导致模糊化。
同时,这样做还有另外一些好处。
比如,由于有部分重叠和覆盖,提取出来的特征,往往也会更加丰富……
在编写标准化层的时候,江寒考虑再三,运用了lrn机制,也就是局部响应归一化。
这样做的目的,是让局部神经元的活动,产生某种竞争机制,使得强者愈强、弱者愈弱。
归根结底,是为了提高模型的泛化能力。
为了尽可能加快训练速度,江寒甚至考虑过使用gpu编程。
虽然这个世界的gpu厂商,还没有发明cuda技术,但硬件条件已经完全具备了。
毕竟从理论上来说,能挖矿的显卡,就能用于大数据计算。
只要编写出合适的驱动和代码,就能利用gpu,来进行大规模并行运算,显著地提高神经网络的训练速度。
可惜的是,单个显卡的显存比较有限,也就是说,可能承载不了太大的人工神经网络。
而这个深度cnn网络……
即使最保守的估计,也需要4~5gb的显存。
这样一来,就必须用两块显卡,交下火才行了……
江寒在虚拟空间中忙碌了几十个小时,终于把这个空前巨大的人工神经网络搭建了起来。
当然,今天是没法开始训练了,只能等到明天再说……
江寒想了想,又买了很多空白图纸,以及一些中笔,开始草拟论文的初稿。
在这次的比赛中,没啥意外的话,自己这个“深度卷积神经网络”,应该能拿到不错的成绩。
到时候,万一有需要的话,现写论文就显得有点不够从容了。
所以江寒决定,今晚就把这个网络的框架,写成论文,保存起来。
等到训练完成,收集到足够的数据,再稍微修改下,就可以找个合适的时机,投出去了……
83中文网最新地址www.83zws.com