2017-12-29 12 views
0
import tensorflow as tf 
import numpy as np 

#date generation 
x_data = np.float32(np.random.rand(2, 100)) 
y_data = np.dot([0.1, 0.2], x_data) + 0.3 

#linear model 
b = tf.Variable(tf.zeros([1])) 
W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0)) 
y = tf.matmul(W, x_data) + b 

#minimize variance 
loss = tf.reduce_sum(tf.square(y - y_data)) #why I cannot use sum here 
optimizer = tf.train.GradientDescentOptimizer(0.01) 
train = optimizer.minimize(loss) 

#initialization 
init = tf.global_variables_initializer() 

#graph initialization 
sess = tf.Session() 
sess.run(init) 

#train network 
for step in range(201): 
sess.run(train) 
#if step % 20 == 0: 
print(step, sess.run(W), sess.run(b), sess.run(loss)) 

안녕하세요, tensorflow를 사용하여 장난감 모델을 구현하는 동안 문제가 발생했습니다. tf.reduce_sum() 함수를 손실 함수로 사용하면 최적화 프로그램이 수렴하지 못했습니다. 실제로 손실은 더 커지고 커졌습니다. 그러나 손실 함수를 에서 tf.reduce_sum()에서 tf.reduce_mean()으로 변경하면 최적화 프로그램이 성공적으로 작동했습니다. 누구나 이유를 말할 수 있습니다 tf.reduce_sum()이 모델에서 작동하지 않지만 tf.reduce_mean()은 무엇입니까?tf.reduce_sum()을 사용하여 최적화 할 수 없지만 tf.reduce_mean()을 사용하여 성공했습니다.

답변

2

모든 샘플에서 한꺼번에 합계에 의한 손실은 평균 손실 이상입니다.

예 이제 보자 우리의 소망 y_data = 1.2, 3.2, 2.4] 및 예측 = [1,3, 3] 다음 라인이 다음

Y :

tf.reduce_sum(tf.square(y - y_data)) 

손실 것 판명 :

0.04 + 0.04 + 0.36 = 0.44

Instea 이 경우, 낮은 손실에 이어질 것 같은 예측을 의미 줄이기 사용하는 경우 라

그래서, 당신의 그라데이션 및 매개 변수 업데이트가 큰

0.44/3 = 0.14666 당신은 reduce_sum 건너 뛰기를 사용할 때 가능한 지역 최소치.

최적화 도구의 학습률은 일괄 처리에 대해 동일한 효과를 얻으려면 일괄 처리 크기를 사용하여 학습률을 나누어 모델을 성공적으로 학습하거나 reduce_mean을 사용하여 모델을 학습해야합니다.

관련 문제