python - 如何在 TensorFlow 中构造矩阵的这些函数?
问题描述
我正在构建一个正式依赖于 2x2 矩阵的张量z
。然而,组成张量的各个部分是由矩阵 S(z)、T(z) 和 U(z) 构成的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 是 R 的对角化。
解决方案
我找到了一种使用 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...
推荐阅读
- partitioning - AWS Glue 使用输出存储桶中的文件写入和压缩
- html - 这个带有 `%button` 的代码笔中的 HTML 代码是什么?
- c# - 找不到 ASP.Net Core 应用程序部件视图
- scala - Spark 无法爆炸列
- jenkins - 如何在 jenkins groovy 中使用 fmt_case?
- node.js - 在 nodejs 服务器上处理套接字连接和 http 请求
- python - 如何插入熊猫数据框,以便在给定间隔内对列进行采样?
- javascript - 从现有 JSON 文件实例化新的 JavaScript 对象
- c# - 如何判断进程是否受保护?
- python - HTML解析以在Python中使用BeautifulSoup在所有HTML标记之后获取所有带分隔符的文本数据