11. 1. 텐서와 그래프 실행
텐서플로우를 사용 하기위해 먼저 임포트를 합니다.
텅 빈 cell에다 import tensorflow as tf 입력 후
키보드 [shift]+[enter]를 누르면, 해당 셀이 실행되고 다음 셀칸이 만들어집니다.
12. 1. 텐서와 그래프 실행
변수 hello에 문자열 데이터('Hello, Tensorflow!')를 담은 상수 텐서를 담고,
print() 함수로 실행을 하면 ‘Hello, Tensorflow!'가 아닌 오른쪽 사진과 같이 나옵니다.
13. 1. 텐서와 그래프 실행
텐서플로우는 계산 모델을 설계하고 실행하는 라이브러리입니다.
설계된 계산 모델은 하나의 session에서 실행하여 모델의 값들이 계속 수정이 이뤄집니다.
텐서 데이터들은 모델의 생성 상태, 반복 시점에 따라 계속 바뀌거나 존재하지 않을수도 있어
텐서플로우의 자료 구조인 텐서를 print()와 같은 함수로 바로 출력하면 해당 데이터의 내용이 아니라
해당 텐서에 들어가는 데이터의 타입, 길이, 형태등의 정보를 출력합니다.
14. 1. 텐서와 그래프 실행
플레이스 홀더 상수 변수
텐서의 자료형 종류
문자, 문자열
실수, 정수, 부울 등
문자, 문자열
실수, 정수, 부울 등
집합, 배열, 딕셔너리,
리스트 등
16. 1. 텐서와 그래프 실행
텐서 자료 예시
3 # 랭크가 0인 텐서; 셰이프는 []
-> 0차원 길이가 0인 데이터
[1. , 2. , 3.] # 랭크가 1인 텐서, 셰이프는 [3]
-> 1차원, 길이가 3인 데이터
[[1. , 2. , 3.], [4., 5., 6.]] # 랭크가 2인 텐서; 셰이프는 [2,3]
-> 2차원, 2행 3열의 데이터
[[[1. , 2. , 3.]], [[4., 5., 6.]]] # 랭크가 3인 텐서; 셰이프는 [2,1,3]
-> 3차원, 2층-1행-3열의 데이터
17. 1. 텐서와 그래프 실행
일반 코드의 경우 42가 나오겠지만
텐서 데이터를 그대로 print() 함수로 출력하면
다음과 같이 해당 데이터의 정보를 보여줍니다.
18. 1. 텐서와 그래프 실행
이전에 '밑바닥부터 시작하는 딥러닝'의 5장 오차역전파법을 보시면
순전파와 역전파 그래프를 그려 학습하였습니다.
텐서플로우 또한 이러한 퍼셉트론으로 구성된 신경망 그래프를 그려 동작하게 됩니다.
19. 1. 텐서와 그래프 실행
그래프(신경망 모델)를 사용하는
텐서플로우 프로그램의 구조는 아래의 두가지로 분리되어 있습니다.
1.그래프 생성
2.그래프 실행
20. 1. 텐서와 그래프 실행
a = tf.constant(10)
b = tf.constant(32)
c = tf.add(a,b)
sess.run(c)
10 32
+
a b
c
그래프
생성
그래프
실행
10+32
연산을 실제로 수행
그래프는 텐서들의 연산 모음(구성)으로 생각하면 됩니다.
텐서플로우는 텐서와 텐서간의 연산을 정의로 그래프를 만들고(1.그래프 생성)
연산 실행 코드를 원하는 '원하는 시점'에 넣어 연산을 수행하도록 합니다.(2.그래프 실행)
이를 지연 실행(lazy evaluation)이라 합니다.
21. 1. 텐서와 그래프 실행
그래프의 실행은 Session 안에서 이뤄지며,
아래와 같이 Session 객체와 run 함수를 이용하면 됩니다.
26. 2. 플레이스홀더와 변수
텐서 X에는 2차원 행렬로 ?행, 3열의 데이터만 사용할 수 있습니다.
아래는 x에 넣기위한 (2,3) , (1,3) , (3,3) 형태(shape)의 데이터입니다.
27. 2. 플레이스홀더와 변수
플레이스 홀더 상수 변수
텐서의 자료형 종류
문자, 문자열
실수, 정수, 부울 등
문자, 문자열
실수, 정수, 부울,
배열, 리스트 등
집합, 배열, 딕셔너리,
리스트 등
28. 2. 플레이스홀더와 변수
tf.Variable()은 텐서 변수를 생성하는 함수로 그래프에서 하나의 변수 역활을 합니다.
이 변수는 constant와 다르게 그래프의 연산 도중에 값이 변할 수 있습니다.
Variable을 생성할때 Constant와 마찬가지로 초기화 값을 직접 넣거나 임의의 확률 분포를 생성하여 초기화합니다.,
**아래의 tf.random_normal() 함수는 정규분포 값을 생성하는 함수로 [3,2] 형태를 매개변수로 넣으면
3행 2열의 정규분포를 따르는 확률값 행렬이 생성됩니다.
29. 2. 플레이스홀더와 변수
tf.matmul은 행렬의 내적 연산을 구하는 함수로
행렬을 이용한 신경망 연산에서 많이 사용하게 됩니다.
matmul()함수의 결과에 편향 b를 더하여 신경망 한층의 출력값을 만들게 됩니다.
30. 2. 플레이스홀더와 변수
플레이스 홀더와 변수를 이용한 좌측의 코드를 그리면 다음과 같습니다.
*placeholder인 텐서 X의 경우 그래프 연산(session)에서 시작하기 전에 데이터들이 입력됩니다.
이 그래프가 이해되지 않은 분들은 먼저 “밑바닥부터 시작하는 딥러닝”을 공부하시기 바랍니다.
Variable
[3,2]
placeholder
[None,3]
matmul
W X
b
+
Variable
[2,1]
expr
31. 2. 플레이스홀더와 변수
session 객체를 생성하여
텐서플로우 그래프가 계산되는 과정입니다.
Variable
[3,2]
placeholder
[None,3]
matmul
W X
b
+
Variable
[2,1]
expr
32. 2. 플레이스홀더와 변수
먼저 tf.global_variables_initializer() 함수를 sess.run()으로 실행하는데,
이 함수로 그래프를 사용하기 전에 변수 텐서들을 초기화 합니다.
변수 생성 시 매개변수 값에 따라 변수 텐서 W, b의 값이 초기화가 됩니다.
Variable
[3,2]
placeholder
[None,3]
matmul
W X
b
+
Variable
[2,1]
expr
33. 2. 플레이스홀더와 변수
x_data는 일반 파이썬 리스트 데이터이므로
sess.run 없이 그대로 출력됩니다.
Variable
[3,2]
placeholder
[None,3]
matmul
W X
b
+
Variable
[2,1]
expr
34. 2. 플레이스홀더와 변수
sess.run(W)에서는 변수 텐서 W의 값을 출력합니다.
초기화 때 3행 2열의 2차원 실수 데이터로 변수를 생성하여 그대로 출력이 됩니다.
Variable
[3,2]
placeholder
[None,3]
matmul
W X
b
+
Variable
[2,1]
expr
35. 2. 플레이스홀더와 변수
sess.run(b)에서는 변수 텐서 b의 값을 출력합니다.
초기화 때 2행 1열의 2차원 실수 데이터로 변수를 생성하여 그대로 출력됩니다.
Variable
[3,2]
placeholder
[None,3]
matmul
W X
b
+
Variable
[2,1]
expr
36. 2. 플레이스홀더와 변수
sess.run(expr,feed_dict={X:x_data})에서는 expr까지의 연산을 진행하게 됩니다.
이 시점에서 feed_dict를 이용하여 플레이스홀더 텐서 X에 어느 데이터를 넣을지 선언합니다.
feed_dict={(플레이스홀더):(해당 형태의 데이터)}를 따라 데이터를 주입하여 연산결과를 출력합니다.
Variable
[3,2]
placeholder
[None,3]
matmul
W X
b
+
Variable
[2,1]
expr
38. 2. 플레이스홀더와 변수
전체 코드 요약
placeholder 생성
placeholder 데이터 생성
변수 생성
연산과정 생성
세션 객체 생성 및 그래프 변수 초기화
placeholder에 사용할 데이터 출력
변수 W,b의 데이터 출력
placeholder에 x_data를 주입하여
그래프 연산 결과 출력
40. 3. 선형회귀모델 구현하기
선형 회귀란?
학습된 선형 모델을 이용해 주어진 입력 데이터를 분류(예측) 하는것으로
입력 x를 통해 출력 y를 판단합니다.
Y
X
입력 데이터
41. 3. 선형회귀모델 구현하기
그래프 생성하기
x 를 이용하여 y를 구하는 선형회귀모델 그래프를 구현합니다.
**여기서 W와 X는 행렬이 아니므로 matmul이 아닌 기본 곱셈 연산자를 사용합니다.
42. 3. 선형회귀모델 구현하기
비용 함수와 경사하강법을 이용한 최적화 함수 연산 그래프 생성
평균 제곱오차함수로 비용함수를 만들고,
경사하강법 최적화함수를 이용하여 비용함수가 최저가 되는 가중치와 편향값을 찾습니다(학습).
43. 3. 선형회귀모델 구현하기
선형회귀모델 학습(그래프 실행)하기
세션 객체를 생성하여 100회 학습을 통해 선형회귀모델을 학습 합니다.
처음 비용함수의 값이 1.199859이었으나 학습후 0.000811까지 비용 함수의 값이 줄었습니다.
.
.
.
비용함수 초기화
비용함수 계산(cost) 및 최적화(train_op) 수행
학습 횟수, 비용함수 결과 값, 가중치 값, 편향 값
44. 3. 선형회귀모델 구현하기
학습된 모델로 데이터 분류하기
학습된 퍼셉트론인 hypothesi의 placeholder X의 값이 5와 2.5일때
출력 Y도 정확히 예측하였습니다.