如何解决MLP 的 Hessian 矩阵 w.r.t 参数不对称TF2.0
我试图计算 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 举报,一经查实,本站将立刻删除。