Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow:如何在估计器中使用生成器中的数据集_Tensorflow_Tensorflow Datasets - Fatal编程技术网

Tensorflow:如何在估计器中使用生成器中的数据集

Tensorflow:如何在估计器中使用生成器中的数据集,tensorflow,tensorflow-datasets,Tensorflow,Tensorflow Datasets,试图建立一个简单的模型,只是为了弄清楚如何处理来自\u生成器的tf.data.Dataset。我无法理解如何设置输出形状参数。我尝试了几种组合,包括不指定它,但由于张量的形状不匹配,仍然收到一些错误。其思想是只生成两个大小为10的numpy数组,并对它们进行线性回归。代码如下: SIZE = 10 def _generator(): feats = np.random.normal(0, 1, SIZE) labels = np.random.normal(0, 1, SIZ

试图建立一个简单的模型,只是为了弄清楚如何处理来自\u生成器的
tf.data.Dataset。我无法理解如何设置
输出形状
参数。我尝试了几种组合,包括不指定它,但由于张量的形状不匹配,仍然收到一些错误。其思想是只生成两个大小为10的numpy数组,并对它们进行线性回归。代码如下:

SIZE = 10


def _generator():
    feats = np.random.normal(0, 1, SIZE)
    labels = np.random.normal(0, 1, SIZE)
    yield feats, labels


def input_func_gen():
    shapes = (SIZE, SIZE)
    dataset = tf.data.Dataset.from_generator(generator=_generator,
                                             output_types=(tf.float32, tf.float32),
                                             output_shapes=shapes)
    dataset = dataset.batch(10)
    dataset = dataset.repeat(20)
    iterator = dataset.make_one_shot_iterator()
    features_tensors, labels = iterator.get_next()
    features = {'x': features_tensors}
    return features, labels


def train():
    x_col = tf.feature_column.numeric_column(key='x', )
    es = tf.estimator.LinearRegressor(feature_columns=[x_col])
    es = es.train(input_fn=input_func_gen)
另一个问题是,是否可以使用此功能为
tf.feature\u column.crossed\u column
的要素列提供数据?总体目标是在批处理培训中使用“数据集。从生成器”功能,在数据不适合内存的情况下,从数据库中加载数据块。所有的意见和例子都受到高度赞赏


谢谢

的可选
output_shapes
参数允许您指定从生成器生成的值的形状。对其类型有两个约束,它们定义了应如何指定它:

  • output_shapes
    参数是一种“嵌套结构”(例如元组、元组元组、元组dict等),必须与生成器生成的值的结构相匹配

    在您的程序中,
    \u generator()
    包含语句
    产生专长、标签
    。因此,“嵌套结构”是由两个元素组成的元组(每个数组一个元素)

  • output\u shapes
    结构的每个组件都应该匹配相应张量的形状。数组的形状始终是维度的元组。(一个
    tf.Tensor
    的形状更一般:请参阅以获取讨论。)让我们看看
    壮举的实际形状:

    >>> SIZE = 10
    >>> feats = np.random.normal(0, 1, SIZE)
    >>> print feats.shape
    (10,)
    
因此,
output\u shapes
参数应该是一个2元素元组,其中每个元素都是
(SIZE,)

最后,您需要向和API提供更多关于形状的信息:


伟大的但是如果你的专长的大小是这样的:专长=np.random.rand(4,2)和标签=np.random.rand(4,1),你该怎么做呢。我的意思是,我可以用这个维度向估计器提供数据,它应该有哪些配置。谢谢@mrry如果我尝试这么做,我会遇到这样的错误:ValueError:尺寸必须相等,但对于输入形状为[2]、[3]的“线性/头部/标签/断言相等”(op:“相等”)的情况,尺寸是2和3。@JulioCamPlaz我遇到了同样的问题,如果专长有大小,你解决了吗?thx@crafet是的,你不能这样做。您只能使用批量大小来进行操作faster@crafet我改变了批量大小,速度更快
shapes = ((SIZE,), (SIZE,))
dataset = tf.data.Dataset.from_generator(generator=_generator,
                                         output_types=(tf.float32, tf.float32),
                                         output_shapes=shapes)
x_col = tf.feature_column.numeric_column(key='x', shape=(SIZE,))
es = tf.estimator.LinearRegressor(feature_columns=[x_col],
                                  label_dimension=10)