我目前正在为大学做练习。 任务是将给定的分类更改为回归。 我对数据的预处理和网络进行了所有更改,因此执行了回归。
但是当我尝试测试网络的预测时,预测会出现疯狂的错误值。
数据是像素矩阵,并且相应的角度在0°和90°之间。 我已将数据拆分为训练集和测试集,并检查两组中的所有值均在0°到90°范围内。
要测试回归的准确性,请运行以下代码:
def reg_perceptron(t, weights, biases):
t = tf.nn.relu(tf.add(tf.matmul(t, weights['h1']), biases['b1']), name = "layer_1")
t = tf.add(tf.matmul(t, weights['hOut'], name="LOut_MatMul"), biases['bOut'], name = output_tensor)
return t
pred = reg_perceptron(_x, rg_weights, rg_biases)
pred_y = np.array([])
total_batch_test = int(len(test_x)/batch_size)
for i in range(total_batch_test):
lower_bound = i * batch_size
upper_bound = i * batch_size + batch_size
batch_test_x = test_x[lower_bound : upper_bound]#test_x are the pixel matrices of the test dataset
feed_dict = {_x: batch_test_x}
batch_test_y_predict = sess.run(pred, feed_dict = feed_dict)
print ("min: %.2f max: %.2f" % (batch_test_y_predict.min(), batch_test_y_predict.max()))
#WHY ARE THERE VALUES LIKE min: -13563819760524520849408.00 max: 1280719166070321053696.00 PREDICTED?
if len(pred_y) == 0:
pred_y = batch_test_y_predict
else:
pred_y = np.concatenate((pred_y, batch_test_y_predict), axis=0)
# Print test results.
pred_y = pd.Series(pred_y.reshape(-1).tolist())
#cut of the last elements if division by batch_size has rest
true_y = test_y[:pred_y.size]
RMSE = np.sqrt(np.mean(np.square(np.subtract(pred_y, true_y))))
print ("Epoch: %3.i - RMSE: %.2f" % (epoch, RMSE))
为什么在最小范围内有值:-13563819760524520849408.00 max:1280719166070321053696.00预测,如果训练数据仅在0°到90°的范围内?
因此我得到了结果:大纪元:0 - RMSE:23738450191911909064704.00,显然应该低于90°。
答案 0 :(得分:0)
我可以通过规范化给定数据来解决问题。