본문 바로가기
파이썬 (Python)/Tensor Flow

Python 파이썬 + 구글이 만든 괴물같은 파워풀한 라이브러리 텐서플로우(tensorflow) + 사칙연산 및 행렬 곱 구현하기

by ★√★ 2021. 2. 1.

안녕하세요, Davey 입니다. 오늘이 포스팅할 내용은, 구글이 만든 괴물같은 라이브러리, 텐서플로우(tensorflow)에 대한 내용이며, 제가 이해한 부분을 코딩하실 때 조금이나마 도움이 되시라고 설명 드릴려고 합니다. 일단 텐서플로우(tensorflow)가 무엇인지에 대해서, 간략하게 설명을 드리고, 예제를 통해서 설명 드리도록 하겠습니다. 

 

 

1. 텐서플로우(tensorflow) 라이브러리에 대해서

: 구글이 2011년에 개발을 시작하여 2015년에 오픈 소스로 공개한 기계학습 라이브러리로서, 딥러닝과 기계학습 분야를 일반인들도 사용하기 쉽도록 다양한 기능들을 제공하고 있습니다. 딥러닝의 대표 주자로서, 2016년 알파고가 있는데, 이로 인해, 딥러닝에 대해서, 각국 나라에서 많은 관심을 가지고 있는 상황입니다. 특히 Python에 최적화 (관련 자료 및 구현 기능이 많음)되어 있어, Python 사용자들이 다양한 분야에서 활용하고 있습니다. 단, 기계학습을 정말로 로우 레벨부터 짜거나, 신경망 구조를 프로젝트에 딱 맞는 최적의 구조로 학습시켜 최적의 결과물을 내기 위해서는 파이토치를 써야 합니다.. 이유는 텐서플로우 라이버러리 자체가 신경망이 한번 학습되기 시작하면 신경망의 구조는 그 구조로 고정되어야만 학습이 가능한 그래프 구조인데 비해, 파이토치는 학습 과정에서 신경망의 구조까지 스스로 학습하여 스스로 변하게 할 수 있는 레이어구조 이기 때문입니다. 실제 상용에 쓰이는 데도 성능의 차이가 심하며, 이미 학계에서는 파이토치가 텐서플로우를 앞질러서 대세로 쓰이고 있다고는 합니다. 오죽하면 해외에는 구글이 실제 사내에서 공개된 텐서플로우를 안 쓴다는 말부터(동일한 결과를 내기 위해서는 파이토치 대비 수십배 더 많은 컴퓨팅 파워와 훈련 시간을 요구하기 때문입니다.), 텐서플로우는 첫 단추부터 잘못 시작된 라이브러리가 아닌가 하는 자조도 돌고 있는 실정입니다. 단 간단하게 상용으로 개발하는데 있어서는 아직까지 사용자가 많은 텐서플로우가 참고자료가 많아 유용한 편입니다.

[참조 : https://namu.wiki/w/%ED%85%90%EC%84%9C%ED%94%8C%EB%A1%9C%EC%9A%B0]

 

2. 텐서플로우(tensorflow) 라이브러리 설치 및 선언

: 텐서플로우(tensorflow)를 사용하기 위해서는 아래와 같이 설치와 선언을 해주셔야 합니다. 

 

1) 텐서플로우(tensorflow) 설치 명령어 

 : pip install tensorflow  

 

 - 위 명령어를 입력하게 되면, 설치 과정 및 완료에 대한 상태창을 보실 수 있습니다. 만약에 이미 설치가 된 상태라면, "Requrement already satisfied" 라는 문구가 보실 수 있습니다. 

 

2) 텐서플로우(tensorflow) 라이브러리 선언

: 텐서플로우(tensorflow) 라이브러리 선언을 위해서 아래 Code를 넣어 주셔야 합니다. 

 

import tensorflow as tf

# 보통, "tf" 라는 Short Term을 사용하여, 라이브러리를 불러 옵니다. 다른 단어로 사용하셔도 무방합니다. 


3. 텐서플로우(tensorflow) 라이브러리 활용하기 


