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

问题描述 投票:0回答:2

我正在尝试使用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))

这是错误:enter image description here

我使用的是Python 3.4和Tensorflow 1.4

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

python python-3.x numpy tensorflow rnn
2个回答
1
投票

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是列表列表时才有效,其中每个嵌套列表具有相同的长度。如果没有,则需要将每个嵌套列表填充到相同的长度。


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.