Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.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
Python 将大于2 Gb的数据集与KERA一起使用_Python_Tensorflow_Keras - Fatal编程技术网

Python 将大于2 Gb的数据集与KERA一起使用

Python 将大于2 Gb的数据集与KERA一起使用,python,tensorflow,keras,Python,Tensorflow,Keras,TensorFlow对单个张量的长期限制为2GB。这意味着您不能一次在超过2GB的数据上训练您的模型,而无需跳转。看 这些文章中引用的标准解决方案是使用占位符,并通过提要将其传递给“会话”: my_graph = tf.Graph() sess = tf.Session(graph=my_graph) X_init = tf.placeholder(tf.float32, shape=(m_input, n_input)) X = tf.Variable(X_init) sess.run(

TensorFlow对单个张量的长期限制为2GB。这意味着您不能一次在超过2GB的数据上训练您的模型,而无需跳转。看

这些文章中引用的标准解决方案是使用占位符,并通过提要将其传递给“会话”:

my_graph = tf.Graph()
sess = tf.Session(graph=my_graph)   
X_init = tf.placeholder(tf.float32, shape=(m_input, n_input))
X = tf.Variable(X_init)
sess.run(tf.global_variables_initializer(), feed_dict={X_init: data_for_X})
然而,这只有在我使用“旧”API(tf.Session()等)时才起作用。现在推荐的方法是使用Keras(tensorflow.org上的所有教程都使用它)。而且,使用Keras时,没有tf.Graph()、tf.Session()和run()(至少没有一个是用户容易看到的)


如何调整上述代码以使用Keras?

Keras对数据集没有2GB的限制,我已经用Keras训练了更大的数据集,没有任何问题

限制可能来自TensorFlow常量,该常量有2GB的限制,但在任何情况下都不应将数据集存储为常量,因为这些数据集保存为图形的一部分,这不是存储模型的想法


Keras具有
model.fit_generator
函数,您可以使用该函数传递一个生成器函数,该函数动态加载数据并进行批处理。这允许您动态加载大型数据集,并且您通常会调整批大小,以便在可接受的RAM使用情况下最大限度地提高性能。TensorFlow没有类似的API,您必须手动实现它,就像您所说的那样使用
feed\u dict
Keras对数据集没有2GB的限制,我用Keras训练了更大的数据集,没有任何问题

限制可能来自TensorFlow常量,该常量有2GB的限制,但在任何情况下都不应将数据集存储为常量,因为这些数据集保存为图形的一部分,这不是存储模型的想法


Keras具有
model.fit_generator
函数,您可以使用该函数传递一个生成器函数,该函数动态加载数据并进行批处理。这允许您动态加载大型数据集,并且您通常会调整批大小,以便在可接受的RAM使用情况下最大限度地提高性能。TensorFlow没有类似的API,您必须手动实现它,就像您在Keras中使用
feed\u dict
所说的那样,您不会在tensor中加载整个数据集。您可以在numpy数组中加载它

如果整个数据可以在单个numpy阵列中: 感谢@sebrockm的评论

Keras最简单的用法就是将数据集加载到numpy数组中(而不是tf张量),然后调用
model.fit(arraywhithinputs,arraywhithoutputs,…)

如果整个数据不适合numpy阵列: 您需要创建一个
生成器
keras.utils.Sequence
来逐个加载批,然后使用
model.fit_生成器(generatorOrSequence,…)来训练模型

限制变成了批量大小,但在单个批量中几乎不会达到2GB。 所以,去做吧:


    • 在Keras中,您不会在张量中加载整个数据集。您可以在numpy数组中加载它

      如果整个数据可以在单个numpy阵列中: 感谢@sebrockm的评论

      Keras最简单的用法就是将数据集加载到numpy数组中(而不是tf张量),然后调用
      model.fit(arraywhithinputs,arraywhithoutputs,…)

      如果整个数据不适合numpy阵列: 您需要创建一个
      生成器
      keras.utils.Sequence
      来逐个加载批,然后使用
      model.fit_生成器(generatorOrSequence,…)来训练模型

      限制变成了批量大小,但在单个批量中几乎不会达到2GB。 所以,去做吧:


      您在Keras中没有这个问题,您是否确实尝试过培训Keras模型并查看是否有问题?它使用了完全不同的API,所以我不知道问题出在哪里。我在tf.convert_to_tensor()中得到了一个“ValueError:无法创建内容大于2GB的张量原型”。在我尝试将数据集从numpy.ndarray转换为张量时,我甚至还没有调用任何Keras API函数。如果我直接将数据以numpy.ndarray的形式提供给Keras,它会在Python代码内部形成瓶颈,GPU利用率为10%。Keras无法绕过2GB的限制。为什么需要转换为tensor?这根本不需要,您只需制作一个生成器并使用fit_生成器,或者如果您的数据适合RAM,则直接使用fit。确保调整批大小以最大限度地提高性能。我已经用600 GB的数据集(OpenImages)训练了Keras模型,没有问题。@MatiasValdenegro你在Keras中没有这个问题,你真的试过训练Keras模型,看看有没有问题?它使用了完全不同的API,所以我不知道问题出在哪里。我在tf.convert_to_tensor()中得到了一个“ValueError:无法创建内容大于2GB的张量原型”。在我尝试将数据集从numpy.ndarray转换为张量时,我甚至还没有调用任何Keras API函数。如果我直接将数据以numpy.ndarray的形式提供给Keras,它会在Python代码内部形成瓶颈,GPU利用率为10%。Keras无法绕过2GB的限制。为什么需要转换为tensor?这根本不需要,您只需制作一个生成器并使用fit_生成器,或者如果您的数据适合RAM,则直接使用fit。确保调整批大小以最大限度地提高性能。我已经用600 GB的数据集(OpenImages)训练了Keras模型,没有任何问题。@MatiasValdenegro但这需要在Python代码中创建批处理,这肯定是我们都希望避免的?如果我有2GB的数据要分为1000个批次,我想把整个2GB的数据交给TF,并说“在这上面训练,分为1000个批次”。我不希望TF执行1000个Python调用来一个接一个地拉动批处理,因为这将是灾难性的性能问题。@Python中的EugeneSmith批处理是som