我正在尝试使用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,但我不知道在哪里。
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
是列表列表时才有效,其中每个嵌套列表具有相同的长度。如果没有,则需要将每个嵌套列表填充到相同的长度。
我不知道为什么这个问题被投票,这是一个合理的问题。
答案是你的y_train
很可能是一个列表,将其转换为numpy数组应该解决问题。