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()
    

     

    课程作业
  • 相关阅读:
    poj 3666 Making the Grade
    poj 3186 Treats for the Cows (区间dp)
    hdu 1074 Doing Homework(状压)
    CodeForces 489C Given Length and Sum of Digits...
    CodeForces 163A Substring and Subsequence
    CodeForces 366C Dima and Salad
    CodeForces 180C Letter
    CodeForces
    hdu 2859 Phalanx
    socket接收大数据流
  • 原文地址:https://www.cnblogs.com/lingcode/p/13126667.html
Copyright © 2011-2022 走看看