一小时学会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里隐藏的“禅”
Jun 16 Python
python中urllib模块用法实例详解
Nov 19 Python
Python打印scrapy蜘蛛抓取树结构的方法
Apr 08 Python
python+pyqt实现右下角弹出框
Oct 26 Python
Python:Scrapy框架中Item Pipeline组件使用详解
Dec 27 Python
python3调用R的示例代码
Feb 23 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
Jan 29 Python
python实现银联支付和支付宝支付接入
May 07 Python
Python批量查询关键词微信指数实例方法
Jun 27 Python
Python turtle库绘制菱形的3种方式小结
Nov 23 Python
pyCharm 实现关闭代码检查
Jun 09 Python
python的flask框架难学吗
Jul 31 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
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
php实现当前页面点击下载文件的简单方法
2016/09/22 PHP
php遍历目录下文件并按修改时间排序操作示例
2019/07/12 PHP
IE autocomplete internet explorer's autocomplete
2007/06/30 Javascript
js点击出现悬浮窗效果不使用JQuery插件
2014/01/20 Javascript
js 加密压缩出现bug解决方案
2014/11/25 Javascript
js实现表单多按钮提交action的处理方法
2015/10/24 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
Bootstrap Img 图片样式(推荐)
2016/12/13 Javascript
canvas时钟效果
2017/02/16 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
2019/02/02 NodeJs
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
javascript面向对象三大特征之继承实例详解
2019/07/24 Javascript
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
2020/03/13 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
2020/10/29 Javascript
零基础写python爬虫之神器正则表达式
2014/11/06 Python
Python中处理unchecked未捕获异常实例
2015/01/17 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
2016/04/20 Python
python如何读写csv数据
2018/03/21 Python
python获取当前文件路径以及父文件路径的方法
2019/07/10 Python
解决Django连接db遇到的问题
2019/08/29 Python
Python如何安装第三方模块
2020/05/28 Python
Python datetime模块的使用示例
2021/02/02 Python
哈萨克斯坦最大的时装、鞋子和配饰在线商店:Lamoda.kz
2019/11/19 全球购物
面试求职的个人自我评价
2013/11/16 职场文书
大学运动会通讯稿
2014/01/28 职场文书
《寓言两则》教学反思
2014/02/27 职场文书
爱国演讲稿500字
2014/05/04 职场文书
区域销售经理岗位职责
2015/04/02 职场文书
护士业务学习心得体会
2016/01/25 职场文书
技术入股合作协议书
2016/03/21 职场文书
MySQL分库分表与分区的入门指南
2021/04/22 MySQL