: 텐서플로우(tensorflow)를 라이브러리를 활용하여, 아래 사항을 구현해보도록 하겠습니다.  


 1) 상수 초기화 (상수 값 가져오기) 

 : 아래 코드를 이용하여, 상수 초기화 (상수 값 가져오기)를 구현 할 수 있습니다. 

# Tensorflow를 이용한 상수 선언 Code
TEST1 = tf.constant(50)                   # TEST1에 상수 50을 초기화
TEST2 = tf.constant(100)                # TEST2에 상수 100을 초기화

 

 

2) 입력한 상수 값을 이용하여 사칙 연산 구현하기

 : 아래 코드를 이용하여, 입력한 상수 값을 이용하여 사칙 연산을 구현 해보도록 하겠습니다.

 

==================================================================================

 

import tensorflow as tf


# Tensorflow를 이용한 상수 선언 Code
TEST1 = tf.constant(50)                   # TEST1에 상수 50을 초기화
TEST2 = tf.constant(100)                # TEST2에 상수 100을 초기화

# Tensorflow를 이용해 선언한 상수를 이용한 사칙 연산 Code
Result1 = tf.add(TEST1, TEST2)               # 상수 값의 덧셈을 구현함. 
Result2 = tf.subtract(TEST2, TEST1)         # 상수 값의 뺄셈을 구현함. 
Result3 = tf.multiply(TEST1,TEST2)           # 상수 값의 곱셈을 구현함. 
Result4 = tf.divide(TEST1,TEST2)               # 상수 값의 나눗셈을 구현함. (Method #1) 
Result5 = tf.truediv(TEST1,TEST2)             # 상수 값의 나눗셈을 구현함. (Method #2) 

# Tensorflow를 이용해 선언한 상수를 이용한 사칙 연산 Code 결과 값
print("Result1 : \n",Result1.numpy())     
print("Result2 : \n",Result2.numpy())
print("Result3 : \n",Result3.numpy())
print("Result4 : \n",Result4.numpy())
print("Result5 : \n",Result5.numpy())

==================================================================================

 

- 위 코드를 실행 시켜 보면 아래와 같은 결과 값을 보실 수 있습니다. 즉, 사칙연산이 이뤄지는 걸 확인 할 수 있습니다.

 

 

 3) 변수 초기화 (변수에 값 입력하기)

 : 아래 코드를 이용하여, 변수 초기화 (변수에 값 입력하기)를 구현 할 수 있습니다.

 

==================================================================================

 

# Tensorflow를 이용한 변수 선언 Code
TEST3 = tf.Variable(15)    # TEST3에 변수 값 15을 입력, 텐서플로어(tensorflow)에서는 상수랑 변수 선언은 큰 차이가 없음.
TEST4 = tf.Variable(30)    # TEST3에 변수 값 30을 입력, 텐서플로어(tensorflow)에서는 상수랑 변수 선언은 큰 차이가 없음.

 

 


4) 입력한 변수 값을 이용하여 사칙 연산 구현하기

 : 아래 코드를 이용하여, 입력한 변수 값 이용하여 사칙 연산을 구현 해보도록 하겠습니다.

 

==================================================================================

 

import tensorflow as tf



# Tensorflow를 이용한 변수 선언 Code
TEST3 = tf.Variable(15)    # TEST3에 변수 값 15을 입력, 텐서플로어(tensorflow)에서는 상수랑 변수 선언은 큰 차이가 없음.
TEST4 = tf.Variable(30)    # TEST3에 변수 값 30을 입력, 텐서플로어(tensorflow)에서는 상수랑 변수 선언은 큰 차이가 없음.

# Tensorflow를 이용해 선언한 변수를 이용한 사칙 연산 Code
Result6 = tf.add(TEST3, TEST4)            # 변수 값의 덧셈을 구현함. 
Result7 = tf.subtract(TEST4, TEST3)    # 변수 값의 뺄셈을 구현함. 
Result8 = tf.multiply(TEST3,TEST4)      # 변수 값의 곱셈을 구현함. 
Result9 = tf.divide(TEST3,TEST4)        # 변수 값의 나눗셈을 구현함. (Method #1)  
Result10 = tf.truediv(TEST3,TEST4)    # 변수 값의 나눗셈을 구현함. (Method #2) 

