一个python包来做自动区分。
easyGrad的Python项目详细描述
[![构建状态](https://travis-ci.org/amartya18x/easygrad.svg?branch=master)(https://travis ci.org/amartya18x/easy grad)
easy grad
此库旨在提供在python中执行符号操作的简单实现
允许的运算符
-*exp(x)*和*log(x)*
``python
def testops():
x=integer('x')
y=ops.log(x)
z=ops.exp(y)
gragraph=gragragragraph(z)
graph.getoutput({x:x:1})
graph.getgradientents(wrt=x)
x.gradientx.gradientx.gradientx.gradientx.gradientx.gradientx.gradientx.gradientx.gragradientx.gragragragragragragragragraph.gradigradientx<
```` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `.getgradients(wrt=x)
打印x.梯度
```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````/>
`` python
def gradtestsimple():
a=整数(“a”)
b=integer(“b”)
c=a+b
d=b+6
e=c*d
graph=gradegraph(e)
graph.getoutput({a:32,
b:11})
graph.getgradients(wrt=b)
print a.gradient,b.梯度
````````````````````````````````` python
def gradtest():
x=integer(“int1x”)
y=integer(“int2y”)
z=integer(“int3z”)
p=integer(“int4p”)
p=integer(“int4p”)
k=p*p*z
k
m=k+t
n=m*z
gragragragraph=gragragragragragragragragragragragragragragragragragragragragragragragragragragra>graph.getoutput({x:9,
y:9,
z:9,
p:2})
graph.getgradients(wrt=z)
打印x.gradient,y.gradient,z.gradient,p.gradient
````
```这与上面的示例相同,但这些命令不是三个op命令。
``python
def gradestlong():
x=integer(“int1x”)
y=integer(“int2y”)
z=integer(“int3z”)
p=integer(“int4p”)
k=p*z
n=(k+(y*p*z))*z
=梯度图(n)
graph.getoutput({x:9,
y:9,
z:9,
p:2})
graph.getgradients(wrt=z)
打印x.gradient,y.gradient,z.gradient,p.gradient
````
``张量运算
`` python
x=doubletensor(“tensor1”)
y=x.dot([3,4])
z=y.dot([4,5])
graph=gradigraph(z)
output=graph.getoutput({x:[3,4]})
graph.getgradients(wrt=x)
assert(np.all)(output==100,
assert(np.all(x.gradient===[[12,16.16.],[15,20.20.]])
def tensorop():
x=双张量(“张量1”)
y=x-[3,4]
z=ops.log(y*x)
graph=gragragragragragraph(z)
output=graph.getoutput({x[10]]})
assert(np.all)(np.isclose(output,np.log(10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,*(10-NP.Asarray([3,4]))
graph.getgradients(wrt=x)
a=2*10-np.asarray([3,4])
b=1.0/np.exp(np.asarray(output))
assert(np.all(np.isclose(x.gradient,a*b)))
```
easy grad
此库旨在提供在python中执行符号操作的简单实现
允许的运算符
-*exp(x)*和*log(x)*
``python
def testops():
x=integer('x')
y=ops.log(x)
z=ops.exp(y)
gragraph=gragragragraph(z)
graph.getoutput({x:x:1})
graph.getgradientents(wrt=x)
x.gradientx.gradientx.gradientx.gradientx.gradientx.gradientx.gradientx.gradientx.gragradientx.gragragragragragragragragraph.gradigradientx<
```` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `.getgradients(wrt=x)
打印x.梯度
```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````/>
`` python
def gradtestsimple():
a=整数(“a”)
b=integer(“b”)
c=a+b
d=b+6
e=c*d
graph=gradegraph(e)
graph.getoutput({a:32,
b:11})
graph.getgradients(wrt=b)
print a.gradient,b.梯度
````````````````````````````````` python
def gradtest():
x=integer(“int1x”)
y=integer(“int2y”)
z=integer(“int3z”)
p=integer(“int4p”)
p=integer(“int4p”)
k=p*p*z
k
m=k+t
n=m*z
gragragragraph=gragragragragragragragragragragragragragragragragragragragragragragragragragragra>graph.getoutput({x:9,
y:9,
z:9,
p:2})
graph.getgradients(wrt=z)
打印x.gradient,y.gradient,z.gradient,p.gradient
````
```这与上面的示例相同,但这些命令不是三个op命令。
``python
def gradestlong():
x=integer(“int1x”)
y=integer(“int2y”)
z=integer(“int3z”)
p=integer(“int4p”)
k=p*z
n=(k+(y*p*z))*z
=梯度图(n)
graph.getoutput({x:9,
y:9,
z:9,
p:2})
graph.getgradients(wrt=z)
打印x.gradient,y.gradient,z.gradient,p.gradient
````
``张量运算
`` python
y=x.dot([3,4])
z=y.dot([4,5])
graph=gradigraph(z)
output=graph.getoutput({x:[3,4]})
graph.getgradients(wrt=x)
assert(np.all)(output==100,
assert(np.all(x.gradient===[[12,16.16.],[15,20.20.]])
def tensorop():
x=双张量(“张量1”)
y=x-[3,4]
z=ops.log(y*x)
graph=gragragragragragraph(z)
output=graph.getoutput({x[10]]})
assert(np.all)(np.isclose(output,np.log(10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,*(10-NP.Asarray([3,4]))
graph.getgradients(wrt=x)
a=2*10-np.asarray([3,4])
b=1.0/np.exp(np.asarray(output))
assert(np.all(np.isclose(x.gradient,a*b)))
```