TensorFlow中如何确定张量的形状实例


Posted in Python onJune 23, 2020

我们可以使用tf.shape()获取某张量的形状张量。

import tensorflow as tf
x = tf.reshape(tf.range(1000), [10, 10, 10])
sess = tf.Session()
sess.run(tf.shape(x))
 
Out[1]: array([10, 10, 10])

我们可以使用tf.shape()在计算图中确定改变张量的形状。

high = tf.shape(x)[0] // 2
width = tf.shape(x)[1] * 2
x_reshape = tf.reshape(x, [high, width, -1])
sess.run(tf.shape(x_reshape))
 
Out: array([ 5, 20, 10])

我们可以使用tf.shape_n()在计算图中得到若干个张量的形状。

y = tf.reshape(tf.range(504), [7,8,9])
sess.run(tf.shape_n([x, y]))
 
Out: [array([10, 10, 10]), array([7, 8, 9])]

我们可以使用tf.size()获取张量的元素个数。

sess.run([tf.size(x), tf.size(y)])

Out: [1000, 504]

tensor.get_shape()或者tensor.shape是无法在计算图中用于确定张量的形状。

In [20]: x.get_shape()
Out[20]: TensorShape([Dimension(10), Dimension(10), Dimension(10)])
 
In [21]: x.get_shape()[0]
Out[21]: Dimension(10)
 
In [22]: type(x.get_shape()[0])
Out[22]: tensorflow.python.framework.tensor_shape.Dimension
 
In [23]: x.get_shape()
Out[23]: TensorShape([Dimension(10), Dimension(10), Dimension(10)])
 
In [24]: sess.run(x.get_shape())
---------------------------------------------------------------------------
TypeError     Traceback (most recent call last)
~\Anaconda3\lib\site-packages\tensorflow\python\client\session.py in __init__(self, fetches, contraction_fn)
 299  self._unique_fetches.append(ops.get_default_graph().as_graph_element(
--> 300  fetch, allow_tensor=True, allow_operation=True))
 301 except TypeError as e:
 
~\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py in as_graph_element(self, obj, allow_tensor, allow_operation)
 3477 with self._lock:
-> 3478 return self._as_graph_element_locked(obj, allow_tensor, allow_operation)
 3479
 
~\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py in _as_graph_element_locked(self, obj, allow_tensor, allow_operation)
 3566 raise TypeError("Can not convert a %s into a %s." % (type(obj).__name__,
-> 3567        types_str))
 3568
 
TypeError: Can not convert a TensorShapeV1 into a Tensor or Operation.
 
During handling of the above exception, another exception occurred:
 
TypeError     Traceback (most recent call last)
<ipython-input-24-de007c69e003> in <module>
----> 1 sess.run(x.get_shape())
 
~\Anaconda3\lib\site-packages\tensorflow\python\client\session.py in run(self, fetches, feed_dict, options, run_metadata)
 927 try:
 928 result = self._run(None, fetches, feed_dict, options_ptr,
--> 929    run_metadata_ptr)
 930 if run_metadata:
 931  proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)
 
~\Anaconda3\lib\site-packages\tensorflow\python\client\session.py in _run(self, handle, fetches, feed_dict, options, run_metadata)
 1135 # Create a fetch handler to take care of the structure of fetches.
 1136 fetch_handler = _FetchHandler(
-> 1137  self._graph, fetches, feed_dict_tensor, feed_handles=feed_handles)
 1138
 1139 # Run request and get response.
 
