函数:

  • tf.compat.v1.pad
  • tf.pad

函数表达式如下:

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

函数用途:对各个维度进行填充,padding

输入:

  •   tensor :是要填充的张量;  shape 维度为 : (N1,N2,N3,...);
  •   padings:填充方式,也是一个张量,shape : (n,2), n :表示需要的pad的tensor的维度个数;
  •   mode:有三种取值:分别是"CONSTANT" ,"REFLECT", "SYMMETRIC",对padding 的维度也有限制,如下padded;
  •      mode="CONSTANT" 是直接填充 constant_values;
  •      mode = "REFLECT" 是轴对称填充(对称轴为边界列),此时constant_values 无效,用tensor 中的值填充;
  • mode = "SYMMETRIC" 是轴对称填充(对称轴为边界线),此时 constant_values 无效,用tensor 中的值填充;
  •   constant_values:要填充的 value 值,默认为0;

padding shape举个例子:

要求:pad 维度为(n,2) n:为tensor 的维度个数; 

第一组:

input tensor,shape【3,4,5】三维 tensor

padding shape:【3,2】

第二组:

input tensor,shape【3,4,5,6】四维 tensor

padding shape:【4,2】

padding 的每一维度,都有两个数,第一个表示前面添加几维度,第二个表示 后面添加几维度;

padded 填充之后的每一维度:

The padded size of each dimension D of the output is:

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

if mode == "REFLECT" or mode == "SYMMETRIC":

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

举个例子-》填充后的tensor shape:

tensor shape : (3,5,4)

padding = [[1,1],[2,2],[1,0]]

padded shape: (3+1+1,5+2+2,4+1+0)= (5,9,5)

REFLECT:的填充方式使用的是一种通过对称轴进行对称复制的方式进行填充(复制时不包括对称轴,边界的那一列是对称轴),通过使用tensor边缘作为对称;

SYMMETRIC:的填充方式于REFLECT填充方式类似,也是按照对称轴就是复制的,只是它包括对称轴(边界外的线是对称轴)。

举例一:(来自官方):

 t = tf.constant([[1, 2, 3], [4, 5, 6]]) #shape(2,3)
paddings = tf.constant([[1, 1,], [2, 2]]) # shape(2,2),第一维度,前面补一维度,后面补一维度;第二维度,前面补两维度,后面补两维度;
# 'constant_values' is 0.
# rank of 't' is 2.
tf.pad(t, paddings, "CONSTANT") # [[0, 0, 0, 0, 0, 0, 0],
# [0, 0, 1, 2, 3, 0, 0],
# [0, 0, 4, 5, 6, 0, 0],
# [0, 0, 0, 0, 0, 0, 0]] tf.pad(t, paddings, "REFLECT") # [[6, 5, 4, 5, 6, 5, 4],
# [3, 2, 1, 2, 3, 2, 1], # 黄色为对称轴
# [6, 5, 4, 5, 6, 5, 4],
# [3, 2, 1, 2, 3, 2, 1]] tf.pad(t, paddings, "SYMMETRIC") # [[2, 1, 1, 2, 3, 3, 2],
# [2, 1, 1, 2, 3, 3, 2], #
# [5, 4, 4, 5, 6, 6, 5],
# [5, 4, 4, 5, 6, 6, 5]]

举例二:

import tensorflow as tf
import numpy as np m1 = tf.random_normal([1,2,3,4],mean=0.0,stddev=1.0,dtype=tf.float32) m2 = tf.pad(m1,[[2,0],[0,0],[0,0],[0,0]],constant_values = 1) m2_s = tf.shape(m2) # shape(3,2,3,4) with tf.Session() as sess:
print(sess.run(m1))
print(sess.run(m2))
print(sess.run(m2_s)) 

output:

# m1
[[[[-1.8582115 -1.170714 -0.4478178 2.0172668 ]
[-0.74805504 -0.08016825 -0.7742696 -0.02516617]
[-0.8256318 0.591446 -0.00889379 1.7998788 ]] [[ 0.00565176 -0.31549874 1.5197186 0.07842494]
[ 0.00609808 1.9219669 -0.42632174 1.5106113 ]
[ 0.67241013 -0.38563538 -0.976289 0.2032768 ]]]] #m2
[[[[ 1. 1. 1. 1. ]
[ 1. 1. 1. 1. ]
[ 1. 1. 1. 1. ]] [[ 1. 1. 1. 1. ]
[ 1. 1. 1. 1. ]
[ 1. 1. 1. 1. ]]] [[[ 1. 1. 1. 1. ]
[ 1. 1. 1. 1. ]
[ 1. 1. 1. 1. ]] [[ 1. 1. 1. 1. ]
[ 1. 1. 1. 1. ]
[ 1. 1. 1. 1. ]]] [[[-1.2366703 -1.0050759 -0.3843815 1.0201392 ]
[-1.3438475 0.8829414 -1.3399163 1.078826 ]
[-0.09356844 0.35896888 1.5112561 0.28352356]] [[ 0.45909956 -0.23824279 -0.31440428 1.1913226 ]
[-0.40780786 0.58995795 -0.9147027 0.05860058]
[-0.0659609 1.4536899 -0.12121342 -0.9752257 ]]]] #output shape
[3 2 3 4]

