0

현재 Tensorflow를 사용하여 회귀 문제를 해결하는 방법을 이해하려고합니다. 불행히도, 입력 데이터에 대해 두 번째 차원을 도입하자마자 오류나 손실이 엄청나게 커집니다.회귀 운동에 중대한 오류가 발생했습니다.

내가 사용중인 데이터 세트는 자체 제작되었으며 매우 간단합니다. 값은 모든 정렬 및 X2는 I는 선형 회귀를 사용하여 값을 근사하려고 + 1

X1 = [2.167,3.1,3.3,4.168,4.4,5.313,5.5,5.654,6.182,6.71,6.93,7.042,7.59,7.997,9.27,9.779,10.791] 
X2 = [3.167,4.1,4.3,5.168,5.4,6.313,6.5,6.654,7.182,7.71,7.93,8.042,8.59,8.997,10.27,10.779,11.791] 
y = [1.221,1.3,1.573,1.65,1.694,1.7,2.09,2.42,2.53,2.596,2.76,2.827,2.904,2.94,3.19,3.366,3.465] 

X1에서 단마다 값이된다 :이 나에게 출력을 제공

numbers = pd.DataFrame({'x1': X1, 'x2':X2}) 

X_train, X_test, y_train, y_test = train_test_split(numbers,y,test_size=0.3,random_state=101) 

X_data = tf.placeholder(shape=[None,2], dtype=tf.float32) 
y_target = tf.placeholder(shape=[None], dtype=tf.float32) 

w1 = tf.Variable(tf.random_normal(shape=[2,1])) 
b1 = tf.Variable(tf.random_normal(shape=[1])) 

final_output = tf.add(tf.matmul(X_data, w1), b1) 

loss = tf.reduce_sum(tf.square(final_output-y_target)) 

optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1) 
train = optimizer.minimize(loss) 

init = tf.global_variables_initializer() 

steps = 5000 

with tf.Session() as sess: 

    sess.run(init) 

    for i in range(steps): 

     sess.run(train,feed_dict={X_data:X_train,y_target:y_train}) 

     # PRINT OUT A MESSAGE EVERY 100 STEPS 
     if i%500 == 0: 

      print('Currently on step {}'.format(i)) 

      training_cost = sess.run(loss, feed_dict={X_data:X_test,y_target:y_test}) 
      print("Training cost=", training_cost/5) 

    training_cost = sess.run(loss, feed_dict={X_data:X_test,y_target:y_test}) 
    print("Training cost=", training_cost) 

Currently on step 0 
Training cost= 12376958566.4 
Currently on step 500 
Training cost= nan 
Currently on step 1000 
Training cost= nan 
Currently on step 1500 
Training cost= nan 
Currently on step 2000 
Training cost= nan 
Currently on step 2500 
Training cost= nan 
Currently on step 3000 
Training cost= nan 
Currently on step 3500 
Training cost= nan 
Currently on step 4000 
Training cost= nan 
Currently on step 4500 
Training cost= nan 
Training cost= nan 

Adagrad 최적화 도구로 약간의 결과를 얻었지만 5라는 오류를주었습니다.하지만 더 많은 가능성이 있어야한다고 생각합니다.

숨겨진 레이어를 추가하려면 여기 옵션을 사용 하시겠습니까? 나는 이전에도 이것을 시도했지만 레이어에서 활성화 기능으로 relu를 사용하고 출력 레이어에 단지 f(x)=x을 사용하는 동안 비슷한 높은 나노 오류를 받았습니다.

+1

학습 속도의 문제인 것 같습니다. 'optimizer = tf.train.GradientDescentOptimizer (learning_rate = 5e-5)'시도해보십시오. – user2015762

답변

0

두 가지 문제가 있습니다. 먼저 tf.reduce_mean 대신 tf.reduce_sum을 사용하고 있기 때문에 데이터가 많을수록 손실이 커집니다. 이렇게하면 GradientDescentOptimizer에 거대한 신호가 전송되므로 학습 된 가중치가 크게 증가하고 모델이 분기됩니다.

두 번째 문제는 학습 속도가 여전히 너무 높다는 것입니다. user2015762에서 알 수 있듯이 손실이 증가 할 때 종종 문제가됩니다. 귀하의 코드에 learning_rate=0.001을 사용하여 좋은 결과를 얻었습니다.