은공지능 공작소 :: 'tf.multiply vs tf.matmul' 태그의 글 목록

'tf.multiply vs tf.matmul'에 해당되는 글 1건

 

 

 

안녕하세요! 은공지능 공작소입니다.

오늘은 텐서플로를 이용한

사칙연산에 대해서 알아보는

시간을 갖겠습니다.

 

 

 

 

 

 

 

텐서플로로 머신러닝, 딥러닝을

수행하다보면

많은 수학적인 연산이 필요합니다.

 

이러한 수학적인 연산의

기초가 되는 것이

오늘 다룰 사칙연산입니다.

 

 

 

 

 

 

1. 사전준비

 

 

 

import tensorflow as tf

c1 = tf.constant([[1, 2], [3, 4]]) # 2 x 2 행렬
c2 = tf.constant([[4, 7], [-1, 0]])
e = tf.constant([[1, 0], [0, 1]]) # 단위 행렬
v1 = tf.Variable([[10, 9], [8, 7]])
v2 = tf.Variable([[3, 6], [5, -1]])
def sRun(input): 
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        rst = input.eval()
        print(rst)
        return(rst)

기본적인 텐서들을 만들어주고

이를 실행하기 위한 함수(sRun)도

하나 만들었습니다.

 

이제 덧셈부터

나눗셈과 나머지까지

텐서연산법에 대해 알아보겠습니다.

 

 

 

 

 

2. 덧셈 (tf.add vs tf.add_n)

 

 

sRun(tf.add(c1, c2))
sRun(tf.add_n([c1, c2, c1]))

sRun(tf.add(c1, v1))
output:
[[5 9]
 [2 4]]
[[ 6 11]
 [ 5  8]]
[[11 11]
 [11 11]]

덧셈의 결과는 각각의 원소들의

덧셈입니다.

 

예를 들어 tf.add(c1, c2)의 1행 1열은

1(c1) + 4(c2) = 5(output)

과 같은 수식을 통해 도출됩니다.

 

tf.add_n도 tf.add와 마찬가지입니다.

다만, tf.add_n과 tf.add의 차이는

tf.add_n은 많은 양의 텐서를 

한 번에 처리할 수 있다는 것입니다.

 

여기서 주의할 점은

tf.add_n은 텐서들을 반드시

대괄호 안에 넣어줘야

한다는 것입니다.

(그렇지 않으면 TypeError가 발생)

 

또한 tf.add(c1, v2)처럼

constant 텐서와 variable 텐서 간의

연산도 가능하니,

이 점 참고해 주시면 되겠습니다.

 

 

 

 

 

3. 뺄셈 (tf.subtract)

 

 

 

sRun(tf.subtract(v1, v2))
output:
[[7 3]
 [3 8]]

다음으로 알아볼 것은 뺄셈입니다.

이전 텐서플로 버전에서는

tf.sub라는 명령어였던 것으로

기억하고 있습니다.

새로운 텐서플로 버전에서는

tf.sub -> tf.subtract로 업데이트

되었습니다.

 

텐서플로 뺄셈도 덧셈과 동일하게

원소들의 뺄샘으로 이루어집니다.

그러니 자세한 설명은

생략하도록 하겠습니다.

 

 

 

 

 

4. 곱셈 (tf.multiply vs tf.matmul)

 

 

 

sRun(tf.multiply(c1, e)) # 원소곱
sRun(tf.matmul(c1, e)) # 행렬곱
output:
[[1 0]
 [0 4]]
[[1 2]
 [3 4]]

텐서플로의 곱셈입니다.

곱셈 함수는 크게 2가지가 있습니다.

tf.multiply와 tf.matmul 입니다.

 

 

 

tf.multiply는 원소들의 곱입니다.

같은 색 숫자끼리의 곱셈이라고

이해하시면 쉬울 것입니다.

그러나 이는 우리가 흔이 알고있는

행렬의 곱셈은 아닙니다.

 

행렬의 곱셈은

tf.matmul 이라는 함수를 통해

구현할 수 있습니다.

 

 

 

 

tf.matmul을 통해

행렬의 곱셈을 구현할 수 있습니다.

연산방식은 위의 그림을

참조해주시면 됩니다.

 

 

 

 

 

5. 나눗셈 (tf.divide, tf.mod)

 

 

 

c3 = tf.constant(10)
c4 = tf.constant(7)

sRun(tf.divide(c3, c4))
sRun(tf.mod(c3, c4))
output:
1.4285714285714286
3

텐서플로 나눗셈을 쉽게 이해하기 위해

c3, c4 텐서를 새롭게 만들었습니다.

 

 

 

tf.divide(~를, ~로 나누면?)         
tf.mod(~를, ~로 나눈 나머지는?)

위와 같은 문법으로 이해하시면

쉬울 것 같습니다.

코드 결과를 참조해주시면 됩니다.

 

아, 참고로 행렬의 나눗셈도 동작하며

행렬의 나눗셈은 원소들의 나눗셈으로

연산이 됩니다.

 

 

 

 

 

-----------------------------------------------

오늘 포스팅은 여기서 마치겠습니다.

감사합니다.

 

반응형
블로그 이미지

pychan

딥러닝에 관련된 시행착오, 사소하지만 중요한 것들, 가능한 모든 여정을 담았습니다.

,