一小时学会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脚本日志功能
Aug 14 Python
python中实现字符串翻转的方法
Jul 11 Python
python点击鼠标获取坐标(Graphics)
Aug 10 Python
线程安全及Python中的GIL原理分析
Oct 29 Python
python3中numpy函数tile的用法详解
Dec 04 Python
python实现按关键字筛选日志文件
Dec 24 Python
解决python 读取 log日志的编码问题
Dec 24 Python
Python文件操作方法详解
Feb 09 Python
python数据爬下来保存的位置
Feb 17 Python
Pytorch 使用CNN图像分类的实现
Jun 16 Python
使用Python Tkinter实现剪刀石头布小游戏功能
Oct 23 Python
python 对xml解析的示例
Feb 27 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脚本数据库功能详解(下)
2006/10/09 PHP
php权重计算方法代码分享
2014/01/09 PHP
学习php设计模式 php实现备忘录模式(Memento)
2015/12/09 PHP
JavaScript 不只是脚本
2007/05/30 Javascript
js跟随滚动条滚动浮动代码
2009/12/31 Javascript
基于jquery+thickbox仿校内登录注册框
2010/06/07 Javascript
映彩衣的js随笔(js图片切换效果)
2011/07/31 Javascript
如何使用jquery动态加载js,css文件实现代码
2013/04/03 Javascript
JS限制Textarea文本域字符个数的具体实现
2013/08/02 Javascript
使用简洁的jQuery方法实现隔行换色功能
2014/01/02 Javascript
调试代码导致IE出错的避免方法
2014/04/04 Javascript
原生js事件的添加和删除的封装
2014/07/01 Javascript
JavaScript实现的一个计算数字步数的算法分享
2014/12/06 Javascript
浅谈javascript中的三种弹窗
2016/10/21 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
2017/06/16 jQuery
vue.js中引入vuex储存接口数据及调用的详细流程
2017/12/14 Javascript
js实现下拉框二级联动
2018/12/04 Javascript
JS动态图片的实现方法完整示例
2020/01/13 Javascript
vue实现整屏滚动切换
2020/06/29 Javascript
使用vant的地域控件追加全部选项
2020/11/03 Javascript
python模拟新浪微博登陆功能(新浪微博爬虫)
2013/12/24 Python
python中stdout输出不缓存的设置方法
2014/05/29 Python
python字符串替换的2种方法
2014/11/30 Python
Python制作Windows系统服务
2017/03/25 Python
python版大富翁源代码分享
2018/11/19 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
详解Django 时间与时区设置问题
2019/07/23 Python
Python中实现输入一个整数的案例
2020/05/03 Python
HTML5 Web缓存和运用程序缓存(cookie,session)
2018/01/11 HTML / CSS
html5 canvas简单封装一个echarts实现不了的饼图
2018/06/12 HTML / CSS
Probikekit日本:自行车套件,跑步和铁人三项装备
2017/04/03 全球购物
Skyscanner波兰:廉价航班
2017/11/07 全球购物
北卡罗来纳州豪华家具和家居装饰店:Carolina Rustica
2018/10/30 全球购物
学生未请假就回家检讨书
2014/09/22 职场文书