keras基本用法
keras是目前使用最为广泛的深度学习工具之一。这里就不在做过多介绍,下面我们来看一下keras的基本用法吧。
这里使用keras搭建一个最简单的LeNet-5进行手写体数字识别的介绍。
首先,如果还没有安装keras的朋友可以通过以下命令进行安装。
pip install keras
接下里看具体实现,直接上代码,讲解都写在注释中了。
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Flatten, Conv2D, MaxPooling2D
from keras import backend as K
from keras.callbacks import ModelCheckpoint
'''类别'''
num_classes = 10
'''输入图片的行数'''
rows = 28
'''输入图片的列数'''
cols = 28
'''通过keras封装好的API加载MNIST数据集
其中,trainX是一个60000x28x28的数组,trainY是每一张图片对应的数字'''
(trainX, trainY), (testX, testY) = mnist.load_data()
'''设置输入层的格式,最后的1表示图像时黑白图像,彩色图像最后一个参数为3'''
trainX = trainX.reshape(trainX.shape[0], rows, cols, 1)
testX = testX.reshape(testX.shape[0], rows, cols, 1)
'''输入的形状,行数、列数、通道数'''
input_shape = (rows, cols, 1)
'''将图像像素转化为0到1之间的实数,即归一化像素值'''
trainX = trainX.astype('float32')
testX = testX.astype('float32')
trainX /= 255.0
testX /= 255.0
'''将输出转化为需要的格式,这里使用one-hot编码'''
trainY = keras.utils.to_categorical(trainY, num_classes)
testY = keras.utils.to_categorical(testY, num_classes)
'''使用keras API定义模型,首先,定义一个Sequential类'''
model = Sequential()
'''定义一个深度为32,滤波器尺寸为5x5的卷积层,激活函数层使用relu函数'''
model.add(Conv2D(32, (5,5), activation='relu', input_shape=input_shape))
'''定义一个滤波器尺寸为2x2的最大池化层'''
model.add(MaxPooling2D(pool_size=(2,2)))
'''定义一个深度为64,滤波器尺寸为5x5的卷积层,激活函数层采用relu函数'''
model.add(Conv2D(64, (5,5), activation='relu'))
'''定义一个滤波器尺寸为2x2的最大池化层'''
model.add(MaxPooling2D(pool_size=(2,2)))
'''将卷积层的输出拉直作为后面全连接层的输入'''
model.add(Flatten())
'''定义全连接层,有500个节点,激活函数采用relu'''
model.add(Dense(500, activation='relu'))
'''输出层,即分类层,也是一个全连接层,采用softmax函数作为分类器'''
model.add(Dense(num_classes, activation='softmax'))
'''定义损失函数,优化器,评测方法。这里使用交叉熵损失,随机梯度下降优化器,精确度评测方法'''
model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.SGD(), metrics=['accuracy'])
'''保存在测试集上表现最优的模型'''
filepath="weights.best.hdf5" #模型保存路径
checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')
callbacks_list = [checkpoint]
'''设置训练数据,batch大小、训练步数、测试数据,自动开始训练'''
model.fit(trainX, trainY, batch_size=128, epochs=20, validation_data=(testX, testY))
'''在测试集上计算准确度'''
score = model.evaluate(testX, testY)
print('Test loss;',score[0])
print('Test accuracy:',score[1])
如果觉得博主的文章对您有所帮助,记得关注一下呦!您的支持就是我不断更新下去的最强动力。
如有不对的地方请指正,谢谢
有需要深度学习及机器视觉相关开发环境的可加博主QQ获取,有问题请联系下方QQ直接与博主本人交流。博主会定期更新视觉相关算法使用及实际项目讲解,谢谢各位
博主QQ:2021907249