python - tensorflow 数据集按参与者拆分
问题描述
我想拆分tf.data.DataSet
属性,在我的情况下是参与者或手势。目前,数据集正在进行中,参与者/手势的数量可能会增加。我最初为这个手势数据集设置了一个tfds 配置,但我还没有弄清楚如何在这里配置参与者/手势分割。
我应该如何拆分tf.data.DataSet
对象?目前,我的数据集作为单个 tf_record 存在。我宁愿保持这种方式,而不是为每个参与者和手势生成不同的文件,并且在添加新参与者时必须重新生成所有手势 tf 记录。
这有效(方法1,总):
subset = ds.filter(lambda x: (x['participant'] == 1 or x['participant'] == 2))
这不是(方法2,梦想):
subset = ds.filter(lambda x: any(x['participant'] == p for p in [1,2]))
OperatorNotAllowedInGraphError:在图形执行中不允许将 a
tf.Tensor
用作 Python 。bool
使用 Eager 执行或使用 @tf.function 修饰此函数。
我还尝试了与装饰 @tf.function 相同的操作。
具有公开可用的 mnist 数据集的示例代码:colab 上的 juptyer notebook
他们是否以与方法 2 类似的方式执行此操作?
解决方案
您可以通过以下方式解决它:
def predicate(label, labels_to_filter):
return tf.math.reduce_any(tf.equal(label, labels_to_filter))
labels_to_filter = tf.constant([0, 1, 2, 3, 4], dtype=tf.int64)
subset = dataset.filter(lambda x: predicate(x["participant"], labels_to_filter))
这个怎么运作:
tf.equal
如果与 中的标签之一匹配,则返回一个布尔张量,其中包含True
值。如果其输入布尔张量中有值则返回。label
labels_to_filter
tf.math.reduce_any
True
True
推荐阅读
- python - 使用用户 ID 将人员添加到不和谐服务器
- javascript - 禁用包含某个类的所有元素的点击事件
- matlab - matlab中任意x,y坐标的二维中值滤波器
- javascript - Coinbase API 返回“未找到产品”以获得有效的产品 ID
- wpf - 选择 WebView2 固定版本进行分发
- python - selenium google chrome:期望值:第 1 行第 1 列(字符 0)
- python - 对 API 的代理请求(基于 IP 的速率限制)
- wpf - 如何从 WPFAutoComplete:TextBoxAutoCompleteProvider 事件中获取选定的名称、值?
- javascript - 内容未在网页上加载
- node.js - 快递服务器 app.use(express.static(x)) - 无法访问我的端点