最近在学习深度学习的知识,如果想学习的话我推荐网易云课堂的吴恩达教授的DeepLearning.ai课程,讲解很详细。我在自学完第一门课程之后,开始使用Python尝试搭建我的第一个神经网络。
第一次尝试搭建的是一个四层的神经网络,包含三个隐藏层和一个输出层,节点数分别为4,3,2,1。隐藏层使用的激活函数是tanh,输出层使用的激活函数是sigmoid,因为输出的是一个二元分类标签。但是这个神经网络的训练效果并不好,对于不同的训练样本输出的结果几乎是一样的。不管是改变学习率还是对输入的参数进行归一化处理都无法改变输出结果。
通过网上查阅资料,我选择了重新搭建一个新的两层的神经网络,包含一个隐藏层和一个输出层,节点数分别为20,1。隐藏层使用的激活函数是tanh,输出层使用的激活函数是sigmoid,学习率为0.01,并对输入的特征数据进行了归一化处理。这个神经网络的训练效果很好,通过十万次的训练后,训练集的平均准确率有0.89左右,测试集的准确率有0.78左右。可能加大训练次数能够使准确率进一步提高。
对于第一个神经网络输出的结果全部一样的问题,我的猜测是因为神经网络的隐藏层太多,多层的处理和过少的节点数目导致样本的特征在训练过程中丢失了,使得后面的隐藏层得到的数据基本一致,因此对于不同的输入样本会有同样的输出结果。
不管怎么说,自己的第一个神经网络总算是搭起来了,而且能跑,而且效果还不错。深度学习真的很神奇。如果以后有机会,我会把代码贴出来,不过现在因为这属于学校的实验报告作业,暂时还不能贴出来。