2017-04-07 11 views
0

계산 그래프를 만들 때 나는 텐서가 x입니다. 내가 오류가있어TensorFlow에서 벡터의 배치로 변형 된 일렬 배치.

n = functools.reduce(operator.mul, x.shape[1:], 1) 
tf.reshape(x, [-1, n]) 

:하지만 [-1, a, b, c]의 모양과 나는 이런 식으로하려고 노력 [-1, a*b*c] 로 모양을 변경하고자하는

TypeError: unsupported operand type(s) for *: 'int' and 'Dimension' 

내 질문은 : 거기 Tensor가이 작업을 수행하기 위해 어떤 것을 플로팅합니까?

답변

3

오류 메시지에서 알 수 있듯이 유형에 문제가 있습니다. TensorFlow 자리 표시자를 만드는 경우 (예 :

>>> import tensorflow as tf 
>>> x = tf.placeholder(tf.float16, shape=(None, 3,7,4)) 

그것에 shape를 호출하여, 반환 값은

>>> x.shape 
TensorShape([Dimension(None), Dimension(3), Dimension(7), Dimension(4)]) 

인 각 요소는

>>> x.shape[1] 
<class 'tensorflow.python.framework.tensor_shape.Dimension'> 

즉 TensorFlow의 Dimension 클래스이다. 당연히, operator.mul 함수는 그러한 유형으로 무엇을해야할지 모릅니다. 다행히도 tf.TensorShape에는 as_list() 함수가 있으며이 함수는 정수 목록으로 모양을 반환합니다.

>>> import functools, operator 
>>> n = functools.reduce(operator.mul, x.shape.as_list()[1:], 1) 
>>> n 
84 
>>> y = tf.reshape(x, [-1, n]) 
: 당신이 사용하고 같은 그와

>>> x.shape.as_list() 
[None, 3, 7, 4] 

, 당신은, 요소 n의 수를 계산할 수 있습니다