Python 3.x 属性错误:';数据类型';对象没有属性';类型';张量流发球
我试图在tensorflow中使用一个函数(来自另一个模块)。函数接受numpy数组并返回changepoints。我的主要目标是在tensorflow服务上部署此模型。我犯了错误 AttributeError:'DType'对象没有属性'type' 有两个函数,一个是create_data(),它创建一个numpy数组并返回它,另一个是change(),它接受numpy数组并使用前面提到的函数返回changepoints。我创建了一个占位符来接受输入数据,这是一个执行函数的操作。问题是,若我试图通过占位符发送数据,我会出错。如果我将数据直接发送到函数中,它将运行。下面是我的代码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。我创建了一个占位符来接受输入数据,这是一个执行函数的操作。问题是,若我试
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)