[코드로 이해하는 딥러닝 0] - 글연재에 앞서 https://limitsinx.tistory.com/27
[코드로 이해하는 딥러닝 1] - Tensorflow 시작 https://limitsinx.tistory.com/28
[코드로 이해하는 딥러닝 2] - Tensorflow 변수선언 https://limitsinx.tistory.com/29
[코드로 이해하는 딥러닝 3] - Tensorflow placeholder변수 https://limitsinx.tistory.com/30
[코드로 이해하는 딥러닝 4] - 선형회귀(Linear Regression) https://limitsinx.tistory.com/31
[코드로 이해하는 딥러닝 5] - 다중선형회귀(Multiple Linear Regression) https://limitsinx.tistory.com/32
※이 전글에서 정리한 코드/문법은 재설명하지 않으므로, 참고부탁드립니다
[Code Paraphrasing]
이번 글은, 이전에 작성했던 코드를 다른방식으로 작성해보는 '번외'편에 가깝습니다.
빠르고 정확한 이해를 위해선 선형대수학/행렬 연산에 대한 사전지식이 어느정도 요구되는 글입니다.
[코드로 이해하는 딥러닝 5] - 다중선형회귀(Multiple Linear Regression) https://limitsinx.tistory.com/32
에서 설명했던것을, 코드를 다른 방식으로 정리해보고자 합니다.
이번 글은, Skill적인 부분이긴 하지만, 앞으로는 이런식으로 코드를 짜는것이 상당히 편리하므로 숙지해두시면 좋습니다.
기존에는 상기와 같이 x1_data, x2_data, x3_data라고 해서 각각의 특징에 대해 모두 다른 변수로 선언해주었습니다.
즉, 이말은 5명(민호/동수/진호/경진/미희)의 점수를 국어/수학/영어 각각의 항목에 대해 모두 적어준것을 의미합니다.
하지만, 수많은 데이터를 학습시켜야 한다면 언제 이렇게 하나하나 치고있을지..
그럼 이런식으로 변경해보면 어떨까요?? 사람한명씩을 기준으로 배열을 만들어 정리를 해버리는 것입니다.
[변경 전]
x_data1=[73, 93, 89, 96, 73]
x_data2=[80, 88, 91, 98, 66]
x_data3=[75, 93, 90, 100, 70]
y_data = [152, 185, 180, 196, 142]
[변경 후]
x_data = [ [73,80,75], [83,88,93], [89,91,90], [96,98,100], [73,66,70] ]
y_data = [152, 185, 180, 196, 142]
이렇게되면 코드가 훨씬 직관적이며, 한명 한명이 국어/영어/수학점수를 어떻게 가지는지 확인할 수 있습니다.
예제 코드를 한번 분석해보겠습니다.
[코드 전문]
[코드 분석-1]
① x_data = [[1,1], [2,3], [4,5], [6,7], [8,8]]
y_data = [[6], [7], [8], [9], [10]]
로써, x_data는 기본적으로 1행2열(1x2)의 데이터를 담고 있습니다.
기존에는 상수(1x1) 1개씩 표현했었는데, 이것들을 Array로 묶어 Matrix(행렬)형식으로 재배열 해주었다는 것이 중요합니다.
※ 이것을 각자 따로 학습시키자면, 이렇게 표현됩니다.
x_data1 = [1,2,4,6,8]
x_data2 = [1,3,5,7,8]
그다음, 엄청나게 중요한 부분이 나옵니다.
② ★ x=tf.placeholder(tf.float32, shape=[None,2])
: 기존에는 shape부분을 적어주지 않았습니다. 하지만, 새로 정리를 할때는 여러개의 데이터를 Array형식으로 묶어서 만들어 주었기 때문에 x_data가 어떤 Matrix형태인지 지정해주는것이 필요합니다.
"shape=[None,2]란 행(Rank)는 관계없고, 열(Column)이 2개다. 즉, x데이터 2개를 [ A, B ] 이런식으로 표현하겠다"
는 의미입니다.
※ Matrix에 대한 이해가 필요하신분은 해당 키워드 참고해주시면 됩니다.
▶ Keyword : Linear Algebra, 선형대수학, 행렬연산, Matrix Rank column
③ ★ w=tf.Variable(tf.random_normal([2,1])
: w는 Weighting 값입니다.
기존에는 Weigting도 x_data의 갯수에 대응되게 한개씩 따로 선언해주었죠 (w1, w2, w3)
하지만, 새로운 방식을 통해 x_data를 모두 하나로 묶어서 표현하게 되었으므로
Weighting값도 하나로 묶어 표현해야 합니다.
행렬 연산 원리로는 x_data가 (1,2)Matrix가 되었으니
※(1,2) : Rank 1 Column 2
y=x*W+b를 만족하기 위해선, W는(2,1)Matrix가 되어야하고, b는 (1,1)이 되면 되는거죠
따라서 W는 2행1열의 Matrix, b는 1행 1열의 Matrix로 선언해주는 것입니다.
[코드 분석-2]
① ★ Hypothesis = tf.matmul(x,w) + b
: Y=x*W + b를 해주는것으로, 기존에는
Hypothesis = x1*w1 + x2*w2 + x3*w3 + b로 정리해두었었는데 Matrix연산을 통해 훨씬 깔끔하게 정리가 된 모습입니다.
tf.matmul 이라는 함수를 써주면 행렬곱(Matrix multiply)을 바로 진행해줍니다.
이하 코드는 기존과 동일합니다.
[결과값(10000번 학습)]
10000번 정도 학습시켜보면
real_Y값으로 [6,7,8,9,10]이 나와야하고, 학습한 결과로는
[5.886, 6.916, 8.05, 9.1869, 9.86] 정도를 예측하는것을 확인하실 수 있습니다.
꽤나 잘따라가는 모습을 보여주는데요, Learning_rate를 올리거나 학습횟수를 좀더 올리면 점점 실제Y값으로 수렴하는 모습을 확인하실 수 있습니다.
Summary
이번 글은, 선형대수학에 대한 어느정도의 사전지식이 필요했는데요
어려운 내용은 아니라서, 조금만 공부하셔도 금방이해하실 수 있으실겁니다.
하지만 도저히 이해가안되신다면 해당 코드를 그냥 외워주셔도 상관없습니다.
해당 글을 연재하는 목적은, 머신러닝을 완벽하게 이해하진 못해도 내가 필요한 결과값만 얻을 수 있도록 하는거니까요
'DeepLearning Framework & Coding > Tensorflow 1.X' 카테고리의 다른 글
[코드로 이해하는 딥러닝 8] - Logistic Regression(sigmoid) (0) | 2020.12.21 |
---|---|
[코드로 이해하는 딥러닝 7] - .txt(.csv)파일 불러오기 (0) | 2020.12.20 |
[코드로 이해하는 딥러닝 5] - 다중선형회귀(Multiple Linear Regression) (0) | 2020.12.18 |
[코드로 이해하는 딥러닝 4] - 선형회귀(Linear Regression) (6) | 2020.12.17 |
[코드로 이해하는 딥러닝 3] - Tensorflow placeholder변수 (0) | 2020.12.16 |
댓글