• tensorflow中tensor的静态维度和动态维度


    tf中使用张量(tensor)这种数据结构来表示所有的数据,可以把张量看成是一个具有n个维度的数组或列表,张量会在各个节点之间流动,参与计算。

    张量具有静态维度和动态维度。

    在图构建过程中定义的张量拥有的维度是静态维度,这个维度可以被定义为不确定的,例如定义一个tensor的维度是[None,10],表示这个tensor的第一个维度是不确定的,可以是任意的,None 表示具体维度值要在图运行过程中确定。

    在图运行的时候,张量在图中各个节点之间流动,此时张量具有的维度是动态维度,依据操作的需要,动态维度是可以动态转变的,所以tensor的动态维度不是唯一的,但是静态维度是唯一的(静态维度可以是形状不确定的)。


    定义张量、设置静态维度、查询静态维度

    设置静态维度使用  set_shape()
    查询静态维度使用  tensorX.shape.as_list()

    # -*- coding:utf-8 -*-
    import tensorflow as tf
    
    # 定义一个第一维度不确定的tensor
    a = tf.placeholder(tf.float32, [None, 128])
    b = tf.placeholder(tf.int32,[2,5,6])
    
    # 查询张量a的静态维度
    static_shape_a = a.shape.as_list()
    static_shape_b = b.shape.as_list()
    
    print static_shape_a,static_shape_b
    
    # 设置张量a的静态维度,a必须有最少一个维度上是不确定才可以设置静态维度
    a.set_shape([32, 128])
    # b声明的时候3个静态维度已经是确定的了,再设置b的静态维度会报错
    # b.set_shape([4,5,3])
    
    # 查询张量a设置静态维度后的静态维度
    static_shape_a = a.shape.as_list()
    
    print static_shape_a

    输出:

    [None, 128] [2, 5, 6]
    [32, 128]

    静态维度可以认为是tensor的原始维度,如果定义tensor时候具体指定了tensor各个维度的具体值,则tensor的静态维度就是确定的了,不可以再更改静态维度信息了。 只有当定义tensor的时候至少一个维度上使用了 None,tensor的静态维度才可以
    使用 set_shape()再指定。


    改变和查询动态维度

    动态的改变tensor的动态维度使用  tf.reshape()
    查询tensor的动态维度使用  tf.shape()

    # -*- coding:utf-8 -*-
    import tensorflow as tf
    
    # 定义一个第一维度不确定的tensor
    a = tf.placeholder(tf.float32, [None, 128])
    
    # 查询a的动态维度
    dynamic_shape = tf.shape(a)
    print dynamic_shape
    
    #改变a的动态维度
    a =  tf.reshape(a, [32, 64,2])
    
    # 查询a的动态维度
    dynamic_shape = tf.shape(a)
    print dynamic_shape
    输出:
    Tensor("Shape:0", shape=(2,), dtype=int32)
    Tensor("Shape_1:0", shape=(3,), dtype=int32)
    
  • 相关阅读:
    python:HTML转义
    Python 安装 MySQLdb
    C# 获取当前路径方法
    配置 vim Python IDE 开发环境
    python:HTML转义
    Python list去重
    源码探秘
    加号的作用
    多态练习
    在web service用Cache要导入System.Web.HttpRuntime
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9411708.html
Copyright © 2020-2023  润新知