-
Inference in Code | Advanced Learning AlgorithmMachine Learning/Stanford ML Specialization 2024. 2. 9. 09:21
Tensorflow는 Deep Learning 알고리즘을 구현하기 위한 가장 유명하고 잘 쓰이는 프레임워크중 하나이다. 또다른 인기있는 도구는 PyTorch이다.
프레임워크란? 미리 만들어진 구조나 도구의 집합으로, 애플리케이션을 빠르고 효율적으로 개발할 수 있게 도와준다. 여러 기능을 가진 클래스들와 라이브러리들이 어떤 목표의 개발을 위해서 모여진 집합체라고 생각하면 된다. TensorFlow는 구글이 개발한 오픈소스 머신 러닝 프레임워크로, 복잡한 수치 연산을 수행하고, 주로 딥러닝 및 머신 러닝 모델을 개발하고 훈련시키는 데 널리 사용됩니다.
Tensorflow를 이용해서 이번에는 Inference Code, 즉 추론 코드를 구현해보는 방법을 알아보자. Neural Network(신경망)의 놀라운 점 중 하나는 동일한 알고리즘을 다양한 애플리케이션에 적용할 수 있다는 점이다. Neural Network가 어떤 역할을 하는지 알아볼 수 있도록 커피 예시를 가지고 알아보자. 학습 알고리즘이 커피 로스팅을 하는 과정에서, 품질을 최적화 하는데 어떻게 사용될 수 있을까?
커피를 가열할 때, 온도와 로스팅의 길이를 잘 조절해야지, 안그러면 너무 낮은 온도에서 조리가 되어서 덜 익거나, 너무 오래 조리해서 타버리는 경우가 발생할 수 있다.
위 그림에서 보여지듯, 적절한 온도와 길이의 로스팅이 되지 않으면, 커피가 맛있지 않다. 위에 보이는 중간의 삼각형 안에 들어와야지 좋은맛을 내는 로스팅된 원두를 만들어낼 수 있다. 이런 데이터를 이용해서 커피의 맛을 보장하기 위한 Machine Learning 프로젝트를 해보자. 예를 들어, 어떤 원두를 200도에서 17분간 로스팅 했다고 하자. 그러면 어떻게 Neural Network를 이용해서 이 로스팅이 성공적이었는지 아닌지 알아낼 수 있을까?
Tensorflow로 아래와 같이 구현해볼 수 있다.
# 먼저 numPy Array를 이용해서 input이 될 수 있도록 온도와 로스팅 기간을 벡터화 한다. x = np.array([200.0, 17.0]) # 먼저 layer 1을 설계해준다. # 3개의 뉴런을 갖고, sigmoid함수를 activation function으로 사용하는 레이어를 만들었다. layer_1 = Dense(units=3, activation='sigmoid') # layer_1은 함수가 되어서 초기 인풋 x를 넣어주고, 그 결과값이 a1에 저장된다. # layer_1은 뉴런이 3개이기 때문에 3개의 아웃풋이 나온다. # 그 결과가 [0.2, 0.7, 0.8] 이라고 해보자. a1 = layer_1(x) # 이후 뉴런이 1개 있는 마지막 레이어, layer2를 설계한다. # 뉴런이 1개있고, 마찬가지로 sigmoid 함수를 사용해서 연산한다. layer_2 = Dense(units=1, activation='sigmoid') # layer1 에서 계산된 결과를 인풋으로 a2로 저장한다. a2 = layer_2(a1) # a2에서 저장된 값을 0.5를 threshhold로 계산한다. # 만약 이 값이 0.5보다 높으면 true(1)로, 아니면 false(0)로 yhat값이 저장된다. if a2 >= 0.5: yhat = 1 else: yhat = 0
조금 다른 예시를 살펴보자. 지난번 시간에 살펴봤던 digit classification 문제를 생각해보자. hidden layers의 크기가 이전에 비해서 크게 설계했다. layer1은 25개의 뉴런이, layer 2는 15개의 유닛이, 그리고 아웃풋을 도출해내는 layer3은 1개의 뉴런이 있다.
이 경우도, 비슷하게 tensorflow를 이용해서 코딩해볼 수 있다.
# Input의 벡터에는 8 x 8 픽셀의 이미지가 각 픽셀의 black/white 값이 # 무엇인지 나타내는 숫자가 길이 64의 벡터로 저장되어있다. x = np.array([[0.0, ..., 245, ..., 240, ..., 0]]) # layer 1은 25개의 뉴런을 갖고있고, sigmoid 함수를 activation으로 사용한다. layer_1 = Dense(units=25, activation='sigmoid') a1 = layer_1(x) # layer2는 layer1에서의 아웃풋을 인풋으로 받는다. 15개의 뉴런을 갖고있다. layer_2 = Dense(units=15, activation='sigmoid') a2 = layer_2(a1) # layer 3은 layer2에서의 아웃풋을 인풋으로 받는다. # 1개의 뉴런을 갖고있고, 최종 결과물을 저장하게 된다. layer_3 = Dense(units=1, activation='sigmoid') a3 = layer_3(a2) # 결과값을 토대로, yhat을 계산해낸다. if a3 >= 0.5: yhat = 1 else: yhat = 0
이것이 Tensorflow에서 Inference를 하는 구조이다.
Reference
Advanced Learning Algorithms
In the second course of the Machine Learning Specialization, you will: • Build and train a neural network with TensorFlow to perform multi-class ... 무료로 등록하십시오.
www.coursera.org
'Machine Learning > Stanford ML Specialization' 카테고리의 다른 글