baegui-MacBook-Pro:~ baeg$ python3
Python 3.6.1 (v3.6.1:69c0db5050, Mar 21 2017, 01:21:04)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
2017/05/13 - [IT/딥 러닝(텐서플로우)] - 딥러닝(텐서플로우): 간단한 선형 회귀(linear regression) 구현하기
여기로~!
>>> w=tf.Variable(tf.random_normal([1]), name='weight')
>>> b=tf.Variable(tf.random_normal([1]), name='bias')
>>> X=tf.placeholder(tf.float32, shape=[None])
>>> Y=tf.placeholder(tf.float32, shape=[None])
먼저 저번시간과 같이 Variable에 랜덤값을 넣어준, weight와 bias를 선언해줍니다.
그리고 placeholder를 float32타입의 배열이 아닌 값 형태로 변경해줍니다.
>>> hypothesis = X * W +b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'W' is not defined
그리고 hypothesis를 선언해주는데, 오류가 나왔네요.
알고보니 위에서 대문자 W가 아닌 소문자 w를 선언해주었기에 define오류가 나왔어요.
오타가 이렇게 무섭습니다. 여러분.
>>> hypothesis = X * w +b
>>> cost = tf.reduce_mean(tf.square(hypothesis-Y))
>>> optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
>>> train = optimizer.minimize(cost)
이번엔 제대로 된 hypothesis를 선언해주고,
cost function도 선언해주고,
학습 시간과 미니마이즈도 선언해줍니다.
>>> sess=tf.Session()
>>> sess.run(tf.global_variables_initializer())
>>> for step in range(2001):
... cost_val, W_val, b_val, _ =sess.run([cost, w, b, train],
... feed_dict={X: [1,2,3,4,5], Y:[2.1, 3.1, 4.1, 5.1, 6.1]})
... if step % 100 ==0:
... print(step, cost_val, W_val, b_val)
...
자 이제 실제 학습 시키는 부분인데요.
for문 다음으로 이상한 코드가 써져있죠?
이것은 세션에 cost, w, b, train을 실행시키는데, 그 결과값을 cost_val, W_val, b_val, _에 넣으라는 뜻이예요.
_(train)부분은 입력받을 필요가 없기때문에 그냥 임의로 지정해 놓은 것입니다.
그리고 placeholder로 선언하였으니 feed_dict로 x,y값을 입력합니다.
그리고 100번마다 값을 출력해줍니다.
0 6.17568 [ 0.42948502] [ 1.09415972]
100 0.00185961 [ 0.97209781] [ 1.20073557]
200 0.000944613 [ 0.98011369] [ 1.17179585]
300 0.000479848 [ 0.98582655] [ 1.15117085]
400 0.000243745 [ 0.98989832] [ 1.13647044]
500 0.000123815 [ 0.9928003] [ 1.12599313]
600 6.28904e-05 [ 0.9948687] [ 1.11852539]
700 3.19454e-05 [ 0.99634296] [ 1.11320305]
800 1.62281e-05 [ 0.99739355] [ 1.10941005]
900 8.24338e-06 [ 0.9981423] [ 1.10670674]
1000 4.18647e-06 [ 0.99867612] [ 1.1047796]
1100 2.1265e-06 [ 0.99905646] [ 1.10340631]
1200 1.08034e-06 [ 0.99932748] [ 1.10242784]
1300 5.48733e-07 [ 0.99952072] [ 1.10173035]
1400 2.78906e-07 [ 0.99965829] [ 1.10123348]
1500 1.41644e-07 [ 0.99975646] [ 1.10087931]
1600 7.21096e-08 [ 0.99982631] [ 1.10062695]
1700 3.6626e-08 [ 0.99987614] [ 1.10044682]
1800 1.86714e-08 [ 0.99991161] [ 1.10031903]
1900 9.47313e-09 [ 0.99993706] [ 1.10022724]
2000 4.8326e-09 [ 0.999955] [ 1.10016227]
그럼 위와같은 결과를 얻을 수 있어요.
w의 값은 0.9, b의 값은 1.1에 가까워지고 있군요.
이렇게 나온다면 정상적으로 학습이 된것입니다.
#딥러닝 #텐서플로우 #간단한 선형 회귀 #placeholder #feed_dict #오타
'IT' 카테고리의 다른 글
카미(KAMI)2: 4페이지 4번째 퍼즐 해답 (2) | 2017.05.26 |
---|---|
카미(KAMI)2: 3페이지 6번째 퍼즐 해답 (1) | 2017.05.20 |
딥러닝(텐서플로우): 간단한 선형 회귀 placeholder를 이용하여 구현 (2) | 2017.05.14 |
딥러닝(텐서플로우): 간단한 선형 회귀(linear regression) 구현하기 (2) | 2017.05.13 |
딥러닝(텐서플로우): 값을 넣기 위한 노드 만들기 (2) | 2017.05.10 |
딥러닝(텐서플로우): 노드 다루기 (0) | 2017.05.09 |
오늘도 좋은 하루되세요 드린님!