스택큐힙리스트

Tensorflow 텐서의 차원(모양)을 int 값으로 얻는 방법은 어떻게 될까요? 본문

카테고리 없음

Tensorflow 텐서의 차원(모양)을 int 값으로 얻는 방법은 어떻게 될까요?

스택큐힙리스트 2023. 12. 27. 08:52
반응형

텐서플로우 텐서가 있다고 가정합시다. 텐서의 차원 (모양)을 정수 값으로 어떻게 가져올 수 있을까요? 두 가지 방법, tensor.get_shape()tf.shape(tensor)를 알고 있습니다. 그러나 나는 정수 int32 값으로 형태 값을 가져올 수 없습니다.


예를 들어, 아래에서 2D 텐서를 만들었고, int32로 행과 열의 개수를 얻어야하기 때문에 reshape()를 호출하여 모양이 (num_rows * num_cols, 1)인 텐서를 만들어야합니다. 그러나 메서드 tensor.get_shape()는 값들을 Dimension 형식으로 반환하며, int32가 아닙니다.

import tensorflow as tf
import numpy as np
sess = tf.Session()
tensor = tf.convert_to_tensor(np.array([[1001,1002,1003],[3,4,5]]), dtype=tf.float32)
sess.run(tensor)
# 배열([[ 1001., 1002., 1003.],
# [ 3., 4., 5.]], dtype=float32)
tensor_shape = tensor.get_shape()
tensor_shape
# 텐서모양([차원(2), 차원(3)])
print tensor_shape
# (2, 3)
num_rows = tensor_shape[0] # ???
num_cols = tensor_shape[1] # ???
tensor2 = tf.reshape(tensor, (num_rows*num_cols, 1))
# Traceback (most recent call last):
# File <stdin>, line 1, in <module>
# File /usr/local/lib/python2.7/site-packages/tensorflow/python/ops/gen_array_ops.py, line 1750, in reshape
# name=name)
# File /usr/local/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py, line 454, in apply_op
# as_ref=input_arg.is_ref)
# File /usr/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py, line 621, in convert_to_tensor
# ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
# File /usr/local/lib/python2.7/site-packages/tensorflow/python/framework/constant_op.py, line 180, in _constant_tensor_conversion_function
# return constant(v, dtype=dtype, name=name)
# File /usr/local/lib/python2.7/site-packages/tensorflow/python/framework/constant_op.py, line 163, in constant
# tensor_util.make_tensor_proto(value, dtype=dtype, shape=shape))
# File /usr/local/lib/python2.7/site-packages/tensorflow/python/framework/tensor_util.py, line 353, in make_tensor_proto
# _AssertCompatible(values, dtype)
# File /usr/local/lib/python2.7/site-packages/tensorflow/python/framework/tensor_util.py, line 290, in _AssertCompatible
# (dtype.name, repr(mismatch), type(mismatch).__name__))
# TypeError: 예상 int32, 얻음 Dimension(6) 형태의 'Dimension' 대신.

답변 1

모양을 정수 리스트로 얻으려면 tensor.get_shape().as_list()를 사용하십시오.


tf.shape() 호출을 완료하기 위해 tensor2 = tf.reshape(tensor, tf.TensorShape([num_rows*num_cols, 1]))을 시도하십시오. 또는 직접 tensor2 = tf.reshape(tensor, tf.TensorShape([-1, 1]))을 할 수 있으며, 첫 번째 차원은 추론될 수 있습니다.

답변 2

텐서플로우의 텐서 차원(형태)을 int 값으로 가져오는 방법에 대해 알아보겠습니다. 텐서플로우는 딥러닝과 머신러닝을 위한 오픈 소스 소프트웨어 라이브러리로서, 다양한 수학 연산과 텐서(다차원 배열) 조작을 지원합니다. 텐서의 형태를 확인하고 해당 차원을 int 값으로 가져오는 것은 데이터 처리 및 모델 구축 시 유용한 정보이며, 다음과 같은 방법으로 수행할 수 있습니다.
첫 번째로, 텐서의 차원을 확인하기 위해 텐서플로우의 `shape` 속성을 사용합니다. 예를 들어, 텐서 `tensor`가 있다고 가정해봅시다. 텐서플로우에서는 다음과 같이 `shape` 속성을 사용하여 해당 텐서의 형태를 얻을 수 있습니다.
```python
import tensorflow as tf
tensor = tf.constant([[1, 2, 3], [4, 5, 6]])
shape = tensor.shape # 텐서의 형태를 가져옴
print(shape) # 출력: (2, 3)
```
위의 코드에서 `shape` 변수에는 `(2, 3)`이라는 튜플 형태로 텐서의 차원이 저장됩니다.
그러나 이 값은 튜플 형태이므로, 따로 차원을 추출하기 위해 추가적인 처리가 필요합니다. 각각의 차원을 int 값으로 가져오기 위해서는 `shape` 튜플의 각 요소에 접근하여 값을 추출하면 됩니다.
```python
import tensorflow as tf
tensor = tf.constant([[1, 2, 3], [4, 5, 6]])
shape = tensor.shape # 텐서의 형태를 가져옴
dim1 = shape[0] # 첫 번째 차원을 int 값으로 가져옴
dim2 = shape[1] # 두 번째 차원을 int 값으로 가져옴
print(dim1) # 출력: 2
print(dim2) # 출력: 3
```
위의 코드에서 `dim1` 변수에는 첫 번째 차원의 크기인 2가 저장되고, `dim2` 변수에는 두 번째 차원의 크기인 3이 저장됩니다. 이렇게 각 차원을 int 값으로 추출하여 사용할 수 있습니다.
텐서플로우에서 텐서의 차원을 int 값으로 가져오는 방법에 대해 알아보았습니다. 이를 통해 데이터 처리 및 모델 구축 시 텐서의 형태에 대한 중요한 정보를 얻을 수 있습니다.

반응형
Comments