zoukankan      html  css  js  c++  java
  • 15 手写数字识别

    1.手写数字数据集

    • from sklearn.datasets import load_digits
    • digits = load_digits()
    # 1.数据集读入
    from sklearn.datasets import load_digits    #读入手写数字数据
    digits=load_digits()
    print("数据集大小:",digits.data.shape)  # 查看数据集大小
    print("数据集target:",digits.target)      # 查看target

    2.图片数据预处理

    • x:归一化MinMaxScaler()
    • y:独热编码OneHotEncoder()或to_categorical
    • 训练集测试集划分
    • 张量结构
    # 归一化:将某一列特征的值缩放到一个最小和最大值(默认0-1)之间,用于去除不同维度的数据的量纲以及量纲单位
    from sklearn.preprocessing import MinMaxScaler
    import numpy as np
    X_data = digits.data.astype(np.float32)   # 转换为32位浮点数
    scaler = MinMaxScaler()
    X_data = scaler.fit_transform(X_data)     # 归一化处理
    X = X_data.reshape(-1,8,8,1)              # 转为图片的格式
    X.shape  # 查看归一化后的数据大小

    # 独热编码
    # OneHotEncode“独热编码”,一位有效编码将分类特征的每个元素转化为一个可用来计算的值
    Y_data = digits.target.astype(np.float32).reshape(-1,1) # 将Y_data变为一列
    from sklearn.preprocessing import OneHotEncoder
    Y = OneHotEncoder().fit_transform(Y_data).todense()     # 对数据进行独热编码
    print(Y)   #查看独热编码后的数据

    # 进行训练集、测试集划分
    # 以训练集:测试集=8:2的比例划分
    from sklearn.model_selection import train_test_split
    X_train,X_test,y_train,y_test = train_test_split(X,Y,test_size=0.2,random_state=0,stratify=Y)
    print(X_train.shape,X_test.shape,y_train.shape,y_test.shape) # 查看训练集测试集shape

    3.设计卷积神经网络结构

    • 绘制模型结构图,并说明设计依据。

    4.模型训练

    • model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    • train_history = model.fit(x=X_train,y=y_train,validation_split=0.2, batch_size=300,epochs=10,verbose=2)
    # 4.训练模型
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    train_history = model.fit(x=X_train,y=y_train,validation_split=0.2, batch_size=300,epochs=10,verbose=2)
                                                  # 验证集     # 一次性测试的数据个数# 迭代次数(训练次数)

           

     5.模型评价

    • model.evaluate()
    • 交叉表与交叉矩阵
    • pandas.crosstab
    • seaborn.heatmap
    # 5.模型测试
    model.evaluate(X_test,y_test)  #传入数据评估

    # 观察预测值与实际值
    y_pred = model.predict_classes(X_test)
    print("预测值:",y_pred[:10])
    print("实际值:",y_test[:10])

    # 转换真实值
    y_test1=np.argmax(y_test,axis=1).reshape(-1)
    y_true=np.array(y_test1[0]).reshape(-1)
    # 交叉表查看预测数据与原数据对比
    import pandas as pd
    pd.crosstab(y_true,y_pred,rownames=['true'],colnames=['predict'])

    # 通过热力图观察预测值与实际值的符合程度
    import seaborn as sns
    a = pd.crosstab(y_true,y_pred)
    df=pd.DataFrame(a)
    # summer RdYlBu PuBuGn PUBU
    sns.heatmap(df,annot=True,cmap="icefire",linewidths=0.2,linecolor='G')

  • 相关阅读:
    Makefile 常用函数表
    情绪管理
    网赚呓语
    Gym 100952C&&2015 HIAST Collegiate Programming Contest C. Palindrome Again !!【字符串,模拟】
    Gym 100952B&&2015 HIAST Collegiate Programming Contest B. New Job【模拟】
    Gym 100952A&&2015 HIAST Collegiate Programming Contest A. Who is the winner?【字符串,暴力】
    HDU 1024 Max Sum Plus Plus【动态规划求最大M子段和详解 】
    HDU 1003 Max Sum【动态规划求最大子序列和详解 】
    HDU 1010 Tempter of the Bone【DFS经典题+奇偶剪枝详解】
    DFS中的奇偶剪枝学习笔记
  • 原文地址:https://www.cnblogs.com/HvYan/p/13113788.html
Copyright © 2011-2022 走看看