几个月前,刚开始接触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
有兴趣的可以去看看。