使用 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 Profiler 在 Tensorflow 2.5 中使用“tensorflow-macos”和“tensorflow-metal”工作