前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >x.get_shape().as_list()和tf.shape()

x.get_shape().as_list()和tf.shape()

作者头像
周小董
发布2019-03-25 10:35:25
2.2K0
发布2019-03-25 10:35:25
举报
文章被收录于专栏:python前行者python前行者

tf.shape()

先说tf.shape()很显然这个是获取张量的大小的,用法无需多说,直接上例子吧!

代码语言:javascript
复制
import tensorflow as tf
import numpy as np
 
a_array=np.array([[1,2,3],[4,5,6]])
b_list=[[1,2,3],[3,4,5]]
c_tensor=tf.constant([[1,2,3],[4,5,6]])
 
with tf.Session() as sess:
    print(sess.run(tf.shape(a_array)))
    print(sess.run(tf.shape(b_list)))
    print(sess.run(tf.shape(c_tensor)))

结果:

代码语言:javascript
复制
[2 3]
[2 3]
[2 3]

x.get_shape().as_list()

这个简单说明一下,x.get_shape(),只有tensor才可以使用这种方法,返回的是一个元组。

代码语言:javascript
复制
import tensorflow as tf
import numpy as np
 
a_array=np.array([[1,2,3],[4,5,6]])
b_list=[[1,2,3],[3,4,5]]
c_tensor=tf.constant([[1,2,3],[4,5,6]])
 
print(c_tensor.get_shape())
print(c_tensor.get_shape().as_list())
 
with tf.Session() as sess:
    print(sess.run(tf.shape(a_array)))
    print(sess.run(tf.shape(b_list)))
    print(sess.run(tf.shape(c_tensor)))

结果:可见只能用于tensor来返回shape,但是是一个元组,需要通过as_list()的操作转换成list.

代码语言:javascript
复制
(2, 3)
[2 3]
[2 3]
[2 3]
[2 3]

不是元组进行操作的话,会报错!

如果你在上面的代码上添加上a_array.get_shape()会报如下的错误:

代码语言:javascript
复制
print(a_array.get_shape())
AttributeError: 'numpy.ndarray' object has no attribute 'get_shape'

可见,只有tensor才有这样的特权呀!

下面强调一些注意点:

第一点:tensor.get_shape()返回的是元组,不能放到sess.run()里面,这个里面只能放operation和tensor;

第二点:tf.shape()返回的是一个tensor。要想知道是多少,必须通过sess.run()

代码语言:javascript
复制
import tensorflow as tf
import numpy as np
 
a_array=np.array([[1,2,3],[4,5,6]])
b_list=[[1,2,3],[3,4,5]]
c_tensor=tf.constant([[1,2,3],[4,5,6]])
 
with tf.Session() as sess:
    a_array_shape=tf.shape(a_array)
    print("a_array_shape:",a_array_shape)
    print("a_array_shape:",sess.run(a_array_shape))
    c_tensor_shape=c_tensor.get_shape().as_list()
    print("c_tensor_shape:",c_tensor_shape)
    #print(sess.run(c_tensor_shape)) #报错

结果:

代码语言:javascript
复制
a_array_shape: Tensor("Shape_6:0", shape=(2,), dtype=int32)
a_array_shape: [2 3]
c_tensor_shape: [2, 3]

如果你把注释掉的那个话再放出来,报错如下:很显然啊,不是tensor或者是operation。

代码语言:javascript
复制
TypeError: Fetch argument 2 has invalid type <class 'int'>, must be a string or Tensor. (Can not convert a int into a Tensor or Operation.)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年01月02日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • tf.shape()
  • x.get_shape().as_list()
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档