TensorFlow系列专题(十四): 手把手带你搭建卷积神经网络实现冰山图像分类

   2023-03-08 学习力534
核心提示:目录:冰山图片识别背景数据介绍数据预处理模型搭建结果分析总结 一、冰山图片识别背景这里我们要解决的任务是来自于Kaggle上的一道赛题(https://www.kaggle.com/c/statoil-iceberg-classifier-challenge),简单介绍一下赛题的背景:在加拿大的东海岸经常

目录:

  • 冰山图片识别背景

  • 数据介绍

  • 数据预处理

  • 模型搭建

  • 结果分析

  • 总结

 

一、冰山图片识别背景

这里我们要解决的任务是来自于Kaggle上的一道赛题(https://www.kaggle.com/c/statoil-iceberg-classifier-challenge),简单介绍一下赛题的背景:在加拿大的东海岸经常会有漂流的冰山,这对航行在该海域的船舶造成了很大的威胁。挪威国家石油公司(Statoil)是一家在全球运营的国际能源公司,该公司曾与C-CORE等公司合作,C-CORE基于其卫星数据和计算机视觉技术建立了一个监控系统。Statoil发布该赛题的目的是希望利用机器学习的技术,更准确的及早发现和识别出威胁船舶航行的冰山。

 

二、数据介绍

赛题提供了两个数据文件“train.json”和“test.json”,其中“test.json”是比赛中用来对模型惊醒评分的,没有类标,这里我们只需要使用“train.json”文件。该数据集中有1604个打标过的训练数据,单个样本的数据格式如下:

字段名

字段说明

id

图像的id。

band_1,band_2

卫星图像数据,band_1和band_2是以特定入射角下不同极化方式产生的雷达后向散射为特征的信号,分别对应HH(水平发射/水平接收)和HV(水平发射/垂直接收)两种极化方式的数据,其大小均为。

inc_angle

获得该数据时的入射角度。该字段部分缺少数据,标记为“na”。

is_iceberg

类标,0:船只,1:冰山。

我们将数据可视化后进行观察,如图1所示。图像上方是冰山图像的可视化效果,三幅图分别对应“HH”计划方式、“HV”计划方式以及两者结合后的数据。图像下方是船只图像的可视化效果。

TensorFlow系列专题(十四): 手把手带你搭建卷积神经网络实现冰山图像分类

图1训练数据可视化效果

图1中的冰山和船只,通过观察可以较为容易的区分出来,但是还有很多如图2所示的数据,即使仔细观察也很难区分开来。

TensorFlow系列专题(十四): 手把手带你搭建卷积神经网络实现冰山图像分类

图2 训练数据可视化效果

三、数据预处理

首先我们导入需要的包:

TensorFlow系列专题(十四): 手把手带你搭建卷积神经网络实现冰山图像分类

 

接下来我们定义一个数据预处理的函数:

TensorFlow系列专题(十四): 手把手带你搭建卷积神经网络实现冰山图像分类

TensorFlow系列专题(十四): 手把手带你搭建卷积神经网络实现冰山图像分类

 

“data_preprocess”函数接受两个参数,“path”为训练数据“train.json”的文件路径,“more_data”为布尔类型,当其为“true”时,会调用函数“create_more_data”进行训练数据的扩充(即数据增强)。

 

第11行到第17行代码中,我们对样本数据进行了处理,除了原有的“band_1”和“band_2”,我们增加了“band_3”,band_3=band_1+band_2。最后我们使用numpy的“dstack”将三种数据进行堆叠,因此我们单个样本的数据维度为75x75x3。

 

第20行代码是调用“create_more_data”函数对训练数据进行扩充,第26行代码是对训练集的类标数据进行扩充,因为“create_more_data”函数将训练数据扩充为了原来的6倍,因此这里对应的也要将类标扩充为原来的6倍。

 

“create_more_data”函数的实现如下:

TensorFlow系列专题(十四): 手把手带你搭建卷积神经网络实现冰山图像分类

在“create_more_data”函数中我们通过对图像进行旋转和翻转来扩充数据集,虽然旋转前后的图像是同一张,但是由于特征的位置发生了变化,因此对于模型来说就是不同的数据,旋转或翻转操作是扩充图像数据集的一个简单有效的方法。在31至35行代码中,我们定义了5个列表,用来保存扩充的数据集,对应的操作分别是逆时针旋转90度、逆时针旋转180度、逆时针旋转270度、左右翻转和上下翻转。具体实现如下:

TensorFlow系列专题(十四): 手把手带你搭建卷积神经网络实现冰山图像分类

TensorFlow系列专题(十四): 手把手带你搭建卷积神经网络实现冰山图像分类

上面的代码中,我们使用numpy的“rot90”和“flip”函数对图像进行旋转和翻转操作。“flip”函数的第二个参数控制翻转的方式,“0”为左右翻转,“1”为上下翻转。第78行代码中,使用numpy的“concatenate”函数将扩充的数据预原数据进行拼接。

TensorFlow系列专题(十四): 手把手带你搭建卷积神经网络实现冰山图像分类

 

四、模型搭建

接下来我们实现模型部分,这里我们使用TensorFlow的高级API来搭建网络。

TensorFlow系列专题(十四): 手把手带你搭建卷积神经网络实现冰山图像分类

TensorFlow系列专题(十四): 手把手带你搭建卷积神经网络实现冰山图像分类

TensorFlow系列专题(十四): 手把手带你搭建卷积神经网络实现冰山图像分类

在84行代码中,我们使用“tf.keras.Sequential()”创建一个序贯模型,序贯模型是多个网络层的线性堆叠,我们使用“tf.keras.Sequential().add()”方法逐层添加网络结构。第87到90行代码是第一个卷积块,这里的卷积层我们使用了128个大小为3x3的卷积核,使用了relu激活函数。在卷积层后面是一个池化层,采用最大池化,池化窗口的大小为3x3,横向和纵向的步长都为2。在池化层的后面我们使用了Dropout,丢弃了20%的神经元,防止参数过多导致过拟合。接下来是三个类似的卷积块。

 

在第109行代码中,我们使用“Flatten()”将前一层网络的输出转换为了一维的数据,这是为了接下来的全连接操作。第112行代码是第一个全连接层,有256个神经元,全连接层后面接relu激活函数,同样使用了Dropout。第117至119是类似的一个全连接部分。

 

由于是二分类问题,在122行代码中我们使用了一个只有一个神经元的全连接层,并使用了Sigmoid激活函数,得到最终的输出。

 

第126至128行使用“compile”编译模型,其中“loss='binary_crossentropy'”指明使用的是对数损失函数,通过“optimizer”参数设置使用Adam优化器,学习率设置为0.0001。“metrics” 列表包含评估模型在训练和测试时的性能的指标,我们设置了“metrics=['accuracy']”,则在训练的过程中,训练集和验证集上的准确率都会打印出来。

 

第130行使用了“summary()”函数,训练开始后终端会打印出模型的概况信息,如图3所示,其中包含了网络的结构,以及每层的参数数量等信息。其中最后一行显示我们总的训练数据为7699条,验证集的数据量为1925条。

TensorFlow系列专题(十四): 手把手带你搭建卷积神经网络实现冰山图像分类

图3 模型的概况信息

五、结果分析

接下来我们读取数据,并训练模型:

TensorFlow系列专题(十四): 手把手带你搭建卷积神经网络实现冰山图像分类

第134行代码中我们调用“data_preprocess”函数获取预处理后的训练数据,设置“more_data”为“true”进行数据扩充。第140行代码中,我们调用“fit”方法开始模型的训练,通过“batch_size”设置每个批次训练25条数据,通过“epochs”设置训练的总回合数为“100”。通过设置“verbose”为1,在终端上显示训练的进度。通过设置“validation_split”为0.2,将训练集一分为二,其中80%作为训练集,20%作为验证集。

 

模型的训练过程和结果如图4所示:

TensorFlow系列专题(十四): 手把手带你搭建卷积神经网络实现冰山图像分类

图4 模型的训练过程和结果

 

六、总结

在前面几节内容里我们介绍了卷积神经网络的基本结构和原理,在这一节里我们使用TensorFlow搭建了一个简单的卷积神经网络,实现图像分类的任务。

 

通过前几章的学习,我们深入理解了CNN中卷积,池化等典型结构的原理,以及CNN实际相关的图片识别比赛。相信大家对于CNN会有更深层次的认识。后边会接着这里开始介绍运用CNN技术来预测的典型3个项目。

 

 

欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/

欢迎关注PyTorch官方中文教程站:
http://pytorch.panchuang.net/

 
反对 0举报 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理(2)
    【深度学习系列】卷积神经网络CNN原理详解(一)
    本文为【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理(2)从上文的计算中我们可以看到,同一层的神经元可以共享卷积核,那么对于高位数据的处理将会变得非常简单。并且使用卷积核后图片的尺寸变小,方便后续计算,并且我们不需要手动去选取特征,
    03-08
  • 技术向:一文读懂卷积神经网络 - 艾斯1213
    技术向:一文读懂卷积神经网络自今年七月份以来,一直在实验室负责卷积神经网络(Convolutional Neural Network,CNN),期间配置和使用过theano和cuda-convnet、cuda-convnet2。为了增进CNN的理解和使用,特写此博文,以其与人交流,互有增益。正文之前,先
    03-08
  • 卷积神经网络CNN理解 卷积神经网络 简书
    自今年七月份以来,一直在实验室负责卷积神经网络(Convolutional Neural Network,CNN),期间配置和使用过theano和cuda-convnet、cuda-convnet2。为了增进CNN的理解和使用,特写此博文,以其与人交流,互有增益。正文之前,先说几点自己对于CNN的感触。先明
    03-08
  • 理解图像的卷积
    转自:https://www.zhihu.com/question/22298352从数学上讲,卷积就是一种运算。某种运算,能被定义出来,至少有以下特征:首先是抽象的、符号化的其次,在生活、科研中,有着广泛的作用比如加法: ,是抽象的,本身只是一个数学符号在现实中,有非常多的意
    03-08
  • 什么是卷积 什么是卷积网络
    什么是卷积 什么是卷积网络
    目录Feature mapsWhy not Linear335k or 1.3MBem...Receptive FieldFully connnectedPartial connectedLocally connectedRethink Linear layerFully VS LovallyWeight sharingWhy call Convolution?2D ConvolutionConvolution in Computer VisionCNN on feat
    03-08
  • Tensorflow--一维离散卷积 tensorflow一维卷积神经网络
    Tensorflow--一维离散卷积 tensorflow一维卷积
    一维离散卷积的运算是一种主要基于向量的计算方式一.一维离散卷积的计算原理一维离散卷积通常有三种卷积类型:full卷积,same卷积和valid卷积1.full卷积full卷积的计算过程如下:K沿着I顺序移动,每移动一个固定位置,对应位置的值相乘,然后对其求和其中K称
    03-08
  • 卷积神经网络的“卷积”操作不等于数学上定义的卷积操作
    卷积神经网络的“卷积”操作不等于数学上定义的
    在介绍卷积神经网络CNN的时候,大部分教材在介绍“卷积操作”的时候都与下面这张图类似的说明这点让人很困惑,因为在数学上,卷积运算是这么定义的\((f * g )(t) = \int_{0}^{t} f(\tau) g(t - \tau)\, d\tau\)很明显,在与\(f(\tau)\)相乘的是\(g(t-\tau)\)
    03-08
  • 卷积神经网络——池化层学习——最大池化
    卷积神经网络——池化层学习——最大池化
    池化层(Pooling layers)除了卷积层,卷积网络也经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性,我们来看一下。先举一个池化层的例子,然后我们再讨论池化层的必要性。假如输入是一个4×4矩阵,用到的池化类型是最大池化(max
    03-08
  • opecv 卷积原理、边缘填充方式、卷积操作详解
    opecv 卷积原理、边缘填充方式、卷积操作详解
    什么是二维卷积呢?看下面一张图就一目了然:卷积就是循环对图像跟一个核逐个元素相乘再求和得到另外一副图像的操作,比如结果图中第一个元素5是怎么算的呢?原图中3×3的区域与3×3的核逐个元素相乘再相加:5=1×1+2×0+1×0+0×0+1×0+1×0+3×0+0×0+2×2
    03-08
  • Master of Phi  (欧拉函数 + 积性函数的性质 + 狄利克雷卷积)
    Master of Phi (欧拉函数 + 积性函数的性质 +
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6265题目大意:首先T是测试组数,n代表当前这个数的因子的种类,然后接下来的p和q,代表当前这个数的因子中含有p的q次方.然后让你求题目第一行给你的信息. 首先理一下思路.第一步,我们需要算题目中要求的公
    03-08
点击排行