经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » 人工智能基础 » 查看文章
神经网络MPLClassifier分类
来源:cnblogs  作者:乔大大吖  时间:2018/12/14 9:14:35  对本文有异议

代码:

  1. 1 # -*- coding: utf-8 -*-
  2. 2 """
  3. 3 Created on Fri Aug 24 14:38:56 2018
  4. 4
  5. 5 @author: zhen
  6. 6 """
  7. 7 import gzip
  8. 8 import pickle
  9. 9 import numpy as np
  10. 10 from sklearn.neural_network import MLPClassifier
  11. 11 # 加载数据
  12. 12 # 设置编码,解决异常:UnicodeDecodeError: 'ascii' codec can't decode byte 0x90 in position 614: ordinal not in range(128)
  13. 13 with gzip.open("E:/mnist.pkl.gz") as fp:
  14. 14 training_data, valid_data, test_data = pickle.load(fp, encoding='bytes')
  15. 15 x_training_data, y_training_data = training_data
  16. 16 x_valid_data, y_valid_data = valid_data
  17. 17 x_test_data, y_test_data = test_data
  18. 18 classes = np.unique(y_test_data)
  19. 19 # 将验证集和训练集合并
  20. 20 x_training_data_final = np.vstack((x_training_data, x_valid_data))
  21. 21 y_training_data_final = np.append(y_training_data, y_valid_data)
  22. 22 # 设置神经网络模型参数
  23. 23 # 使用solver='lbfgs',拟牛顿法,需要较多的跌点次数
  24. 24 lbfgs = MLPClassifier(solver='lbfgs', activation='relu', alpha=1e-4, hidden_layer_sizes=(50, 50), random_state=1, max_iter=10, verbose=10, learning_rate_init=0.1)
  25. 25 # 使用solver='adam',基于随机梯度下降的优化算法,准确率较低
  26. 26 adam = MLPClassifier(solver='adam', activation='relu', alpha=1e-4, hidden_layer_sizes=(50, 50), random_state=1, max_iter=10, verbose=10, learning_rate_init=0.1)
  27. 27 # 使用solver='sgd',基于梯度下降的自适应优化算法,分批训练数据,效率高,准确性高,建议使用
  28. 28 sgd = MLPClassifier(solver='sgd', activation='relu', alpha=1e-4, hidden_layer_sizes=(50, 50), random_state=1, max_iter=10, verbose=10, learning_rate_init=0.1)
  29. 29 # 使用不同算法训练模型
  30. 30 lbfgs.fit(x_training_data_final, y_training_data_final)
  31. 31 adam.fit(x_training_data_final, y_training_data_final)
  32. 32 sgd.fit(x_training_data_final, y_training_data_final)
  33. 33 # 预测
  34. 34 lbfgs_predict = lbfgs.predict(x_test_data)
  35. 35 adam_predict = adam.predict(x_test_data)
  36. 36 sgd_predict = sgd.predict(x_test_data)
  37. 37 print(lbfgs_predict)
  38. 38 print("*******************************************")
  39. 39 print(adam_predict)
  40. 40 print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
  41. 41 print(sgd_predict)
  42. 42 print("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
  43. 43 # 评估模型
  44. 44 print(lbfgs.score(x_test_data, y_test_data))
  45. 45 print("===========================================")
  46. 46 print(adam.score(x_test_data, y_test_data))
  47. 47 print("-------------------------------------------")
  48. 48 print(sgd.score(x_test_data, y_test_data))
  49. 49
  50. 50 # 输出正确结果
  51. 51 print(y_test_data)

 

结果:

 

  max_iter=10

 

  max_iter=20

  注意:  

  1. 当使用pickle加载mnist数据时,python3.x与python2.x差距较大,python3.x会抛出异常,异常信息为:UnicodeDecodeError: 'ascii' codec can't decode byte 0x90 in position 614: ordinal not in range(128)

    此时需要指定编码pickle.load(fp, encoding='bytes')来解决异常!

  2.    比较lbfgs(拟牛顿法)、adam(基于随机梯度下降的优化算法)和sgd(基于梯度下降的自适应优化算法)可知,lbfgs波动较大,在相同训练数据的情况下,当迭代次数不同时,模型预测准确率波动较大。adam算法模型训练较快,但模型预测准确率较差,适合应用在预测准确率要求不高,响应时间短的地方。sgd算法在模型训练速度和预测准确率方面都能达到较好的效果,建议使用!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号