标签: tensorflow-datasets

迭代 tf.data.Dataset 的有效方法

我想知道在 TensorFlow 2.4 中迭代 tf.data.Dataset 的最有效方法是什么。

我正在使用典型的:

for example in dataset:
    code
Run Code Online (Sandbox Code Playgroud)

但是,我测量了挂机时间,并且由于我的数据集很大,因此计算循环需要太多时间。还有其他选择可以减少计算时间吗?

python tensorflow tensorflow-datasets tensorflow2.0

4
推荐指数
1
解决办法
1800
查看次数

在 Windows 虚拟环境中使用 TensorFlow 和 TensorFlow 数据集时出现“没有名为‘资源’的模块”错误

我在 Windows 虚拟环境中尝试使用 TensorFlow 和 TensorFlow 数据集时遇到问题。当我尝试导入这些包时,收到以下错误:ModuleNotFoundError:没有名为“resource”的模块。

据我了解,Windows 上不需要“资源”模块,因此我不确定为什么会出现此错误。以下是我的环境以及我已经尝试过的详细信息:

  • 我正在使用 Python (venv) 中的虚拟环境。
  • 我使用的 Python 版本是 Python 3.8+。
  • 我的虚拟环境中安装了 TensorFlow 和 TensorFlow 数据集。
  • 我已经使用 pip install --upgrade 更新了虚拟环境中的所有软件包。

我的问题是:在 Windows 上使用 TensorFlow 和 TensorFlow 数据集时,如何解决“没有名为‘资源’的模块”错误?为了在 Windows 上正确配置这些包,我需要做什么具体的事情?

预先感谢您的任何帮助。

windows resources pycharm tensorflow tensorflow-datasets

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

tensorflow的数据集API的返回大小不是常量

我正在使用tensorflow的数据集API.用简单的案例测试我的代码.下面显示了我使用的简单代码.问题是,当数据集大小很小时,似乎数据集API返回的大小不一致.我确信有一个正确的方法来处理它.但即使我阅读了该页面和教程中的所有功能,我也找不到.

import numpy as np
import tensorflow as tf

data_source = tf.zeros([24, 200, 64, 64, 1]) #[number_of_video, steps, pixel_w, pixel_h, channel]
dataset = tf.contrib.data.Dataset.from_tensor_slices(data_source)
dataset = dataset.shuffle(buffer_size=100)
dataset = dataset.batch(16)
dataset = dataset.repeat()

iterator = tf.contrib.data.Iterator.from_structure(dataset.output_types, dataset.output_shapes)
next_element = iterator.get_next()
training_init_op = iterator.make_initializer(dataset)

with tf.Session() as sess:
    sess.run(training_init_op)
    next_elem = next_element.eval()
    print(np.shape(next_elem))
    next_elem = next_element.eval()
    print(np.shape(next_elem))
    next_elem = next_element.eval()
    print(np.shape(next_elem))
    next_elem = next_element.eval()
    print(np.shape(next_elem))
    next_elem = next_element.eval()
    print(np.shape(next_elem))
    next_elem = next_element.eval()
    print(np.shape(next_elem))
    next_elem = next_element.eval()
    print(np.shape(next_elem))
Run Code Online (Sandbox Code Playgroud)

数据集是灰度视频.共有24个视频序列,步长均为200.帧大小为64乘64和单通道.我将批量大小设置为16,缓冲区大小设置为100.但代码的结果是,

