问题描述
我试图计算 Hessian 矩阵 w.r.t.模型参数
然而,Hessian 矩阵中的每个张量形状都不是对称的。
import tensorflow as tf
x_train = tf.constant(tf.random.uniform(shape=(100,24),minval=0,maxval=100))
y_train = tf.constant(tf.random.uniform(shape=(100,1),maxval=1))
x_test = tf.constant(tf.random.uniform(shape=(17,maxval=100))
y_test = tf.constant(tf.random.uniform(shape=(17,maxval=1))
f = tf.keras.models.Sequential()
f.add(tf.keras.layers.Dense(30,activation='relu',use_bias=False))
f.add(tf.keras.layers.Dense(1,activation='sigmoid',use_bias=False))
f.compile(loss='binary_crossentropy')
f.fit(x_train,y_train)
ws = f.trainable_weights
with tf.GradientTape(persistent=True) as tape2:
tape2.watch(x_train)
with tf.GradientTape(persistent=True) as tape1:
tape1.watch(x_train)
y_hat = f(x_train)
loss = tf.keras.losses.binary_crossentropy(y_train,y_hat)
grads = tape1.gradient(loss,ws)
H = [tape2.gradient(grad,ws) for grad in grads]
print([h_elem.shape for _H in H for h_elem in _H])
输出是
[TensorShape([24,30]),TensorShape([30,1]),TensorShape([24,1])]
我期待的形状
[[24,30],[30,1],1]]
考虑Hessian矩阵的对称特性。但是,我不知道为什么我的代码中的第三张量形状是 [24,30]
。
我怀疑这是因为hessian矩阵遵循方程:
[df(x)/dL1L1,df(x)/dL1,L2,df(x)/dL2,L1,L2]
其中 L
是层的参数。
在这种情况下,第 2 个、第 3 个元素的形状不同。
正确吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)