tf.matmul는 행렬곱 연산을 수행하며 tf.multiply는 element-wise 곱(성분곱) 연산을 수행함. 예시를 들어 연산을 수행해보자.
다음과 같은 상황을 가정해보자
# 예시 상황
a = [[1,2,3], [4,5,6]]
b = [[1,2],[3,4],[5,6]]
행렬곱 연산은 정상 동작하나,
# tf.matmul 연산
tf.matmul(a, b)
<tf.Tensor: shape=(2, 2), dtype=int32, numpy=
array([[22, 28],
[49, 64]], dtype=int32)>
성분곱 연산은 오류가 발생한다.
# element-wise 연산
tf.multiply(a, b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "환경정보/tensorflow/python/util/traceback_utils.py", line 153, in error_handler
raise e.with_traceback(filtered_tb) from None
File "환경정보/tensorflow/python/eager/execute.py", line 52, in quick_execute
tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
tensorflow.python.framework.errors_impl.InvalidArgumentError: {{function_node __wrapped__Mul_device_/job:localhost/replica:0/task:0/device:CPU:0}} Incompatible shapes: [2,3] vs. [3,2] [Op:Mul]
반대로 아래와 같은 상황에서는?
a = [[1, 2, 3], [4, 5, 6]]
c = [[11, 12, 13], [14, 15, 16]]
행렬 곱 연산에서 오류가 발생하고
tf.matmul(a, c)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "환경정보/tensorflow/python/util/traceback_utils.py", line 153, in error_handler
raise e.with_traceback(filtered_tb) from None
File "환경정보/tensorflow/python/framework/ops.py", line 7215, in raise_from_not_ok_status
raise core._status_to_exception(e) from None # pylint: disable=protected-access
tensorflow.python.framework.errors_impl.InvalidArgumentError: {{function_node __wrapped__MatMul_device_/job:localhost/replica:0/task:0/device:CPU:0}} Matrix size-incompatible: In[0]: [2,3], In[1]: [2,3] [Op:MatMul]
성분곱 연산에서는 정상 동작한다
tf.multiply(a, c)
<tf.Tensor: shape=(2, 3), dtype=int32, numpy=
array([[11, 24, 39],
[56, 75, 96]], dtype=int32)>
>>> 결론
tf.matmul은 행렬곱, tf.multiply는 성분곱 연산에 사용할 수 있으며, 입력 데이터에 대하여 행렬곱연산의 경우 (m,n), (n,x)의 쉐입을, 성분곱연산의 경우 (m,n), (m,n)의 쉐입을 맞춰 주어야 메서드가 정상적으로 동작한다.
반응형
'인공지능' 카테고리의 다른 글
tensorflow 2.xx multi gpu 사용하기 (gpu, cpu 지정하기, 2.3 이상) (2) | 2023.07.19 |
---|---|
leave-one-out evaluation이란? (0) | 2023.07.18 |
[Kaggle] A Journey of Enzyme Classification (0) | 2023.07.17 |
Autoencoder & Anomaly Detection (오토인코더와 이상 탐지) (0) | 2023.07.14 |
MNIST 데이터 읽기 (0) | 2023.07.03 |