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

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

编程环境为python3.7.4

代码文件结构如下:

Dataset文件夹用来存放数据集

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

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

Main为主程序

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

程序中的主要代码:

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

定义卷积神经网络结构:

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(需要定义为自己的地址)

训练结果如图

验证得到的ROC如图

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

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

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

http://localhost:6006/

即可看到如下图:

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值