#------------------------------------------序-------------------------------------------------------
这篇博文是对[1]中的Rop以及Lop代码进行详细解释.
因为[1]中代码变量名称和数学表达式名称不对应,所以记录下,方便以后一看就懂
[1]的代码来自[2],[2]里面是有错误的,所以在这篇博客里面进行更正
代码运行环境:
python3.6.7
ubuntu18.10-amd64
#-----------------------------------Rop例子如下----------------------------------------------------------
import theano
import numpy as np
import theano.tensor as T
W = T.dmatrix('W')
V = T.dmatrix('V')
x = T.dvector('x')
#-----------------------------------------------
f = T.dot(x, W)
JV = T.Rop(f, W, V)
result = theano.function([W, V, x], JV)
result2=result([[1, 1.2], [2.1, 1]], #W
[[3.2, 2], [5.4, 2]], #V
[0.7,1.9])#x
print("result=",result2)
display(Image(theano.printing.pydotprint(result,return_image=True, var_with_name_simple=True)))
result= [12.5 5.2]
运行结果如下:
理论分析:
f
=
w
⋅
x
f=w·x
f=w⋅x
这个代码求解的是:
∂
f
∂
W
⋅
V
\frac{\partial f}{\partial W}·V
∂W∂f⋅V
#----------------------------------------------------------Lop例子如下------------------------------------------------------------------
import theano
import numpy as np
import theano.tensor as T
from IPython.display import Image
from IPython.display import display
W = T.dmatrix('W')
V = T.dmatrix('V')
x = T.dvector('x')
#--------------------------------------------------------------------------------------------
f = T.dot(x,W)
VJ = T.Lop(f,W,V)
result= theano.function([V,x], VJ)
V,x=[[3.2, 2], [5.4, 2]],[0.7,1.9]
result2=result(
[[3.2, 2], [5.4, 2]], #V
[0.7,1.9])#x
print("V=",V)
print("x=",x)
print("result=",result2)
display(Image(theano.printing.pydotprint(result,return_image=True, var_with_name_simple=True)))
#--------------------------------------------------------------------------------------------
运行结果是:
V= [[3.2, 2], [5.4, 2]]
x= [0.7, 1.9]
result= [[ 2.24 1.4 3.78 1.4 ]
[ 6.08 3.8 10.26 3.8 ]]
这个代码求解的是:
(
V
T
⋅
x
)
T
(V^T·x)^T
(VT⋅x)T
=
x
T
⋅
V
=x^T·V
=xT⋅V
=
[
0.7
1.9
]
[
3.2
,
2
,
5.4
,
2
]
=\left[ \begin{matrix} 0.7\\ 1.9 \\ \end{matrix} \right]\left[ \begin{matrix} 3.2,2,5.4,2 \end{matrix} \right]
=[0.71.9][3.2,2,5.4,2]
这里的V是打散后的V
所以根本就不是我们想象中的"左乘"
Reference:
[1]https://www.cnblogs.com/fireae/p/3772670.html