Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 将scipy.integrate.quad与Tensorflow一起使用_Math_Tensorflow_Scipy - Fatal编程技术网

Math 将scipy.integrate.quad与Tensorflow一起使用

Math 将scipy.integrate.quad与Tensorflow一起使用,math,tensorflow,scipy,Math,Tensorflow,Scipy,我正在尝试使用scipy.integrate.quad和Tensorflow,如下所示。 time和Lambda是两个具有形状的张量(无,1) 但是,我得到一个错误,如下所示: File "J:\Workspace\Distributions.py", line 30, in <lambda> args=(x[1],)), File "I:\Anaconda3\envs\tensorflow\lib\site-packages\scipy\integrate\quadpa

我正在尝试使用scipy.integrate.quad和Tensorflow,如下所示。
time
Lambda
是两个具有形状的张量(无,1)

但是,我得到一个错误,如下所示:

File "J:\Workspace\Distributions.py", line 30, in <lambda>
    args=(x[1],)),
  File "I:\Anaconda3\envs\tensorflow\lib\site-packages\scipy\integrate\quadpack.py", line 323, in quad
    points)
  File "I:\Anaconda3\envs\tensorflow\lib\site-packages\scipy\integrate\quadpack.py", line 388, in _quad
    return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit)
TypeError: a float is required
文件“J:\Workspace\Distributions.py”,第30行,在
args=(x[1],),
文件“I:\Anaconda3\envs\tensorflow\lib\site packages\scipy\integrate\quadpack.py”,第323行,四行
积分)
文件“I:\Anaconda3\envs\tensorflow\lib\site packages\scipy\integrate\quadpack.py”,第388行,在_quad中
返回_quadpack._qagse(func、a、b、args、full输出、epsabs、epsrel、limit)
TypeError:需要浮点

X[0]是形状为()的张量。它不是计算前的浮点值。有可能解决这个问题吗?我应该如何计算Tensorflow中的积分?

如果您至少有Tensorflow 1.8.0,那么最好使用以下代码(经过测试):

from\uuuuu future\uuuuu导入打印功能
导入tensorflow作为tf
断言tf.VERSION>=“1.8.0”,“此代码仅适用于TensorFlow 1.8.0或更高版本。”
def f(y,a):
返回a*a
x=tf.常数([0.0,1.0,2,3,4],dtype=tf.float32)
i=tf.contrib.integrate.odeint_fixed(f,0.0,x,method=“rk4”)
使用tf.Session()作为sess:
res=sess.run(i)
打印(res)
将输出:

[0.0.33333334 2.66667 9.21.333334]

按照上述
x=[0,1,2,3,4]
的规定,在[0,0][0,2][0,3][0,4]间隔内正确集成x2。(x2的原始函数是⅓x3,例如43/3=64/3=21⅓


否则,对于早期的TensorFlow版本,下面介绍如何修复代码

因此,主要的问题是必须使用将Python函数(在本例中)映射到张量上。将映射其他TensorFlow操作和过程,并期望将张量作为操作数。因此,
x[0]
永远不会是一个简单的浮点,它将是一个标量张量,不知道如何处理它

除非您想手动循环numpy阵列,否则您无法完全摆脱这两种方法

此外,返回一个double(float64),而张量是float32

我已经简化了你的代码很多,因为我无法访问它的其余部分,与这个问题的核心相比,它看起来太复杂了。以下代码(已测试):

from\uuuuu future\uuuuu导入打印功能
导入tensorflow作为tf
从scipy导入集成
定义f(a):
返回a*a
def集成(f,x):
返回tf.map_fn(lambda y:tf.py_func(
lambda z:integrate.quad(f,0.0,z)[0],[y],tf.float64),
十)
x=tf.constant([1.0,2,3,4],dtype=tf.float64)
i=集成(f,x)
使用tf.Session()作为sess:
res=sess.run(i)
打印(res)
还将输出:

[0.33333333 2.66666667 9.21.33333333]


如果您至少有TensorFlow 1.8.0,那么最好使用以下代码(已测试):

from\uuuuu future\uuuuu导入打印功能
导入tensorflow作为tf
断言tf.VERSION>=“1.8.0”,“此代码仅适用于TensorFlow 1.8.0或更高版本。”
def f(y,a):
返回a*a
x=tf.常数([0.0,1.0,2,3,4],dtype=tf.float32)
i=tf.contrib.integrate.odeint_fixed(f,0.0,x,method=“rk4”)
使用tf.Session()作为sess:
res=sess.run(i)
打印(res)
将输出:

[0.0.33333334 2.66667 9.21.333334]

按照上述
x=[0,1,2,3,4]
的规定,在[0,0][0,2][0,3][0,4]间隔内正确集成x2。(x2
的原始函数是⅓x3,例如43/3=64/3=21⅓


否则,对于早期的TensorFlow版本,下面介绍如何修复代码

因此,主要的问题是必须使用将Python函数(在本例中)映射到张量上。将映射其他TensorFlow操作和过程,并期望将张量作为操作数。因此,
x[0]
永远不会是一个简单的浮点,它将是一个标量张量,不知道如何处理它

除非您想手动循环numpy阵列,否则您无法完全摆脱这两种方法

此外,返回一个double(float64),而张量是float32

我已经简化了你的代码很多,因为我无法访问它的其余部分,与这个问题的核心相比,它看起来太复杂了。以下代码(已测试):

from\uuuuu future\uuuuu导入打印功能
导入tensorflow作为tf
从scipy导入集成
定义f(a):
返回a*a
def集成(f,x):
返回tf.map_fn(lambda y:tf.py_func(
lambda z:integrate.quad(f,0.0,z)[0],[y],tf.float64),
十)
x=tf.constant([1.0,2,3,4],dtype=tf.float64)
i=集成(f,x)
使用tf.Session()作为sess:
res=sess.run(i)
打印(res)
还将输出:

[0.33333333 2.66666667 9.21.33333333]


谢谢我计划通过学习优化Lambda。然而,使用集成。Quad似乎切断了中间变量LAMBDA和最终训练操作之间的连接。所以我得到了
ValueError:没有为任何变量提供梯度
当然,很乐意帮忙!:)是的,
integrate.quad()
不实现渐变操作。您需要编写自己的带有渐变操作的层,以便能够通过它进行训练。好消息是原始函数的导数就是原始函数。:)添加了基于
tf.contrib的代码版本。
File "J:\Workspace\Distributions.py", line 30, in <lambda>
    args=(x[1],)),
  File "I:\Anaconda3\envs\tensorflow\lib\site-packages\scipy\integrate\quadpack.py", line 323, in quad
    points)
  File "I:\Anaconda3\envs\tensorflow\lib\site-packages\scipy\integrate\quadpack.py", line 388, in _quad
    return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit)
TypeError: a float is required