本文来源于阿里云-云栖社区,原文点击这里。
在本教程中,我将介绍如何使用TensorFlow,从头开始构建卷积神经网络,并使用TensorBoard可视化我们的图形及神经网络性能。如果您不了解完全神经网络的一些基础知识,我强烈建议您首先看另一个教程关于TensorFlow。在这篇文章中,我也把卷积神经网络的每个步骤讲的都很仔细,所以你可以在文章中完全了解每个步骤发生了什么。未来您可以看到每一层的卷积,并使用它们进行自己的网络模型构建,所以我从头开始构建该模型。我只会强调主要的代码,不过你可以在GitHub上下载源码。
1.选择数据集
一开始,我先要选择图像数据集。我决定用牛津大学的宠物数据集。我选择了这个数据集的原因很简单:标签非常简单,训练数据也不错,而且还有一些边框。另一个我认为对于创建第一个模型是非常好的数据集是在Kaggle上发现的辛普森数据集。
2.选择一个模型
第二步,必须决定我们的卷积神经网络的模型。一些非常受欢迎的型号例如:GoogLeNet或VGG16,它们都具有多个卷积,可以用于检测1000种数据集imagenet中的图像。我决定一个更简单的卷积网络:
我们先简要的分解这个模型,它以一个224x224x3的图像开始,它根据前三个通道卷积到32个特征图(Feature Map)。我们将这组32个特征图集合到另外32个特征中。然后将其汇总到112x112x32图像中,我们将卷入64个特征图,然后再次进行二次,最后汇总为56x56x64。然后将这个最终合并的层的每个单元完全连接到一个512个的神经元中,然后基于类的数量最后放入softmax层。整个过程就是如此,如果你对上述有一些疑问,可以进一步与我交流。
3.处理和构建数据集:
首先,我们要加载我们的依赖项,其中包括我所调用的功能函数imFunctions
来处理图像数据。
import imFunctions as imf
import tensorflow as tf
import scipy.ndimage
from scipy.misc import imsave
import matplotlib.pyplot as plt
import 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 RAM(3GB),我选择了一个非常小的数据集,仅仅试图区分两种狗:来自萨摩耶的ShibaInu。
train_x, train_y, test_x, test_y, classes, classLabels = imf.buildDataset()
4.如何卷积实现功能
现在我们有一个数据集可以使用,其次就是了解卷积如何工作。在跳入彩色卷积滤波器之前,让我们来看一下灰度图。让我们制作一个应用四个不同特征图的7x7滤镜。TensorFlow的conv2d功能相当简单,它包含四个变量:输入,过滤器,步幅和填充。在TensorFlow官方网站上,他们描述的conv2d功能如下:
展开全文