gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章TensorFlow中如何确定张量的形状实例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

?
1
2
3
4
5
6
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()在计算图中确定改变张量的形状.

?
1
2
3
4
5
6
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()在计算图中得到若干个张量的形状.

?
1
2
3
4
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是无法在计算图中用于确定张量的形状.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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()会返回一个代表张量秩的张量,可直接在计算图中使用.

?
1
2
3
4
5
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的循环赋值 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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())

输出:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[[[[ 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中如何确定张量的形状实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

原文链接:https://blog.csdn.net/chr1991/article/details/93786790 。

最后此篇关于TensorFlow中如何确定张量的形状实例的文章就讲到这里了,如果你想了解更多关于TensorFlow中如何确定张量的形状实例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com