1

선형 회귀 모델이 정상적으로 작동하는 것처럼 보이지만 모델의 정확성을 표시하고 싶습니다.tf.metrics.accuracy가 의도 한대로 작동하지 않습니다.

우선, I는

X_train, X_test, Y_train, Y_test = train_test_split(
    X_data, 
    Y_data, 
    test_size=0.2 
) 

n_rows = X_train.shape[0] 

X = tf.placeholder(tf.float32, [None, 89]) 
Y = tf.placeholder(tf.float32, [None, 1]) 

W_shape = tf.TensorShape([89, 1]) 
b_shape = tf.TensorShape([1]) 

W = tf.Variable(tf.random_normal(W_shape)) 
b = tf.Variable(tf.random_normal(b_shape)) 

pred = tf.add(tf.matmul(X, W), b) 

cost = tf.reduce_sum(tf.pow(pred-Y, 2)/(2*n_rows-1)) 

optimizer = tf.train.GradientDescentOptimizer(FLAGS.learning_rate).minimize(cost) 

X_train(6702, 89) 모양은 가지고 Y_train(6702, 1) 모양이 ... 변수와 자리를 초기화한다. 다음으로 세션을 실행하고 총 평균 전력 (MSE)과 평균 기온을 표시합니다.

init = tf.global_variables_initializer() 

with tf.Session() as sess: 

    sess.run(init) 

    for epoch in range(FLAGS.training_epochs): 

     avg_cost = 0 

     for (x, y) in zip(X_train, Y_train): 

      x = np.reshape(x, (1, 89)) 
      y = np.reshape(y, (1,1)) 
      sess.run(optimizer, feed_dict={X:x, Y:y}) 

     # display logs per epoch step 
     if (epoch + 1) % FLAGS.display_step == 0: 

      c = sess.run(
       cost, 
       feed_dict={X:X_train, Y:Y_train} 
      ) 

      y_pred = sess.run(pred, feed_dict={X:X_test}) 
      test_error = r2_score(Y_test, y_pred) 
      print(test_error) 

      print("Epoch:", '%04d' % (epoch + 1), "cost=", "{:.9f}".format(c)) 

    print("Optimization Finished!") 

    pred_y = sess.run(pred, feed_dict={X:X_test}) 
    mse = tf.reduce_mean(tf.square(pred_y - Y_test)) 

    print("MSE: %4f" % sess.run(mse)) 

이 모든 것이 올바르게 작동하는 것 같습니다. 그러나 지금은 모델의 정확성을보고 싶으므로 tf.metrics.accuracy을 구현하고 싶습니다. 설명서에 따르면 두 개의 인수, labelspredictions이 있습니다. 그러나 나는 내가 인쇄됩니다 정확도 결과가 0.0 때문에 내가 뭔가 잘못하고있는 중이 야 생각

accuracy, accuracy_op = tf.metrics.accuracy(labels=Y_test, predictions=pred) 

init_local = tf.local_variables_initializer() 

sess.run(init_local) 

print(sess.run(accuracy)) 

은 분명히 내가 지역 variales를 초기화해야 ... 다음 다음을 추가했습니다.

어디서나 작동 예제를 검색했지만 내 모델에서 제대로 작동하지 않을 수 있습니다. 구현 방법은 무엇입니까?

답변

1

나는 회귀 모델을 학습하고 있다고 생각합니다. tf.metrics.accuracy분류 모델으로 실행됩니다.

모델이 1.2를 예측하지만 목표 값이 1.15 인 경우 accuracy을 사용하여 올바른 예측인지 여부를 측정하는 것은 의미가 없습니다. accuracy은 모델에서 숫자가 '9'이고 대상 이미지가 '9'라고 예측할 때 분류 문제 (예 : mnist)를위한 것입니다. 이는 정확한 예측이며 전체 크레딧을 얻습니다. 또는 모델에서 숫자가 '9'라고 예상하지만 대상 이미지가 '6'인 경우 : 이것은 잘못된 예측이며 신용이 없습니다. |target - prediction| 또는 mean squared error - - 당신이 당신의 MSE 계산에 사용되는 사용자의 회귀 문제에 대한

, 우리는 absolute error에 의해 예측 및 목표 값 중 하나를 사이의 차이를 측정합니다. 따라서 tf.metrics.mean_squared_error 또는 tf.metrics.mean_absolute_error은 회귀 모델의 예측 오차를 측정하는 데 사용해야합니다.

+0

이제 알겠습니다. 하나 더. '훈련 시간에 한가지 사용 '이란 무엇을 의미합니까? 나는'test_error'뿐만 아니라'cost'도 계산하고 있습니다. 그래서 나는'MSE'를 할 수있을 것인가? - 최종 비용 가치? – Bolboa

+0

예, 정의를 사용하여 MSE를 계산했습니다. 이것은 본질적으로 제곱 평균 오류입니다.이 값은'tf.metrics.mean_squared_error'를 호출해도 동일해야합니다. – greeness