~\Anaconda3\lib\site-packages\tensorflow\python\client\session.py in __init__(self, graph, fetches, feeds, feed_handles)
 469 """
 470 with graph.as_default():
--> 471 self._fetch_mapper = _FetchMapper.for_fetch(fetches)
 472 self._fetches = []
 473 self._targets = []
~\Anaconda3\lib\site-packages\tensorflow\python\client\session.py in for_fetch(fetch)
 269  if isinstance(fetch, tensor_type):
 270  fetches, contraction_fn = fetch_fn(fetch)
--> 271  return _ElementFetchMapper(fetches, contraction_fn)
 272 # Did not find anything.
 273 raise TypeError('Fetch argument %r has invalid type %r' % (fetch,
~\Anaconda3\lib\site-packages\tensorflow\python\client\session.py in __init__(self, fetches, contraction_fn)
 302  raise TypeError('Fetch argument %r has invalid type %r, '
 303    'must be a string or Tensor. (%s)' %
--> 304    (fetch, type(fetch), str(e)))
 305 except ValueError as e:
 306  raise ValueError('Fetch argument %r cannot be interpreted as a '
TypeError: Fetch argument TensorShape([Dimension(10), Dimension(10), Dimension(10)]) has invalid type <class 'tensorflow.python.framework.tensor_shape.TensorShapeV1'>, must be a string or Tensor. (Can not convert a TensorShapeV1 into a Tensor or Operation.)

我们可以使用tf.rank()来确定张量的秩。tf.rank()会返回一个代表张量秩的张量,可直接在计算图中使用。

In [25]: tf.rank(x)
Out[25]: <tf.Tensor 'Rank:0' shape=() dtype=int32>
 
In [26]: sess.run(tf.rank(x))
Out[26]: 3

补充知识:tensorflow循环改变tensor的值

使用tf.concat()实现4维tensor的循环赋值

alist=[[[[1,1,1],[2,2,2],[3,3,3]],[[4,4,4],[5,5,5],[6,6,6]]],[[[7,7,7],[8,8,8],[9,9,9]],[[10,10,10],[11,11,11],[12,12,12]]]] #2,2,3,3-n,c,h,w
kenel=(np.asarray(alist)*2).tolist()
print(kenel)
inputs=tf.constant(alist,dtype=tf.float32)
kenel=tf.constant(kenel,dtype=tf.float32)
inputs=tf.transpose(inputs,[0,2,3,1]) #n,h,w,c
kenel=tf.transpose(kenel,[0,2,3,1]) #n,h,w,c
uints=inputs.get_shape()
h=int(uints[1])
w=int(uints[2])
encoder_output=[]
for b in range(int(uints[0])):
 encoder_output_c=[]
 for c in range(int(uints[-1])):
  one_channel_in = inputs[b, :, :, c]
  one_channel_in = tf.reshape(one_channel_in, [1, h, w, 1])
  one_channel_kernel = kenel[b, :, :, c]
  one_channel_kernel = tf.reshape(one_channel_kernel, [h, w, 1, 1])
  encoder_output_cc = tf.nn.conv2d(input=one_channel_in, filter=one_channel_kernel, strides=[1, 1, 1, 1], padding="SAME")
  if c==0:
   encoder_output_c=encoder_output_cc
  else:
   encoder_output_c=tf.concat([encoder_output_c,encoder_output_cc],axis=3)

 if b==0:
  encoder_output=encoder_output_c
 else:
  encoder_output = tf.concat([encoder_output, encoder_output_c], axis=0)

with tf.Session() as sess:
 print(sess.run(tf.transpose(encoder_output,[0,3,1,2])))
 print(encoder_output.get_shape())

输出:

[[[[ 32. 48. 32.]
 [ 56. 84. 56.]
 [ 32. 48. 32.]]

 [[ 200. 300. 200.]
 [ 308. 462. 308.]
 [ 200. 300. 200.]]]


 [[[ 512. 768. 512.]
 [ 776. 1164. 776.]
 [ 512. 768. 512.]]

 [[ 968. 1452. 968.]
 [1460. 2190. 1460.]
 [ 968. 1452. 968.]]]]
(2, 3, 3, 2)

以上这篇TensorFlow中如何确定张量的形状实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中几个比较常见的名词解释
Jul 04 Python
Python通过90行代码搭建一个音乐搜索工具
Jul 29 Python
python学生管理系统代码实现
Apr 05 Python
Python利用正则表达式实现计算器算法思路解析
Apr 25 Python
Python实现常见的回文字符串算法
Nov 14 Python
Django组件之cookie与session的使用方法
Jan 10 Python
selenium+python截图不成功的解决方法
Jan 30 Python
Python跑循环时内存泄露的解决方法
Jan 13 Python
python3.8与pyinstaller冲突问题的快速解决方法
Jan 16 Python
Python通过正则库爬取淘宝商品信息代码实例
Mar 02 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
Apr 29 Python
Python代码实现双链表
May 25 Python
Python docutils文档编译过程方法解析
Jun 23 #Python
python3的pip路径在哪
Jun 23 #Python
Python错误的处理方法
Jun 23 #Python
python文件读取失败怎么处理
Jun 23 #Python
使用tensorflow根据输入更改tensor shape
Jun 23 #Python
pytorch 计算ConvTranspose1d输出特征大小方式
Jun 23 #Python
Android Q之气泡弹窗的实现示例
Jun 23 #Python
You might like
PHP 中文乱码解决办法总结分析
2009/07/30 PHP
php URL验证正则表达式
2011/07/19 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
PHP无限分类(树形类)
2013/09/28 PHP
php通过数组实现多条件查询实现方法(字符串分割)
2014/05/06 PHP
PHP中exec函数和shell_exec函数的区别
2014/08/20 PHP
jquery 常用操作整理 基础入门篇
2009/10/14 Javascript
js DataSet数据源处理代码
2010/03/29 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
解析javascript图片懒加载与预加载的分析总结
2016/10/27 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
详解在vue-cli项目中安装node-sass
2017/06/21 Javascript
angular+ionic返回上一页并刷新页面
2017/08/08 Javascript
vue实现自定义多选按钮
2020/07/16 Javascript
关于Vue中$refs的探索浅析
2020/11/05 Javascript
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
[08:06]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant 选手采访
2021/03/11 DOTA
Python实现的HMacMD5加密算法示例
2018/04/03 Python
Python处理命令行参数模块optpars用法实例分析
2018/05/31 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
基于python实现数组格式参数加密计算
2020/04/21 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
python3实现简单飞机大战
2020/11/29 Python
初探CSS3中的calc()功能
2015/07/14 HTML / CSS
美国家具网站:Cymax
2016/09/17 全球购物
Nike香港官网:Nike HK
2019/03/23 全球购物
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
怎样创建、运行java程序
2014/08/01 面试题
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
电子商务网站的创业计划书
2014/01/05 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
2014年人事专员工作总结
2014/11/19 职场文书
Python制作动态字符画的源码
2021/08/04 Python