(16, …
Run Code Online (Sandbox Code Playgroud)

python iterator bigdata tensorflow tensorflow-datasets

3
推荐指数
1
解决办法
996
查看次数

iterator.get_next()导致在引发'std :: system_error实例后调用终止

我正在使用具有以下属性的共享服务器训练带有tensorflow的resNet50:

ubuntu 16.04 3 gtx 1080 gpus tensorflow 1.3 python 2.7但总是在两个时期之后,在第三个时期,我遇到这个错误:

terminate called after throwing an instance of 'std::system_error' 
what():
Resource temporarily unavailable
Aborted 
Run Code Online (Sandbox Code Playgroud)

这是将tfrecord转换为数据集的代码:

filenames = ["balanced_t.tfrecords"]
dataset = tf.contrib.data.TFRecordDataset(filenames)
def parser(record):
keys_to_features = {
    "mhot_label_raw": tf.FixedLenFeature((), tf.string, 
default_value=""),
    "mel_spec_raw": tf.FixedLenFeature((), tf.string, 
default_value=""),
}
parsed = tf.parse_single_example(record, keys_to_features)

mel_spec1d = tf.decode_raw(parsed['mel_spec_raw'], tf.float64)
# label = tf.cast(parsed["label"], tf.string)
mhot_label = tf.decode_raw(parsed['mhot_label_raw'], tf.float64)
mel_spec = tf.reshape(mel_spec1d, [96, 64])
return {"mel_data": mel_spec}, mhot_label
dataset = dataset.map(parser)
dataset = dataset.batch(batch_size)
dataset = dataset.repeat(3) …
Run Code Online (Sandbox Code Playgroud)

tensorflow tensorflow-datasets

3
推荐指数
1
解决办法
5751
查看次数

迭代器重置时的tensorflow数据集混洗行为

我发现reshuffle_each_iteration参数tf.Dataset.shuffle有点混乱。考虑以下代码:

import tensorflow as tf

flist = ["trimg1", "trimg2", "trimg3", "trimg4"]

filenames = tf.constant(flist)

train_x_dataset = tf.data.Dataset.from_tensor_slices((filenames))
train_x_dataset = train_x_dataset.shuffle(buffer_size=10, reshuffle_each_iteration=False)

it_train_x = train_x_dataset.make_initializable_iterator()

next_sample = it_train_x.get_next()

with tf.Session() as sess:
    for epoch in range(3):
        sess.run(it_train_x.initializer)
        print("Starting epoch ", epoch)
        while True:
            try:
                s = sess.run(next_sample)
                print("Sample: ", s)
            except tf.errors.OutOfRangeError:
                break
Run Code Online (Sandbox Code Playgroud)

代码输出:

Starting epoch  0
Sample:  b'trimg2'
Sample:  b'trimg1'
Sample:  b'trimg3'
Sample:  b'trimg4'
Starting epoch  1
Sample:  b'trimg4'
Sample:  b'trimg3'
Sample:  b'trimg2'
Sample:  b'trimg1'
Starting …
Run Code Online (Sandbox Code Playgroud)

tensorflow tensorflow-datasets

3
推荐指数
1
解决办法
2512
查看次数

洗牌tfrecords文件

我有5个tfrecords文件,每个对象一个.虽然训练我想从所有5个tfrecords中平均读取数据,即如果我的批量大小是50,我应该从第一个tfrecord文件获得10个样本,从第二个tfrecord文件获得10个样本,依此类推.目前,它只是从所有三个文件中顺序读取,即我从同一记录中获得50个样本.有没有办法从不同的tfrecords文件中提取样品?

deep-learning tensorflow tfrecord tensorflow-datasets

3
推荐指数
1
解决办法
1630
查看次数

Tensorflow:tf.data.Dataset,不能在组件0中批处理具有不同形状的张量

我的输入管道中出现以下错误:

tensorflow.python.framework.errors_impl.InvalidArgumentError:无法在组件0中批量生成具有不同形状的张量.第一个元素具有形状[2,48,48,3],元素1具有形状[27,48,48,3].

用这个代码

dataset = tf.data.Dataset.from_generator(generator,
                                         (tf.float32, tf.int64, tf.int64, tf.float32, tf.int64, tf.float32))

dataset = dataset.batch(max_buffer_size)
Run Code Online (Sandbox Code Playgroud)

这是完全合乎逻辑的,因为批处理方法尝试创建(batch_size,?,48,48,3)Tensor.但是我希望它为这种情况创建一个[29,48,48,3] Tensor.所以连接而不是堆栈.这可能与tf.data有关吗?

我可以在生成器函数中用Python进行连接,但我想知道这是否也可以使用tf.data管道

python tensorflow tensorflow-datasets

3
推荐指数
1
解决办法
6285
查看次数

将TFRecords与keras一起使用

我已经将图像数据库转换为两个TFRecords,一个用于训练,另一个用于验证。我想使用这两个文件为数据输入keras训练一个简单的模型,但是出现了我无法理解的与数据形状有关的错误。

这是代码(所有大写字母的变量在其他地方定义):

def _parse_function(proto):
    f = {
        "x": tf.FixedLenSequenceFeature([IMG_SIZE[0] * IMG_SIZE[1]], tf.float32, default_value=0., allow_missing=True),
        "label": tf.FixedLenSequenceFeature([1], tf.int64, default_value=0, allow_missing=True)
    }
    parsed_features = tf.parse_single_example(proto, f)

    x = tf.reshape(parsed_features['x'] / 255, (IMG_SIZE[0], IMG_SIZE[1], 1))
    y = tf.cast(parsed_features['label'], tf.float32)
    return x, y

def load_dataset(input_path, batch_size, shuffle_buffer):
    dataset = tf.data.TFRecordDataset(input_path)
    dataset = dataset.shuffle(shuffle_buffer).repeat()  # shuffle and repeat
    dataset = dataset.map(_parse_function, num_parallel_calls=16)
    dataset = dataset.batch(batch_size).prefetch(1)  # batch and prefetch

    return dataset.make_one_shot_iterator()

train_iterator = load_dataset(TRAIN_TFRECORDS, BATCH_SIZE, SHUFFLE_BUFFER)
val_iterator = load_dataset(VALIDATION_TFRECORDS, BATCH_SIZE, SHUFFLE_BUFFER)

model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(IMG_SIZE[0], …
Run Code Online (Sandbox Code Playgroud)

python keras tensorflow tensorflow-datasets

3
推荐指数
1
解决办法
1746
查看次数

将.tfrecords文件拆分为多个.tfrecords文件

有什么方法可以直接将.tfrecords文件拆分为多个.tfrecords文件,而无需回写每个Dataset示例?

python tensorflow tfrecord tensorflow-datasets

3
推荐指数
2
解决办法
1061
查看次数

从NP数组转换后,Keras(tensorflow 2.0)中的Tensorflow数据集数据的形状错误

按照本指南设置简单的tensorflow 2.0测试时,输入到keras输入层的输入是错误的,但仅在转换为数据集之后(假装具有正确的形状)。

当然可以从文档中运行colab笔记本,但是我无法弄清楚设置可能出了什么问题。任何提示表示赞赏!

在jupyter实验室中设置一些假数据:

data = np.random.random((1000, 32,))
labels = np.random.random((1000, 10,))

dataset = tf.data.Dataset.from_tensor_slices((data, labels))
dataset.shuffle(buffer_size=1024).batch(32)

>> <BatchDataset shapes: ((None, 32), (None, 10)), types: (tf.float64, tf.float64)>
Run Code Online (Sandbox Code Playgroud)

使用功能性keras API构建简化的模型(顺序没有区别):

inputs = keras.Input(shape=(32,))
hidden = keras.layers.Dense(64, activation='relu')(inputs)
hidden = keras.layers.Dense(64, activation='relu')(hidden)
output = keras.layers.Dense(10, activation='softmax')(hidden)

model = keras.Model(inputs=inputs, outputs=output)
model.compile(loss='mse',
              optimizer=keras.optimizers.Adam(0.001),
              metrics=['mae'])
Run Code Online (Sandbox Code Playgroud)

在numpy数组上运行模型拟合工作符合预期:

model.fit(data, labels, epochs=10, batch_size=32)

>> Epoch 1/10
>> 1000/1000 [==============================] - 0s 124us/sample - loss: 0.2472 - mae: 0.4143
[...]
>> Epoch 10/10
>> 1000/1000 [==============================] …
Run Code Online (Sandbox Code Playgroud)

python tensorflow tensorflow-datasets tensorflow2.0

3
推荐指数
1
解决办法
438
查看次数