MNIST手写数字识别_softmax简单线性回归
加载数据集,得到训练集和测试集:
mnist = input_data.read_data_sets('D:\pythonProject1\MNIST\MNIST_data',one_hot=True)
train_X = mnist.train.images
train_Y = mnist.train.labels
test_X = mnist.test.images
test_Y = mnist.test.labels
数据归一化处理:
#数据归一化 min-max 标准化
train_X /= 255
test_X /= 255
数据归一化的主要作用有:
1.去掉量纲,使指标之间具有可比性。
2.将数据限制在一定区间,使运算更为便捷
数据归一化的常用方法:
1.min-max 标准化,使结果映射到0-1之间
x = (x - min) / (max - min)
max为样本数据的最大值,min为样本数据的最小值
2.Z-score 标准化
给予原始数据的均值和标准差进行数据的标准化。处理后的数据符合标准正态分布,即均值为0,标准差为1
x = (x − μ) / σ
μ为样本均值,σ为样本标准差
接下来就可以构建模型啦
深度学习的主要流程为:
1.数据获取(√)
2.数据处理 (√)
3.模型的创建与训练
4.模型测试与评估
5.模型预测
# 构建模型
def create_model():
#利用Sequential方式构建模型
model = Sequential()
model.add(Dense(10)) # 卷积层:提取图像的局部特征 输入为10维的数据??不确定
model.add(Activation('softmax')) # 激活函数为softmax
# 编译模型
model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
# 设置模型的相关参数:损失函数,优化器,评价指标
return model
model = create_model()
模型的基础已经构建好了,现在开始训练模型了。
# 模型训练
history = model.fit(train_X,
train_Y,
batch_size=200, # 每次训练的送入网络中的样本个数
epochs=10, # 训练样本送入网络中的次数
verbose=2, # 日志输出的复杂度
validation_data=(test_X, test_Y))
print(history.history)
使用fit即可训练模型,训练结果保存到history中,我们就可以看到训练的过程啦。
batch_size=200:每次传入200个样本进行训练,一共传入275次,200×275=55000,loss为训练集的损失值,accuracy为训练集的正确率,val_loss为测试值的损失,val_accuracy为测试集的正确率。loss的值越小越好,accuracy的值越大越好。
我们可以绘制一个折线图,方便观察loss和accuracy的变化趋势。
fig = plt.figure()
#