TensorFlow 2.0 常用模块6:tf.TensorArray

在上一篇文章中,我们介绍了TensorFlow 2.0中使用计算图模式的方式 @tf.function 的建立方式。本篇文章将介绍在计算图模式中使用动态数组保存和读取张量的方法。

tf.TensorArray: TensorFlow 动态数组

在部分网络结构,尤其是涉及到时间序列的结构中,我们可能需要将一系列张量以数组的方式依次存放起来,以供进一步处理。当然,在 Eager Execution 下,你可以直接使用一个 Python 列表(List)存放数组。不过,如果你需要基于计算图的特性(例如使用 @tf.function 加速模型运行或者使用 SavedModel 导出模型),就无法使用这种方式了。因此,TensorFlow 提供了 tf.TensorArray ,一种支持计算图特性的 TensorFlow 动态数组。

其声明的方式为:
arr = tf.TensorArray(dtype, size, dynamic_size=False) :声明一个大小为size,类型为dtype的 TensorArrayarr。如果将dynamic_size参数设置为True,则该数组会自动增长空间。
其读取和写入的方法为:
write(index, value) :将 value 写入数组的第 index 个位置;

read(index) :读取数组的第 index 个值;

除此以外,TensorArray 还包括stack()、unstack()等常用操作,可参考 文档 以了解详情。
文档
https://tensorflow.google.cn/api_docs/python/tf/TensorArray
请注意,由于需要支持计算图,tf.TensorArray的write()方法是不可以忽略左值的!也就是说,在 Graph Execution 模式下,必须按照以下的形式写入数组:
arr = arr.write(index, value)
这样才可以正常生成一个计算图操作,并将该操作返回给 arr 。而不可以写成:

arr.write(index, value)     # 生成的计算图操作没有左值接收,从而丢失

一个简单的示例如下:

import tensorflow as tf

@tf.function
def array_write_and_read():
    arr = tf.TensorArray(dtype=tf.float32, size=3)
    arr = arr.write(0, tf.constant(0.0))
    arr = arr.write(1, tf.constant(1.0))
    arr = arr.write(2, tf.constant(2.0))
    arr_0 = arr.read(0)
    arr_1 = arr.read(1)
    arr_2 = arr.read(2)
return arr_0, arr_1, arr_2

a, b, c = array_write_and_read()
print(a, b, c)

输出:

tf.Tensor(0.0, shape=(), dtype=float32) tf.Tensor(1.0, shape=(), dtype=float32) 	tf.Tensor(2.0, shape=(), dtype=float32)

《简单粗暴 TensorFlow 2.0 》目录

TensorFlow 2.0 安装指南

TensorFlow 2.0 基础:张量、自动求导与优化器

TensorFlow 2.0 模型:模型类的建立

TensorFlow 2.0 模型:多层感知机

TensorFlow 2.0 模型:卷积神经网络

TensorFlow 2.0 模型:循环神经网络

TensorFlow 2.0 模型:Keras 训练流程及自定义组件

TensorFlow 2.0 常用模块1:Checkpoint

TensorFlow 2.0 常用模块2:TensorBoard

TensorFlow 2.0 常用模块3:tf.data

TensorFlow 2.0 常用模块3:tf.data 流水线加速

TensorFlow 2.0 常用模块4:TFRecord

TensorFlow 2.0 常用模块5:@tf.function

TensorFlow 2.0 常用模块6:tf.TensorArray(本文)

如果帮到了你,就请收藏评论加点赞,多谢支持。

原文来自微信公众号,侵删。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值