zoukankan      html  css  js  c++  java
  • 15 手写数字识别-小数据集

    • from sklearn.datasets import load_digits
    • digits = load_digits()
    • #加载数据
      from sklearn.datasets import load_digits
      import numpy as np
      import pandas as pd
      from sklearn.preprocessing import MinMaxScaler
      from sklearn.preprocessing import OneHotEncoder
      digits=load_digits()
      
      #对X轴归一化,采用MinMaxScaler()
      X_data = digits.data.astype(np.float32)
      Y_data = digits.target.astype(np.float32).reshape(-1,1)
      print(X_data,Y_data)
      

     

    2.图片数据预处理

    • x:归一化MinMaxScaler()
    • y:独热编码OneHotEncoder()或to_categorical
    • 训练集测试集划分
    • 张量结构
    • import numpy as np
      from sklearn.datasets import load_digits
      from sklearn.preprocessing import MinMaxScaler
      from sklearn.preprocessing import OneHotEncoder
      digits=load_digits()
      
      # 独热编码
      X_data = digits.data.astype(np.float32)
      Y_data = digits.target.astype(np.float32).reshape(-1,1)
      scale=MinMaxScaler()
      X_data=scale.fit_transform(X_data)
      # print(X_data)
      
      Y_hot=OneHotEncoder().fit_transform(Y_data).todense()
      print(Y_hot)
      
      
      
      
      ## 转图片格式
      X=X_data.reshape(-1,8,8,1)
      print(X.shape)
      
      
      from sklearn.model_selection import train_test_split
      X_train,X_test,y_train,y_test = train_test_split(X,Y_hot,test_size=0.25,random_state=0,stratify=Y_hot)
      
      print (X_train,X_test,y_train,y_test)
      

     

     

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

    • 绘制模型结构图,并说明设计依据。
    from keras.models import Sequential
    from keras.layers import Dense,Activation
    model = Sequential()
    model.add(Conv2D(
              filters=32,  # 输出32*32
              kernel_size=(5,5),  # 卷积核的大小
              padding='same',  # 保证卷积核大小,不够补零
              input_shape=X_train.shape[1:],  # (8, 8, 1)
              activation='relu')) 
    model.add(MaxPool2D(pool_size=(2, 2)))
    model.add(Dropout(0.25))
    model.add(Flatten())
    model.add(Dense(128,activation='relu'))
    model.add(Dropout(0.25))
    model.add(Dense(10,activation='softmax'))
    

    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)
    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=50,verbose=2)
    

    5.模型评价

    • model.evaluate()
    • 交叉表与交叉矩阵
    • pandas.crosstab
    • seaborn.heatmap
    y-predict=model.predict_classes(X_test)
    y_testtrue=np.argmax(y_test,axis=1).reshape(-1)
    y_true=np.array(y_testtrue[0]).reshape(-1)
    pd.crosstab(y_true,y-predict,rownames=['true'],colnames=['predict'])
    
    ## 交叉矩阵
    import seaborn as sns
    import matplotlib.pylot as plt
    
    a=pd.crosstab(np.array(y_testtrue)[0].reshape(-1),y-predict)
    df=pd.DataFrame(a)
    sns.heatmap(df,annot=True,cmap="Purples",linewidths=0.2,linecolor="G")
    plt.show()
    

     

    课程作业
  • 相关阅读:
    养成写随笔的习惯
    脚本附加数据库
    脚本还原数据库
    C# 自定义安装包
    怕忘记了。记录一下要采购的元件1
    计划没有变化快啊
    一天三练有点累啊
    nRF24L01无线模块使用1电平转换
    好几年没参加IC公司的研讨会了
    变化
  • 原文地址:https://www.cnblogs.com/lingcode/p/13126667.html
Copyright © 2011-2022 走看看