用Mxnet和Tensorflow做简单多分类器的对比测试

几个月前,刚开始接触mxnet和Tensorflow时,编写的自己案例使用的就是简单的数据集iris。因为它足够简单(只有3个分类,150条数据),很容易分析。 和很多研究者不太一样,他们只是跑跑训练程序,看看打印出来的train accuracy就结束了。我训练完模型后,还喜欢继续编一些自定义的数据,然后让模型去做预测或分类,看看模型是否足够好。对Iris数据集,我用mxnet实现了一个MLP模型进行分类。在训练完后(打印出来的train accuracy在0.9以上的),马上做一些自定义数据的预测,结果发现预测分类结果很差,没法用。当时觉得是自己不熟悉Mxnet ,所以才会有这样的结果,就不管了。可是,后来转为用Tensorflow实现类似的MLP模型对iris数据集进行分类,然后预测同样的自定义数据,突然发现Tensorflow的代码表现很不错。这种强烈对比差距让我很惊讶,于是又用mxnet和Tensorflow编写MLP模型测试另外两个数据集,结果还是如此(Tensorflow基本可以分类,mxnet不行)。我把一些测试的数据列出来:

 

测试1. sonar dataset(两个标签值,60个特征,208条数据。):

a)Tensorflow codes :

train Accuracy: 0.833333

测试4个新的数据:

New samples accuracy: 0. 50000

 

b) mxnet codes:

train Accuracy: 0.6

测试4个新的数据:

(‘New samples accuracy:’, 0.25)

 

测试2. iris dataset(三个标签值,4个特征,150条数据):

a)Tensorflow codes :

train Accuracy: 1.0

测试10个新的数据:

New samples accuracy: 0.900000

 

b) mxnet codes:

train Accuracy: 0.975

测试10个新的数据:

(‘New samples accuracy:’, 0.20)

 

测试3. 自定义数据集(三个标签值,3个特征,10000条数据。这个数据集是我编的,其中前两个特征是无关紧要的,第三列特征才是决定因素。故意这样设置,让神经网络去自己判断谁最重要。

a)Tensorflow codes :

train Accuracy: 0.9

测试10个新的数据:

New samples accuracy: 0.700000.

 

b) mxnet codes:

train Accuracy: 1.0

测试10个新的数据:

New samples accuracy: 0.3.

 

可以看到,用mxnet编写的MLP模型对3个不同文本数据集进行新数据分类的精确度很差,没法用。Tensorflow编写的MLP模型能用。mxnet为啥表现不佳呢?我怀疑mxnet代码有bug,特别是模型定义和模型训练这块的代码。在mxnet的github上提了这个问题,但是没人理睬。算了。没找出bug前还是用Tensorflow做这些简单分类的分类器吧。

 

相关的测试对比代码放在这里:

https://github.com/qinhui99/mxnetSamples.git

 

有兴趣的可以去看看。

 

    原文作者:人工智能
    原文地址: https://my.oschina.net/qinhui99/blog/874414#comments
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