Tensorflow(十一) —— Tensor的填充与复制

本文介绍了TensorFlow中处理Tensor的两种主要方法:pad和tile。pad方法用于在Tensor的边缘添加指定数量的填充,支持自定义填充值。tile方法则用于沿着指定轴重复Tensor的数据。此外,还探讨了tilt与broadcast_to的区别,tiling是按轴复制,而broadcasting是在形状不匹配时自动扩展。内容结合实例代码详细解释了各个方法的使用方式。
部署运行你感兴趣的模型镜像

Tensorflow(十一) —— Tensor的填充与复制

1. 主要方法

1、pad
2、tile
3、broadcast_to

2. pad方法

import numpy as np
import pandas as pd
import tensorflow as tf
"""
tf.pad(a,[[a11,a12],[a21,a22],...)
指定每个轴的前面填充a11条数据,后面填充a12条数据,默认填充为0
"""
a = tf.reshape(tf.range(9),[3,3])
print("a:",a.numpy())

a1 = tf.pad(a,[[0,0],[0,0]])
print("a1:",a1.numpy())

a2 = tf.pad(a,[[1,0],[0,0]]) # 行前面pad一行0
print("a2:",a2.numpy())

a3 = tf.pad(a,[[1,1],[0,0]],constant_values = 1)
print("a3:",a3.numpy())

a4 = tf.pad(a,[[1,1],[1,0]],constant_values=100)
print("a4:",a4.numpy())

a5 = tf.pad(a,[[1,1],[1,1]],constant_values=1000)
print("a5:",a5)

# image padding
b = tf.random.normal([4,28,28,3])
b1 = tf.pad(b,[[0,0],[2,2],[2,2],[0,0]]) # 行和列的前面各pad两条数据
print("b1:",b1.shape)

3. tile方法

# ************************ tile
"""
repeat data along dim n times
"""
a = tf.reshape(tf.range(9),[3,3])
print("a:",a.numpy())

a1 = tf.tile(a,[1,2])
print("a1:",a1.numpy(),a1.shape)

a2 = tf.tile(a,[2,1])
print("a2:",a2.numpy(),a2.shape)

a3 = tf.tile(a,[2,2]) # 先复制axis较小的轴
print("a3:",a3.numpy(),a3.shape)

4. tilt 与 broadcast_to的区别

"""
将[3,3] => [2,3,3]
"""
a = tf.reshape(tf.range(9),[3,3])
print("a:",a.numpy(),a.shape)

a1 = tf.expand_dims(a,axis = 0)
print("a1:",a1.numpy(),a1.shape)

b = tf.tile(a1,[2,1,1])
print("b:",b.numpy())

c = tf.broadcast_to(a,[2,3,3])
print("c:",c.numpy())

本文为参考龙龙老师的“深度学习与TensorFlow 2入门实战“课程书写的学习笔记

by CyrusMay 2022 04 16

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

### TensorFlow 中张量的基本概念 #### 定义特性 TensorFlow中的张量可以被视作一个多维数组,这种结构非常类似于NumPy库中的`ndarray`对象[^4]。每一个张量都拥有两个核心属性: - **数据类型 (dtype)**:指定了张量内存储数值的具体形式,比如整数(int),浮点数(float)等。 - **形状 (shape)**:描述了各个维度上的大小,即每一层嵌套列表的长度。 这些特征使得张量成为处理多维数据分析的理想工具,在机器学习领域尤其重要。 #### 创建张量的方法 为了初始化一个新的张量实例,可以通过多种方式实现。最常用的方式之一是从Python原生的数据结构转换而来,例如列表或元组;也可以直接利用内置函数来生成特定模式下的随机值填充的新张量。下面给出几个具体的例子说明如何创建不同类型的张量: ```python import tensorflow as tf # 使用常量创建一个标量(0-D tensor) scalar_tensor = tf.constant(7) # 构建向量(1-D tensor), 可以传入list或者tuple vector_tensor = tf.constant([1., 2., 3.]) # 利用二维列表建立矩阵(2-D tensor) matrix_tensor = tf.constant([[1, 2], [3, 4]]) print(scalar_tensor) print(vector_tensor) print(matrix_tensor) ``` 这段代码展示了三种不同的张量形态——标量、矢量以及矩阵,并且每种情况下均采用了`tf.constant()`方法来进行构造。 #### 形状变换操作 除了上述提到的基础性质外,张量还支持对其自身的尺寸规格进行调整的操作。这主要体现在两方面: - 动态改变张量的实际布局而不影响原始内存分配; - 静态声明预期达到的目标外形参数,从而允许编译器优化执行路径。 具体来说,就是运用`tf.reshape()`和`tf.set_shape()`这两个API接口完成相应的任务[^3]。 ```python original_tensor = tf.constant([[1, 2, 3], [4, 5, 6]]) reshaped_tensor = tf.reshape(original_tensor, shape=[3, 2]) set_shaped_tensor = original_tensor.set_shape((2, None)) print("Original Tensor:\n", original_tensor.numpy()) print("\nReshaped Tensor:\n", reshaped_tensor.numpy()) print("\nSet Shaped Tensor Shape:", set_shaped_tensor.shape) ``` 此段脚本先定义了一个初始状态下的二阶方阵作为输入源,接着分别调用了reshape()set_shape()对其进行重塑实验并打印结果对比差异所在。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值