一小时学会TensorFlow2之基本操作2实例代码


Posted in Python onSeptember 04, 2021

索引操作

一小时学会TensorFlow2之基本操作2实例代码

简单索引

索引 (index) 可以帮助我们快速的找到张量中的特定信息.

例子:

a = tf.reshape(tf.range(12), [2, 2, 3])
print(a)

print(a[0])
print(a[0][0])

输出结果:

tf.Tensor(
[[[ 0 1 2]
[ 3 4 5]]

[[ 6 7 8]
[ 9 10 11]]], shape=(2, 2, 3), dtype=int32)
tf.Tensor(
[[0 1 2]
[3 4 5]], shape=(2, 3), dtype=int32)
tf.Tensor([0 1 2], shape=(3,), dtype=int32)

Numpy 式索引

我们也可以按照 numpy 的写法来操作索引.

例子:

a = tf.reshape(tf.range(12), [2, 2, 3])
print(a)

print(a[0])
print(a[0, 0])

输出结果:

tf.Tensor(
[[[ 0 1 2]
[ 3 4 5]]

[[ 6 7 8]
[ 9 10 11]]], shape=(2, 2, 3), dtype=int32)
tf.Tensor(
[[0 1 2]
[3 4 5]], shape=(2, 3), dtype=int32)
tf.Tensor([0 1 2], shape=(3,), dtype=int32)

使用 : 进行索引

例子:

c = tf.ones([4, 14, 14, 4])
print(c[0, :, :, :].shape)
print(c[0, 1, :, :].shape)

输出结果:

(14, 14, 4)
(14, 4)

tf.gather

我们假设一个有 3 个餐馆, 每个餐馆有 8 种菜系, 128 道菜data: [resturants, cuisines, dishes].

一小时学会TensorFlow2之基本操作2实例代码

例子:

data = tf.zeros([3, 8, 128])

g1 = tf.gather(data, axis=0, indices=[0, 2])
print(g1.shape)

g2 = tf.gather(data, axis=1, indices=[0, 1, 2, 3])
print(g2.shape)

输出结果:

(2, 8, 128)
(3, 4, 128)

tf.gather_nd

例子:

g1 = tf.gather_nd(data, [0])
print(g1.shape)

g2 = tf.gather_nd(data, [0, 1])
print(g2.shape)

g3 = tf.gather_nd(data, [0, 1, 2])
print(g3.shape)

输出结果:

(8, 128)
(128,)
()

tf.boolean_mask

格式:

tf.boolean_mask(
    tensor, mask, axis=None, name='boolean_mask'
)

例子:

data = tf.zeros([3, 8, 128])

b1 = tf.boolean_mask(data, mask=[True, True, False])
print(b1.shape)

b2 = tf.boolean_mask(data, mask=[True, False, True, False, True, False, True, False], axis=1)
print(b2.shape)

输出结果:

(2, 8, 128)
(3, 4, 128)

切片操作

借助切片技术, 我们可以灵活的处理张量对象.

一小时学会TensorFlow2之基本操作2实例代码

简单切片

格式:

tensor[start : end]

其中 start 为开始索引, end 为结束索引 (不包括)

例子:

tf.Tensor([0 1 2], shape=(3,), dtype=int32)
tf.Tensor([9], shape=(1,), dtype=int32)
tf.Tensor([0 1 2 3 4 5 6 7 8], shape=(9,), dtype=int32)

step 切片

格式:

tensor[start : end: step]

例子:

d = tf.range(6)
print(d[::-1])  # 实现倒序
print(d[::2])  # 步长为2

输出结果:

tf.Tensor([5 4 3 2 1 0], shape=(6,), dtype=int32)
tf.Tensor([0 2 4], shape=(3,), dtype=int32)

维度变换

一小时学会TensorFlow2之基本操作2实例代码

tf.reshape

tf.reshape 可以帮助我们进行维度转换.

格式:

tf.reshape(
    tensor, shape, name=None
)

参数:

  • tensor: 传入的张量
  • shape: 张量的形状
  • name: 数据名称

例子:

a = tf.random.normal([3, 8, 128])
print(a.shape)

b = tf.reshape(a, [3, 1024])
print(b.shape)

c = tf.reshape(a, [3, -1])
print(c.shape)

输出结果:

(3, 8, 128)
(3, 1024)
(3, 1024)

tf.transpose

格式:

tf.transpose(
    a, perm=None, conjugate=False, name='transpose'
)

例子:

a = tf.random.normal([4, 3, 2, 1])
print(a.shape)

b = tf.transpose(a)
print(b.shape)

c = tf.transpose(a, perm=[0, 1, 3, 2])
print(c.shape)

输出结果:

(4, 3, 2, 1)
(1, 2, 3, 4)
(4, 3, 1, 2)

tf.expand_dims

格式:

tf.expand_dims(
    input, axis, name=None
)

参数:

  • input: 输入
  • axis: 操作的维度
  • name: 数据名称

例子:

a = tf.random.normal([4, 3, 2, 1])
print(a.shape)

b = tf.expand_dims(a, axis=0)
print(b.shape)

c = tf.expand_dims(a, axis=1)
print(c.shape)

d = tf.expand_dims(a, axis=-1)
print(d.shape)

输出结果:

(4, 3, 2, 1)
(1, 4, 3, 2, 1)
(4, 1, 3, 2, 1)
(4, 3, 2, 1, 1)

tf.squeeze

tf.squeeze 可以帮助我们删去所有维度为1 的维度.

一小时学会TensorFlow2之基本操作2实例代码

格式:

tf.squeeze(
    input, axis=None, name=None
)

参数:

  • input: 输入
  • axis: 操作的维度
  • name: 数据名称

例子:

a = tf.zeros([2, 1, 1, 3, 5])

s1 = tf.squeeze(a)
print(s1.shape)

s2 = tf.squeeze(a, axis=1)
print(s2.shape)

s3 = tf.squeeze(a, axis=2)
print(s3.shape)

输出结果:

(2, 3, 5)
(2, 1, 3, 5)
(2, 1, 3, 5)

Boardcasting

广播机制 (Boardcasting) 是一种张量复制的手段. Boardcasting 可以帮助我们扩张张量的形状但无需实际复制数据.

一小时学会TensorFlow2之基本操作2实例代码

广播机制允许我们在隐式情况下进行填充, 从而使得我们的代码更加简洁, 更有效率地使用内存.

tf.boardcast_to

boardcast_to:

tf.broadcast_to(
    input, shape, name=None
)

参数:

  • input: 输入
  • shape: 数据形状
  • name: 数据名称

例子:

a = tf.broadcast_to(tf.random.normal([4, 1, 1, 1]), [4, 32, 32, 3])
print(a.shape)

b = tf.broadcast_to(tf.zeros([128, 1, 1, 1]), [128, 32, 32, 3])
print(b.shape)

输出结果:

(4, 32, 32, 3)
(128, 32, 32, 3)

tf.tile

格式:

tf.tile(
    input, multiples, name=None
)

参数:

  • input: 输入
  • multiples: 同一纬度上复制的次数
  • name: 数据名称

例子:

a = tf.zeros([4, 1, 1, 1])
print(a.shape)

b = tf.tile(a, [1, 32, 32, 3])
print(b.shape)

输出结果:

(4, 1, 1, 1)
(4, 32, 32, 3)

注: boardcast_to 和 tile 的区别在于 boardcast_to 可以在不复制内存的情况下自动扩张 tensor.

数学运算

一小时学会TensorFlow2之基本操作2实例代码

加减乘除

例子:

# 定义张量
t1 = tf.ones([3, 3])
t2 = tf.fill([3, 3], 3.0)

# 加
add = t1 + t2
print(add)

# 减
minus = t1 - t2
print(minus)

# 乘
multiply = t1 * t2
print(multiply)

# 除
divide = t1 / t2
print(divide)

输出结果:

tf.Tensor(
[[4. 4. 4.]
[4. 4. 4.]
[4. 4. 4.]], shape=(3, 3), dtype=float32)
tf.Tensor(
[[-2. -2. -2.]
[-2. -2. -2.]
[-2. -2. -2.]], shape=(3, 3), dtype=float32)
tf.Tensor(
[[3. 3. 3.]
[3. 3. 3.]
[3. 3. 3.]], shape=(3, 3), dtype=float32)
tf.Tensor(
[[0.33333334 0.33333334 0.33333334]
[0.33333334 0.33333334 0.33333334]
[0.33333334 0.33333334 0.33333334]], shape=(3, 3), dtype=float32)

log & exp

例子:

# log
a = tf.fill([2], 100.0)
print(a)

b = tf.math.log(a)  # 以e为底
print(b)

# exp
c = tf.ones([2])
print(c)

d = tf.exp(c)
print(d)

输出结果:

