相关疑难解决方法(0)

如何正确组合TensorFlow的数据集API和Keras?

Keras的fit_generator()模型方法需要一个生成形状元组(输入,目标)的生成器,其中两个元素都是NumPy数组.文档似乎暗示如果我只是将Dataset迭代器包装在生成器中,并确保将Tensors转换为NumPy数组,我应该好好去.但是,这段代码给了我一个错误:

import numpy as np
import os
import keras.backend as K
from keras.layers import Dense, Input
from keras.models import Model
import tensorflow as tf
from tensorflow.contrib.data import Dataset

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'

with tf.Session() as sess:
    def create_data_generator():
        dat1 = np.arange(4).reshape(-1, 1)
        ds1 = Dataset.from_tensor_slices(dat1).repeat()

        dat2 = np.arange(5, 9).reshape(-1, 1)
        ds2 = Dataset.from_tensor_slices(dat2).repeat()

        ds = Dataset.zip((ds1, ds2)).batch(4)
        iterator = ds.make_one_shot_iterator()
        while True:
            next_val = iterator.get_next()
            yield sess.run(next_val)

datagen = create_data_generator()

input_vals = Input(shape=(1,))
output …
Run Code Online (Sandbox Code Playgroud)

keras tensorflow

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

如何使用Tensorflow的数据集API将数据移动到多个GPU塔

我们在Tensorflow上运行多GPU作业,并评估从基于队列的模型(使用string_input_producer接口)到新的Tensorflow Dataset API的迁移.后者似乎提供了一种更容易的方式来同时切换列车和验证.

下面的代码片段显示了我们如何做到这一点.

    train_dataset, train_iterator = get_dataset(train_files, batch_size, epochs)
    val_dataset, val_iterator = get_dataset(val_files, batch_size, epochs)


    is_validating = tf.placeholder(dtype=bool, shape=())
    next_batch = tf.cond(is_validating,
               lambda: val_iterator.get_next(),
               lambda: train_iterator.get_next())

    validation_tower = self.num_gpus - 1
    tower_grads = []

    for i in range(self.num_gpus):
        with tf.variable_scope(tf.get_variable_scope(),reuse=(i > 0)):
            with tf.device('/gpu:%d' % i), tf.name_scope('%s_%d' % ('gpu_', i)) as scope:
                if i == validation_tower:
                    images, labels = next_batch
                    # Loss funcs snipped out
                else:
                    images, labels = next_batch
                    # Loss funcs snipped out
Run Code Online (Sandbox Code Playgroud)

get_dataset函数构建数据集,设置映射函数和批处理大小.它还构建了一个迭代器,但没有初始化它.迭代器的初始化发生在会话开始之前.

会话运行时提供is_validating布尔值,我们通过feed_dict传递的每个步骤is_validating为True,以使用验证数据集

我的问题是:

假设我有8个gpus,所以我们对7个GPU进行了培训.对于这7个GPU中的每一个,Iterator是否从同一点前进,从而为所有7个GPU提供相同的数据?

tensorflow tensorflow-gpu tensorflow-datasets

12
推荐指数
1
解决办法
4461
查看次数