技术文章 | 用TensorFlow和TensorBoard从零开始构建ConvNet(CNN)

来源:互联网 发布:620f清零软件 编辑:程序博客网 时间:2024/06/05 20:05

本文来源于阿里云-云栖社区,原文点击这里


在本教程中,我将介绍如何使用TensorFlow,从头开始构建卷积神经网络,并使用TensorBoard可视化我们的图形及神经网络性能。如果您不了解完全神经网络的一些基础知识,我强烈建议您首先看另一个教程关于TensorFlow。在这篇文章中,我也把卷积神经网络的每个步骤讲的都很仔细,所以你可以在文章中完全了解每个步骤发生了什么。未来您可以看到每一层的卷积,并使用它们进行自己的网络模型构建,所以我从头开始构建该模型。我只会强调主要的代码,不过你可以GitHub下载源码。


1.选择数据集

一开始,我先要选择图像数据集。我决定用牛津大学的宠物数据集。我选择了这个数据集的原因很简单:标签非常简单,训练数据也不错,而且还有一些边框。另一个我认为对于创建第一个模型是非常好的数据集是Kaggle上发现的辛普森数据集


2.选择一个模型

第二步,必须决定我们的卷积神经网络的模型。一些非常受欢迎的型号例如:GoogLeNetVGG16,它们都具有多个卷积,可以用于检测1000种数据集imagenet中的图像。我决定一个更简单的卷积网络:

8bc7067b2414679aab060ae228ae5c461bae5a5f

我们先简要的分解这个模型,它以一个224x224x3的图像开始,它根据前三个通道卷积到32个特征图(Feature Map)。我们将这组32个特征图集合到另外32个特征中。然后将其汇总到112x112x32图像中,我们将卷入64个特征图,然后再次进行二次,最后汇总为56x56x64。然后将这个最终合并的层的每个单元完全连接到一个512个的神经元中,然后基于类的数​​量最后放入softmax层。整个过程就是如此,如果你对上述有一些疑问,可以进一步与我交流。


3.处理和构建数据集:

首先,我们要加载我们的依赖项,其中包括我所调用的功能函数imFunctions来处理图像数据。

import imFunctions as imfimport tensorflow as tfimport scipy.ndimagefrom scipy.misc import imsaveimport matplotlib.pyplot as pltimport numpy as np

我们可以使用imFunctions提供的下载的方式提取图像。

imf.downloadImages('annotations.tar.gz', 19173078)imf.downloadImages('images.tar.gz', 791918971)imf.maybeExtract('annotations.tar.gz')imf.maybeExtract('images.tar.gz')

然后我们可以将图像分成不同的文件夹,其中包括训练文件夹和测试文件夹。sortImages函数中的数字表示的是您想从训练数据中分离出测试数据的百分比。

imf.sortImages(0.15)

然后,我们可以使用相应的一个热矢量(one-hot)将我们的数据集构建成一个numpy数组,以表示我们的类。该函数将会表现您要让神经网络做那些事,由于我有限的GPU RAM3GB),我选择了一个非常小的数据集,仅仅试图区分两种狗:来自萨摩耶ShibaInu

train_x, train_y, test_x, test_y, classes, classLabels = imf.buildDataset()


4.如何卷积实现功能

现在我们有一个数据集可以使用,其次就是了解卷积如何工作。在跳入彩色卷积滤波器之前,让我们来看一下灰度图。让我们制作一个应用四个不同特征图的7x7滤镜。TensorFlowconv2d功能相当简单,它包含四个变量:输入,过滤器,步幅和填充。在TensorFlow官方网站上,他们描述的conv2d功能如下:

 展开全文