반응형
Tensorflow
구글에서 만든 데이터 사이언스를 위한 오픈소스 라이브러리로
data flow graph를 이용하고 수치 계산에 용이하다.
현재 최신버전은 2.0대인데,
파이썬 2.xx 버전이랑 3.xx 버전이 완전 다른 것처럼
텐서플로 2.xx 버전이랑 1.xx버전이 완전히 다르다.
2.xx 대 버전으로 바뀌면서 keras가 추가되어 완전히 바뀌었다고 한다.
Data Flow Graph
node와 edge로 구성된 방향성 있는 graph
- Node : 수치 계산과 데이터 입출력의 역할을 한다
- Edge : 데이터가 흐르는 통로로 Node, Tensor를 연결시킨다.
import
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import tensorflow as tf
import warnings
warnings.filterwarnings(action='ignore')
tf.constant
상수값을 들고 있는 노드
node1 = tf.constant(10, dtype=tf.float32)
node2 = tf.constant(30, dtype=tf.float32)
node3 = node1 + node2
위의 코드를 그림으로 표현하면 이것과 같다.
node3는 node1과 node2를 연결만 해두었고 실행을 하지 않기 때문에, 아직 값을 들고 있지는 않다.
노드를 만들 때 데이터 타입을 정할 수 있는데, 주로 수치 계산에 이용하므로 실수형으로 지정해주었다.
tf.Session
노드를 실행시키기 위한 세션
sess = tf.Session()
## graph를 실행시킴
print(sess.run(node1))
print(sess.run(node3))
> 출력
10.0
40.0
여러 개의 노드를 한 번에 실행시키려면 리스트로 지정해주면 된다.
sess.run([node1, node2, node3])
> 출력
[10.0, 30.0, 40.0]
tf.placeholder
그래프가 실행될 때 값을 입력받을 수 있는 노드
session을 실행할 때 feed_dict 옵션으로 값을 줄 수 있다.
node1 = tf.placeholder(dtype=tf.float32)
node2 = tf.placeholder(dtype=tf.float32)
node3 = node1 + node2
sess = tf.Session()
sess.run(node3, feed_dict={node1 : 10, node2 : 30})
> 출력
40.0
Linear Regression 구현해보기
df = pd.read_csv('./data/student_exam_score.csv')
display(df.head())
소스코드
# Training Data Set
x_data = df.drop('exam', axis=1, inplace=False)
y_data = df['exam'].values.reshape(-1,1)
# Prediction
# 모델 학습이 끝난 후 예측에 사용할 데이터
predict_data = np.array([[90, 100, 95]]) # shape(1, 3)
X = tf.placeholder(shape=[None,3], dtype=tf.float32)
Y = tf.placeholder(shape=[None,1], dtype=tf.float32)
W = tf.Variable(tf.random.normal([3,1]))
b = tf.Variable(tf.random.normal([1]))
# model(hypothesis, 가설)
# y =Wx + b; linear model
H = tf.matmul(X,W) + b
# loss function; MSE
loss = tf.reduce_mean(tf.square(H - Y))
# train node
train = tf.train.GradientDescentOptimizer(learning_rate=1e-7).minimize(loss)
# => 1번 실행
# Session을 생성하고 초기화를 진행
sess = tf.Session()
sess.run(tf.global_variables_initializer()) # 초기화 구문.
# Variable() 사용하면 초기화가 필요함.
# 그래프를 실행하기전에 먼저 실행되어야함
# 반복학습
for setp in range(600000) :
_, W_val, b_val, loss_val = sess.run([train, W, b, loss],
feed_dict={X : x_data,
Y : y_data})
if setp % 30000 == 0 :
print('W : {}, b : {}, loss : {}'.format(W_val, b_val, loss_val))
placeholder에 shape에 None은 길이를 신경쓰지 않겠다는 의미이다.
X에 들어올 데이터는 행의 개수와 상관없이 3열인 데이터이면 된다.
tf.Variable
값이 계속 변할 수 있는 노드
tf.random.normal([shape])
표준정규분포(평균 0, 표준편차1)에서 난수를 추출
위의 소스코드는 이런 구조를 가졌다.
sess.run(H, feed_dict = {X : predict_data})
> 출력
array([[192.35805]], dtype=float32)
예측을 실행하면 이런 결과가 나온다!
반응형
'Programming > Tensorflow' 카테고리의 다른 글
[Tensorflow 1.15] 이미지 Convolution, Pooling의 결과 확인하기 (0) | 2022.04.14 |
---|---|
[Tensorflow 1.15 ] Convolution 연산 - Sample Case (2) | 2022.04.14 |
[Tensorflow] MNIST DNN으로 구현해보기 (0) | 2022.04.12 |
[Tensorflow] 학습한 모델 저장하기 (0) | 2022.04.07 |
[Tensorflow] Tensorflow 2.xx with Keras (0) | 2022.04.07 |