如何对回归输出层进行数学运算

How to perform mathematical operation on regression output layer

我有一个像这样的简单回归神经网络:

from scipy.spatial.transform import Rotation as R

def nn_model(2):
  in = tf.keras.layers.Input(shape=[80, 80, 3])

  x = tf.keras.layers.Dense(64, activation='relu')(in)
  x = tf.keras.layers.Dense(64, activation='relu')(x)

  out = tf.keras.layers.Dense(1, activation="linear")(x)

  ####### Perform math operation here
  r = R.from_euler('z', out.numpy(), degrees=True)
  rMat = r.as_matrix()
  #######

  return tf.keras.Model(inputs=in, outputs=rMat)

我想对网络内部的输出回归层'out'进行数学运算。是否可以从 NN 内部访问它的值? 运行 上面的代码给出了这个错误:

  AttributeError: 'KerasTensor' object has no attribute 'numpy'

Keras层不输出张量值,而是输出张量规范(KerasTensor),用于获取前一层的形状、数据类型和其他属性。 所以不,不可能访问层的值,因为它没有值。

您可以改为使用 LambdaLayer,它可以让您将任何 pythonic 代码应用于层的“真实”输出。

r = tf.keras.layers.Lambda(lambda x: R.from_euler('z', x))(out)

请注意,我不确定这是否可行,因为 lambda 内部的函数最好使用 tensorflow 操作,并且应该是可微分的。