] Tensorflow로 간단한 linear regression 구현(1)
본문 바로가기

머신러닝/텐서플로우

Tensorflow로 간단한 linear regression 구현(1)


세상의 많은 데이터들은 선형적인(Linear한) 관계를 띈다. 예를 들어보자. 공부시간과 시험점수의 관계,  키와 몸무게의 관계, 집의 크기와 집값의 관계 등이 있다. 선형 관계를 띠는 두 데이터의 관계를 H(x) = Wx + b라고 가정한다. 이 가정과 실제 값과의 차이 를 최소화 시켜야 한다

다.  cost를 다음과 같이 정의하고 이것을 최소화 시킬 것이다. 

제곱을 하는 이유는 차이를 양수로 표현해 주고 차이가 클때 패널티를 많이 주기 위해서이다.

cost 가 가장 작아지는 w,b를 가지는것 이것이 학습의 목표이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import tensorflow as tf #tensorflow를 tf로 import 한다.
 
x_train = [1,2,3#x데이터 집합
y_train = [1,2,3#y데이터 집합
 
#임의의 변수 W,b를 설정해 준다.
= tf.Variable(tf.random_normal([1]), name = 'weight'#tf.random_normal(['shape']) 값이 1개인 1차원 array를 의미(rank가 1인)
= tf.Variable(tf.random_normal([1]), name = 'bias') #variable 은 텐서플로우가 학습하는 과정에서 자기가 변경을 시킨다.
 
#그래프를 빌딩하는 과정에서 hypothesis node가 된다.
hypothesis = x_train * W + b
 
cost = tf.reduce_mean(tf.square(hypothesis - y_train))
 
#cost Minimize : w와 b를 조정해서 자기가 스스로 최소화, 이미 구현되어있는 알고리즘을 사용하는것이다.
optimizer = tf.train.GradientDescentOptimizer(learning_rate = 0.01)
train = optimizer.minimize(cost) #이렇게 해서 그래프가 구현이 되었다.
#train이 그래프의 부모?노드가 된것이다.
 
sess = tf.Session()
sess.run(tf.global_variables_initializer())
 
for step in range(2001) : 
    sess.run(train) #train이라는 그래프를 sess.run 한다.
    cost_val, W_val, b_val, _= sess.run([cost, W, b, train])#합쳐서 sess.run 해도 된다.
    if step % 20 == 0 :
        print(step, cost_val, W_val, b_val)
cs

학습이 진행되면서 W의 값이 1 b의 값이 0에 수렴됨을 볼 수 있다.


실행결과

0 1.5583972 [0.18786064] [0.72084165]
20 0.09713688 [0.6353469] [0.8187391]
40 0.08002627 [0.67219764] [0.74507934]
60 0.066010185 [0.7023153] [0.67670655]
80 0.05444889 [0.7296383] [0.6145959]
100 0.044912536 [0.7544531] [0.55818576]
120 0.037046406 [0.77699035] [0.5069533]
140 0.030557968 [0.79745907] [0.46042317]
160 0.02520594 [0.8160491] [0.4181637]
180 0.020791253 [0.83293283] [0.37978294]
200 0.017149797 [0.84826696] [0.34492493]
220 0.014146133 [0.8621936] [0.31326634]
240 0.011668511 [0.87484205] [0.2845134]
260 0.00962485 [0.8863296] [0.25839967]
280 0.007939118 [0.89676267] [0.23468274]
300 0.006548639 [0.9062382] [0.21314259]
320 0.005401684 [0.91484404] [0.19357955]
340 0.004455617 [0.92266] [0.17581205]
360 0.003675242 [0.92975855] [0.15967537]
380 0.0030315432 [0.9362056] [0.1450197]
400 0.002500585 [0.9420609] [0.13170919]
420 0.002062628 [0.9473788] [0.11962041]
440 0.0017013642 [0.9522086] [0.10864112]
460 0.0014033853 [0.95659506] [0.09866963]
480 0.0011575934 [0.960579] [0.08961338]
500 0.000954848 [0.9641971] [0.08138829]
520 0.000787612 [0.9674833] [0.07391817]
540 0.0006496672 [0.97046787] [0.06713365]
560 0.00053587946 [0.9731784] [0.06097181]
580 0.0004420233 [0.9756402] [0.0553756]
600 0.00036460537 [0.977876] [0.05029301]
620 0.0003007495 [0.97990656] [0.045677]
640 0.00024807532 [0.9817509] [0.04148454]
660 0.00020462803 [0.98342586] [0.03767695]
680 0.00016878814 [0.9849471] [0.03421883]
700 0.00013922548 [0.98632866] [0.03107808]
720 0.0001148422 [0.98758346] [0.02822566]
740 9.472887e-05 [0.98872304] [0.02563505]
760 7.8138146e-05 [0.98975796] [0.02328225]
780 6.445218e-05 [0.9906982] [0.02114533]
800 5.316385e-05 [0.99155194] [0.01920448]
820 4.385256e-05 [0.9923273] [0.01744184]
840 3.6171798e-05 [0.99303156] [0.01584093]
860 2.9836548e-05 [0.9936711] [0.01438701]
880 2.4611052e-05 [0.99425197] [0.01306652]
900 2.0300251e-05 [0.9947796] [0.01186723]
920 1.6744898e-05 [0.9952588] [0.01077793]
940 1.3812086e-05 [0.9956939] [0.00978867]
960 1.1393026e-05 [0.99608916] [0.00889022]
980 9.397471e-06 [0.99644816] [0.00807425]
1000 7.751425e-06 [0.99677414] [0.00733315]
1020 6.3937564e-06 [0.9970702] [0.00666007]
1040 5.273813e-06 [0.9973391] [0.0060488]
1060 4.350333e-06 [0.9975833] [0.00549365]
1080 3.588526e-06 [0.9978051] [0.00498945]
1100 2.9601263e-06 [0.99800664] [0.00453149]
1120 2.441512e-06 [0.9981895] [0.00411558]
1140 2.0140408e-06 [0.99835575] [0.00373786]
1160 1.6612557e-06 [0.99850655] [0.00339482]
1180 1.3703669e-06 [0.99864364] [0.0030833]
1200 1.130251e-06 [0.9987681] [0.00280033]
1220 9.325304e-07 [0.9988811] [0.00254335]
1240 7.692295e-07 [0.9989838] [0.00230994]
1260 6.3445856e-07 [0.9990771] [0.00209798]
1280 5.23482e-07 [0.9991617] [0.00190547]
1300 4.3179216e-07 [0.99923867] [0.00173063]
1320 3.5607866e-07 [0.99930847] [0.00157184]
1340 2.9380323e-07 [0.999372] [0.0014276]
1360 2.423684e-07 [0.9994295] [0.00129664]
1380 1.9994881e-07 [0.99948186] [0.00117771]
1400 1.6494374e-07 [0.99952936] [0.00106967]
1420 1.3606429e-07 [0.9995725] [0.00097158]
1440 1.1228411e-07 [0.9996118] [0.00088251]
1460 9.2631375e-08 [0.9996473] [0.00080157]
1480 7.645148e-08 [0.99967957] [0.00072812]
1500 6.307761e-08 [0.9997089] [0.00066147]
1520 5.2047692e-08 [0.99973565] [0.0006009]
1540 4.2963055e-08 [0.99975985] [0.00054586]
1560 3.5440834e-08 [0.9997818] [0.00049588]
1580 2.9238834e-08 [0.9998017] [0.00045044]
1600 2.412825e-08 [0.99981993] [0.00040915]
1620 1.9911212e-08 [0.99983656] [0.00037173]
1640 1.6441527e-08 [0.9998513] [0.00033773]
1660 1.3548686e-08 [0.999865] [0.00030675]
1680 1.1218333e-08 [0.9998772] [0.00027878]
1700 9.242669e-09 [0.9998886] [0.00025319]
1720 7.640703e-09 [0.9998986] [0.00023009]
1740 6.307687e-09 [0.99990815] [0.0002091]
1760 5.1987095e-09 [0.9999164] [0.00018988]
1780 4.298883e-09 [0.9999238] [0.00017266]
1800 3.558796e-09 [0.999931] [0.00015701]
1820 2.9222302e-09 [0.9999373] [0.00014248]
1840 2.4213829e-09 [0.99994296] [0.00012948]
1860 2.003489e-09 [0.99994797] [0.00011782]
1880 1.6548635e-09 [0.99995273] [0.00010727]
1900 1.3606657e-09 [0.9999573] [9.731507e-05]
1920 1.126447e-09 [0.9999612] [8.825515e-05]
1940 9.2869357e-10 [0.9999647] [8.014811e-05]
1960 7.680872e-10 [0.9999679] [7.289702e-05]
1980 6.3447203e-10 [0.9999706] [6.641123e-05]
2000 5.285301e-10 [0.9999732] [6.0588238e-05]