完整实现利用keras训练自己的图片数据集

本实验可以实现使用卷积神经网络对自己的数据集(图片)进行训练并得出训练时的准确率与loss图,并利用测试集得到混淆矩阵、ROC曲线图和AUC。

编程环境为python3.7.4

获取源码,可关注公众号乐享NLP,回复“图像分类”四个字即可

完整实现利用keras训练自己的图片数据集_第1张图片

代码文件结构如下:

完整实现利用keras训练自己的图片数据集_第2张图片

Dataset文件夹用来存放数据集

Log文件夹用来存放准确率和loss曲线图

Model文件夹用来存放训练好的卷积神经网络模型,训练好后以后使用可以直接调用模型,不必每次都训练

Main为主程序

Dataset文件夹里面有训练集train和测试集test两个文件夹,train文件夹数据用来训练卷积神经网络,test文件夹数据用来测试训练好的卷积神经网络的性能

完整实现利用keras训练自己的图片数据集_第3张图片

程序中的主要代码:

本实验使用的图片是128*128的单通道图片,故需要将数据集reshape成128*128*1

完整实现利用keras训练自己的图片数据集_第4张图片

定义卷积神经网络结构:

def build_model(self):
    self.model = Sequential()
    self.model.add(
        Convolution2D(filters=32,
            kernel_size=(5, 5),
            padding='same',
            dim_ordering='tf',
            input_shape=self.dataset.X_train.shape[1:],

        )
    )
    self.model.add(BatchNormalization())

    self.model.add(Activation('relu'))
    self.model.add(
        MaxPooling2D(
            pool_size=(2, 2),
            strides=(2, 2),
            padding='same'
        )
    )

    self.model.add(Convolution2D(filters=64, kernel_size=(5, 5), padding='same'))
    self.model.add(BatchNormalization())
    self.model.add(Activation('relu'))
    self.model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='same'))
    self.model.add(Dropout(0.15))

    self.model.add(Flatten())
    self.model.add(Dense(512))
    self.model.add(BatchNormalization())
    self.model.add(Activation('relu'))
    self.model.add(Dropout(0.5))

    self.model.add(Dense(128))
    self.model.add(BatchNormalization())
    self.model.add(Activation('relu'))
    self.model.add(Dropout(0.5))

    self.model.add(Dense(self.dataset.num_classes))
    self.model.add(BatchNormalization())
    self.model.add(Activation('softmax'))
    self.model.summary()

 

本实验使用的优化器是adadelta (有很多可选的优化器,例如RMSprop,Adagrad)损失函数为categorical_crossentropy也可以选其他的

epochs、batch_size为可调的参数,epochs为训练多少轮、batch_size为每次训练多少个样本,本实验训练3轮,每次20张图片(正常情况都会训练几十轮才会得到不错的识别效果)

使用tensorboard得到的准确率与loss曲线图的地址为E:classification\log(需要定义为自己的地址)

完整实现利用keras训练自己的图片数据集_第5张图片

训练结果如图

完整实现利用keras训练自己的图片数据集_第6张图片

验证得到的ROC如图

完整实现利用keras训练自己的图片数据集_第7张图片

使用tensorboard得到准确率与loss曲线图的步骤:

终端输入tensorboard --logdir=E:classification\log

等运行完成 打开浏览器在在地址栏输入

http://localhost:6006/

即可看到如下图:

完整实现利用keras训练自己的图片数据集_第8张图片

 

你可能感兴趣的:(完整实现利用keras训练自己的图片数据集)