Tensor(“ pow:0”,...)必须与Tensor(“ Cast_2:0”,...)来自同一图

时间:2018-07-25 14:22:40

标签: python-3.x tensorflow

我正在尝试对需要进行明确积分的某些事物建模。代码如下所示:

import tensorflow as tf

from numpy import pi, inf
from tensorflow import log, sqrt, exp, pow
from scipy.integrate import quad  # for integration

def risk_neutral_pdf(phi, a, S, K, r, sigma, Mt, p_dict):

    phii = tf.complex(0., phi)

    A = tf.cast(0., tf.complex64)
    B = tf.cast(0., tf.complex64)

    p_dict['gamma'] = p_dict['gamma'] + p_dict['lamda'] + .5
    p_dict['lamda'] = -.5

    for t in range(Mt-1, -1, -1):
        temp = 1. - 2. * p_dict['alpha'] * B
        A = A + (phii + a) * r + p_dict['omega'] * B - .5 * log(temp)
        B = B * p_dict['beta'] + (phii + a) * (p_dict['lamda'] + p_dict['gamma']) - \
            .5 * p_dict['gamma']**2. + (.5*((phii + a) - p_dict['gamma'])**2. / temp)

    return tf.real(S**a * (S/K)**phii * exp(A + B * sigma**2.) / phii)

p_dict={'lamda': 0.205, 'omega': 5.02e-6, 'beta': 0.589, 'gamma': 421.39, 'alpha': 1.32e-6}

S = 100.
K = 100.
r = 0.
Mt = 0
sq_ht = sqrt(.15**2/252.)
sigma = sq_ht

P1 = tf.py_func(lambda z: quad(risk_neutral_pdf, z, inf, args=(1., S, K, r, sigma, Mt, p_dict))[0],
                [0.], tf.float64)

with tf.Session() as sess:
    res = sess.run(P1)
    print(res)

结果返回“ InvalidArgumentError(请参见上面的回溯):ValueError:Tensor(“ pow:0”,shape =(),dtype = float32)必须与Tensor(“ Cast_2:0”,shape)来自同一图形=(),dtype = complex64)。”但是,无论我如何更改代码或在"ValueError: Tensor A must be from the same graph as Tensor B"中引用解决方案,它都行不通。我想知道将tf.reset_default_graph()放在首位时是否做错了,还是应该对代码进行一些更改。

谢谢。 (Tensroflow版本:1.6.0)

更新: 我发现 sigma 变量在传递到Risk_neutral_pdf函数之前已经是sqrt了,并在不需要返回时被加电。因此,将返回值修改为return tf.real(S**a * (S/K)**phii * exp(A + B * sigma) / phii),将sq_ht修改为.15**2/252.。错误更改为“ TypeError:需要浮点数” ,我认为这是由 quad Tensor 引起的。有什么想法要解决吗?

非常感谢。

0 个答案:

没有答案