zoukankan      html  css  js  c++  java
  • 神经网络MPLClassifier分类

    代码:

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

  • 相关阅读:
    zoj 2316 Matrix Multiplication 解题报告
    BestCoder7 1001 Little Pony and Permutation(hdu 4985) 解题报告
    codeforces 463C. Gargari and Bishops 解题报告
    codeforces 463B Caisa and Pylons 解题报告
    codeforces 463A Caisa and Sugar 解题报告
    CSS3新的字体尺寸单位rem
    CSS中文字体对照表
    引用外部CSS的link和import方式的分析与比较
    CSS样式表引用方式
    10个CSS简写/优化技巧
  • 原文地址:https://www.cnblogs.com/yszd/p/9530817.html
Copyright © 2011-2022 走看看