• TensorFlow卷积层-函数


    函数1:tf.nn.conv2d是TensorFlow里面实现卷积的函数,实际上这是搭建卷积神经网络比较核心的一个方法

    函数原型:

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

    参数解释:

    第一个参数input:指需要做卷积的输入图像,它要求是一个Tensor,具有[batch, in_height, in_width, in_channels]这样的shape,具体含义是[训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数],注意这是一个4维的Tensor,要求类型为float32和float64其中之一

    第二个参数filter:相当于CNN中的卷积核,它要求是一个Tensor,具有[filter_height, filter_width, in_channels, out_channels]这样的shape,具体含义是[卷积核的高度,卷积核的宽度,图像通道数,卷积核个数],要求类型与参数input相同,有一个地方需要注意,第三维in_channels,就是参数input的第四维

    第三个参数strides:卷积时在图像每一维的步长,这是一个一维的向量,长度4。strides也称为跨度,利用卷积运算对图像进行降维处理的思想是通过修改卷积核的strides(跨度)参数实现的。strdies参数的格式如下:strides = [image_batch_size_stride image_height_stride image_width_stride image_channels_strid].第一个和最后一个跨度参数通常很少修改,因为他们会在tf.nn.conv2d运算中跳过一些数据,从而不予以考虑这些数据。如果希望降低维度,可以修改image_height_strideimage_width_stride参数。strides=[1 3 3 1]的结果图下

    第四个参数padding:string类型的量,只能是"SAME","VALID"其中之一,这个值决定了不同的卷积方式

    • SAME:卷积输出与输入尺寸相同。这里在计算如何跨越图像时,并不考虑滤波器的尺寸。选用该设置时,缺失的像素将用0填充,卷积核扫过的像素将超过图像的像素。
    • VALID:在计算卷积核在图像上如何跨越时,需要考虑滤波器的尺寸。这会使卷积核尽量不越过图像的边界。在某些情况下,边界也有可能会被填充。

    第五个参数:use_cudnn_on_gpu:bool类型,是否使用cudnn加速,默认为true

    结果返回一个Tensor,这个输出,就是我们常说的feature map

    实验代码:

    with tf.Session() as sess:
        img_data_jpg = tf.image.decode_jpeg(image_raw_data_jpg)#按照jpeg格式对图片进行解码
        img_data_jpg = tf.image.convert_image_dtype(img_data_jpg, dtype = tf.float32)#转换图片的类型位tf.float32的模型
        
        plt.figure(1)
        plt.imshow(img_data_jpg.eval())#显示图像
        kernel = tf.constant([#建立一个三通道的,3层的卷积核
            [
                [[-1.0,-1.0,-1.0],[0.0,0.0,0.0],[1.0,1.0,1.0]],
                [[-1.,0.,0.],[0.,-1.,0.],[0.,0.,-1.]],
                [[0.,0.,0.],[0.,0.,0.],[0.,0.,0.]]
            ],
            [
                [[-1.,0.,0.],[0.,-1.,0.],[0.,0.,-1.]],
                [[5.,0.,0.],[0.,5.,0.],[0.,0.,5.]],
                [[-1.,0.,0.],[0.,-1.,0.],[0.,0.,-1.]]
            ],
            [
                [[0.,0.,0.],[0.,0.,0.],[0.,0.,0.]],
                [[-1.,0.,0.],[0.,-1.,0.],[0.,0.,-1.]],
                [[0.,0.,0.],[0.,0.,0.],[0.,0.,0.]]
            ]
        ],dtype = tf.float32)
        input_image = tf.reshape(img_data_jpg,[1,322,426,3])#将图片格式转换为conv2d函数需要的数据输入模式
        res = tf.nn.conv2d(input_image, kernel, [1,1,1,1], padding='SAME')
    #     activation_map = sess.run(tf.minimum(tf.nn.relu(res),255))
        output_image = tf.cast(tf.reshape(res,[322,426,3]),dtype = tf.uint8)#输出图像的格式转换
        plt.figure(2)
        plt.imshow(output_image.eval())
        sess.close()

    实验结果:

                                         原始图像                                                                                          实验结果

    函数2:

     

    函数3:

  • 相关阅读:
    markdown常用语法
    利用 js-xlsx 实现选择 Excel 文件在页面显示
    HTML中meta标签
    wxpy模块
    Python基础(3)
    Python基础(2)
    Python基础(1)
    Python之递归锁与互斥锁
    Python进程与线程
    Docker
  • 原文地址:https://www.cnblogs.com/uestc-mm/p/7305482.html
Copyright © 2020-2023  润新知