Python 将大于2 Gb的数据集与KERA一起使用
TensorFlow对单个张量的长期限制为2GB。这意味着您不能一次在超过2GB的数据上训练您的模型,而无需跳转。看 这些文章中引用的标准解决方案是使用占位符,并通过提要将其传递给“会话”: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(
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。
所以,去做吧: