使用 Tensorflow 的 numpy_input_fn 会抛出“列表对象没有属性形状”

Posted

技术标签:

【中文标题】使用 Tensorflow 的 numpy_input_fn 会抛出“列表对象没有属性形状”【英文标题】:Using Tensorflow's numpy_input_fn is throwing "list object has no attribute shape" 【发布时间】:2018-07-09 16:14:48 【问题描述】:

我正在尝试使用 RNN 创建一个文本分类器。 classifier.train 行抛出错误:

    model_fn = rnn_model
    classifier = tf.estimator.Estimator(model_fn=model_fn)

    # Train.
    train_input_fn = tf.estimator.inputs.numpy_input_fn(
        x=WORDS_FEATURE: x_train,
        y=y_train,
        batch_size=len(x_train),
        num_epochs=None,
        shuffle=True)
    classifier.train(input_fn=train_input_fn, steps=100)

这就是 x_train 的样子:

MAX_DOCUMENT_LENGTH = 50000
...
x_train = depTrain_data[:]
...
vocab_processor = tf.contrib.learn.preprocessing.VocabularyProcessor(MAX_DOCUMENT_LENGTH)
...
x_transform_train = vocab_processor.fit_transform(x_train)
...
x_train = np.array(list(x_transform_train))

这是错误:

我正在使用 Python 3.4 和 Tensorflow 1.4

我知道我需要将列表更改为 np.array 但我不知道在哪里。

【问题讨论】:

【参考方案1】:

我不知道为什么这个问题被否决,这是一个合理的问题。

答案是您的 y_train 很可能是一个列表,将其转换为 numpy 数组应该可以解决问题。

【讨论】:

【参考方案2】:

tf.estimator.inputs.numpy_input_fn() 函数要求 x 字典中的所有 都是 NumPy 数组。您可以按如下方式执行必要的转换:

train_input_fn = tf.estimator.inputs.numpy_input_fn(
    x=WORDS_FEATURE: np.array(x_train),  # Convert `x_train` to a NumPy array.
    y=y_train,
    batch_size=len(x_train),
    num_epochs=None,
    shuffle=True)

请注意,这仅适用于x_train 是一个列表列表,其中每个嵌套列表具有相同的长度。如果没有,您将需要将每个嵌套列表填充到相同的长度。

【讨论】:

谢谢,但它们都是 NumPy 数组。我更新了它,这样你就可以看到我的 x_train。我也尝试降低 MAX_DOCUMENT_LENGTH 但没有运气

以上是关于使用 Tensorflow 的 numpy_input_fn 会抛出“列表对象没有属性形状”的主要内容,如果未能解决你的问题,请参考以下文章

干货使用TensorFlow官方Java API调用TensorFlow模型(附代码)

tensorflow 怎么设置成cpu运行

如何理解TensorFlow中的tensor

tensorflow 为啥用训练好的数据出来的概率不变

如何让 Tensorflow Profiler 在 Tensorflow 2.5 中使用“tensorflow-macos”和“tensorflow-metal”工作

tensorflow怎么gpu加速