Python 3.x 属性错误:';数据类型';对象没有属性';类型';张量流发球

Python 3.x 属性错误:';数据类型';对象没有属性';类型';张量流发球,python-3.x,numpy,tensorflow,tensorflow-serving,Python 3.x,Numpy,Tensorflow,Tensorflow Serving,我试图在tensorflow中使用一个函数(来自另一个模块)。函数接受numpy数组并返回changepoints。我的主要目标是在tensorflow服务上部署此模型。我犯了错误 AttributeError:'DType'对象没有属性'type' 有两个函数,一个是create_data(),它创建一个numpy数组并返回它,另一个是change(),它接受numpy数组并使用前面提到的函数返回changepoints。我创建了一个占位符来接受输入数据,这是一个执行函数的操作。问题是,若我试

我试图在tensorflow中使用一个函数(来自另一个模块)。函数接受numpy数组并返回changepoints。我的主要目标是在tensorflow服务上部署此模型。我犯了错误

AttributeError:'DType'对象没有属性'type'

有两个函数,一个是create_data(),它创建一个numpy数组并返回它,另一个是change(),它接受numpy数组并使用前面提到的函数返回changepoints。我创建了一个占位符来接受输入数据,这是一个执行函数的操作。问题是,若我试图通过占位符发送数据,我会出错。如果我将数据直接发送到函数中,它将运行。下面是我的代码

def create_data():
    np.random.seed(0)
    size = 100
    mean_a = 0.0
    mean_b = 10.0
    mean_c = 0
    var = 0.1
    data_a = np.random.normal(mean_a, var, size)
    data_b = np.random.normal(mean_b, var, size)
    data_c = np.random.normal(mean_c, var, size)
    data = np.concatenate([data_a, data_b, data_c])
    return data

def change(data):
    # what else i tried
    # data = np.array(data, dtype=np.float)
    # above line gives another error mentioned after code 
    cpts = (pelt(normal_mean(x, np.var(x)), len(x)))
    return cpts

sess = tf.Session()
x = tf.placeholder(tf.float32, shape=[300, ], name="myInput")
y = tf.convert_to_tensor(change(x),np.float32,name="myOutput")
z = sess.run(y,feed_dict={x:create_data()})
如果我在函数change()中尝试代码
data=np.array(data,dtype=np.float)
,它会给出错误信息

ValueError:使用序列设置数组元素

我还尝试了
data=np.hstack((数据)).astype(np.float)
data=np.vstack((数据)).astype(np.float)
,但它遇到了一个单独的错误,即使用tf.map\u fn。我还尝试使用tf.eval()转换数字,但我无法让它们在带有占位符的函数中运行

但是如果我直接发送输出

y = tf.convert_to_tensor(change(create_data()),np.float32,name="myOutput")
它起作用了

我应该如何发送输入以使其工作


编辑:有问题的函数是是否有人想知道。

当您试图将张量传递给numpy函数时,会出现此错误

您需要使用将python函数包含到tensorflow图中

(另外,change()函数使用数据作为参数,而不是x)

这是为我工作的代码

import numpy as np
import tensorflow as tf
from changepy import pelt
from changepy.costs import normal_mean

def create_data():
    np.random.seed(0)
    size = 100
    mean_a = 0.0
    mean_b = 10.0
    mean_c = 0
    var = 0.1
    data_a = np.random.normal(mean_a, var, size)
    data_b = np.random.normal(mean_b, var, size)
    data_c = np.random.normal(mean_c, var, size)
    data = np.concatenate([data_a, data_b, data_c])
    return data

def change(x):
    # what else i tried
    # data = np.array(data, dtype=np.float)
    # above line gives another error mentioned after code 

    cpts = (pelt(normal_mean(x, np.var(x)), len(x)))
    return cpts


sess = tf.Session()
x = tf.placeholder(tf.float32, shape=[300, ], name="myInput")
y = tf.convert_to_tensor(tf.compat.v1.py_func(change, [x], 3*[tf.int64]),np.float32,name="myOutput")
z = sess.run(y,feed_dict={x:create_data()})
print(z)

当您尝试将张量传递给numpy函数时,会引发此错误

您需要使用将python函数包含到tensorflow图中

(另外,change()函数使用数据作为参数,而不是x)

这是为我工作的代码

import numpy as np
import tensorflow as tf
from changepy import pelt
from changepy.costs import normal_mean

def create_data():
    np.random.seed(0)
    size = 100
    mean_a = 0.0
    mean_b = 10.0
    mean_c = 0
    var = 0.1
    data_a = np.random.normal(mean_a, var, size)
    data_b = np.random.normal(mean_b, var, size)
    data_c = np.random.normal(mean_c, var, size)
    data = np.concatenate([data_a, data_b, data_c])
    return data

def change(x):
    # what else i tried
    # data = np.array(data, dtype=np.float)
    # above line gives another error mentioned after code 

    cpts = (pelt(normal_mean(x, np.var(x)), len(x)))
    return cpts


sess = tf.Session()
x = tf.placeholder(tf.float32, shape=[300, ], name="myInput")
y = tf.convert_to_tensor(tf.compat.v1.py_func(change, [x], 3*[tf.int64]),np.float32,name="myOutput")
z = sess.run(y,feed_dict={x:create_data()})
print(z)