tensorflow - 如何通过特定键对张量流中的数据集进行分组,同时避免内存不足?
问题描述
我使用 tf.dataset 从磁盘(HDFS)加载数据,然后尝试按特定键对数据进行分组。原始数据是这样的:</p>
[["x","a",1],
["y","b",2],
["x","b",2],
["x","b",3],
["x","a",3],
["y","b",4]]
转换后的数据预计为:
[[["x","a",1]
["x","a",3]],
[["x","b",2]
["x","b",3]],
[["y","b",2],
["y","b",4]]]
编码:
dataset = dataset.apply(
tf.data.experimental.group_by_window(
key_func = lambda x : tf.squeeze(
tf.string_to_hash_bucket_strong(
tf.strings.join([x['key_1'], x['key_2']]),
1500000000,
[1,2]
),
axis=-1
),
reduce_func = lambda key, x: x.padded_batch(batch_size=self._window_size, padded_shapes=self._dataset_shapes(dataset), padding_values=self._dataset_default_values(dataset)),
window_size =self._window_size
)
)
它会产生OOM错误。问题是由 tf.dataset.apply() 或 tf.data.experimental.group_by_window() 引起的,因为当我删除此处的代码时一切正常。我有两个问题:为什么会导致 OOM 以及如何通过特定键对数据进行分组以避免 OOM?
解决方案
推荐阅读
- jenkins - java.lang.NoSuchMethodError:在步骤中找不到这样的 DSL 方法“$”
- mysql - 在两个数字集之间构建 SQL 查询
- javascript - 如何自定义屏幕定义?
- codeigniter - 使用hmvc CodeIgniter时如何调用一个控制器文件夹中的两个控制器?
- c# - Azure 禁止使用 blob,但获取 blob 工作休息 api
- sql - 发布 || 聚合耗时
- json - 在 rxjs 中,我尝试先获取所有数据,然后我需要继续下一行
- android - jitsi 遇到 android sdk 配置问题
- angular - p-inputMask ng-model 未清除无效值
- c# - 部署到 iis 时,水晶报表通过 odbc postgres 驱动程序登录失败