선형 회귀 모델이 정상적으로 작동하는 것처럼 보이지만 모델의 정확성을 표시하고 싶습니다.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
을 구현하고 싶습니다. 설명서에 따르면 두 개의 인수, labels
및 predictions
이 있습니다. 그러나 나는 내가 인쇄됩니다 정확도 결과가 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를 초기화해야 ... 다음 다음을 추가했습니다.
어디서나 작동 예제를 검색했지만 내 모델에서 제대로 작동하지 않을 수 있습니다. 구현 방법은 무엇입니까?
이제 알겠습니다. 하나 더. '훈련 시간에 한가지 사용 '이란 무엇을 의미합니까? 나는'test_error'뿐만 아니라'cost'도 계산하고 있습니다. 그래서 나는'MSE'를 할 수있을 것인가? - 최종 비용 가치? – Bolboa
예, 정의를 사용하여 MSE를 계산했습니다. 이것은 본질적으로 제곱 평균 오류입니다.이 값은'tf.metrics.mean_squared_error'를 호출해도 동일해야합니다. – greeness