【问题标题】:AttributeError: 'DType' object has no attribute 'type' Tensorflow ServingAttributeError:“DType”对象没有属性“类型”Tensorflow Serving
【发布时间】:2019-01-15 16:45:59
【问题描述】:

我正在尝试在 tensorflow 中使用一个函数(来自另一个模块)。该函数接受一个 numpy 数组并返回更改点。我的主要目标是在 tensorflow 服务上部署这个模型。我遇到了错误

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

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

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((data)).astype(np.float)data = np.vstack((data)).astype(np.float),但它遇到了一个单独的错误,说使用 tf.map_fn。我还尝试使用 tf.eval() 来转换数字,但我无法让它们在带有占位符的函数中运行。

但如果我直接发送输出,

y = tf.convert_to_tensor(change(create_data()),np.float32,name="myOutput")

它有效。

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

编辑:如果有人想知道,有问题的函数是this

【问题讨论】:

    标签: python-3.x numpy tensorflow tensorflow-serving


    【解决方案1】:

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

    您需要使用tf.py_func 将python函数包含到张量流图中

    (另外,你的 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-06
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 2023-02-03
      相关资源
      最近更新 更多