TensorFlow2.0教程26:张量及其操作

导入

要运行程序,你需要导入模块。

从 2.0 开始,默认启用急切模式执行。这提供了一个更具交互性的前端部分。

来自 , ,

作为 tf

1

张量是一个多维数组。像 NumPy 对象一样,tf.对象具有数据类型和形状。此外,tf.可以驻留在加速器内存中(如 GPU)。提供丰富的操作库(tf.add、tf.、tf..inv等),消耗和生成tf.。这些操作会自动转换类型,例如:

打印(tf.add(1,2))

打印(tf.add([3,8], [2,5]))

打印(tf.(6))

打印(tf.([7,8,9]))

打印(tf.(3)+tf.(4)))

tf.(3, shape=(), dtype=int32)

tf.([ 5 13], shape=(2,), dtype=int32)

tf.(36, shape=(), dtype=int32)

tf.(24, shape=(), dtype=int32)

tf.(25, shape=(), dtype=int32)

每个都有一个形状和类型

x = tf.([[3], [6]], [[2]])

打印(x)

打印(x.shape)

打印(x.dtype)

tf.(

[[6]

[12]], shape=(2, 1), dtype=int32)

(2, 1)

NumPy 数组和 tf.是:

张量可以由加速器内存(例如 GPU、TPU)支持。

张量是不可变的。

NumPy 兼容性

在 tf. NumPy 很简单:

操作自动将 NumPy 转换为。

NumPy 操作会自动转换为 NumPy。

使用 .numpy() 方法将张量显式转换为 NumPy。这些转换通常很容易,因为如果可能的话,array 和 tf.共享底层内存表示。然而,共享底层表示并不总是可能的,因为 tf.可以托管在 GPU 内存中,而 NumPy 数组始终由主机内存支持,并且转换涉及从 GPU 复制到主机内存。

numpy 作为 np

= np.ones([2,2])

= tf.(, 36)

打印()

#使用np.add进行加法操作

打印(np.add(, 1))

# 转换为numpy类型

打印(.numpy())

tf.(

[[36. 36.]

[36. 36.]], shape=(2, 2), dtype=)

[[37. 37.]

[37. 37.]]

[[36. 36.]

[36. 36.]]

2 GPU 加速

使用 GPU 进行计算可以加快许多操作。在没有任何注释的情况下,它会自动决定是使用 GPU 还是 CPU 进行操作 – 如有必要,在 CPU 和 GPU 内存之间复制张量。操作产生的张量通常由执行操作的设备的内存支持,例如:

x = tf..([3, 3])

print(‘是 GPU :’)

打印(tf.test.())

print(‘是on gpu #0:’)

打印(x..(‘GPU:0’))

是 GPU:

错误

是在 GPU #0 上:

错误

设备名称

。属性提供托管张量内容的设备的完全限定字符串名称。该名称编码了许多细节,例如正在执行程序的主机的网络地址标识符以及该主机中的设备。这是程序的分布式执行所必需的。如果张量在主机的第 N 个 GPU 上,则字符串以 GPU: 结尾。

显式设备放置()

中,放置是指如何分配(放置)设备以执行各种操作。如上所述,如果没有提供明确的指导,则自动确定执行操作的设备,并在需要时将张量复制到该设备。但是,可以使用 tf. 明确地将操作放置在特定设备上。上下文管理器,例如:

时间

定义(x):

开始 = time.time()

for循环在范围内(10):

tf.(x, x)

= time.time() – 开始

print(’10 循环:{:0.2}ms’.(1000*))

#强制使用CPU

print(‘在 CPU 上:’)

与 tf.(‘CPU:0’):

x = tf..([1000, 1000])

#使用验证当前是否为CPU0

x..(‘CPU:0’)

(x)

#如果有GPU,则强制使用GPU

如果 tf.test.():

print(‘在 GPU 上:’)

使用 tf..(‘GPU:0’):

x = tf..([1000, 1000])

#使用断言验证当前是GPU0

x..(‘GPU:0’)

(x)

在 CPU 上:

10 个循环:1.2e+02ms

3 个数据集

本部分使用 tf.data 构建管道。 API 为模型提供数据。 tf.data.API 用于从简单、可重用的部分构建高性能、复杂的输入管道,这些部分将为模型的训练或评估循环提供动力。

创建源数据集时无锡人流量是多少

使用工厂函数之一(例如 .、.)或使用从文件中读取的对象(例如 .)创建源数据集。有关详细信息,请参阅数据集指南。

#从列表中获取

= tf.data..([6,5,4,3,2,1])

#创建csv文件

_, = .()

打印()

with open(, ‘w’) as f:

f.write(“””第一行

第 2 行

第 3 行”””)

# 获取数据集实例

= tf.data.()

/tmp/

应用转换

使用映射、批处理等转换函数将转换应用于数据集记录。

= .map(tf.).(2).batch(2)

= .batch(2)

迭代

tf.数据。对象支持迭代循环记录:

打印(’:’中的元素)

对于 x :

打印(x)

#从文件中读取的对象创建的数据源

打印(’中的元素:’)

对于 x :

打印(x)

中的元素

tf.([36 25], shape=(2,), dtype=int32)

tf.([16 9], shape=(2,), dtype=int32)

tf.([4 1], shape=(2,), dtype=int32)

中的元素

tf.([b’Line 1′ b’Line 2′], shape=(2,), dtype=)

tf.([b’Line 3′], shape=(1,), dtype=)

© 版权声明
THE END
喜欢就支持一下吧
点赞13赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容