如何在Tensorflow中计算训练模型的梯度?

时间:2018-11-25 21:22:05

标签: python tensorflow gradient

我只是不了解训练后如何计算训练模型的梯度。在下面的代码中,我生成一些输入数据“ x”,并使用值“ f”训练一个函数。训练了人工神经网络。

训练后,我知道如何使用训练后的模型来计算值。但是,如何在兴趣点上计算模型相对于“ x”的梯度? “ x = [0,-1]”处的精确渐变为“ [-2,-2]”,请参见最后一行。

import numpy as np 
import tensorflow as tf

#%% Data

def function(x):
    return np.array([np.sum(x)**2],dtype=np.float32)
def grad(x):
    return np.array([2*np.sum(x),2*np.sum(x)],dtype=np.float32)

x = np.array([[x1,x2] for x1 in np.linspace(0,3,10,dtype=np.float32) for x2 in np.linspace(-1,0,4,dtype=np.float32)])
f = np.array([function(xx) for xx in x],dtype=np.float32)

dx = x.shape[-1]
df = f.shape[-1]

#%% ANN

xp = tf.placeholder(dtype=tf.float32,shape=[None,dx])
fp = tf.placeholder(dtype=tf.float32,shape=[None,df])
model = tf.layers.dense(xp,32,activation=tf.tanh)
model = tf.layers.dense(model,32,activation=tf.tanh)
model = tf.layers.dense(model,df,activation=None)
loss = tf.losses.mean_squared_error(fp,model)
step = tf.train.AdamOptimizer(1e-2).minimize(loss)  
sess = tf.Session()
sess.run(tf.global_variables_initializer())
for _ in range(500):
    sess.run(step,{xp:x,fp:f})

#%% Predict

print('Evaluation of model')
fm = sess.run(model,{xp:x})
print(np.mean((f-fm)**2))
print(sess.run(loss,{xp:x,fp:f}))

print('Point of interest')
print(x[0])
print('Gradient at point of interest')
print(grad(x[0]))

0 个答案:

没有答案
相关问题