tensorflow求导和梯度计算实例
1.函数求一阶导
importtensorflowastf tf.enable_eager_execution() tfe=tf.contrib.eager frommathimportpi deff(x): returntf.square(tf.sin(x)) assertf(pi/2).numpy()==1.0 sess=tf.Session() grad_f=tfe.gradients_function(f) print(grad_f(np.zeros(1))[0].numpy())
2.高阶函数求导
importnumpyasnp deff(x): returntf.square(tf.sin(x)) defgrad(f): returnlambdax:tfe.gradients_function(f)(x)[0] x=tf.lin_space(-2*pi,2*pi,100) #print(grad(f)(x).numpy()) x=x.numpy() importmatplotlib.pyplotasplt plt.plot(x,f(x).numpy(),label="f") plt.plot(x,grad(f)(x).numpy(),label="firstderivative")#一阶导 plt.plot(x,grad(grad(f))(x).numpy(),label="secondderivative")#二阶导 plt.plot(x,grad(grad(grad(f)))(x).numpy(),label="thirdderivative")#三阶导 plt.legend() plt.show() deff(x,y): output=1 foriinrange(int(y)): output=tf.multiply(output,x) returnoutput defg(x,y): returntfe.gradients_function(f)(x,y)[0] print(f(3.0,2).numpy())#f(x)=x^2 print(g(3.0,2).numpy())#f'(x)=2*x print(f(4.0,3).numpy())#f(x)=x^3 print(g(4.0,3).numpy())#f(x)=3x^2
3.函数求一阶偏导
x=tf.ones((2,2)) withtf.GradientTape(persistent=True)ast: t.watch(x) y=tf.reduce_sum(x) z=tf.multiply(y,y) dz_dy=t.gradient(z,y) print(dz_dy.numpy()) dz_dx=t.gradient(z,x) print(dz_dx.numpy()) foriin[0,1]: forjin[0,1]: print(dz_dx[i][j].numpy())
4.函数求二阶偏导
x=tf.constant(2.0) withtf.GradientTape()ast: withtf.GradientTape()ast2: t2.watch(x) y=x*x*x dy_dx=t2.gradient(y,x) d2y_dx2=t.gradient(dy_dx,x) print(dy_dx.numpy()) print(d2y_dx2.numpy())
以上这篇tensorflow求导和梯度计算实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。