TensorFlow 长期以来对单个张量有 2 Gb 的限制。这意味着您不能在不跳过箍的情况下一次使用超过 2 Gb 的数据训练您的模型。参见 Initializing tensorflow Variable with an array larger than 2GB ; Use large dataset in Tensorflow
这些帖子中引用的标准解决方案是使用占位符并通过 feed_dict 将其传递给“ session ”:
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 中,您不会将整个数据集加载到张量中。您将其加载到 numpy 数组中。
如果整个数据可以在单个 numpy 数组中:
感谢@sebrockm 的评论。
Keras 最简单的用法就是将数据集加载到 numpy 数组(不是 tf 张量)中并调用 model.fit(arrayWithInputs, arrayWithoutputs, ...)
如果整个数据不适合 numpy 数组:
您将创建一个 generator 或一个 keras.utils.Sequence 来逐个加载批处理,然后使用 model.fit_generator(generatorOrSequence , ...)
限制成为批处理大小,但您几乎不可能在单个批处理中达到 2GB。 所以,去吧:
