使用tf.data.Dataset.from_generator()时参数化的生成器

时间:2018-08-02 13:49:58

标签: python tensorflow

我想将参数提供给生成器以与tf.data.Dataset.from_generator()结合使用。例如:

def generator(lo, hi):
    for i in range(lo, hi):
        yield float(i)

此生成器产生的浮点在lohi之间。但是请注意,与创建数据集时相比,这些参数永远不会传递给此生成器。

tf.data.Dataset.from_generator(generator, tf.float64)

这是因为tf.data.Dataset.from_generator()的generator参数不应包含任何参数。

有解决方案吗?

2 个答案:

答案 0 :(得分:0)

我找到了一个基于功能编程概念的解决方案,该概念称为部分应用函数。总结:

  

PAF是一个具有多个参数的函数并返回具有较少参数的函数的函数。

我的操作方式如下:

from functools import partial
import tensorflow as tf

def generator(lo, hi):
    for i in range(lo, hi):
        yield float(i)

def get_generator(lo, hi):
    return partial(generator, lo, hi)

tf.data.Dataset(get_generator(lo, hi), tf.float64)

get_generator(lo, hi)函数为生成器返回部分应用的函数,该函数固定lohi参数的值,实际上这是{{1}所需的无参数生成器}。

答案 1 :(得分:0)

TensorFlow @page "/selectedtext" @inject IJSRuntime JsRuntime <h3>TextSelection</h3> <input type="text" placeholder="Type here" @ref="myTextInput"/> <button class="btn btn-primary" @onclick="@(async () => await GetSelectionStart(myTextInput))"></button> @code { public ElementReference myTextInput { get; set; } public async Task GetSelectionStart(ElementReference element) { int pos = await JsRuntime.InvokeAsync<int>("GetSelectedStart", element); } } // myscript.js { getSelectedStart : function (element) { return element.selectionStart; } } 已经支持通过参数Dataset对生成器进行参数化,该参数仅传递给生成器(see docs)。这是在TensorFlow args上测试过的最小工作示例。

2.0.0