은공지능 공작소 :: [tensorflow] 텐서플로를 이용한 논리연산

 

 

 

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

오늘은 텐서플로를 이용한

논리연산에 대해 알아보겠습니다.

(아래 YouTube 동영상도 참고해 주세요)

 

 

 

 

 

 

 

 

 

1. 논리연산의 개념

 

 

 

논리연산이란,

참과 거짓 두 가지 결과를 내놓는

연산을 말합니다.

 

수학기으로 따지자면,

등호(=)와 부등호(<, >, >=, <=) 연산이

여기에 포함됩니다.

 

파이썬에서 참은 True,

거짓을 False로 표현되는데요.

이러한 결과들을 내놓는 논리연산을

알아보기 이전에,

먼저 간단한 텐서와 함수들을

만들어 두고 시작하겠습니다.

 

 

 

 

 

2. 사전 준비

 

 

 

import tensorflow as tf

c1, c2 = tf.constant([1, 3]), tf.constant([5, 7])
v1, v2 = tf.Variable([1, 9]), tf.Variable([7, 7])
def sRun(input):
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        rst = input.eval()
        return(rst)

def spr(a):
    print(sRun(a))

c1, c2는 Constant이고,

v1, v2는 Variable입니다.

 

sRun은 session run이라는 것을 줄여서

만들어 보았습니다.

텐서를 쉽게 보기 위한 함수입니다.

 

spr함수는 session print를 줄여서

이름을 붙였습니다.

이는 단순히 프린트를 위한 함수로,

리턴값은 없습니다.

 

 

 

 

 

3. 텐서플로 등호비교 함수

(tf.equal, tf.not_equal)

 

 

tensor list:
c1:  [1 3]
c2:  [5 7]
v1:  [1 9]
v2:  [7 7]
spr(tf.equal(c1, v1))
spr(tf.not_equal(c1, v1))
[ True False]
[False  True]

tf.equal 함수는

c1과 v1을 비교하여

두 텐서의 원소가 같다면 True를,

같지 않다면 False를 출력합니다.

 

 

 

tf.not_equal 함수는

tf.equal 함수와 정반대 개념이라고

이해하시면 편리합니다.

비교 원소가 같이 않으면 True를,

같다면 False를 출력하는 것이지요.

 

 

 

 

 

4. 텐서플로 대소비교 함수

(tf.less, tf.less_equal, tf.greater, tf.greater_equal)

 

 

 

텐서플로 대소비교함수는

두 텐서의 원소들을 비교해

True, False 두가지 결과를 내놓습니다.

 

위에 tf.less를 설명해놓은

그림을 보신다면 쉽게 이해하실 수 있을 겁니다.

 

 

 

tensor list:
c1:  [1 3]
c2:  [5 7]
v1:  [1 9]
v2:  [7 7]
spr(tf.less(c1, v1))
spr(tf.less_equal(c1, v1))

spr(tf.greater(c1, v1))
spr(tf.greater_equal(c1, v1))
output:
[False  True]
[ True  True]

[False False]
[ True False]

tf.less 이외에도 tf.less_equal,

tf.greater, tf.greater_equal 함수가

존재합니다.

 

문법은 less와 동일하므로

자세한 설명은 생락하도록 하겠습니다.

 

 

 

 

 

 

5. and, or, xor, not

 

 

 

 

지금부터 살펴볼 연산들의

input은 모두 bool type 입니다.

즉, input으로 True 와 False만

사용할 수 있습니다.

 

 

 

tf.logical_and 연산은

input들이 모두 True 여야 True를

출력합니다.

 

 

 

tf.logical_or 함수는

input 들을 비교했을 때, 하나라도 True라면

True를 출력합니다.

 

 

 

tf.logical_xor 함수는 input들을 비교해서,

같지 않다면 True, 같다면 False를

출력합니다.

 

만약 True를 1이라고 하고

False를 0이라고 한다면,

이 연산은 원소들을 더한 값을

tf.mod 2하는 결과와 동일합니다.

 

햇갈리시는 분들은 그냥

"같지 않다면 True를 출력!"

이 점을 기억해주시면 됩니다.

 

 

 

tf.logical_not은

input과 반대의 결과를 내놓습니다.

 

input이 True라면 False를

False라면 True를 내놓는 것입니다.

 

 

 

c3 = tf.constant([True, False])
c4 = tf.constant([False, False])
c5 = tf.constant([True, True])
spr(tf.logical_and(c3, c5))
spr(tf.logical_or(c3, c4))
spr(tf.logical_xor(c3, c4))
spr(tf.logical_not(c3))
output:
[ True False]
[ True False]
[ True False]
[False  True]

연산들을 정리한 코드입니다.

설명은 그림을 통해 자세하게 설명했으니

여기서는 실행 결과를 봐주시면 되겠습니다.

 

 

 

네 이렇게 오늘은 equal 부터 시작해서

logical_not까지 텐서플로의 논리연산에 대해

살펴보는 시간을 가졌습니다.

 

 

 

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

긴 글 끝까지 읽어주셔서 감사합니다 :)

 

 

 

 

반응형
블로그 이미지

pychan

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

,