tf.pad()
2024-09-27 05:38:25
说一下我理解的tf.pad()
,先来看一下定义:
def pad(tensor, paddings, mode="CONSTANT", name=None, constant_values=0):
什么意思呢?目的就是对输入tensor
进行扩展,那么扩展的宽度就由paddings
来控制了;至于mode
和constant_values
则表示对tensor
扩展时填充的方式。
一维tensor扩展:
import tensorflow as tf
tensor = tf.constant([[1, 2, 3]])
paddings = tf.constant([[1, 2], [3, 4]])
result = tf.pad(tensor, paddings)
with tf.Session() as sess:
print(sess.run(result))
[[0 0 0 0 0 0 0 0 0 0]
[0 0 0 1 2 3 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0]]
从输出结果可以看出,对一维矩阵[[1, 2, 3]]
(其实还是二维的)四个方向进行扩展,paddings=[[1, 2], [3, 4]]
分别就对应着上、下、左、右四个边界扩展的宽度;
二维tensor扩展:
import tensorflow as tf
tensor = tf.constant([[1, 2], [3, 4]])
paddings = tf.constant([[1, 2], [3, 4]])
result = tf.pad(tensor, paddings)
with tf.Session() as sess:
print(sess.run(result))
[[0 0 0 0 0 0 0 0 0]
[0 0 0 1 2 0 0 0 0]
[0 0 0 3 4 0 0 0 0]
[0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0]]
同上;
三维tensor扩展:
import tensorflow as tf
tensor = tf.constant([[[1, 2, 3], [3, 4, 5]], [[5, 6, 7], [7, 8, 9]]]) # shape: (2, 2, 3)
paddings = tf.constant([[1, 2], [3, 4], [5, 6]])
result = tf.pad(tensor, paddings)
with tf.Session() as sess:
print(tensor.shape) # shape: (2, 2, 3)
print(sess.run(result))
print(result.shape) # shape: (5, 9, 14)
输出结果如下:
paddings
是一个\(3\times 2\)的矩阵,第一行[1, 2]
表示对tensor
的第一个维度进行扩展;第二行[3, 4]
对tensor
的第二个维度进行扩展;第三行[5, 6]
对tensor
的第三个维度进行扩展;
可以看到,paddings
的要求都是\(N\times 2\)的矩阵,其中\(N\)可能就是与tensor的维度相关了吧。
[[[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]]
[[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 1 2 3 0 0 0 0 0 0]
[0 0 0 0 0 3 4 5 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]]
[[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 5 6 7 0 0 0 0 0 0]
[0 0 0 0 0 7 8 9 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]]
[[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]]
[[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]]]
参数mode
tf.pad()
方法提供了三种填充tensor
的方式:
mode="CONSTNAT", constant_values=0
: 默认,以常数值0来填充;mode="REFLECT"
mode="SYMMETRIC"
不同mode
对tensor
的shape有着不同的要求。
最新文章
- 使用批处理设置JDK环境变量(Win7可用,新版本)
- 背水一战 Windows 10 (7) - 控件 UI: VisualState, VisualStateManager, 控件的默认 UI
- [Bundling and Minification ] 一、如何绑定
- 去除字符串中的html标记及标记中的内容
- frameset
- p4 是否能自动merge
- Oracle创建表时涉及的参数解析
- Mtk Android 打包解包*.img
- SQL Server T-SQL高级查询【转】
- bzoj1396
- 多线程爬虫Miner
- synchronized与Lock的区别
- centos7初上手1-安装mysql数据库
- SqlServer表和EXCEL数据互相复制方法
- Gcc\MingW\Cygwin\Msys简介
- OpenCL 直方图
- Zen Coding &;&; Emmet-Sublime 安装
- AOJ.720 丢失的学妹
- 用docker搭建测试环境--docker的基本操作
- win8里DNW的裸机程序下载
热门文章
- 【windows】如何让一个程序开机自启动
- log4j 2 入门实例(3)
- 微信小程序开发:学习笔记[4]——样式布局
- linux 常用shell脚本语句
- 51Nod 1158 全是1的最大子矩阵 —— 预处理 + 暴力枚举 or 单调栈
- 算法(Algorithms)第4版 练习 1.3.21
- 分享知识-快乐自己:Hibernate 中 get() 和 load()、sava、update、savaOrUpdate、merge,不同之处及执行原理?
- tensorflow实现svm多分类 iris 3分类——本质上在使用梯度下降法求解线性回归(loss是定制的而已)
- OpenCV——PS滤镜算法之 球面化 (凹陷效果)
- leetcode Word Break-单词划分