读入训练集和测试集
import numpy as np
import pandas as pd
from keras.datasets import mnist
(X_train_image, y_train_lable), (X_test_image, y_test_lable) = mnist.load_data()
print ("特征集张量形状:", X_train_image.shape)
print ("第一个数据样本:\n", X_train_image[0])
print ("第一个数据样本的标签:", y_train_lable[0])
注: X_train_image:训练集特征:图片 y_train_lable:训练集标签:数字 X_test_image:测试集特征:图片 y_test_lable:测试集标签:数字 关于mnist的详细信息可看博客:https://blog.csdn.net/bwqiang/article/details/110203835
获取前10条MNSIT数据集的图片形式
import matplotlib.pyplot as plt
for i in range(10):
img = np.reshape(X_train_image [i, :], (28, 28))
label = np.argmax(X_train_image [i, :])
plt.matshow(img, cmap = plt.get_cmap('gray'))
plt.show()
用卷积神经网络处理MNIST数据集
注:这里还有一些问题没搞明白,弄懂之后再回来补充
from tensorflow.keras.utils import to_categorical
X_train = X_train_image.reshape(60000,28,28,1)
X_test = X_test_image.reshape(10000,28,28,1)
y_train = to_categorical(y_train_lable, 10)
y_test = to_categorical(y_test_lable, 10)
print ("数据集张量形状:", X_train.shape)
print ("第一个数据标签:",y_train[0])
from keras import models
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
model = models.Sequential()
model.add(Conv2D(32, (3, 3), activation='relu',
input_shape=(28,28,1)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit(X_train, y_train,
validation_split = 0.3,
epochs=5,
batch_size=128)
score = model.evaluate(X_test, y_test)
print('测试集预测准确率:', score[1])
accuracy:表示训练集上的预测准确率 val_accuracy:表示验证集上预测的准确率 注: 1、解释一下为什么要新的格式: (1)Keras要求图像数据集导入卷积网络模型时为4阶张量,最后一阶代表颜色深度,灰度图像只有一个颜色通道,可以设置为1 (2)在机器学习的分类问题中,标签[0.0.0.0.0.0.0.1.0]表示8. 2、基础知识: 图像格式数据的输入通常是张量流中的四维数组 「(数值、宽度、高度、深度)」 「num_instance:「数据实例数。通常指定为」无」,以适应数据大小的波动 「宽度」:图像的宽度 「高度」:图像的高度 「深度」:图像的深度。彩色图像的深度通常为3(RGB为3个通道)。黑白图像的深度通常为1(只有一个通道) 3、具体张量的定义,看这篇博客:https://blog.csdn.net/yangqinglin193/article/details/114264394
数据集预测:
pred = model.predict(X_test[0].reshape(1, 28, 28, 1))
print(pred[0],"转换一下格式得到:",pred.argmax())
import matplotlib.pyplot as plt
img=np.reshape(X_test[0],(28,28))
label = np.argmax(X_train_image [0])
plt.matshow(img, cmap = plt.get_cmap('gray'))
plt.show()
|