如何对回归输出层进行数学运算
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 操作,并且应该是可微分的。
我有一个像这样的简单回归神经网络:
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 操作,并且应该是可微分的。