标签: tensorflow-datasets

dataset.map,Dataset.prefetch和Dataset.shuffle中buffer_size的含义

根据TensorFlow 文档,类prefetchmap方法tf.contrib.data.Dataset,都有一个名为的参数buffer_size.

对于prefetch方法,该参数称为buffer_size并且根据文档:

buffer_size:tf.int64标量tf.Tensor,表示预取时将被缓冲的最大元素数.

对于该map方法,该参数称为output_buffer_size并且根据文档:

output_buffer_size :(可选.)tf.int64标量tf.Tensor,表示将被缓冲的最大处理元素数.

类似地,对于该shuffle方法,出现相同的数量并且根据文档:

buffer_size:tf.int64标量tf.Tensor,表示新数据集将从中采样的数据集中的元素数.

这些参数之间有什么关系?

假设我创建一个Dataset对象如下:

 tr_data = TFRecordDataset(trainfilenames)
    tr_data = tr_data.map(providefortraining, output_buffer_size=10 * trainbatchsize, num_parallel_calls\
=5)
    tr_data = tr_data.shuffle(buffer_size= 100 * trainbatchsize)
    tr_data = tr_data.prefetch(buffer_size = 10 * trainbatchsize)
    tr_data = tr_data.batch(trainbatchsize)
Run Code Online (Sandbox Code Playgroud)

buffer上述代码段中的参数扮演了什么角色?

tensorflow tensorflow-gpu tensorflow-datasets

68
推荐指数
3
解决办法
3万
查看次数

TensorFlow:培训我自己的形象

我是TensorFlow的新手.我正在寻找有关图像识别的帮助,我可以在那里训练自己的图像数据集.

有没有训练新数据集的例子?

python conv-neural-network tensorflow tensorflow-datasets

38
推荐指数
2
解决办法
4万
查看次数

如何从 TensorFlow 数据集中提取数据/标签

有很多关于如何创建和使用 TensorFlow 数据集的示例,例如

dataset = tf.data.Dataset.from_tensor_slices((images, labels))
Run Code Online (Sandbox Code Playgroud)

我的问题是如何以 numpy 形式从 TF 数据集中取回数据/标签?换句话说,想要是上面那一行的反向操作,即我有一个 TF 数据集,想从中取回图像和标签。

tensorflow tensorflow-datasets

38
推荐指数
5
解决办法
3万
查看次数

`Dataset.from_tensors`和`Dataset.from_tensor_slices`之间的区别?

我有一个数据集表示为NumPy形状矩阵,(num_features, num_examples)我希望将其转换为TensorFlow类型tf.Dataset.

我正在努力去理解这两种方法之间的区别:Dataset.from_tensorsDataset.from_tensor_slices.什么是正确的,为什么?

TensorFlow文档(链接)表示两种方法都接受张量的嵌套结构,尽管使用from_tensor_slices张量时在第0维应该具有相同的大小.

python tensorflow tensorflow-datasets

32
推荐指数
5
解决办法
1万
查看次数

并行化tf.data.Dataset.from_generator

我有一个非常简单的输入管道,from_generator非常适合......

dataset = tf.data.Dataset.from_generator(complex_img_label_generator,
                                        (tf.int32, tf.string))
dataset = dataset.batch(64)
iter = dataset.make_one_shot_iterator()
imgs, labels = iter.get_next()
Run Code Online (Sandbox Code Playgroud)

其中complex_img_label_generator动态生成图像,并返回表示一个numpy的阵列(H, W, 3)图像和一个简单的string标签.处理不是我可以表示从文件和tf.image操作中读取的内容.

我的问题是关于如何平衡发电机?我如何让N个这些生成器在自己的线程中运行.

一个想法是使用dataset.mapnum_parallel_calls处理线程; 但是地图在张量上运行......另一个想法是创建多个生成器,每个生成器都有自己的,prefetch并以某种方式加入它们,但我看不出我如何加入N个生成器流?

我可以遵循任何规范的例子吗?

tensorflow tensorflow-datasets

25
推荐指数
3
解决办法
9029
查看次数

Tensorflow tf.data 自动调谐

我正在阅读数据加载部分的 TF 性能指南。对于预取它说,

tf.data API 通过 tf.data.Dataset.prefetch 转换提供了软件流水线机制,可用于将数据产生时间与数据消耗时间解耦。特别是,转换使用后台线程和内部缓冲区在请求元素之前从输入数据集中预取元素。要预取的元素数应等于(或可能大于)单个训练步骤消耗的批次数。您可以手动调整此值,或将其设置为 tf.data.experimental.AUTOTUNE,这将提示 tf.data 运行时在运行时动态调整该值。

AUTOTUNE 内部在做什么?正在应用哪种算法,启发式?

另外,在实践中,进行了什么样的手动调整?

tensorflow tensorflow-datasets

25
推荐指数
1
解决办法
1万
查看次数

如何提高数据输入管道的性能?

我尝试优化我的数据输入管道。该数据集是一组 450 个 TFRecord 文件,每个文件大小约为 70MB,托管在 GCS 上。该作业使用 GCP ML Engine 执行。没有 GPU。

这是管道:

