Tensorflow:如何在词汇特征列中输入数据?
Tensorflow: How to feed in data in vocabulary feature column?
我目前正在研究基于文本输入的分类问题,我的主要问题如下:
我是否正确地假设我可以将我的完整句子解析为 一个字符串 到词汇表列,或者我是否需要将句子分成单词- 就像一个 字符串列表 ?
我的数据看起来像这样:
A B text
1 .. .. My first example text
2 .. .. My second example text
(除了我的文本输入功能之外,还有一些其他分类信息 - 但它们与本文无关)
我的代码基本上是这样的:
// data import and data preparation
categorical_voc = tf.feature_column.categorical_column_with_vocabulary_list(key="text", vocabulary_list=vocabulary_list)
embedding_initializer = tf.random_uniform_initializer(-1.0, 1.0)
embed_column_dim = math.ceil(len(vocabulary_list) ** 0.25)
embed_column = tf.feature_column.embedding_column(
categorical_column=categorical_voc,
dimension=embed_column_dim,
initializer=embedding_initializer,
trainable=True)
estimator = tf.estimator.DNNClassifier(
optimizer=optimizer,
feature_columns=feature_columns,
hidden_units=hidden_units,
activation_fn=activation_fn,
dropout=dropout,
n_classes=target_size,
label_vocabulary=target_list,
config=config)
train_input_fn = tf.estimator.inputs.pandas_input_fn(
x=train_data,
y=train_target,
batch_size=batch_size,
num_epochs=1,
shuffle=True)
estimator.train(input_fn=train_input_fn)
感谢您的帮助:)
编辑 1:
需要自定义输入功能的朋友
def input_fn(features, labels, batch_size):
if labels is None:
dataset = tf.data.Dataset.from_tensor_slices(features)
else:
dataset = tf.data.Dataset.from_tensor_slices((features, labels))
# Shuffle, repeat, and batch the examples.
dataset = dataset.shuffle(100).repeat().batch(batch_size)
return dataset
def train_input_fn():
return input_fn(features=_train_data,
labels=_train_target,
batch_size=train_batch_size)
estimator.train(input_fn=lambda: train_input_fn(), steps=total_training_steps, hooks=train_hooks)
对于那些在弄清楚如何处理词汇栏中的句子时遇到同样问题的人..
到目前为止,我的结论是我必须使用字符串数组来填充词汇表列。这里唯一的问题是 pandas_input_fn() 不支持一系列列表。这就是为什么我回到我的自定义输入功能!
我目前正在研究基于文本输入的分类问题,我的主要问题如下:
我是否正确地假设我可以将我的完整句子解析为 一个字符串 到词汇表列,或者我是否需要将句子分成单词- 就像一个 字符串列表 ?
我的数据看起来像这样:
A B text
1 .. .. My first example text
2 .. .. My second example text
(除了我的文本输入功能之外,还有一些其他分类信息 - 但它们与本文无关)
我的代码基本上是这样的:
// data import and data preparation
categorical_voc = tf.feature_column.categorical_column_with_vocabulary_list(key="text", vocabulary_list=vocabulary_list)
embedding_initializer = tf.random_uniform_initializer(-1.0, 1.0)
embed_column_dim = math.ceil(len(vocabulary_list) ** 0.25)
embed_column = tf.feature_column.embedding_column(
categorical_column=categorical_voc,
dimension=embed_column_dim,
initializer=embedding_initializer,
trainable=True)
estimator = tf.estimator.DNNClassifier(
optimizer=optimizer,
feature_columns=feature_columns,
hidden_units=hidden_units,
activation_fn=activation_fn,
dropout=dropout,
n_classes=target_size,
label_vocabulary=target_list,
config=config)
train_input_fn = tf.estimator.inputs.pandas_input_fn(
x=train_data,
y=train_target,
batch_size=batch_size,
num_epochs=1,
shuffle=True)
estimator.train(input_fn=train_input_fn)
感谢您的帮助:)
编辑 1: 需要自定义输入功能的朋友
def input_fn(features, labels, batch_size):
if labels is None:
dataset = tf.data.Dataset.from_tensor_slices(features)
else:
dataset = tf.data.Dataset.from_tensor_slices((features, labels))
# Shuffle, repeat, and batch the examples.
dataset = dataset.shuffle(100).repeat().batch(batch_size)
return dataset
def train_input_fn():
return input_fn(features=_train_data,
labels=_train_target,
batch_size=train_batch_size)
estimator.train(input_fn=lambda: train_input_fn(), steps=total_training_steps, hooks=train_hooks)
对于那些在弄清楚如何处理词汇栏中的句子时遇到同样问题的人..
到目前为止,我的结论是我必须使用字符串数组来填充词汇表列。这里唯一的问题是 pandas_input_fn() 不支持一系列列表。这就是为什么我回到我的自定义输入功能!