pbj0812의 코딩 일기

[PYTORCH] 05_pytorch with examples (TensorFlow) 본문

인공지능 & 머신러닝/PYTORCH

[PYTORCH] 05_pytorch with examples (TensorFlow)

pbj0812 2019. 6. 16. 22:56

Pytorch with examples (TensorFlow) 코드 분석

- 아래 글은 파이토치 튜토리얼 중 TensorFlow를 이용하여 모델을 구축하는 부분을 재구성한 글입니다.

- 코드를 조각 내었기 때문에 전체 코드는 깃허브나 아래 링크 참조 바랍니다.

 

원본링크 : https://pytorch.org/tutorials/beginner/pytorch_with_examples.html

 

TensorFlow

- PyTorch가 동적인 computational graph를 사용하는데에 반해, TensorFlow는 정적인 그래프를 사용한다.

- PyTorch에서 매번 새로운 그래프가 생성될때, TensorFlow는 같은 그래프를 재사용한다.

- 정적인 그래프는 최적화 하기에 좋다.

- 효율성을 위해 여러 그래프를 융합하거나, 여러 장치들을 위해 분산 배치를 할 수도 있다.

 

코드 프리뷰

전체 코드

하이퍼 파라미터 세팅

N, D_in, H, D_out = 4, 1000, 100, 10

x = tf.placeholder(tf.float32, shape=(None, D_in))
y = tf.placeholder(tf.float32, shape=(None, D_out))

w1 = tf.Variable(tf.random_normal((D_in, H)))
w2 = tf.Variable(tf.random_normal((H, D_out)))

- x, y는 placeholder로 지정하였고, w1, w2는 Variable로 지정하였다.

- 이해하기 쉽게 placeholder는 데이터를 담는 그릇으로 생각하고, Variable은 학습변수를 지정한다고 생각하면 될 것 같다.

모델 구성

h = tf.matmul(x, w1)
h_relu = tf.maximum(h, tf.zeros(1))
y_pred = tf.matmul(h_relu, w2)

- 모델을 구성하는 부분이다.

 1) x와 w1을 곱하여 h 생성

 2) h에 ReLU 적용

 3) ReLU가 적용된 h와 w2를 곱하여 y 예측

loss 계산

loss = tf.reduce_sum((y - y_pred) ** 2.0)

- loss는 y - y 예측한 값을 제곱한 값으로 정의한다.

- 그리고 행렬안의 모든수를 다 더한값을 loss라고 한다.

gradient 계산

grad_w1, grad_w2 = tf.gradients(loss, [w1, w2])

- w1, w2 갱신을 위한 w1과 w2의 loss 값의 gradient 계산

session 열기 및 초기화

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())

- TensorFlow의 계산은 session 안에서 진행된다.

- tf.global_variables_initializer를 해줘야 변수들이 초기화된다. (하지 않으면 오류발생)

data 담기

x_value = np.random.randn(N, D_in)
y_value = np.random.randn(N, D_out)

- numpy를 사용하여 x와 y를 만들었다.

그래프 실행

loss_value, _, _ = sess.run([loss, new_w1, new_w2],
                           feed_dict={x: x_value, y: y_value})

- 그래프 실행, 즉 계산을 실행하는 부분이다.

- sess.run 함수를 이용하여 계산을 시작한다.

- feed_dict 부분은 실제 데이터(x_value, y_value)를 처음에 만들었던 그릇(x, y)에 담는 행위라고 할 수 있다.

Comments