1,首先需要了解神经网络结构的知识,参考链接: 吃瓜教程学习笔记-CH5神经网络.
2,需要下载keras框架和tensorflow框架,参考链接:Keras环境的安装
基于以上环境和知识的储备,才能更好的理解项目流程。
一般的深度学习项目的流程分为以下固定步骤:
模型的优化,减缓过拟合,模型的优化下节进行叙述,本节主要讲述前6个步骤。
在机器学习中,通常将原始数据集划分成三个部分:
通常情况下,会将数据集分为6:2:2比例。
keras框架中有自动划分训练集和验证集的方式。
model.fit(x_train,y_train,validation_split=0.2)
在全连接神经网络中,需要对图片进行扁平化处理,再送到构建好的模型中去训练。keras中提供了扁平化操作的层,可以作为全连接神经网络的第一层。
因为MNIST数据集中每一张图片为28*28,扁平化第一层的input_shape=(28,28).
代码如下:
#构建模型
from keras.models import Sequential
from keras.layers import Dense, Flatten
from keras.optimizers import RMSprop
model = Sequential()
model.add(Flatten(input_shape=(28, 28)))
3个隐藏层,第一个单元数64,其余32,所有的单元使用函数ReLU函数作为激活函数,最后加上输出层。输出层使用softmax函数。
model.add(Dense(units=64, activation='relu'))
model.add(Dense(units=32, activation='relu'))
model.add(Dense(units=32, activation='relu'))
model.add(Dense(units=10, activation='softmax'))
model.summary()
构建好模型之后,对模型进行编译,为了指定衡量模型的预测误差的损失函数。使用RMSprop梯度下降法。
#编译
model.compile(loss='categorical_crossentropy',
metrics=['accuracy'],
optimizer=RMSprop())
模型构建编译好之后,使用训练集中的数据对模型进行训练,需要指定训练的次数,批尺寸,验证集比例。
#训练
model.fit(X_train,
y_train,
epochs=10,
batch_size=64,
validation_split=0.2)
训练迭代过程中,会输出平均损失值和平均准确率,准确率最高达到98%。
训练完成之后,使用测试集进行测试:
#测试评估
loss, accuracy = model.evaluate(X_test, y_test)
#输出
print(accuracy)
测试输出准确率结果为97%,小于训练的时候的98%,出现过拟合现象,具体缓解过拟合的方式下节描述。
参考自深度学习与项目实战。
#20220328
#加载数据
from keras.datasets import mnist
from keras.utils import to_categorical
(X_train, y_train), (X_test, y_test) = mnist.load_data()
# 将训练集图片进行归一化:将图片中的每一个像素值转变为0~1之间
X_train = X_train / 255.0
X_test = X_test / 255.0
# 将 label转化为独热编码的形式
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)
#构建模型
from keras.models import Sequential
from keras.layers import Dense, Flatten
from keras.optimizers import RMSprop
model = Sequential()
model.add(Flatten(input_shape=(28, 28)))
model.add(Dense(units=64, activation='relu'))
model.add(Dense(units=32, activation='relu'))
model.add(Dense(units=32, activation='relu'))
model.add(Dense(units=10, activation='softmax'))
model.summary()
#编译
model.compile(loss='categorical_crossentropy',
metrics=['accuracy'],
optimizer=RMSprop())
#训练
model.fit(X_train,
y_train,
epochs=10,
batch_size=64,
validation_split=0.2)
#测试评估
loss, accuracy = model.evaluate(X_test, y_test)
#输出
print(accuracy)