Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从tf.Dataset API为每个标签创建唯一的批处理_Python_Tensorflow_Tensorflow Datasets - Fatal编程技术网

Python 如何从tf.Dataset API为每个标签创建唯一的批处理

Python 如何从tf.Dataset API为每个标签创建唯一的批处理,python,tensorflow,tensorflow-datasets,Python,Tensorflow,Tensorflow Datasets,假设我的数据如下: 功能、标签 向量1,1 向量2,1 向量3,0 向量4,1 向量5,0 我想得到一个批次,在批次大小条件下,它应该代表每个迭代中每个标签的随机1个样本,例如2。 例如,对于第一次迭代,我可以收到: 向量1,1 向量3,0 例如,对于第二次迭代,我可以收到: 向量4,1 向量5,0 等等 你能告诉我如何有效地实施吗 多谢各位 我会通过在每个标签上使用过滤器将数据集分成两个流,然后将这些流合并回去,例如,通过依赖tf.contrib.data。从数据集中选择 一个优点是在过程中不

假设我的数据如下:

功能、标签

向量1,1

向量2,1

向量3,0

向量4,1

向量5,0

我想得到一个批次,在批次大小条件下,它应该代表每个迭代中每个标签的随机1个样本,例如2。 例如,对于第一次迭代,我可以收到:

向量1,1

向量3,0

例如,对于第二次迭代,我可以收到:

向量4,1

向量5,0

等等

你能告诉我如何有效地实施吗


多谢各位

我会通过在每个标签上使用
过滤器将
数据集
分成两个流,然后将这些流合并回去,例如,通过依赖
tf.contrib.data。从数据集
中选择

一个优点是在过程中不会丢失任何样本(与您给出的示例相反)

玩具数据的一个小例子:

import numpy as np
import tensorflow as tf

def gen():
  # generate random (value, label) pairs
  while True:
    yield (np.random.uniform(), np.random.randint(0, 2))

def split_and_merge(ds):
  return tf.contrib.data.choose_from_datasets(
    [ds.filter(lambda x, label: tf.equal(label, 0)),
     ds.filter(lambda x, label: tf.equal(label, 1))],
    tf.data.Dataset.range(2).repeat())

batch = (tf.data.Dataset
    .from_generator(gen, (tf.float32, tf.int32), (tf.TensorShape([]), tf.TensorShape([])))
    .apply(split_and_merge)
    .batch(2)
    .make_one_shot_iterator()
    .get_next())

sess = tf.InteractiveSession()
for _ in range(5):
  sess.run(batch)

我会通过在每个标签上使用
过滤器将
数据集
分成两个流,然后将这些流合并回来,例如,通过依赖
tf.contrib.data。从数据集中选择

一个优点是在过程中不会丢失任何样本(与您给出的示例相反)

玩具数据的一个小例子:

import numpy as np
import tensorflow as tf

def gen():
  # generate random (value, label) pairs
  while True:
    yield (np.random.uniform(), np.random.randint(0, 2))

def split_and_merge(ds):
  return tf.contrib.data.choose_from_datasets(
    [ds.filter(lambda x, label: tf.equal(label, 0)),
     ds.filter(lambda x, label: tf.equal(label, 1))],
    tf.data.Dataset.range(2).repeat())

batch = (tf.data.Dataset
    .from_generator(gen, (tf.float32, tf.int32), (tf.TensorShape([]), tf.TensorShape([])))
    .apply(split_and_merge)
    .batch(2)
    .make_one_shot_iterator()
    .get_next())

sess = tf.InteractiveSession()
for _ in range(5):
  sess.run(batch)

非常感谢您,您认为此解决方案会扩展到我有1000多个标签的情况吗?除此之外,我还有以下错误
module tensorflow.contrib.data“has no attribute”从tf v的数据集中选择。1.8.0升级到tf v。1.10+解决了模块错误。另一方面,我能够运行1000多个标签的代码。不幸的是,它非常慢。我们如何才能在不出现这种性能问题的情况下实现最佳案例?@如果没有进一步的了解,很难说清是谁。我会先尝试通常推荐的技巧,比如预取。此外,如果您可以先加载标签,然后再加载相应的数据,那么在执行
拆分和合并
后加载数据可能会更快。如果我能够学会如何在不存在性能问题的情况下接收唯一样本,那将是非常棒的。否则,即使一个时代在不合理的长时间内完成:(非常感谢,你认为这个解决方案会扩展到我有1000多个标签的情况吗?除此之外,我还有以下错误
module tensorflow.contrib.data“has not attribute”choose_from_datasets
用于tf v.1.8.0升级到tf v.1.10+解决了模块错误。另一方面,我能够运行你的c对于1000+个标签的ode。不幸的是,它非常慢。我们如何在没有这种性能问题的情况下实现最佳情况?@TheWho如果没有进一步的知识,很难说清是谁。我会先尝试通常推荐的技巧,如预取。此外,如果您有可能先加载标签,然后加载相应的数据,您可以在执行
split\u和\u merge
后加载数据可能会更快。如果我能够学会如何在不存在性能问题的情况下接收唯一样本,那将是非常棒的。否则,即使是一个历元也会在不合理的长时间内完成:(