在数据集Api中使用reject_resample()

Tha*_*les 5 deep-learning tensorflow

我很难尝试使用reject_resample()和Dataset API进行一些平衡批处理。我可以使用图像和标签(整数)作为输入,因为您可以浏览一下代码,但是reject_resample()似乎无法正常工作。

注意:我正在使用Tensorflow v1.3

在这里,我定义数据集,数据集的分布以及所需的分布。

target_dist = [0.1, 0.0, 0.0, 0.0, 0.9]
initial_dist = [0.1061, 0.3213, 0.4238, 0.1203, 0.0282]

training_filenames = training_records
training_dataset = tf.contrib.data.TFRecordDataset(training_filenames)
training_dataset = training_dataset.map(tf_record_parser)  # Parse the record into tensors.
training_dataset = training_dataset.repeat()  # number of epochs
training_dataset = training_dataset.shuffle(buffer_size=1000)

training_dataset = tf.contrib.data.rejection_resample(training_dataset,
                                                      class_func=lambda _, c: c,
                                                      target_dist=target_dist,
                                                      initial_dist=initial_dist)

# Return to the same Dataset shape as was the original input
training_dataset = training_dataset.map(lambda _, data: (data))

training_dataset = training_dataset.batch(64)

handle = tf.placeholder(tf.string, shape=[])
iterator = tf.contrib.data.Iterator.from_string_handle(
    handle, training_dataset.output_types, training_dataset.output_shapes)
batch_images, batch_labels = iterator.get_next()
training_iterator = training_dataset.make_initializable_iterator()
Run Code Online (Sandbox Code Playgroud)

当我运行这个东西时,我应该只从类0和4中获取样本,但是从所有类中获取结果,好像它没有用。

with tf.Session() as sess:
    training_handle = sess.run(training_iterator.string_handle())
    sess.run(training_iterator.initializer)
    batch_faces_np, batch_label_np = sess.run([batch_images, batch_labels],feed_dict={handle: training_handle})

    ctr = Counter(batch_label_np)
Run Code Online (Sandbox Code Playgroud)

计数器({2:31,3:22,4:6,1:5})

我基于这篇文章测试了一个示例:数据集API,迭代器和tf.contrib.data.rejection_resample以及来自tensorflow回购的原始测试代码,并且可以正常工作。

initial_known = True
classes = np.random.randint(5, size=(20000,))  # Uniformly sampled
target_dist = [0.5, 0.0, 0.0, 0.0, 0.4]
initial_dist = [0.2] * 5 if initial_known else None

iterator = dataset_ops.Iterator.from_dataset(
    dataset_ops.rejection_resample(
        (dataset_ops.Dataset.from_tensor_slices(classes)
         .shuffle(200, seed=21)
         .map(lambda c: (c, string_ops.as_string(c)))),
        target_dist=target_dist,
        initial_dist=initial_dist,
        class_func=lambda c, _: c,
        seed=27))
init_op = iterator.initializer
get_next = iterator.get_next()
variable_init_op = variables.global_variables_initializer()

with tf.Session() as sess:
    sess.run(variable_init_op)
    sess.run(init_op)
    returned = []
    while True:
        returned.append(sess.run(get_next))
Run Code Online (Sandbox Code Playgroud)

计数器({(0,(0,b'0')):3873,(4,(4,b'4')):3286})

你们能帮我吗?谢谢。

小智 4

尝试使用随机播放的种子值。它对我来说具有种子价值。