def build_dataset(file_pattern):
    return tf.data.Dataset.list_files(
        file_pattern
    ).interleave(
        tf.data.TFRecordDataset,
        num_parallel_calls=tf.data.experimental.AUTOTUNE
    ).shuffle(
        buffer_size=2048
    ).batch(
        batch_size=2048,
        drop_remainder=True,
    ).cache(
    ).repeat(
    ).map(
        map_func=_parse_example_batch,
        num_parallel_calls=tf.data.experimental.AUTOTUNE
    ).prefetch(
        buffer_size=1
    )
Run Code Online (Sandbox Code Playgroud)

使用映射函数:

def _bit_to_float(string_batch: tf.Tensor):
    return tf.reshape(tf.math.floormod(tf.dtypes.cast(tf.bitwise.right_shift(
        tf.expand_dims(tf.io.decode_raw(string_batch, tf.uint8), 2),
        tf.reshape(tf.dtypes.cast(tf.range(7, -1, -1), tf.uint8), (1, 1, 8))
    ), tf.float32), 2), (tf.shape(string_batch)[0], -1))


def _parse_example_batch(example_batch):
    preprocessed_sample_columns = {
        "features": tf.io.VarLenFeature(tf.float32),
        "booleanFeatures": tf.io.FixedLenFeature((), tf.string, ""),
        "label": tf.io.FixedLenFeature((), tf.float32, -1)
    }
    samples = tf.io.parse_example(example_batch, preprocessed_sample_columns)
    dense_float = tf.sparse.to_dense(samples["features"])
    bits_to_float …
Run Code Online (Sandbox Code Playgroud)

python python-3.x tensorflow tensorflow-datasets tensorflow2.0

23
推荐指数
1
解决办法
3746
查看次数

Tensorflow 数据集预取和缓存选项的正确用法是什么?

我已经阅读了 TF 页面和一些关于使用 prefetch() 和 cache() 来加速模型输入管道的帖子,并尝试在我的数据上实现它。Cache() 按预期为我工作,即在第一个纪元中从 dist 读取数据,在所有后续纪元中它只是从内存中读取数据。但我在使用 prefetch() 时遇到很多困难,我真的不明白何时以及如何使用它。有人可以帮我吗?我真的需要一些帮助。我的应用程序是这样的:我有一组大型 TFRecord 文件,每个文件都包含一些在馈送到我的网络之前要处理的原始记录。它们将被混合(不同的样本流),所以我要做的是:

def read_datasets(pattern, numFiles, numEpochs=125, batchSize=1024, take=dataLength):

    files = tf.data.Dataset.list_files(pattern)

    def _parse(x):
        x = tf.data.TFRecordDataset(x, compression_type='GZIP')
    return x

    np = 4 # half of the number of CPU cores
    dataset = files.interleave(_parse, cycle_length=numFiles, block_length=1, num_parallel_calls=np)\
    .map(lambda x: parse_tfrecord(x), num_parallel_calls=np)
    dataset = dataset.take(take)
    dataset = dataset.batch(batchSize)
    dataset = dataset.cache()
    dataset = dataset.prefetch(buffer_size=10)
    dataset = dataset.repeat(numEpochs)
    return dataset
Run Code Online (Sandbox Code Playgroud)

interleave 函数中的 parse_tfrecord(x) 函数是数据应用于模型之前所需的预处理,我的猜测是预处理时间与网络的批处理时间相当。我的整个数据集(包括所有输入文件)包含大约 500 批 1024 个样本。我的问题是:

1-如果我进行缓存,我真的需要预取吗?

2- 映射、批处理、缓存、预取和重复的顺序是否正确? …

python tensorflow tensorflow-datasets

20
推荐指数
2
解决办法
2万
查看次数

tf.data.Dataset.map()和tf.data.Dataset.apply()之间的区别

随着最近升级到1.4版,Tensorflow包含tf.data在库核心中.在描述一个"主要的新功能" 版本1.4发行说明tf.data.Dataset.apply(),这是一个"应用自定义转换功能的方法".这与现有的有tf.data.Dataset.map()什么不同?

python tensorflow tensorflow-datasets

18
推荐指数
2
解决办法
6021
查看次数

Tensorflow:logits 和标签必须具有相同的第一维

我是 tensoflow 的新手,我想用我自己的数据(40x40 的图像)调整 MNIST 教程https://www.tensorflow.org/tutorials/layers。这是我的模型函数:

def cnn_model_fn(features, labels, mode):
        # Input Layer
        input_layer = tf.reshape(features, [-1, 40, 40, 1])

        # Convolutional Layer #1
        conv1 = tf.layers.conv2d(
                inputs=input_layer,
                filters=32,
                kernel_size=[5, 5],
                #  To specify that the output tensor should have the same width and height values as the input tensor
                # value can be "same" ou "valid"
                padding="same",
                activation=tf.nn.relu)

        # Pooling Layer #1
        pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2)

        # Convolutional Layer #2 and Pooling Layer #2
        conv2 …
Run Code Online (Sandbox Code Playgroud)

python keras tensorflow tensorflow-datasets tensorflow-estimator

18
推荐指数
4
解决办法
5万
查看次数