2017년 12월 17일 일요일

ML 초보자를 위한 MNIST(MNIST For ML Beginners)(3)


출처 : https://www.tensorflow.org/get_started/mnist/beginners

이글은 영어 원본을 읽고 공부하면서 불필요한 내용 빼고 이해하기 쉽도록 적절히 내맘대로 작성해보았습니다. 이해가 잘못되어 원저자의 의도대로 번역이 안되어 있을 수도 있습니다. 이점 참고해서 읽어 주시면 고맙겠습니다


앞서 작성한 글
ML 초보자를 위한 MNIST(MNIST For ML Beginners)(1)
ML 초보자를 위한 MNIST(MNIST For ML Beginners)(2)

이 글은 앞서 작성한 글에 이어지는 글입니다.


회귀 분석의 구현

파이썬에서 효율적으로 수치적인 처리를 하려면 NumPy 같은 라이브러리를 사용하게됩니다. NumPy는 행열 계산을 효과적으로 할 수 있지만 python으로 돌아오는데 많은 오버헤드가 있습니다.
TensorFlow 에서도 행열 연산을 외부에서 처리하는데, 그러나 이 오버헤드를 줄이기 위한 처리가 되어있습니다.

TensorFlow를 사용하기위해서 우리는 임포트 해야합니다. 아래 참고
import tensorflow as tf

x = tf.placeholder(tf.float32, [None, 784])

x는 runtime 중에 외부에서 데이터를 변경하기 위해서 사용할것이라 placeholder로 만들었습니다. placeholder설명은 아래 링크를 참고 바랍니다.
https://www.tensorflow.org/versions/r0.12/api_docs/python/io_ops/placeholders
placeholder는 인자는 아래와 같습니다.
tf.placeholder(dtype, shape=None, name=None)
https://swlock.blogspot.com/2017/11/getting-started-with-tensorflow2.html
우리는 많은 MNIST 이미지를 입력 할 수 있기를 원합니다. 각각의 이미지는 784개의 실수 벡터입니다. 2차원 텐서의 부동 소수점 숫자로 표현하고 [None, 784] 모양을 사용합니다. 여기서 None은 어떤 크기가 가능하다는 뜻입니다. 학습 과정에 사용될 이미지의 총 갯수가 될 됩니다.

우리는 또한 모델을 위해 가중치와 바이어스를 필요로 합니다. tf.Variable 함수를 사용하여 생성하였습니다. 기계 학습 어플리케이션의 경우 일반적으로 모델 매개 변수가 Variables입니다.
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
여기에서 모두 0으로 이루어진 상수 텐서로 초기값을 넣었습니다. W, b 은 학습해서 값이 들어가기 때문에 초기값이 어떤 값이던 관계는 없습니다.

W는 10개 숫자 클래스에 대해 이미지 벡터 784개 픽셀과 곱셈을 하기 위한 크기를 가지고 있으며 ([784, 10] 구조를 가짐) , b가 더해진 후에 evidence를 구성할 텐서가 만들어 집니다. (b는 [10] 구조를 가짐)
이제 모델을 아래와 같이 구현할 수 있습니다.
y = tf.nn.softmax(tf.matmul(x, W) + b)
먼저 x에 W를 곱해서 tf.matmul (x, W)라는 표현식을 만든다.
https://www.tensorflow.org/api_docs/python/tf/matmul

이것은 방정식에서 Wx가있는 방정식을 곱했을 때 뒤집 힙니다. 이건 제가 볼때 아마도 행열의 곱셈과 관계가 있습니다, W[784,10] 구조에 x[None,784]를 곱하면 안되기 때문에 x[None,784] * W[784,10] 이런식으로 곱해주어야 합니다.
그런 다음 b를 추가하고 마지막으로 tf.nn.softmax를 적용합니다.

몇 줄의 짧은 설정만으로도 모델을 정의하는 데 한 줄이 걸렸습니다. 이는 TensorFlow가 softmax 회귀를 쉽게 만들 수 있도록 설계 되었기 때문이 아닙니다. 기계 학습 모델에서 물리 시뮬레이션에 이르기까지 다양한 종류의 수치 계산을 설명하는 매우 유연한 방법입니다. 한 번 정의 된 모델은 컴퓨터의 CPU, GPU, 심지어 휴대폰까지 다른 장치에서 실행할 수 있습니다!


댓글 없음:

댓글 쓰기