rueki
1. 텐서플로우의 기초 및 변수 본문
머신러닝 및 딥러닝 구현에 유용한 라이브러리 Tensorflow에 대해 알아보려고 한다.
텐서(Tensor) : 다차원 배열로 나타내는 데이터
플로우(flow) : 데이터의 흐름
즉, 텐서플로우는 그래프를 따라 데이터가 노드를 거쳐 흘러가면서 계산을 수행한다.
텐서플로우를 사용해보는 시간을 가져보자.
#텐서플로우 라이브러리 불러오기
import tensorflow as tf
텐서플로우를 사용하기 위해서는 먼저 라이브러리 호출을 해야한다.
호출을 해보았으면 먼저, 텐서플로우로 Hello, TensorFlow를 실행해보자.
hello = tf.constant('Hello, TensorFlow!') #constant = 상수
print(hello)
텐서플로우에서는 상수 설정을 Constant로 선언을 해줘야한다.
여기까지는 다른 언어의 hello, world를 출력했던 방식과 유사하다는 것을 보았을것이다.
그러나 출력결과는 Tensor에 대한 정보만 출력이 된다.
Tensor("Const:0", shape=(), dtype=string)
그러면 Hello, TensorFlow를 출력하려면 어떻게 해야될까?
그것에 대해서는 바로 뒤에 설명하도록 하겠다.
이에 앞서, 간단한 add연산을 해보자
a = tf.constant(10)
b = tf.constant(32)
c = tf.add(a,b)
여기서 앞에서와 같이, print만 쓴다면, 역시 tensor의 정보에 대해서만 나올 것이다.
텐서플로우에서는 하나의 Session을 만들고 run을 해야 실행이 된다.
즉, 쉽게 이해하기 위해서는 Session이라는 하나의 Object로 이해하고, 그것을 직접 실행시킨다라고 생각해도 될 것이다.
sess = tf.Session() #Session 생성
sess.run([a,b,c]) # Session 실행
#결과
[10, 32, 42]
정상적으로 우리가 원하는 결과가 출력된 것을 볼 수 있었다.
이제는 변수에 대해 알아보자.
기존의 언어에서는 예를 들어 int a, float b 이런식으로 선언을 했을 것이다.
그러나 텐서플로우에서는 tf.Variable()을 통해 선언을 해야한다.
#placeholder는 하나의 그릇이라 생각하면 된다. 즉 입력값을 받는 변수라고 보면 된다.
X = tf.placeholder(tf.float32, [None,3])
x_data =[[1,2,3],[4,5,6]]
# H = W * X + b
# random_normal은 각 변수들의 초기값을 정규분포 랜덤값으로 초기화한다.
W = tf.Variable(tf.random_normal([3,2])) #가중치
b = tf.Variable(tf.random_normal([2,1])) #편향
머신러닝 및 딥러닝에서 가설을 세울 때 기본이 되는 H = W*X + b 를 사용하였다.
가중치 W와 b는 선언을 했으니 H = W*X + b을 구현해보자
expr = tf.matmul(X,W) + b
sess= tf.Session() #Session 생성
#session 안의 값은 모델 실행전에 초기화가 필수이다.
init = tf.global_variables_initializer()
sess.run(init)
matmul은 원소간곱셈을 나타냄으로서, 행렬간의 곱셈에서 사용한다.
이제 식도 세웠으니 앞에서 만든 입력값을 넣어서 모델을 실행시켜보자
print(sess.run(expr, feed_dict={X:x_data}))
#출력
[[-3.2674031 4.125989 ]
[-5.6864033 12.744687 ]]
다음 시간에는 Linear Regression, 선형 회귀의 구현에 대해 알아보도록 하겠다.
'Tensorflow' 카테고리의 다른 글
TensorFlow 01. 사용법 알아보기 (0) | 2019.12.03 |
---|---|
5. Mnist 예제 (0) | 2019.07.18 |
4.신경망 구현 - Hidden layer 추가 (5) | 2019.07.17 |
3. 신경망 구현 (0) | 2019.07.16 |
2. 선형회귀 구현 (0) | 2019.07.16 |