텐서플로우 공부중 모르겠는 문법이 있어요!,,,ㅠ


(iknow) #1
# X와 Y의 상관관계를 분석하는 기초적인 성형 회귀 모델.

import tensorflow as tf

x_data = [1, 2, 3]
y_data = [1, 2, 3]

W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.random_uniform([1], -1.0, 1.0))

# name: 텐서보드 등으로 값의 변화를 추적하거나 살펴보기 쉽게 하기위하여 이름을 붙임.

X = tf.placeholder(tf.float32, name = "X")
Y = tf.placeholder(tf.float32, name = "Y")
print(X)
print(Y)

# X와 Y의 상관관계를 분석하기 위한 가설 수식을 작성.
# y = W * x + b
# W와 X 가 행렬이 아니므로 tf.matmul 이 아닌 곱셈기호 사용.
hypothesis = W * X + b

# 손실 함수를 작성.
# mean(h - Y)^2 : 예측값과 실제값의 거리를 비용(손실) 함수로 정함.
cost = tf.reduce_mean(tf.square(hypothesis - Y))

#텐서플로우에 기본적으로 포함되어있는 함수를 이용해 경사 하강법 최적화를 수행.
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1)

# 비용을 최소화 하는 것이 최종 목표
train_op = optimizer.minimize(cost)

# 세션생성, 초기화
with tf.Session() as sess:
	sess.run(tf.global_variables_initializer())

	#최적화를 100번 수행.
	for step in range(100):
		# sess.run 을 통해 train_op 와 cost 그래프를 계산.
		# 이 때, 가설 수식에 넣어야 할 실제값을 feed_dict를 통해 전달.
		_, cost_val= sess.run([train_op, cost], feed_dict={X: x_data, Y: y_data})

		print(step, cost_val, sess.run(W), sess.run(b))

	#최적화된 모델에 테스트 값을 넣고 결과가 잘 나오는지 확인.
	print("\n===TEST===")
	print("X:5, Y:", sess.run(hypothesis, feed_dict={X:5}))
	print("X:2.5, Y:", sess.run(hypothesis, feed_dict={X:2.5}))

이런 소스인데…
이중에

_, cost_val= sess.run([train_op, cost], feed_dict={X: x_data, Y: y_data})

여기의 _, 가 당췌 뭔 역할을 하는건지 어떻게 있을 수 있는건지 이해가 안되요… ㅠ
분명 문법 배울때 저런거 없었는데 말이죠…


(iknow) #3

와… 그게 그렇게도 되나요!!
진짜 파이썬은 문법이 간단해 보여도 진짜 기상천외하게 사용되네요!!

감사합니다.!!


(codesafer) #4

a = b = c


(iknow) #5

a, b = c, d

이렇게 이해 했는데 또 잘 못 이해했나보네요 ㅠ
어렵네요 파이썬도 ㅠ


(codesafer) #6

헐 딴소리 한건데 오해를 드렸군요. Deneb 사마가 말씀하신 대로 이해하시면 됩니다.


(iknow) #7

다행이네요 !!
감사합니다 ㅎㅎ


(datalore) #8

답변이 없어진 것 같은데 저도 왜그런지 알려주실수 없으실까요? ㅠ


(L) #9

_도 그냥 변수입니다
코드에서는 optimizer의 작동 결과가 들어가겠죠
근데 그걸 이용해서 뭘 계산하거나 출력하지 않으니 그냥 변수로 받기만 하고 안쓰는겁니다


(datalore) #10

답변 감사합니다… ㅠ

_에는 그럼 optimizer의 결과가 들어가는 것인가요? 아니면 train_op의 값이 들어가는 것인가요?


(L) #11

sess.run에 첫번째 인자로 리스트가 들어가죠? 그리고 그 리스트에는 train_op과 cost가 들어가죠? 그럼 _, cost_val에 그 결과값이 차례로 들어갑니다.
참고로, train_op, cost는 텐서플로우가 그려준 그래프 상의 노드만 나타낼 뿐 결과값이 아닙니다. X, Y도 마찬가지고요.