我有.txt一个格式目录中的文件<text>\t<label>.我正在使用TextLineDatasetAPI来使用这些文本记录:
filenames = ["/var/data/file1.txt", "/var/data/file2.txt"]
dataset = tf.contrib.data.Dataset.from_tensor_slices(filenames)
dataset = dataset.flat_map(
lambda filename: (
tf.contrib.data.TextLineDataset(filename)
.map(_parse_data)))
def _parse_data(line):
line_split = tf.string_split([line], '\t')
features = {"raw_text": tf.string(line_split.values[0].strip().lower()),
"label": tf.string_to_number(line_split.values[1],
out_type=tf.int32)}
parsed_features = tf.parse_single_example(line, features)
return parsed_features["raw_text"], raw_features["label"]
Run Code Online (Sandbox Code Playgroud)
我想对raw_text功能进行一些字符串清理/处理.当我尝试运行时 line_split.values[0].strip().lower(),我收到以下错误:
AttributeError:'Tensor'对象没有属性'strip'
我一直在使用tensorflow中的数据集和feature_columns(https://developers.googleblog.com/2017/11/introducing-tensorflow-feature-columns.html).我发现它们具有分类功能以及从分类功能创建嵌入功能的方法.但是在处理nlp任务时,我们如何创建单个嵌入查找?
例如:考虑文本分类任务.每个数据点都有很多文本列,但它们不是单独的类别.我们如何为所有这些列创建和使用单个嵌入查找?
下面是我目前如何使用嵌入功能的示例.我正在为每列构建一个分类功能,并使用它来创建嵌入.问题是对于不同的列,相同单词的嵌入可能不同.
def create_embedding_features(key, vocab_list=None, embedding_size=20):
cat_feature = \
tf.feature_column.categorical_column_with_vocabulary_list(
key=key,
vocabulary_list = vocab_list
)
embedding_feature = tf.feature_column.embedding_column(
categorical_column = cat_feature,
dimension = embedding_size
)
return embedding_feature
le_features_embd = [create_embedding_features(f, vocab_list=vocab_list)
for f in feature_keys]
Run Code Online (Sandbox Code Playgroud) 我想在Tensorflow中堆叠两个数据集对象(R中的rbind函数).我从tfRecord文件创建了一个数据集A,从numpy数组创建了一个数据集B. 两者都有相同的变量.你知道是否有办法堆叠这两个数据集来创建一个更大的数据集?或者创建一个随机读取这两个来源数据的iterrator?
谢谢
我是tensorflow的新手。尝试从创建输入管道tfrecords。以下是我的代码段,用于创建批处理并将其输入到my中estimator:
def generate_input_fn(image,label,batch_size=BATCH_SIZE):
logging.info('creating batches...')
dataset = tf.data.Dataset.from_tensors((image, label)) #<-- dataset is 'TensorDataset'
dataset = dataset.repeat().batch(batch_size)
iterator=dataset.make_initializable_iterator()
iterator.initializer
return iterator.get_next()
Run Code Online (Sandbox Code Playgroud)
该行iterator=dataset.make_initializable_iterator():
ValueError:Tensor(“ count:0”,shape =(),dtype = int64,device = / device:CPU:0)必须与Tensor(“ TensorDataset:0”,shape =(),dtype =变体)。
我认为我不小心使用了来自不同图形的张量,但是我不知道如何以及在哪一行代码中使用。我不知道哪个张量是count:0 或哪个张量是TensorDataset:0。
谁能帮我调试一下。
错误日志:
File "task.py", line 189, in main
estimator.train(input_fn=lambda:generate_input_fn(image=image_data, label=label_data),steps=3,hooks=[logging_hook])
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/estimator/estimator.py", line 352, in train
loss = self._train_model(input_fn, hooks, saving_listeners)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/estimator/estimator.py", line 809, in _train_model
input_fn, model_fn_lib.ModeKeys.TRAIN))
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/estimator/estimator.py", line 668, in _get_features_and_labels_from_input_fn
result = …Run Code Online (Sandbox Code Playgroud) 我正在转换一些遗留代码以使用数据集API - 此代码用于feed_dict将一个批次提供给列车操作(实际上是三次),然后使用同一批次重新计算显示的损失.所以我需要一个迭代器,它返回完全相同的批次两(或几次).不幸的是,我似乎无法找到使用张量流数据集的方法 - 它可能吗?
interleave是一种tf.Data.Dataset可用于将来自多个数据集的元素交错在一起的方法.tf.contrib.data.parallel_interleave在...的帮助下提供相同功能的并行版本apply.
我可以看到,并行版本允许并行读取许多数据集并为它们提供缓冲区将提高吞吐量.但文档还说明了如何parallel_interleave提高数据吞吐量:
与tf.data.Dataset.interleave不同,它从并行的cycle_length嵌套数据集中获取元素,这增加了吞吐量,尤其是在存在落后者的情况下.
什么是落后者,为什么parallel_interleave在他们的存在方面的吞吐量特别好?
我正在尝试使用生成器训练一个估计器,但是我想为该估计器提供每次迭代的样本包。我显示代码:
def _generator():
for i in range(100):
feats = np.random.rand(4,2)
labels = np.random.rand(4,1)
yield feats, labels
def input_func_gen():
shapes = ((4,2),(4,1))
dataset = tf.data.Dataset.from_generator(generator=_generator,
output_types=(tf.float32, tf.float32),
output_shapes=shapes)
dataset = dataset.batch(4)
# dataset = dataset.repeat(20)
iterator = dataset.make_one_shot_iterator()
features_tensors, labels = iterator.get_next()
features = {'x': features_tensors}
return features, labels
x_col = tf.feature_column.numeric_column(key='x', shape=(4,2))
es = tf.estimator.LinearRegressor(feature_columns=[x_col],model_dir=tf_data)
es = es.train(input_fn=input_func_gen,steps = None)
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,它将引发以下错误:
raise ValueError(err.message)
ValueError: Dimensions must be equal, but are 2 and 3 for 'linear/head/labels/assert_equal/Equal' (op: 'Equal') with input shapes: …Run Code Online (Sandbox Code Playgroud)
TensorFlow 提供的股票示例使用mapbefore shuffle,如下所示:
filenames = ["/var/data/file1.tfrecord", "/var/data/file2.tfrecord"]
dataset = tf.data.TFRecordDataset(filenames)
dataset = dataset.map(...)
dataset = dataset.shuffle(buffer_size=10000)
dataset = dataset.batch(32)
Run Code Online (Sandbox Code Playgroud)
但是,性能指南页面和GitHub 问题之一表明map_and_batch出于性能原因最好使用。但是由于shuffle卡在中间,我不太确定在那里做什么。看起来shuffle甚至之前申请过map并且batch可以完成工作,如下所示:
filenames = ["/var/data/file1.tfrecord", "/var/data/file2.tfrecord"]
dataset = tf.data.TFRecordDataset(filenames)
dataset = dataset.shuffle(buffer_size=10000)
dataset = dataset.apply(tf.contrib.data.map_and_batch(..., batch_size=32))
Run Code Online (Sandbox Code Playgroud)
我想知道这是否会引入任何我可能没想到的问题,而不是 TensorFlow 提供的股票示例。我希望两个代码做同样的事情,但第二个做的更快;在最坏的情况下以相同的速度。
在tensorflow 1.12中有Dataset.zip功能:在此处记录。
但是,我想知道是否存在一个数据集解压缩函数,该函数将返回原始的两个数据集。
# NOTE: The following examples use `{ ... }` to represent the
# contents of a dataset.
a = { 1, 2, 3 }
b = { 4, 5, 6 }
c = { (7, 8), (9, 10), (11, 12) }
d = { 13, 14 }
# The nested structure of the `datasets` argument determines the
# structure of elements in the resulting dataset.
Dataset.zip((a, b)) == { (1, 4), (2, 5), …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用我自己的数据集训练 CNN。我一直在使用 tfrecord 文件和 tf.data.TFRecordDataset API 来处理我的数据集。它适用于我的训练数据集。但是当我尝试对我的验证数据集进行批处理时,出现了“OutOfRangeError: End of sequence”的错误。上网浏览后,我以为是验证集的batch size问题,我一开始设置为32。但是在我将其更改为 2 之后,代码运行了大约 9 个 epoch,并且错误再次出现。
我使用输入函数来处理数据集,代码如下:
def input_fn(is_training, filenames, batch_size, num_epochs=1, num_parallel_reads=1):
dataset = tf.data.TFRecordDataset(filenames,num_parallel_reads=num_parallel_reads)
if is_training:
dataset = dataset.shuffle(buffer_size=1500)
dataset = dataset.map(parse_record)
dataset = dataset.shuffle(buffer_size=10000)
dataset = dataset.batch(batch_size)
dataset = dataset.repeat(num_epochs)
iterator = dataset.make_one_shot_iterator()
features, labels = iterator.get_next()
return features, labels
Run Code Online (Sandbox Code Playgroud)
对于训练集,“batch_size”设置为 128,“num_epochs”设置为 None,这意味着无限重复。对于验证集,“batch_size”设置为 32(后来设置为 2,仍然无效),“num_epochs”设置为 1,因为我只想通过验证集一次。我可以保证验证集包含足够的 epoch 数据。因为我已经尝试了下面的代码并且没有引发任何错误:
with tf.Session() as sess:
features, labels = input_fn(False, valid_list, 32, 1, 1)
for i in range(450):
sess.run([features, labels])
print(labels.shape) …Run Code Online (Sandbox Code Playgroud)