首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用渐近来获取返回标量的函数的雅可比wrt符号矩阵

使用渐近来获取返回标量的函数的雅可比wrt符号矩阵
EN

Stack Overflow用户
提问于 2020-04-20 05:28:35
回答 2查看 657关注 0票数 0

我正在尝试求一个标量函数相对于一个矩阵的雅可比矩阵。

代码语言:javascript
复制
w = sym.MatrixSymbol('w',2,1)
g = sym.Matrix([sym.log(1 + sym.exp(sym.MatMul(w.T,w)))])
grad_g = g.jacobian(w)

这将返回一个不正确的[0,0]雅可比向量。

我在这里尝试了一个非符号实现:

代码语言:javascript
复制
w1, w2 = sym.symbols('w_1, w_2')
w = sym.Matrix([w1, w2])
g = sym.Matrix([sym.log(sym.Matrix([1]) + sym.exp(w.T * w))])
grad_g = g.jacobian(w)

在那里我得到了一个错误:NotImplementedError: with 0进一步的信息。

愿意提供任何帮助的人!

EN

回答 2

Stack Overflow用户

发布于 2020-04-20 05:40:47

在非符号化的情况下解决了问题:

代码语言:javascript
复制
w1, w2 = sym.symbols('w_1 w_2')
w = sym.Matrix([w1, w2])
g = sym.log(1 + sym.exp(w.T * w)[0])
grad_g = sym.Matrix([g]).jacobian(w)

必须索引由sym.exp返回的矩阵,而不是使1成为矩阵。

我很想知道有没有办法用sym.MatrixSymbol做到这一点,所以请让我知道

票数 0
EN

Stack Overflow用户

发布于 2020-04-20 06:29:06

这是你想要的吗?

代码语言:javascript
复制
In [130]: w = sym.MatrixSymbol('w',2,1) 
     ...: g = sym.Matrix([sym.log(1 + sym.exp(sym.MatMul(w.T,w)[0, 0]))]) 
     ...: grad_g = g.jacobian(w)                                                                                                  

In [131]: grad_g                                                                                                                  
Out[131]: 
⎡      2      2            2      2    ⎤
⎢   w₀₀  + w₁₀          w₀₀  + w₁₀     ⎥
⎢2⋅ℯ           ⋅w₀₀  2⋅ℯ           ⋅w₁₀⎥
⎢──────────────────  ──────────────────⎥
⎢     2      2            2      2     ⎥
⎢  w₀₀  + w₁₀          w₀₀  + w₁₀      ⎥
⎣ ℯ            + 1    ℯ            + 1 ⎦

注意,像exp和log这样的函数通常不需要矩阵参数。您可以使用索引,例如M[0, 0]将1x1矩阵转换为标量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61311865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档