如何在 TensorFlow 中构造矩阵的这些函数?
How to construct these functions of a matrix in TensorFlow?
我正在构造一个正式依赖于 2x2 矩阵的张量 z
。但是,构成张量的各个部分是由从 z
派生的矩阵 S(z)、T(z) 和 U(z) 构造的,我不确定如何进行。
这里是推导S(z)、T(z)和U(z)的步骤。每个矩阵 z 都可以分解为极坐标形式: z = RU 其中 R 是半正定矩阵,U 是酉矩阵。通过使用 R 和 U 我们定义:
1) S(z) = sech(R)
2) T(z) = tanh(R)U
3) U(z) = U
由于我必须执行反向传播来学习 z 中的参数,我如何在 TensorFlow 中以可微分的方式将 S、T 和 U 定义为 z 的函数?我可以利用它们只有 2x2 的事实吗(例如明确使用特征值)?
注意:像 sech(R) 这样的矩阵函数不是逐元素应用的函数 sech,而是 sech(R) = U' sech(D) U,其中 R = U'DU 是对角化的
我找到了一种使用 SVD 的方法(在 TF 中是可微分的!):
z = wsv' = (wsw')(wv')= RU
所以我们已经对R进行了对角化:
S = w sech(s) w'
T = (w tanh(s) w')(wv') = w tanh(s) v'
U = wv'
在代码中:
s, w, v = tf.linalg.svd(z)
S = tf.matmul(w, tf.matmul(tf.linalg.diag(1/tf.math.cosh(s)), w, adjoint_b=True))
T = tf.matmul(w, tf.matmul(tf.linalg.diag(tf.math.tanh(s)), v, adjoint_b=True))
U = tf.matmul(w, v, adjoint_b=True)
这里我没有利用我的矩阵是 2x2 的事实,我可以这样做以避免使用 SVD...
我正在构造一个正式依赖于 2x2 矩阵的张量 z
。但是,构成张量的各个部分是由从 z
派生的矩阵 S(z)、T(z) 和 U(z) 构造的,我不确定如何进行。
这里是推导S(z)、T(z)和U(z)的步骤。每个矩阵 z 都可以分解为极坐标形式: z = RU 其中 R 是半正定矩阵,U 是酉矩阵。通过使用 R 和 U 我们定义:
1) S(z) = sech(R)
2) T(z) = tanh(R)U
3) U(z) = U
由于我必须执行反向传播来学习 z 中的参数,我如何在 TensorFlow 中以可微分的方式将 S、T 和 U 定义为 z 的函数?我可以利用它们只有 2x2 的事实吗(例如明确使用特征值)?
注意:像 sech(R) 这样的矩阵函数不是逐元素应用的函数 sech,而是 sech(R) = U' sech(D) U,其中 R = U'DU 是对角化的
我找到了一种使用 SVD 的方法(在 TF 中是可微分的!):
z = wsv' = (wsw')(wv')= RU
所以我们已经对R进行了对角化:
S = w sech(s) w'
T = (w tanh(s) w')(wv') = w tanh(s) v'
U = wv'
在代码中:
s, w, v = tf.linalg.svd(z)
S = tf.matmul(w, tf.matmul(tf.linalg.diag(1/tf.math.cosh(s)), w, adjoint_b=True))
T = tf.matmul(w, tf.matmul(tf.linalg.diag(tf.math.tanh(s)), v, adjoint_b=True))
U = tf.matmul(w, v, adjoint_b=True)
这里我没有利用我的矩阵是 2x2 的事实,我可以这样做以避免使用 SVD...