keras搭建cifar-10图像识别模型与MNIST手写识别模型总结

文章目录

  • 一、keras介绍
  • 二、一般分析思路

一、keras介绍

相关代码在github上,python3代码链接
keras 用起来简单。搭建模型方便,Keras其实就是TensorFlow的接口(Keras作为前端,TensorFlow或theano作为后端),它也很灵活,且比较容易学。可以把keras看作为tensorflow封装后的一个API。

二、一般分析思路

导入MNIST数据集
使用序贯模型,导入
Dense(全连接层)
Dropout(),Dropout将在训练过程中每次更新参数时按一定概率(rate)随机断开输入神经元,Dropout层用于防止过拟合。
Flatten,Flatten层用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。Flatten不影响batch的大小。
Conv2D(卷积层),
MaxPooling1D层(池化层),对时域1D信号进行最大值池化,还有2D,3D,
AveragePooling1D层(池化层),对空域1D信号进行平均值池化,还有2D,3D,
规定好类别,迭代次数,batch_size,然后读取数据,分为训练集和测试集
若channels_first,则x_train.shape[0], 1, img_rows, img_cols
否则‘channels_last’模式下,x_train.shape[0], img_rows, img_cols, 1
然后对数据进行归一化,接下来构建模型
用model.add()添加模型,卷积层

model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))

model.add(MaxPooling2D(pool_size=(2, 2)))池化层,
pool_size:整数或长为2的整数tuple,代表在两个方向(竖直,水平)上的下采样因子,如取(2,2)将使图片在两个维度上均变为原长的一半。
strides:整数或长为2的整数tuple,或者None,步长值。

model.add(Dropout(0.25)) 

最后一层model.add(Dense(num_classes, activation='softmax'))
用softmx分类
接下来配置模型,定义损失函数,识别准确率作为模型评估

model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])

训练模型,载入数据,verbose=1为输出进度条记录

 model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          validation_data=(x_test, y_test))

验证模型

score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

保存模型,若不存在路径就创建路径

 save_dir = os.path.join(os.getcwd(), 'saved_models')
 if not os.path.isdir(save_dir):
    os.makedirs(save_dir)
model_path = os.path.join(save_dir, model_name)
model.save(model_path)
print('Saved trained model at %s ' % model_pat

你可能感兴趣的:(深度学习)