【问题标题】:Tensorflow C++ equivalent of data.from_generatorTensorFlow C++ 等价于 data.from_generator
【发布时间】:2025-11-26 12:30:02
【问题描述】:
我的目标是训练一个网络,该网络对在某些位置提取的图像补丁进行操作(例如,立体补丁在左侧图像的 (x,y) 处有一个补丁,在右侧图像的 (x+d, y) 处有一个补丁) ,我认为最有效的训练方法是在生成器中同时加载图像和随机采样块 (x, y, d),然后使用 dataset.from_generator() 提供训练数据。
但是在测试时,我想在 C++ 中部署网络。 C++ 中是否有 from_generator() 的等价物?
谢谢!
【问题讨论】:
-
????这是一个“我想要一匹小马”的问题,它过于宽泛,无法给出具体的技术答案,这使得它在 Stack Overflow 上偏离了主题。您需要尝试解决此问题并展示您的代码,以便我们了解您在技术层面上尝试做什么,并展示您解决此问题的承诺。如果您需要指导或辅导,请尝试Codementor、Savvy、Hackhands 或 airpair 等服务。
标签:
c++
tensorflow
tensorflow-datasets
【解决方案1】:
应该可以使用Dataset.flat_map() 来实现它,并且该实现将完全在 C++ 中运行。使用 Python API 构建图形,并假设您有自己的 sample_x_y_d() 和 get_patches_from_images() 逻辑:
input_dataset = ... # Dataset containing pairs of `(left_img, right_img)`
def generate_samples_fn(left_img, right_img):
num_samples = ...
def sample_x_y_d():
x = ... # Sample a value for `x`.
y = ... # Sample a value for `y`.
d = ... # Sample a value for `d`.
return x, y, d
def get_patches_from_images(x, y, d):
left_patch = ... # Slice a patch at (x, y) from `left_img`.
right_patch = ... # Slice a patch at (x+d, y) from `right_img`.
return left_patch, right_patch
return (tf.data.Dataset.range(num_samples)
.map(lambda _: sample_x_y_d())
.map(get_patches_from_images))
result = input_dataset.flat_map(generate_samples_fn)