Python 是否可以在TensorFlow py_函数中使用调用会话?

Python 是否可以在TensorFlow py_函数中使用调用会话?,python,tensorflow,gpflow,Python,Tensorflow,Gpflow,基本上,我想知道下面的代码是否安全。 我想使用tf.py_函数调用一些scipy代码,其中我想评估调用会话的ops(包括设置变量)。原因是,我想使用一些scipy代码来做一些在tensorflow中很难编码的事情,但我不想中断计算图。我至少有两个例子:一个是在图中使用LSODE隐式ODE解算器,另一个是在图中使用scipy的鲁棒极小值(我正在考虑在py_函数包装器中调用GPFlow Optimizers,该算法需要反复解决GP优化问题) 下面的代码运行并返回我期望的值(值1)。但我不知道它是否安

基本上,我想知道下面的代码是否安全。 我想使用
tf.py_函数
调用一些scipy代码,其中我想评估调用会话的ops(包括设置变量)。原因是,我想使用一些scipy代码来做一些在tensorflow中很难编码的事情,但我不想中断计算图。我至少有两个例子:一个是在图中使用LSODE隐式ODE解算器,另一个是在图中使用scipy的鲁棒极小值(我正在考虑在py_函数包装器中调用GPFlow Optimizers,该算法需要反复解决GP优化问题)

下面的代码运行并返回我期望的值(值1)。但我不知道它是否安全。 我猜如果我在图中的其他地方也使用
x
的值,它会给出非确定性行为

从scipy.optimize导入最小化
导入tensorflow作为tf
def build_func(会话、y_和_梯度、变量):
pl=tf.placeholder(tf.float32)
assign=tf.assign(变量,pl)
y、 grad=y_和_grad
def func(x):
"""
这可能是在同一个图中使用ops和VAR的东西,
但需要迭代访问会话调用。
例如,使用scipy.minimize和tensorflow计算梯度。
"""
x=x.numpy()
def fun_和_jac(x):
运行(分配,{pl:x})
y、 jac=会话。运行(y_和_梯度)
返回y,jac
res=最小化(fun和jac,x0=x,jac=True)
返回res.x
返回函数
使用tf.Session(graph=tf.graph())作为会话:
x=tf.Variable([0.],dtype=tf.float32)
session.run(x.initializer)
y=(x-1.)**2
梯度=tf.梯度(y,x)[0]
func=build_func(会话,[y,grad],x)
opt_x=tf.py_函数(func[x],[tf.float32])
打印(会话运行(opt_x))