tensorflow 笔记 16:tf.pad的更多相关文章

  1. tensorflow笔记:使用tf来实现word2vec

    (一) tensorflow笔记:流程,概念和简单代码注释 (二) tensorflow笔记:多层CNN代码分析 (三) tensorflow笔记:多层LSTM代码分析 (四) tensorflow笔 ...

  2. tensorflow笔记3:CRF函数:tf.contrib.crf.crf_log_likelihood()

    在分析训练代码的时候,遇到了,tf.contrib.crf.crf_log_likelihood,这个函数,于是想简单理解下: 函数的目的:使用crf 来计算损失,里面用到的优化方法是:最大似然估计 ...

  3. tensorflow笔记:多层LSTM代码分析

    tensorflow笔记:多层LSTM代码分析 标签(空格分隔): tensorflow笔记 tensorflow笔记系列: (一) tensorflow笔记:流程,概念和简单代码注释 (二) ten ...

  4. TensorFlow笔记-07-神经网络优化-学习率,滑动平均

    TensorFlow笔记-07-神经网络优化-学习率,滑动平均 学习率 学习率 learning_rate: 表示了每次参数更新的幅度大小.学习率过大,会导致待优化的参数在最小值附近波动,不收敛:学习 ...

  5. tensorflow笔记(一)之基础知识

    tensorflow笔记(一)之基础知识 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7399701.html 前言 这篇no ...

  6. tensorflow笔记(二)之构造一个简单的神经网络

    tensorflow笔记(二)之构造一个简单的神经网络 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7425200.html ...

  7. tensorflow笔记(三)之 tensorboard的使用

    tensorflow笔记(三)之 tensorboard的使用 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7429344.h ...

  8. tensorflow笔记(四)之MNIST手写识别系列一

    tensorflow笔记(四)之MNIST手写识别系列一 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7436310.html ...

  9. tensorflow笔记(五)之MNIST手写识别系列二

    tensorflow笔记(五)之MNIST手写识别系列二 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7455233.html ...

随机推荐

  1. 【Git版本控制】为什么要先commit,然后pull,最后再push?而不是commit然后直接push?

    情况是这样的,现在远程有一个仓库,分支就一个,是master.然后我本地的仓库是从远程的master上clone下来的.大家都是clone下来,再在自己本地改好,再commit然后pull然后push ...

  2. version GLIBCXX3.4.21 not defined in file libstdc++.so.6 with link time reference

    问题:在运行C++程序时,输入 ./a.out 输出:symbol _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1Ev, version ...

  3. Linq入门学习

    千万别被这个页面的滚动条吓到!!! 我相信你一定能在30分钟之内看完它!!! 在说LINQ之前必须先说说几个重要的C#语言特性 一:与LINQ有关的语言特性 1.隐式类型 (1)源起 在隐式类型出现之 ...

  4. 201671030102陈飞 实验十四 团队项目评审&课程学习总结

    项目 内容 这个作业属于哪个课程 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验十四 团队项目评审&课程学习总结 课程学习目标 1.掌握软件项目评审会议流程 ...

  5. python基础语法8 叠加装饰器,有参装饰器,wraps补充,迭代器

    叠加装饰器: 叠加装饰器 - 每一个新的功能都应该写一个新的装饰器 - 否则会导致,代码冗余,结构不清晰,可扩展性差 在同一个被装饰对象中,添加多个装饰器,并执行. @装饰1 @装饰2 @装饰3 de ...

  6. can总线的远程帧(遥控帧)—说的很形象

    所谓“远程帧”是一个传统翻译上的误区.Remote Frame实际上它的意义是“遥控帧”,发起方发起特定ID的远程帧,并且只发送ID部分,那么与其ID相符的终端设备就有义务在后半段的数据部分接管总线控 ...

  7. 无向图边双联通分量 tarjan 模板

    #include <bits/stdc++.h> using namespace std; const int MAXN = 100005; const int MAXM = 500005 ...

  8. minikube 安装试用

    目前使用k8s 要么用的物理机搭建的环境,要么就是使用docker for mac 中kubernetes 的特性,为了本地调试方便,使用下minikube minukube 包含的特性 负载均衡器 ...

  9. A@[G!C]%008

    A@[G!C]%008 A Simple Calculator 细节题. B Contiguous Repainting 最后只要有连续\(K\)个鸽子同色就可以构造方案,枚举+前缀和 C Tetro ...

  10. java8 新特性parallelStream 修改默认多线程数量

    parallelStream默认使用了fork-join框架,其默认线程数是CPU核心数. 通过测试实践,发现有两种方法来修改默认的多线程数量: 1.全局设置 在运行代码之前,加入如下代码: Syst ...