Tensorflow中的CNN相关函数

卷积函数

卷积函数定义在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_wight, in_channels]),具体含义是指 “训练时,一个batch的图片数量,图片高度,图片宽度,图像通道数(彩色图像为3通道,灰度图像为1通道)”。注意 input 是一个四维的 Tensor,要求为float32 或者是 float64。
  • filter:卷积核。[filter_height, filter_wight, in_channels, out_channels],具体含义是指 “过滤器的高度,过滤器的宽度,图像通道数,过滤器的个数”。
  • strides:步长,是一个一维向量[1, x, y, 1],第一数和第四个数默认为1,表示batch = 1指在样本上的步长为1,depth = 1 指在通道上的步长为1,即 strides[0] = strides[3] = 1。x表示往右移动的步长,y表示向下移动的步长。
  • padding:取值为“SAME”或者“VALID”, 填充方式。‘VALID’ 表示边缘不填充,'SAME’表示边缘填充 。
  • use_cudnn_on_gpu:bool类型,是否使用cudnn加速
  • name:该操作的名称

代码示例

import tensorflow as tf
import numpy as np

# 10 9 9 4 表示一个batch训练10个样本数 图像为9*9*4
# 3 3 4 2 表示过滤器3*3*4  2个过滤器
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)

# strides[0] = 1 表示batch=1在样本上的步长为1 
# strides[1] = 1 表示向右移动的步长为1
# strides[2] = 1 表示向下移动的步长为1
# strides[3] = 1 表示在通道上的步长为1
# padding='SAME' 边缘填充 填充后卷积结果的图像大小和原图像大小一致
y = tf.nn.conv2d(input_data, filter_data, strides=[1, 1, 1, 1], padding='SAME')

print(input_data)
print(y)
# 输出结果

<tf.Variable 'Variable:0' shape=(10, 9, 9, 4) dtype=float32_ref>
Tensor("Conv2D:0", shape=(10, 9, 9, 2), dtype=float32)

池化函数

池化函数定义在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, in_height, in_wight, in_channels]]),含义在上面已经解释过。
    • ksize:池化窗口的大小,由于一般不在batch和channel上做池化,所以ksize一般是[1, height, wight, 1]
    • strides:图像每一维的步长,是一个一维向量,长度为4。[1, x, y, 1]:第一数和第四个数默认为1,表示batch = 1指在样本上的步长为1,depth = 1 指在通道上的步长为1,即 strides[0] = strides[3] = 1。x表示往右移动的步长,y表示向下移动的步长。
    • padding:和卷积函数中的padding含义一样。填充方式。
    • name:该操作的名称。
    • 返回值:返回一个tensor。

参考视频:深度学习应用开发TensorFlow实践

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值