第三阶段-tensorflow项目之图像image相关--tensorflow搭建卷积神经网络CNNs

The TensorFlow layers module provides a high-level API that makes it easy to construct a neural network. It provides methods that facilitate the creation of dense (fully connected) layers and convolutional layers, adding activation functions, and applying dropout regularization. In this tutorial, you’ll learn how to use layers to build a convolutional neural network model to recognize the handwritten digits in the MNIST data set.

TensorFlow提供一个高层的API,非常容易用于建立卷积神经网络。还包括全连接层,卷积层,激活函数,正则化输出。在本blog中,我们基于高层API去构建一个手写数字识别CNN网络。
这里写图片描述

The MNIST dataset comprises 60,000 training examples and 10,000 test examples of the handwritten digits 0–9, formatted as 28x28-pixel monochrome images.

1,Getting Started

以下是tensorflow程序的框架. 命名为cnn_mnist.py文件,并添加下面代码:

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

# Imports
import numpy as np
import tensorflow as tf

tf.logging.set_verbosity(tf.logging.INFO)

# 我们的逻辑写在这...。

if __name__ == "__main__":
  tf.app.run()

在您完成本教程时,您将添加代码来构建,训练和评估卷积神经网络。

2,Intro to Convolutional Neural Networks

Convolutional neural networks (CNNs) are the current state-of-the-art model architecture for image classification tasks. CNNs apply a series of filters to the raw pixel data of an image to extract and learn higher-level features, which the model can then use for classification. CNNs contains three components:

卷积神经网络(CNN)是当前用于图像分类任务的state-of-the-art模型体系结构。 CNN将一系列滤波器应用于图像的原始像素数据以提取和学习更高级别的特征,然后该模型可用于分类。 CNN包含三个组件:

  • Convolutional layers,将特定数量的卷积核应用于图像。 对于每个子区域,图层执行一组数学运算以在输出特征映射中生成单个值。
    卷积层通常将ReLU激活函数应用于输出以将非线性引入到模型中。
  • Pooling layers,其对由卷积层提取的图像数据进行下采样以降低特征图的维度以便减少处理时间。
    常用的池化算法是最大池化,其提取特征映射的子区域(例如,2×2像素的块),保持其最大值,并丢弃所有其他值。
  • Dense (fully connected) layers,对由卷积层提取的特征执行分类,并由合并层进行下采样。 在密集层中,层中的每个节点都连接到前一层中的每个节点。

通常,CNN是由执行特征提取的一叠卷积模块组成的。 每个模块由一个卷积层和一个池层组成。 最后的卷积模块之后是一个或多个执行分类的密集层。 CNN中的最终稠密层包含模型中每个目标类的单个节点(模型可能预测的所有可能的类),使用softmax激活函数为每个节点生成0-1之间的值(全部 这些softmax值等于1)。 我们可以将给定图像的softmax值解释为图像落入每个目标类别的可能性的相对测量值。

  • Note: For a more comprehensive walkthrough of CNN architecture, see
    Stanford University’s Convolutional Neural Networks for Visual
    Recognition course materials.

3,uilding the CNN MNIST Classifier

我们建立一个模型,使用以下CNN体系结构对MNIST数据集中的图像进行分类:

  1. 卷积层#1:应用32个5×5滤波器(提取5×5像素的子区域),具有ReLU激活功能
  2. 池层#1:使用2x2过滤器和2的步幅执行最大池(其指定池区域不重叠)
  3. 卷积层#2:应用64个5x5滤波器,具有ReLU激活功能
  4. 合并层#2:再次使用2x2过滤器和2步进行最大合并
  5. 密集层#1:1,024个神经元,退出正则化率为0.4(概率为0.4,任何给定元素在训练期间将被丢弃)
  6. 密集层#2(Logits Layer):10个神经元,每个数字目标类别(0-9)。

tf.layers模块包含创建上述三种图层类型的方法:

  • conv2d()。 构造一个二维卷积层。 以过滤器数量,过滤内核大小,填充和激活函数作为参数。
  • max_pooling2d()。 使用max-pooling算法构造一个二维池。 采用过滤器大小和步幅作为参数。
  • dense()。 构建一个密集的图层。 以神经元数量和激活函数作为参数。

这些方法中的每一个都接受张量作为输入,并将变换后的张量作为输出返回。 这样可以很容易地将一个层连接到另一个层:只需从一个图层创建方法中获取输出,并将其作为输入提供给另一个层。

打开cnn_mnist.py并添加以下cnn_model_fn函数,该函数符合TensorFlow Estimator API预期的接口(稍后在创建估算器中的更多内容)。 cnn_mnist.py将MNIST特征数据,标签和模型模式(TRAIN,EVAL,PREDICT)作为参数; 配置CNN; 并返回预测,丢失和训练操作:

def cnn_model_fn(features, labels, mode):
  """Model function for CNN."""
  # 输入层
  input_layer = tf.reshape(features["x"], [-1, 28, 28, 1])

  # 卷积层 #1
  conv1 = tf.layers.conv2d(
      inputs=input_layer,
      filters=32,
      kernel_size=[5, 5],
      padding="same",
      activation=tf.nn.relu)

  # 池化层 #1
  pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2)

  
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值