【发布时间】:2018-12-26 22:44:17
【问题描述】:
TensorFlow 在单个张量上具有 2 Gb 的长期限制。这意味着您无法一次在超过 2 Gb 的数据上训练您的模型,而无需费劲。见Initializing tensorflow Variable with an array larger than 2GB; Use large dataset in Tensorflow
这些帖子中引用的标准解决方案是使用占位符并通过 feed_dict 将其传递给“会话”:
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 中没有这个问题,你真的尝试过训练一个 Keras 模型,看看你有没有问题?它使用完全不同的 API,所以我看不出问题出在哪里。
-
我得到一个,“ValueError:无法创建内容大于 2GB 的张量原型。”在 tf.convert_to_tensor() 中,当我尝试将我的数据集从 numpy.ndarray 转换为张量时,我什至可以调用任何 Keras API 函数。如果我直接将数据作为 numpy.ndarray 提供给 Keras,它会在 Python 代码中成为瓶颈,GPU 利用率为 10%。
-
Keras 无法绕过 2GB 的限制。
-
为什么需要转换成张量?这根本不需要,您只需制作一个生成器并使用 fit_generator 或如果您的数据适合 RAM,则直接使用 fit。确保调整批量大小以最大化性能。我已经使用 600 GB 数据集 (OpenImages) 训练了 Keras 模型,没有出现任何问题。
-
@MatiasValdenegro stackoverflow.com/questions/53931748/…
标签: python tensorflow keras