Tensorflow C++ 相当于 data.from_generator
Tensorflow C++ equivalent of data.from_generator
我的目标是训练一个网络,该网络对在某些位置提取的图像块进行操作(例如立体块,其中一个块位于左侧图像的 (x,y) 处,一个块位于右侧的 (x+d, y)图像),我认为最有效的训练方法是在生成器中加载图像和随机样本块(x,y,d),并使用 dataset.from_generator() 来提供训练数据。
但是在测试时我想在 C++ 中部署网络。在 C++ 中是否有等价于 from_generator() 的东西?
谢谢!
应该可以使用 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)
我的目标是训练一个网络,该网络对在某些位置提取的图像块进行操作(例如立体块,其中一个块位于左侧图像的 (x,y) 处,一个块位于右侧的 (x+d, y)图像),我认为最有效的训练方法是在生成器中加载图像和随机样本块(x,y,d),并使用 dataset.from_generator() 来提供训练数据。
但是在测试时我想在 C++ 中部署网络。在 C++ 中是否有等价于 from_generator() 的东西?
谢谢!
应该可以使用 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)