tf.Tensor([100. 100.], shape=(2,), dtype=float32)
tf.Tensor([4.6051702 4.6051702], shape=(2,), dtype=float32)
tf.Tensor([1. 1.], shape=(2,), dtype=float32)
tf.Tensor([2.7182817 2.7182817], shape=(2,), dtype=float32)

pow & sqrt

例子:

# 定义张量
a = tf.fill([2], 4.0)
print(a)

# pow
b = tf.pow(a, 2)
print(b)

# sqrt
c = tf.sqrt(a, 2)
print(c)

输出结果:

tf.Tensor([4. 4.], shape=(2,), dtype=float32)
tf.Tensor([16. 16.], shape=(2,), dtype=float32)
tf.Tensor([2. 2.], shape=(2,), dtype=float32)

矩阵相乘 @

我们可以使用tf.matmul@来实现矩阵相乘.

一小时学会TensorFlow2之基本操作2实例代码

例子:

# 定义张量
a = tf.fill([2, 2], 2)
b = tf.fill([2, 2], 3)

# matmul
c = tf.matmul(a, b)
print(c)

# @
d = a@b
print(d)

输出结果:

tf.Tensor(
[[12 12]
[12 12]], shape=(2, 2), dtype=int32)
tf.Tensor(
[[12 12]
[12 12]], shape=(2, 2), dtype=int32)

到此这篇关于一小时学会TensorFlow2之基本操作2实例代码的文章就介绍到这了,更多相关TensorFlow2基本操作内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
详解Python的Django框架中的通用视图
May 04 Python
Python类的用法实例浅析
May 27 Python
python交互界面的退出方法
Feb 16 Python
Django模型修改及数据迁移实现解析
Aug 01 Python
详解PyTorch中Tensor的高阶操作
Aug 18 Python
Python 中的 import 机制之实现远程导入模块
Oct 29 Python
python实现简易版学生成绩管理系统
Jun 22 Python
python使用隐式循环快速求和的实现示例
Sep 11 Python
python实现b站直播自动发送弹幕功能
Feb 20 Python
浅谈Python基础之列表那些事儿
May 11 Python
将Python代码打包成.exe可执行文件的完整步骤
May 12 Python
如何将numpy二维数组中的np.nan值替换为指定的值
May 14 Python
Python torch.flatten()函数案例详解
Aug 30 #Python
Python之基础函数案例详解
Aug 30 #Python
python中使用 unittest.TestCase单元测试的用例详解
Aug 30 #Python
python使用matplotlib绘制图片时x轴的刻度处理
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
Aug 30 #Python
OpenCV绘制圆端矩形的示例代码
Aug 30 #Python
python中super()函数的理解与基本使用
You might like
整理的9个实用的PHP库简介和下载
2010/11/09 PHP
php多功能图片处理类分享(php图片缩放类)
2014/03/14 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
javascript 读取xml,写入xml 实现代码
2009/07/10 Javascript
js中parseInt函数浅谈
2013/07/31 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
JS获取及设置TextArea或input文本框选择文本位置的方法
2015/03/24 Javascript
jQuery实现连续动画效果实例分析
2015/10/09 Javascript
jquery ui dialog替代confirm实例分析
2016/01/25 Javascript
深入理解JS addLoadEvent函数
2016/05/20 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
Angularjs 自定义服务的三种方式(推荐)
2016/08/02 Javascript
微信小程序 数据绑定详解及实例
2016/10/25 Javascript
使用Vue开发一个实时性时间转换指令
2018/01/17 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
nodejs基础之常用工具模块util用法分析
2018/12/26 NodeJs
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
详解tensorflow实现迁移学习实例
2018/02/10 Python
利用Python如何批量修改数据库执行Sql文件
2018/07/29 Python
使用python opencv对目录下图片进行去重的方法
2019/01/12 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
python Tkinter版学生管理系统
2019/02/20 Python
python 字符串常用方法汇总详解
2019/09/16 Python
Python Switch Case三种实现方法代码实例
2020/06/18 Python
荷兰多品牌网上鞋店:Stoute Schoenen
2017/08/24 全球购物
书香校园活动方案
2014/02/28 职场文书
推广普通话标语
2014/06/27 职场文书
毕业实习指导教师评语
2014/12/31 职场文书
幼儿园小班个人总结
2015/02/12 职场文书
七一建党节慰问信
2015/02/14 职场文书
单位考核鉴定意见
2015/06/05 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
2021/07/01 MySQL
Python pyecharts案例超市4年数据可视化分析
2022/08/14 Python