如何针对张量输入计算测试集平均相对误差(非反向传播用)
LSTM模型构建、训练及测试集平均相对误差计算
现有LSTM模型代码
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense import tensorflow as tf from tensorflow.keras import backend as K def create_model(): model = Sequential() model.add(LSTM(50, return_sequences=True, input_shape=(40002, 12))) model.add(LSTM(50, return_sequences=True)) model.add(LSTM(50, return_sequences=True)) model.add(tf.keras.layers.LSTM(30)) model.add(Dense(2, activation='linear')) def rmse(Y_test, prediction): return K.sqrt(K.mean(K.square(Y_test-prediction))) # compile model.compile(optimizer='adam', loss=rmse, metrics=['mean_squared_error', rmse]) return model # fit the model model = create_model() model.fit(x_train, Y_train, shuffle=False, verbose=1, epochs=10) # predict model prediction = model.predict(x_test, verbose=0) print(prediction)
测试集平均相对误差计算需求
给定张量类型的Y_test(真实标签,每个样本含2个数值)和prediction(模型预测结果,维度与Y_test一致),需计算每个输出维度的平均相对误差,核心逻辑为:
- 对每个样本的每个输出维度,计算单个样本的相对误差:
|真实值 - 预测值| / 真实值 - 对所有样本的同一维度相对误差取平均值,得到该维度的平均相对误差
- 最终输出为包含2个数值的结果,对应两个输出维度的平均相对误差
计算示例
Y_test = [[0.2, 0.003], [0.3, 0.008]] prediction = [[0.4, 0.005], [0.5, 0.007]]计算过程:
- 第一维度相对误差:
|0.2-0.4|/0.2=1,|0.3-0.5|/0.3≈0.6667→ 平均值≈0.833- 第二维度相对误差:
|0.003-0.005|/0.003≈0.6667,|0.008-0.007|/0.008=0.125→ 平均值≈0.396
最终结果:[0.833, 0.396]
实现代码(基于TensorFlow)
由于该指标仅用于测试集评估,无需参与反向传播,直接使用张量操作实现即可:
import tensorflow as tf def calculate_mean_relative_error(Y_test, prediction): # 添加极小值epsilon避免真实值为0时出现除以0错误 epsilon = 1e-8 # 计算每个样本每个维度的相对误差 relative_error = tf.abs(Y_test - prediction) / (Y_test + epsilon) # 对所有样本求每个维度的平均值 mean_re = tf.reduce_mean(relative_error, axis=0) return mean_re # 调用示例 mean_relative_error = calculate_mean_relative_error(Y_test, prediction) # 转换为numpy数组查看结果 print(mean_relative_error.numpy())
内容的提问来源于stack exchange,提问作者sp05
相关产品推荐
相关产品推荐

