Tensorflow 使用谓词(如筛选器)从tf.data.Dataset中获取
TensorFlow的优秀抽象可以使用带谓词的过滤: 筛选器筛选器(谓词)根据谓词筛选此数据集 Args:谓词:映射张量嵌套结构的函数 (具有由self.output_形状定义的形状和类型,以及 self.output_types)到标量tf.bool张量 这是非常强大的,;因为谓词允许您对数据集内容进行筛选 问题是:是否可能有过滤的“反面”:例如过采样? 使用Tensorflow 使用谓词(如筛选器)从tf.data.Dataset中获取,tensorflow,machine-learning,deep-learning,Tensorflow,Machine Learning,Deep Learning,TensorFlow的优秀抽象可以使用带谓词的过滤: 筛选器筛选器(谓词)根据谓词筛选此数据集 Args:谓词:映射张量嵌套结构的函数 (具有由self.output_形状定义的形状和类型,以及 self.output_types)到标量tf.bool张量 这是非常强大的,;因为谓词允许您对数据集内容进行筛选 问题是:是否可能有过滤的“反面”:例如过采样? 使用take()似乎不可能,因为这不取决于数据集内容: take take(count)创建一个数据集,其中最多包含来自 这个数据集 Arg
take()
似乎不可能,因为这不取决于数据集内容:
take take(count)创建一个数据集,其中最多包含来自
这个数据集
Args:count:A tf.int64标量tf.Tensor,表示
构成新数据集所需的此数据集的元素。
如果计数为-1,或者计数大于此数据集的大小,
新数据集将包含此数据集的所有元素
TensorFlow目前还没有公开此类功能,但您可以使用它实现所需的结果。在本例中,对于输入数据集的每个元素,您将创建一个新的数据集(),该数据集生成此单个示例()的多个副本 例如:
import numpy as np
import tensorflow as tf
def run(dataset):
el = dataset.make_one_shot_iterator().get_next()
vals = []
with tf.Session() as sess:
try:
while True:
vals.append(sess.run(el))
except tf.errors.OutOfRangeError:
pass
return vals
dataset = tf.data.Dataset.from_tensor_slices((np.array([1,2,3,4,5]), np.array([5,4,3,2,1])))
print('Original dataset with repeats')
print(run(dataset))
dataset = dataset.flat_map(lambda v, r: tf.data.Dataset.from_tensors(v).repeat(r))
print('Repeats flattened')
print(run(dataset))
将打印
Original dataset with repeats
[(1, 5), (2, 4), (3, 3), (4, 2), (5, 1)]
Repeats flattened
[1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 5]
Repeats flattened with a little bit of deterministic mixing
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 1, 2, 5, 1]
或者,您可以使用来实现相同的结果,但要混合多个样本的副本(.flat\u map
是.interleave
的一种特殊情况)。例如:
dataset = tf.data.Dataset.from_tensor_slices((np.array([1,2,3,4,5]), np.array([5,4,3,2,1])))
dataset = dataset.interleave(lambda v, r: tf.data.Dataset.from_tensors(v).repeat(r), 4, 1)
print('Repeats flattened with a little bit of deterministic mixing')
print(run(dataset))
将打印
Original dataset with repeats
[(1, 5), (2, 4), (3, 3), (4, 2), (5, 1)]
Repeats flattened
[1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 5]
Repeats flattened with a little bit of deterministic mixing
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 1, 2, 5, 1]
TensorFlow目前还没有公开此类功能,但您可以使用它实现所需的结果。在本例中,对于输入数据集的每个元素,您将创建一个新的数据集(),该数据集生成此单个示例()的多个副本 例如:
import numpy as np
import tensorflow as tf
def run(dataset):
el = dataset.make_one_shot_iterator().get_next()
vals = []
with tf.Session() as sess:
try:
while True:
vals.append(sess.run(el))
except tf.errors.OutOfRangeError:
pass
return vals
dataset = tf.data.Dataset.from_tensor_slices((np.array([1,2,3,4,5]), np.array([5,4,3,2,1])))
print('Original dataset with repeats')
print(run(dataset))
dataset = dataset.flat_map(lambda v, r: tf.data.Dataset.from_tensors(v).repeat(r))
print('Repeats flattened')
print(run(dataset))
将打印
Original dataset with repeats
[(1, 5), (2, 4), (3, 3), (4, 2), (5, 1)]
Repeats flattened
[1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 5]
Repeats flattened with a little bit of deterministic mixing
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 1, 2, 5, 1]
或者,您可以使用来实现相同的结果,但要混合多个样本的副本(.flat\u map
是.interleave
的一种特殊情况)。例如:
dataset = tf.data.Dataset.from_tensor_slices((np.array([1,2,3,4,5]), np.array([5,4,3,2,1])))
dataset = dataset.interleave(lambda v, r: tf.data.Dataset.from_tensors(v).repeat(r), 4, 1)
print('Repeats flattened with a little bit of deterministic mixing')
print(run(dataset))
将打印
Original dataset with repeats
[(1, 5), (2, 4), (3, 3), (4, 2), (5, 1)]
Repeats flattened
[1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 5]
Repeats flattened with a little bit of deterministic mixing
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 1, 2, 5, 1]