Dan*_*ter 5 bigdata google-cloud-storage google-cloud-platform tensorflow
我想在包含 1 亿行、每行大约 15000 个特征的大型数据集上训练 Tensorflow 神经网络。在单台机器上训练可能太慢,所以我想分布式运行。
到目前为止,我见过的所有分布式示例都是从将整个数据加载到内存中开始,然后发送到从站,这对我来说太昂贵了。
有谁知道如何设置让奴隶流入他们的训练数据?目前数据存储在谷歌云存储中,但我们可以灵活处理。
虽然我从未尝试过这么多样本(只是出于兴趣,您正在训练什么数据集?),但我认为您应该使用 Queuerunner 对象!
它们可以在此页面上找到:https://www.tensorflow.org/programmers_guide/reading_data,在“创建线程以使用 QueueRunner 对象预取”部分。
关于它们如何工作的引用:
简短版本:上面列出的许多 tf.train 函数都会将 tf.train.QueueRunner 对象添加到您的图中。这些要求您在运行任何训练或推理步骤之前调用 tf.train.start_queue_runners,否则它将永远挂起。这将启动运行输入管道的线程,填充示例队列,以便成功出列以获取示例。这最好与 tf.train.Coordinator 结合使用,以便在出现错误时干净地关闭这些线程。
该页面推荐的结合此的代码模式是:
# Create the graph, etc.
init_op = tf.global_variables_initializer()
# Create a session for running operations in the Graph.
sess = tf.Session()
# Initialize the variables (like the epoch counter).
sess.run(init_op)
# Start input enqueue threads.
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)
try:
while not coord.should_stop():
# Run training steps or whatever
sess.run(train_op)
except tf.errors.OutOfRangeError:
print('Done training -- epoch limit reached')
finally:
# When done, ask the threads to stop.
coord.request_stop()
# Wait for threads to finish.
coord.join(threads)
sess.close()
Run Code Online (Sandbox Code Playgroud)
尽管 Stackoverflow 总是喜欢完整的解释而不是相关页面的链接,但我上面链接的页面上有更多信息!
很想知道这是否解决了您的问题,祝您好运!
归档时间: |
|
查看次数: |
3289 次 |
最近记录: |