载入mnist数据集
from keras.datasets import mnist #从Keras中导入mnist数据集
#读入训练集和测试集
(X_train_image, y_train_lable), (X_test_image, y_test_lable) = mnist.load_data()
#X_train_image训练集特征 图片
#y_train_lable训练集标签 数字
#X_test_image测试集特征 图片
#y_test_lable测试集标签 数字
#显示张量里面的内容
print ("特征集张量形状:", X_train_image.shape) #用shape方法显示张量的形状
print ("第一个数据样本:\n", X_train_image[0]) #注意Python的索引是从0开始的
print("第一个数据样本的标签:",y_train_lable[0])
#数据集在输入机器学习模型之前需要做一些数据格式转换的工作
from keras.utils import to_categorical #导入keras.utils工具库的类别转换工具
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) #特征转换为one-hot编码
y_test = to_categorical(y_test_lable,10) #特征转换为one-hot编码
print("训练集张量形状:",X_train.shape)
print("第一个数据标签:",y_train[0]) #显示标签集的第一个数据
为什么要进行数据格式转换?
①keras要求图像数据集导入卷积网络模型时张量为4阶,最后一阶代表颜色深度,灰度图像只有一个颜色通道,可以设置其值为1
②在机器学习的分类问题中,标签【0.0.0.0.0.0.0.0.1.0】就代表着类别值为8 one-hot编码
训练机器,确定参数
from keras import models # 导入Keras模型, 和各种神经网络的层
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
model = models.Sequential() # 用序贯方式建立模型
model.add(Conv2D(32, (3, 3), activation='relu', # 添加Conv2D层
input_shape=(28,28,1))) # 指定输入数据样本张量的类型
model.add(MaxPooling2D(pool_size=(2, 2))) # 添加MaxPooling2D层
model.add(Conv2D(64, (3, 3), activation='relu')) # 添加Conv2D层
model.add(MaxPooling2D(pool_size=(2, 2))) # 添加MaxPooling2D层
model.add(Dropout(0.25)) # 添加Dropout层 ,防止过拟合
model.add(Flatten()) # 展平
model.add(Dense(128, activation='relu')) # 添加全连接层
model.add(Dropout(0.5)) # 添加Dropout层
model.add(Dense(10, activation='softmax')) # Softmax分类激活,输出10维分类码,即输出预测标签值y'
# 编译模型
model.compile(optimizer='rmsprop', # 指定优化器
loss='categorical_crossentropy', # 指定损失函数
metrics=['accuracy']) # 指定验证过程中的评估指标",
#用fit方法对机器进行5轮训练
model.fit(X_train, y_train, # 指定训练特征集和训练标签集
validation_split = 0.3, # 部分训练集数据拆分成验证集
epochs=5, # 训练轮次为5轮
batch_size=128) # 以128为批量进行训练
以上的5轮训练,准确率逐步提高,accuracy代表训练集上的预测准确率,最后一轮达到0.9716,val_accuracy代表验证集上的预测准确率,最后一轮达到0.9813
超参数调式和性能优化
score = model.evaluate(X_test, y_test) # 在测试集上进行模型评估
print('测试集预测准确率:', score[1]) # 打印测试集上的预测准确率
#查看预测结果
pred = model.predict(X_test[0].reshape(1, 28, 28, 1)) # 预测测试集第一个数据
print(pred[0],"转换一下格式得到:",pred.argmax()) # 把one-hot码转换为数字
import matplotlib.pyplot as plt # 导入绘图工具包
plt.imshow(X_test[0].reshape(28, 28),cmap='Greys') # 输出这个图片
机器学习之前确定:
①要解决的问题是什么,即机器学习项目的最终目标是什么
②目前拥有或者要搜集的数据集是那种类型的?数值型、类别型还是图像
③有现成的数据吗?数据集搜集整理过程中可能会遇到哪些困难?
④以目前的知识来看,哪些算法可能是较好的选择?
⑤如何评价算法的优劣,即如何定义和衡量机器学习的“准确率”
如果机器学习调试过程出现了问题,原因会出在哪里?问题定义的好不好,数据集质量好不好,模型好不好,机器训练好不好,评估调试好不好
机器学习:大量数据中发现一个模型,通过它来模拟现实世界事物之前的关系,实现预测或者判断
可以分为:监督学习,无监督学习,半监督学习,深度学习,强化学习
机器学习基本术语:特征、标签、模型
scikit-learn机器学习算法库
keras深度学习算法库
机器学习项目:①问题定义②数据的收集和预处理③选择机器学习模型④训练机器确定参数⑤超参数调试和性能优化