zoukankan      html  css  js  c++  java
  • TensorFlow中CNN的相关函数

    主要内容:

    TensorFlow中CNN的相关函数(卷积函数和池化函数)

    1.卷积函数

    卷积函数定义在tensorflow/python/ops下的nn_impl.py和nn_ops.py文件中。

    它包括了很多类型的卷积函数:

    tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)

    tf.nn.depthwise_conv2d(input, filter, strides, padding, name=None)

    tf.nn.separable_conv2d(input, depthwise_filter, pointwise_filter, strides, padding, name=None)

    ……

    在这里,我们只对平时用的比较多的二维卷积进行介绍。其他函数的使用方法跟二维卷积是一样的。

    tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)

    首先,我们来看一下上面这个函数中各个输入参数的定义:

    input:需要做卷积的输入数据。注意:这是一个4维的张量([batch, in_height, in_width, in_channels])。对于图像数据来说,batch是这一批样本的个数,in_height和in_width是图像的尺寸,in_channels是图像的通道数,而且要求图像的类型为float32或float64。因此,我们在对图像进行处理的时候,首先要把图像转换成这种特定的类型。

    filter:卷积核。这也是一个4维的张量([filter_height, filter_width, in_channels, out_channels])。filter_height,和filter_width是图像的尺寸,in_channels,是输入的通道数,out_channels是输出的通道数。

    strides:图像每一维的步长。是一个一维向量,长度为4。

    padding:定义元素边框与元素内容之间的空间。这里只能选择"SAME"或"VALID",这个值决定了不同的卷积方式。当它为"SAME"时,表示边缘填充,适用于全尺寸操作;当它为"VALID"时,表示边缘不填充。

    use_cudnn_on_gpu:bool类型,是否使用cudnn加速。

    name:该操作的名称。

    返回值:返回一个张量(tensor),即特征图(feature map)。

    使用实例:

    #卷积函数
    import tensorflow as tf
    import numpy as np
    
    # tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)
    input_data = tf.Variable(np.random.rand(10, 9, 9, 4), dtype=np.float32)
    filter_data =  tf.Variable(np.random.rand(3, 3, 4, 2), dtype=np.float32)
    # y = tf.nn.conv2d(input_data, filter_data, strides=[1,1,1,1], padding = 'SAME')
    y = tf.nn.conv2d(input_data, filter_data, strides=[1,1,1,1], padding = 'VALID')
    
    print(input_data)
    print(y)

    2.池化函数

    池化函数定义在tensorflow/python/ops下的nn.py和gen_nn_ops.py文件中。

    我们用的比较多的是下面这两个池化函数:

    最大池化:tf.nn.max_pool(value, ksize, strides, padding, name=None)

    平均池化:tf.nn.avg_pool(value, ksize, strides, padding, name=None)

     

    这里所需要指定的输入参数,跟我们之前介绍的二维卷积函数是一样的:

    value:需要池化的输入。一般池化层接在卷积层后面,所以输入通常是conv2d所输出的feature map,依然是4维的张量([batch, height, width, channels])。

    ksize:池化窗口的大小。由于一般不在batch和channel上做池化,所以ksize一般是[1,height, width,1]。

    strides:图像每一维的步长。是一个一维向量,长度为4。

    padding:和卷积函数中padding含义一样。

    name:该操作的名称。

    返回值:返回一个张量(tensor)。

    #池化函数
    import tensorflow as tf
    import numpy as np
    
    input_data = tf.Variable(np.random.rand(10, 6, 6, 4), dtype=np.float32)
    filter_data =  tf.Variable(np.random.rand(2, 2, 4, 2), dtype=np.float32)
    y = tf.nn.conv2d(input_data, filter_data, strides=[1,1,1,1], padding = 'SAME')
    
    # 最大池化
    # tf.nn.max_pool(value, ksize, strides, padding, name=None) 
    output = tf.nn.max_pool(value=y,ksize=[1,2,2,1],strides=[1,2,2,1], padding='SAME')
    
    # 平均池化
    # tf.nn.avg_pool(value, ksize, strides, padding, name=None)
    # output = tf.nn.avg_pool(value=y,ksize=[1,2,2,1],strides=[1,2,2,1], padding='SAME')
    
    
    print('conv:',y)
    print('pool_padding_valid:',output)
  • 相关阅读:
    redis应用场景
    使用Nginx+Lua+Redis构建灰度发布环境
    Comparison method violates its general contract
    mysql+redis
    缓存技术PK:选择Memcached还是Redis?
    缓存技术PK
    菜鸟教程之工具使用(九)——Git如何进行分支的merge操作
    菜鸟教程之工具使用(八)——EGit禁止自动转换回车换行符
    菜鸟教程之工具使用(七)——从GIt上导出Maven项目
    菜鸟教程之工具使用(六)——让Maven项目直接在eclipse内部的Tomcat中运行
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/11892215.html
Copyright © 2011-2022 走看看