tf.pad()--填充操作

填充(padding),在矩阵的周围补0操作,一般用于进行卷积操作之前,使得每个输入像素都能作为卷积核窗口的中心。

函数形式:

 tf.pad( tensor,paddings, mode='CONSTANT',name=None,constant_values = 0 )

参数解释:

tensor:要填充的张量;

padings:代表每一维填充多少,它的维度和tensor的维度一样;

此操作根据您指定的 paddings 来填充一个 tensor,paddings 是一个具有形状 [n, 2] 的整数张量,其中 n 是 tensor 的秩,对于每个输入维度 D,paddings [D, 0] 表示在该维度的 tensor 内容之前要添加多少个值,而 paddings[D, 1] 表示在该维度中的 tensor 内容之后要添加多少值。

输出维度D的大小:

paddings[D, 0] + tensor.dim_size(D) + paddings[D, 1]

参数解释:

mode:可以取三个值,分别是"CONSTANT"、“REFLECT”、“SYMMETRIC”;

mode=“CONSTANT” 填充0;

mode="REFLECT" 映射填充,上下(1维)填充顺序和paddings是相反的,左右(零维)顺序补齐;

mode="SYMMETRIC" 对称填充,上下(1维)填充顺序是和paddings相同的,左右(零维)对称补齐;

name:操作的名称(可选);

constant_values:在 “CONSTANT” 模式下,要使用的标量填充值,必须与 tensor 具有相同类型(可选)。

返回:

该函数返回一个张量,与 tensor 具有相同的类型。

实例:

输入图像format为:N*H*W*C(N:batch数量,H:高,W:宽,C:通道数)

def _fixed_padding(inputs, kernel_size):
    pad_total = kernel_size - 1
    pad_beg = pad_total // 2
    pad_end = pad_total - pad_beg
    padded_inputs = tf.pad(inputs, [[0, 0], [pad_beg, pad_end],[pad_beg, pad_end], [0, 0]], mode='CONSTANT')
    return padded_inputs

input:4维,2*416*416*1

padding:[[0, 0], [pad_beg, pad_end], [pad_beg, pad_end], [0, 0]],代表在每一个"维度"上填充多少行或多少列,“维度”和输入张量的“维度”一样,这里的“维度”是指比如输入inputs大小是2*416*416*1,就是4维,然后填充顺序也要保证有四维,即大概这种形状:[[ ,],[ ,],[ ,],[ ,]],然后第一行就对应输入inputs中的2(N)这个维度,第二行对应输入inputs中的416(H)这个维度,第三行对应输入inputs中的416(W)这个维度,第四行对应输入inputs中的1(C)这个维度。

假设kernel_size=3,则pad_beg = 1,pad_end = 1,填充顺序为[[0, 0], [1, 1], [1,1], [0, 0]],意义是:在batch=2这个维度,[0,0]表示头和尾填充行或列数为0,即不填充;在416(H)这个维度上,[1,1]表示头和尾分别都要填充,即最上面填充1行,最下面填充1行;在416(W)这个维度上,[1,1]表示头和尾分别都要填充,即最左边填充1列,最右边填充1列;在channel=1这个维度,[0,0]表示头和尾填充行或列数为0,即不填充。经过tf.pad()后,张量大小变为2*418*418*1(N*H*W*C)。

tensorflow卷积中的两种padding方式“SAME”和“VALID”:

padding后矩阵大小的两种计算公式: 

padding=‘VALID:gif.latex?N%3D%5Cfrac%7BW-F+1%7D%7BS%7D’[向上取整]

padding=‘same:’gif.latex?N%3D%5Cfrac%7BW%7D%7BS%7D[向上取整]

W:输入图片大小W*W

F:卷积核大小F*F

S:步长stride

P:padding

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖虎记录学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值