您的位置:首页 > 理论基础 > 计算机网络

简单神经网络搭建;使用不同的损失函数实验

2018-01-04 11:21 288 查看
数据集:HTRU_2脉冲星二分类数据集(总样本数为17898,正负样本数的比值约为9:1)

本文先对loss function分别为MSE和CE的情况,推导了使用梯度下降算法对之前层的权重和偏置进行更新的公式;然后,用HTRU_2的数据集进行简单的实验。

一.公式推导(本文原来使用mathematica写的,其中的公式与网页编辑器不兼容,所以使用截图的方式呈现)









二、实验

一开始我采用了python3+tensorflow来实验。我搭建了一个简单的5层神经网络,隐藏层的神经元个数分别为10,20,14个,学习率为0.5,学习衰减系数为0.99,正则项系数为0.0001,训练步数为2500,平滑衰减率为0.99.将数据及按照训练集于测试集样本数目之比为9:1来划分,随机选取训练集来实验,得到的训练精确度为90.8%。(这里精确度是一个没什么用的指标,因为数据的分布很不均衡)

不过由于我对tensorflow不太熟悉,所以没有在此基础上进一步做实验。

然后我在虚拟机上采用了python2+scikit-neuralnetwork来实验。可能是因为版本较老的缘故,在使用sknn.mlp的Classifier时,里面用到了theano.tensor.signal中的downsample的max_pool_2d函数,可是downsample.py在新版本中已经没有了(这应该是库的不兼容问题),所以我注释掉了import downsample这个代码,然后将downsample调用的max_pool_2d函数改为pool.pool_2d函数。这样以后就可以运行了。

调用classifier是很方便的:



这里用Layer("str",units = num)来指定各层的结构(str表示激活函数的类型,num为单层的神经元数目,激活函数可以是:rectifier,sigmoid,tanh,explin,其中explin定义为:),loss_type为损失函数的类型,n_iter为迭代步数。由于运行结果需要比较长的时间,所以我先把参数设置得很小,运行结果为:



这里的F-socre达到了87%,算是一个不错的结果了。

接下来我进一步调整参数进行实验(loss func 为 mse,添加了L2正则项),



得到的结果为:



调整loss func为cross entropy,使用L2正则项,



结果为:



调整为不添加正则项的mcc,结果为:



总的来说,使用cross entropy获得了较好的结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