【译】Effective TensorFlow Chapter2——理解静态和动态形状

栏目: 数据库 · 发布时间: 5年前

内容简介:本文翻译自:TensorFlow中的张量具有静态形状属性,该属性在图形构造期间确定。静态形状可能未指定。例如,我们可以定义一个形状张量[None,128]:这意味着第一个维度可以是任何大小,并将在

本文翻译自:  《TensorFlow Basics》 , 如有侵权请联系删除,仅限于学术交流,请勿商用。如有谬误,请联系指出。

TensorFlow中的张量具有静态形状属性,该属性在图形构造期间确定。静态形状可能未指定。例如,我们可以定义一个形状张量[None,128]:

import tensorflow as tf
a = tf.placeholder(tf.float32, [None, 128])
复制代码

这意味着第一个维度可以是任何大小,并将在 Session.run() 期间动态确定。您可以按如下方式查询Tensor的静态形状:

static_shape = a.shape.as_list()  # returns [None, 128]
复制代码

要获得张量的动态形状,可以调用 tf.shape 方法,它返回一个给定张量代表的形状:

dynamic_shape = tf.shape(a)
复制代码

可以使用 Tensor.set_shape() 方法设置张量的静态形状:

a.set_shape([32, 128])  # static shape of a is [32, 128]
a.set_shape([None, 128])  # first dimension of a is determined dynamically
复制代码

您可以使用 tf.reshape 函数动态重塑给定的张量:

a =  tf.reshape(a, [32, 128])
复制代码

一个在可用时返回静态形状,不可用时返回动态形状的函数会很方便。一个比较好的程序实现如下:

def get_shape(tensor):
  static_shape = tensor.shape.as_list()
  dynamic_shape = tf.unstack(tf.shape(tensor))
  dims = [s[1] if s[0] is None else s[0]
          for s in zip(static_shape, dynamic_shape)]
  return dims
复制代码

现在假设我们想通过将第二维和第三维折叠成一个来将三维张量转换为二维张量。我们可以使用 get_shape() 函数来做到这一点:

b = tf.placeholder(tf.float32, [None, 10, 32])
shape = get_shape(b)
b = tf.reshape(b, [shape[0], shape[1] * shape[2]])
复制代码

值得注意的是,无论形状是否静态指定,这都有效。

事实上,我们可以编写一个通用的 reshape() 函数来折叠任何维度列表:

import tensorflow as tf
import numpy as np

def reshape(tensor, dims_list):
  shape = get_shape(tensor)
  dims_prod = []
  for dims in dims_list:
    if isinstance(dims, int):
      dims_prod.append(shape[dims])
    elif all([isinstance(shape[d], int) for d in dims]):
      dims_prod.append(np.prod([shape[d] for d in dims]))
    else:
      dims_prod.append(tf.prod([shape[d] for d in dims]))
  tensor = tf.reshape(tensor, dims_prod)
  return tensor
复制代码

然后折叠第二个维度就会变得非常容易:

b = tf.placeholder(tf.float32, [None, 10, 32])
b = reshape(b, [0, [1, 2]])
复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

国际大学生程序设计竞赛例题解

国际大学生程序设计竞赛例题解

郭嵩山 / 电子工业出版社 / 2007-7 / 32.00元

《国际大学生程序设计竞赛例题解3:图论、动态规划算法、综合题专集》以图论、动态规划算法、综合题的形式介绍了ACM国际大学生程序设计竞赛(ACM/ICPC)中所用到的典型算法,并结合例题,对如何灵活地运用这些算法进行比较详细分析和深入浅出的讲解。《国际大学生程序设计竞赛例题解3:图论、动态规划算法、综合题专集》以精讲多练为教学宗旨,并在每一个专题论述后用一章的篇幅选出一批有代表性的竞赛例题,对每道例......一起来看看 《国际大学生程序设计竞赛例题解》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具