- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
[在@mrry 评论后编辑#1]
我正在使用(伟大而惊人的)数据集 API 以及 tf.contrib.data.rejection_resample
为输入训练管道设置特定的分布函数。
在将 tf.contrib.data.rejection_resample 添加到 input_fn 之前,我使用了一次性迭代器。唉,当开始使用后者时,我尝试使用 dataset.make_initializable_iterator() - 这是因为我们正在引入管道状态变量,并且需要在输入管道中的所有变量都初始化之后初始化迭代器。
正如@mrry 所写 here.
我将 input_fn 传递给估计器并由实验包装。
问题是 - 在哪里 Hook 迭代器的 init?
如果我尝试:
dataset = dataset.batch(batch_size)
if self.balance:
dataset = tf.contrib.data.rejection_resample(dataset, self.class_mapping_function, self.dist_target)
iterator = dataset.make_initializable_iterator()
tf.add_to_collection(tf.GraphKeys.TABLE_INITIALIZERS, iterator.initializer)
else:
iterator = dataset.make_one_shot_iterator()
image_batch, label_batch = iterator.get_next()
print (image_batch)
def class_mapping_function(self, feature, label):
"""
returns a a function to be used with dataset.map() to return class numeric ID
The function is mapping a nested structure of tensors (having shapes and types defined by dataset.output_shapes
and dataset.output_types) to a scalar tf.int32 tensor. Values should be in [0, num_classes).
"""
# For simplicity, trying to return the label itself as I assume its numeric...
return tf.cast(label, tf.int32) # <-- I guess this is the bug
Tensor("train_input_fn/IteratorGetNext:0", shape=(?, 100, 100, 3), dtype=float32, device=/device:CPU:0)
Tensor("train_input_fn/IteratorGetNext:0", shape=(?,), dtype=int32, device=/device:CPU:0)
class_values_ds = dataset.map(class_func)
最佳答案
在@mrry 响应之后,我可以想出一个关于如何将数据集 API 与 tf.contrib.data.rejection_resample 一起使用的解决方案(使用 TF1.3)。
目标
给定具有某种分布的特征/标签数据集,让输入管道将分布 reshape 为特定的目标分布。
数值示例
假设我们正在构建一个网络来将某些特征分类为 10 个类别之一。
并假设我们只有 100 个带有随机标签分布的特征。
30 个特征标记为 1 类,5 个特征标记为 2 类
等等。
在训练期间,我们不希望类 1 优于类 2,因此我们希望每个 mini-batch 为所有类保持均匀分布。
解决方案
使用 tf.contrib.data.rejection_resample 将允许为我们的输入管道设置特定的分布。
在文档中它说 tf.contrib.data.rejection_resample 将采取
(1) 数据集 - 这是您要平衡的数据集
(2) class_func - 这是一个仅从原始数据集生成新数字标签数据集的函数
(3) target_dist - 一个向量中的类数的大小,以具体化所需的新分布。
(4) 更多可选值 - 暂时跳过
正如文档所说,它返回一个`Dataset.
事实证明,输入数据集的形状与输出数据集的形状不同。因此,返回的数据集(在 TF1.3 中实现)应由用户过滤,如下所示:
balanced_dataset = tf.contrib.data.rejection_resample(input_dataset,
self.class_mapping_function,
self.target_distribution)
# Return to the same Dataset shape as was the original input
balanced_dataset = balanced_dataset.map(lambda _, data: (data))
# Creating the iterator, that allows to access elements from the dataset
if self.use_balancing:
# For balancing function, we use stateful variables in the sense that they hold current dataset distribution
# and calculate next distribution according to incoming examples.
# For dataset pipeline that have state, one_shot iterator will not work, and we are forced to use
# initializable iterator
# This should be relaxed in the future.
# https://stackoverflow.com/questions/44374083/tensorflow-cannot-capture-a-stateful-node-by-value-in-tf-contrib-data-api
iterator = dataset.make_initializable_iterator()
tf.add_to_collection(tf.GraphKeys.TABLE_INITIALIZERS, iterator.initializer)
else:
iterator = dataset.make_one_shot_iterator()
image_batch, label_batch = iterator.get_next()
关于tensorflow - 数据集 API、迭代器和 tf.contrib.data.rejection_resample,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47039760/
[在@mrry 评论后编辑#1] 我正在使用(伟大而惊人的)数据集 API 以及 tf.contrib.data.rejection_resample 为输入训练管道设置特定的分布函数。 在将 tf.
我正在尝试使用以下代码测试拒绝采样。这是我得到的结果: target_dist [0.5, 0.5] initial distribution [0.8333333333333334, 0.16666
我是一名优秀的程序员,十分优秀!