tf.shape ()가 tensorflow에서 잘못된 모양을 얻습니다.
나는 다음과 같이 텐서를 정의합니다.
x = tf.get_variable("x", [100])
그러나 텐서의 모양을 인쇄하려고 할 때 :
print( tf.shape(x) )
내가 할 텐서를 ( "모양 : 0", 모양 = (1), DTYPE = INT32) , 왜 출력의 결과가 = 모양 안 (100)
tf.shape (input, name = None) 은 입력의 모양을 나타내는 1 차원 정수 텐서를 반환합니다.
: 당신이 찾고있는 x.get_shape()
그 반환 TensorShape
의 x
변수입니다.
업데이트 :이 답변으로 인해 Tensorflow의 동적 / 정적 모양을 명확히하기 위해 기사를 작성했습니다. https://pgaleone.eu/tensorflow/2018/07/28/understanding-tensorflow-tensors-shape-static-dynamic/
설명:
tf.shape (x)는 op를 만들고 생성 된 op의 출력을 나타내는 객체를 반환합니다. 모양을 얻으려면 세션에서 작업을 실행하십시오.
matA = tf.constant([[7, 8], [9, 10]])
shapeOp = tf.shape(matA)
print(shapeOp) #Tensor("Shape:0", shape=(2,), dtype=int32)
with tf.Session() as sess:
print(sess.run(shapeOp)) #[2 2]
신용 : 위의 답변을 살펴본 후 Tensorflow의 tf.rank 함수에 대한 답변을 보았고 더 도움이되었으며 여기에서 다시 표현해 보았습니다.
간단한 예를 들어 명확하게 설명합니다.
a = tf.Variable(tf.zeros(shape=(2, 3, 4)))
print('-'*60)
print("v1", tf.shape(a))
print('-'*60)
print("v2", a.get_shape())
print('-'*60)
with tf.Session() as sess:
print("v3", sess.run(tf.shape(a)))
print('-'*60)
print("v4",a.shape)
출력은 다음과 같습니다.
------------------------------------------------------------
v1 Tensor("Shape:0", shape=(3,), dtype=int32)
------------------------------------------------------------
v2 (2, 3, 4)
------------------------------------------------------------
v3 [2 3 4]
------------------------------------------------------------
v4 (2, 3, 4)
또한 이것은 도움이 될 것입니다 : TensorFlow에서 정적 모양과 동적 모양을 이해하는 방법?
비슷한 질문이 TF FAQ에 잘 설명되어 있습니다 .
TensorFlow에서 텐서에는 정적 (추론 된) 모양과 동적 (진정한) 모양이 모두 있습니다. 정적 모양은
tf.Tensor.get_shape
메서드를 사용하여 읽을 수 있습니다 .이 모양은 텐서를 만드는 데 사용 된 작업에서 유추되며 부분적으로 완료 될 수 있습니다. 정적 모양이 완전히 정의되지 않은 경우 텐서 t의 동적 모양은를 평가하여 결정할 수 있습니다tf.shape(t)
.
따라서 tf.shape()
텐서를 반환하고 항상 크기를 shape=(N,)
가지며 세션에서 계산할 수 있습니다.
a = tf.Variable(tf.zeros(shape=(2, 3, 4)))
with tf.Session() as sess:
print sess.run(tf.shape(a))
반면에을 사용하여 정적 모양을 추출 x.get_shape().as_list()
할 수 있으며 이는 어디에서나 계산할 수 있습니다.
간단히을 사용 tensor.shape
하여 정적 모양 을 얻습니다 .
In [102]: a = tf.placeholder(tf.float32, [None, 128])
# returns [None, 128]
In [103]: a.shape.as_list()
Out[103]: [None, 128]
동적 모양 을 얻으려면 다음을 사용하십시오 tf.shape()
.
dynamic_shape = tf.shape(a)
You can also get the shape as you'd in NumPy with your_tensor.shape
as in the following example.
In [11]: tensr = tf.constant([[1, 2, 3, 4, 5], [2, 3, 4, 5, 6]])
In [12]: tensr.shape
Out[12]: TensorShape([Dimension(2), Dimension(5)])
In [13]: list(tensr.shape)
Out[13]: [Dimension(2), Dimension(5)]
In [16]: print(tensr.shape)
(2, 5)
Also, this example, for tensors which can be eval
uated.
In [33]: tf.shape(tensr).eval().tolist()
Out[33]: [2, 5]
ReferenceURL : https://stackoverflow.com/questions/37085430/tf-shape-get-wrong-shape-in-tensorflow
'programing' 카테고리의 다른 글
기기 속성을 가져 오는 Android ADB 명령 (0) | 2021.01.10 |
---|---|
Spring Boot-클래스 경로 리소스에 정의 된 이름이 'dataSource'인 빈 생성 오류 (0) | 2021.01.10 |
Objective-C / iPhone 앱에서 "클래식"malloc () / free ()를 사용해도됩니까? (0) | 2021.01.10 |
에코와 리턴을 연결할 때 마침표와 쉼표의 차이점은 무엇입니까? (0) | 2021.01.10 |
C를 사용하여 Linux에서 CPU 수를 얻는 방법은 무엇입니까? (0) | 2021.01.10 |