我目前正在研究一个接受一些输入并返回2个输出的神经网络。我在回归问题中使用了2个输出,它们都是2个坐标,即X和Y。 我的问题不需要X和Y值,但它面对的角度是atan2(y,x)。
我试图创建一个自定义的keras度量标准和一个损失函数,以便在预测张量和真实张量的元素之间进行atan2运算,以便更好地对网络进行训练。
输出张量的度量单位为[?,2],我想做一个函数,可以遍历张量并在其上应用atan2(tensor [itr,1],tensor [itr,0])它得到另一个张量的数组。
self.model.compile(loss="mean_absolute_error",
optimizer=tf.keras.optimizers.Adam(lr=0.01),
metrics=[vect2d_to_angle_metric])
# This is the function i want to work on
def vect2d_to_angle_metric(y_true, y_predicted):
print("y_true = ", y_true)
print("y_predicted = ", y_predicted)
print("y_true shape = ", y_true.shape())
print("y_predicted shape = ", y_predicted.shape())
上述功能的打印结果是
y_true = Tensor("dense_2_target:0", shape=(?, ?), dtype=float32)
y_predicted = Tensor("dense_2/BiasAdd:0", shape=(?, 2), dtype=float32)
y_true shape = Tensor("metrics/vect2d_to_angle_metric/Shape:0", shape=(2,), dtype=int32)
y_predicted shape = Tensor("metrics/vect2d_to_angle_metric/Shape_1:0", shape=(2,), dtype=int32)
我想应用于tensorflow函数的功能的Python伪代码
def evaluate(self):
mean_array = []
for i in range(len(x_test)):
inputs = x_test[i]
prediction = self.model.getprediction(i)
predicted_angle = np.arctan2(result[i][1], result[i][0])
real_angle = np.arctan2(float(self.y_test[i][1]), float(self.y_test[i][0]))
mean_array.append(([abs(predicted_angle - real_angle)]/real_angle) * 100)
i += 1
我希望将张量[i] [0]和[i] [1]的两侧滑动到两个tf.atan2()函数上,最后从它们中制作出另一个张量,以便然后进行其他计算并传递自定义损失。