# Tensorflow를 이용해 선언한 변수를 이용한 사칙 연산 Code 결과 값
print("Result6 : \n", Result6.numpy())
print("Result7 : \n",Result7.numpy())
print("Result8 : \n",Result8.numpy())
print("Result9 : \n",Result9.numpy())
print("Result10 : \n",Result10.numpy())

 

==================================================================================

 

- 위 코드를 실행 시켜 보면 아래와 같은 결과 값을 보실 수 있습니다. 즉, 상수 초기화 Case와 마찬가지로, 사칙연산이 잘 이뤄지는 걸 확인 할 수 있습니다.

 

 

5) 텐서플로어(tensorflow)로 행렬 곱 구현 해보기. 

 : 위 2개의 코드를 통해서, 텐서플로어(tensorflow)를 통해서, 사칙연산이 되는 걸 확인 하셨습니다. 그럼 이번에는 행렬의 곱을 구현해보도록 하겠습니다. 행렬의 사칙연산은, 사칙연산의 기능에 대해서, 위의 2 코드에서 구현을 했기 때문에 생략하도록 하겠습니다. 그럼 아래 Code 참조 부탁 드립니다. 

 

==================================================================================

 

import tensorflow as tf



# Tensorflow로 행렬 상수 선언 Code
TEST5 = tf.constant([[1, 2, 3]])                 # 1 x 3 행렬 선언
TEST6 = tf.constant([[10],[20],[30]])       # 3 x 1 행렬 선언
TEST7 = tf.constant([[5,6,7]])                   # 1 x 3 행렬 선언

# Tensorflow를 이용한 행렬의 곱 Code
Result11 = tf.matmul(TEST5, TEST6)      # TEST5 x TEST6 행렬 곱을 구현
Result12 = tf.matmul(TEST6, TEST7)      # TEST6 x TEST7 행렬 곱을 구현
Result13 = tf.matmul(TEST6, TEST5)      # TEST6 x TEST5 행렬 곱을 구현

# Tensorflow를 이용한 행렬의 곱 Code 결과 값
print("Result11 : \n", Result11.numpy())
print("Result12 : \n", Result12.numpy())
print("Result13 : \n", Result13.numpy())

 

==================================================================================

 

- 위 코드를 실행 시켜 보면 아래와 같은 결과 값을 보실 수 있습니다. 즉, 행렬의 곱도 성공적으로 구현이 되는 걸 확인 할 수 있습니다.

 

 

이상입니다. 텐서플로어(tensorflow)는, 위에서 제가 소개 드리는 것은 이전 scipy 포스팅한 것처럼 아주 기본적인 것만 설명을 드린 상태입니다. 추가적인 기능은 제가 자료를 준비하여, 추가적으로 포스팅 하도록 하겠습니다. 혹시 그 전에 정보를 알고 싶으시다면, 아래 홈페이지 참조 하시면, 더 많은 정보를 빠르게 찾으실 수 있습니다.

[참조 : https://www.tensorflow.org/]

 

그럼 항상 말씀 드리지만, 공부하느라 수고 하셨고, 같이 공부해서, 같이 성장하시죠! 감사합니다. 

 

제 Posting이 조금이나마 정보 전달에 도움이 되셨길 빌며, 되셨다면, 구독, 댓글, 공감 3종 세트 부탁 드립니다. 감사합니다. 

[저작권이나, 권리를 침해한 사항이 있으면 언제든지 Comment 부탁 드립니다. 검토 후 수정 및 삭제 조치 하도록 하겠습니다. 그리고, 기재되는 내용은 개인적으로 습득한 내용이므로, 혹 오류가 발생할 수 있을 가능성이 있으므로, 기재된 내용은 참조용으로만 봐주시길 바랍니다. 게시물에, 오류가 있을때도, Comment 달아 주시면, 검증 결과를 통해, 수정하도록 하겠습니다.]

 

728x90

댓글