• 机器学习15- 手写数字识别-小数据集


    1.手写数字数据集

    • from sklearn.datasets import load_digits
    • digits = load_digits()

     

    2.图片数据预处理

    • x:归一化MinMaxScaler()
    • y:独热编码OneHotEncoder()或to_categorical
    • 训练集测试集划分
    • 张量结构
     1 #2.图片数据预处理
     2 #(1)归一化(将某一列特征的值缩放到一个最小和最大值(默认为0~1)之间)
     3 scaler = MinMaxScaler()
     4 X_data = scaler.fit_transform(X_data)
     5 print('MinMaxScaler_trans_X_data:')
     6 print(X_data)
     7 
     8 #(2)独热编码
     9 Y = OneHotEncoder().fit_transform(Y_data).todense() #
    10 print('OneHot_Y')
    11 print(Y)
    12 
    13 #(3)张量结构-转换成图片的格式
    14 X = X_data.reshape(-1,8,8,1)
    15 print(X.shape)
    16 
    17 #(4)进行数据集的划分
    18 X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size=0.2,random_state=0,stratify=Y)
    19 print(X_train,X_test,Y_train,Y_test)

    归一化后数据查看:

    独热编码:

     

    张量结构:

     

     训练集测试集的划分:

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

    • 绘制模型结构图,并说明设计依据。
     1 #3.设计卷积神经网络结构
     2 # 建立模型
     3 model = Sequential()
     4 
     5 # 一层卷积  ·
     6 model.add(Conv2D(filters=16,kernel_size=(5, 5),padding='same',input_shape=X_train.shape[1:],activation='relu'))
     7 # 池化层1
     8 model.add(MaxPool2D(pool_size=(2, 2)))
     9 model.add(Dropout(0.25))
    10 # 二层卷积
    11 model.add(Conv2D(filters=32,kernel_size=(5, 5),padding='same',activation='relu'))
    12 # 池化层2
    13 model.add(MaxPool2D(pool_size=(2, 2)))
    14 model.add(Dropout(0.25))
    15 # 三层卷积
    16 model.add(Conv2D(filters=64,kernel_size=(5, 5),padding='same',activation='relu'))
    17 # 四层卷积
    18 model.add(Conv2D(filters=128,kernel_size=(5, 5),padding='same',activation='relu'))
    19 # 池化层3
    20 model.add(MaxPool2D(pool_size=(2, 2)))
    21 model.add(Dropout(0.25))
    22 
    23 model.add(Flatten())  # 平坦层
    24 model.add(Dense(128, activation='relu'))  # 全连接层
    25 model.add(Dropout(0.25))
    26 model.add(Dense(10, activation='softmax')) # 激活函数
    27 print('每层数据的结构变化过程:')
    28 model.summary()

    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
     1 #5.模型评价
     2 score = model.evaluate(X_test,Y_test)
     3 print(score)
     4 
     5 ####交叉表与交叉矩阵
     6 #(1)预测值
     7 y_pred = model.predict_classes(X_test)
     8 print(y_pred[:10])
     9 #(2)交叉表查看预测数据与原数据的对比
    10 y_test1 = np.argmax(Y_test,axis=1).reshape(-1)
    11 y_true = np.array(y_test1)[0]
    12 print(y_test1)
    13 # y_test1 = y_test1.tolist()[0]
    14 # print(y_test1)
    15 pd.crosstab(y_true,y_pred,rownames=["true"],colnames=["predict"])
    16 
    17 #(3)交叉矩阵
    18 a = pd.DataFrame(np.array(y_test1),y_pred)
    19 df = pd.DataFrame(a)
    20 sns.heatmap(df,annot=True,cmap='summer',linewidths=0.2,linecolor='G')
    21 plt.show()

    模型评价:

     预测值查看:

    查看交叉表进行对比:

    交叉矩阵:查看预测值与实际值之间的对比:

  • 相关阅读:
    Windows Phone 7 ManipulationStarted 事件
    用C#实现AES加密和解密
    Windows Phone 7 程序菜单栏ApplicationBar
    Windows Phone 7 使用选择器(Chooser)
    Windows Phone 7 矢量图形编程
    Windows Phone 7 位图BitmapImage和WriteableBitmap
    Windows Phone 7 利用计时器DispatcherTimer创建时钟
    Windows Phone 7 配置文件WMAppmanifest.xml的介绍
    C#转换人民币大小金额
    Windows Phone 7 入门XAML语法介绍
  • 原文地址:https://www.cnblogs.com/Fishmark/p/13097119.html
Copyright © 2020-2023  润新知