Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬(Python)으로 TensorFlow에서 요소별 곱셈(Element-wise Multiplication) 수행하기

TensorFlow란 무엇인가?

TensorFlow는 구글(Google)이 제공하는 머신러닝 프레임워크입니다. 오픈소스로 공개되어 있으며, 파이썬과 함께 사용하여 다양한 알고리즘과 딥러닝 애플리케이션 등을 구현할 수 있습니다. 연구 목적과 실제 서비스(프로덕션) 환경 모두에서 널리 활용되고 있으며, 복잡한 수학적 연산을 빠르게 처리할 수 있는 최적화 기법들을 내장하고 있습니다.

이것이 가능한 이유는 TensorFlow가 NumPy와 다차원 배열을 기반으로 동작하기 때문입니다. 이러한 다차원 배열은 '텐서(tensor)'라고 불립니다. TensorFlow는 심층 신경망(deep neural network) 작업을 폭넓게 지원하며, 뛰어난 확장성을 갖추고 있고 다양한 인기 데이터셋도 함께 제공합니다. GPU 연산을 활용해 성능을 높이고, 리소스 관리까지 자동화해 줍니다. 또한 방대한 머신러닝 라이브러리를 포함하고 있으며, 공식 문서와 커뮤니티 지원이 잘 되어 있습니다. 덕분에 딥러닝 모델을 실행하고 학습시키고, 데이터셋의 특성을 예측하는 애플리케이션까지 손쉽게 만들 수 있습니다.

'tensorflow' 패키지는 윈도우(Windows) 환경에서 아래 코드 한 줄로 설치할 수 있습니다.

pip install tensorflow

텐서(Tensor)란?

텐서는 TensorFlow에서 사용되는 핵심 데이터 구조입니다. 데이터 흐름 다이어그램에서 노드와 노드를 잇는 엣지(edge)를 연결하는 역할을 하며, 이 다이어그램은 '데이터 흐름 그래프(Data Flow Graph)'라고 불립니다. 쉽게 말해 텐서란 다차원 배열 또는 리스트 그 자체를 의미합니다.

이번 글에서는 Jupyter Notebook을 사용해 코드를 실행해 보겠습니다. Jupyter Notebook 역시 'pip install tensorflow' 명령어 하나로 TensorFlow를 설치할 수 있습니다.

예제

다음은 두 개의 행렬에 대해 요소별 곱셈을 수행하는 예제 코드입니다.

import tensorflow as tf
import numpy as np

matrix_1 = np.array([(1,2,3,4,5)],dtype = 'int32')
matrix_2 = np.array([(-1,0,1,3,3)],dtype = 'int32')
print("첫 번째 행렬은 ")
print (matrix_1)
print("두 번째 행렬은 ")
print (matrix_2)
print("곱셈 결과는 ")
matrix_1 = tf.constant(matrix_1)
matrix_2 = tf.constant(matrix_2)
matrix_prod = tf.multiply(matrix_1, matrix_2)
print((matrix_prod))

실행 결과

첫 번째 행렬은
[[1 2 3 4 5]]
두 번째 행렬은
[[-1 0 1 3 3]]
곱셈 결과는
tf.Tensor([[-1 0 3 12 15]], shape=(1, 5), dtype=int32)

코드 설명

  • 필요한 패키지를 임포트하고, 사용 편의성을 위해 별칭(alias)을 지정합니다.

  • NumPy 패키지를 사용하여 두 개의 행렬을 생성합니다.

  • NumPy 배열을 tf.constant()를 통해 TensorFlow의 상수 텐서로 변환합니다.

  • TensorFlow의 tf.multiply() 함수를 사용하여 두 행렬의 같은 위치에 있는 원소끼리 곱하는 요소별 곱셈(하마드 곱, Hadamard Product)을 수행합니다.

  • 연산 결과인 텐서를 콘솔에 출력합니다. 출력 결과에서 shape=(1, 5), dtype=int32 정보를 함께 확인할 수 있습니다.

참고로 요소별 곱셈은 행렬 곱셈(np.matmul, tf.matmul)과는 다른 연산입니다. 요소별 곱셈은 두 행렬의 형태(shape)가 동일할 때 대응하는 원소끼리 단순히 곱하는 방식이므로, 두 개념을 혼동하지 않도록 주의해야 합니다.