我有一个大的(>200M行) BigQuery表,我想从这个表中阅读迷你批次,这样我就可以训练一个机器学习模型了。数据集太大,无法容纳到内存中,因此我无法同时读取所有数据,但我希望我的模型能够从所有数据中学习。我还想避免由于网络延迟而发出太多的查询,因为这会减慢培训过程。用Python做这件事最好的方法是什么?
发布于 2020-01-29 05:15:32
如果使用TF,那么Felipe的答案是有效的,但是如果您使用pytorch或者想要对您的培训平台更加不可知论的东西,那么faucetml可以很好地工作:
从文档中的示例来看,如果您正在训练两个时代:
fml = get_client(
datastore="bigquery",
credential_path="bq_creds.json",
table_name="my_training_table",
ds="2020-01-20",
epochs=2,
batch_size=1024
chunk_size=1024 * 10000,
test_split_percent=20,
)
for epoch in range(2):
fml.prep_for_epoch()
batch = fml.get_batch()
while batch is not None:
train(batch)
batch = fml.get_batch()发布于 2020-01-29 02:38:28
你在用Tensorflow吗?
tfio.bigquery.BigQueryClient 0.9.0解决了这个问题:
read_session(
parent,
project_id,
table_id,
dataset_id,
selected_fields,
output_types=None,
row_restriction='',
requested_streams=1
)使用
requested_streams:
的初始流数。如果未设置或0,我们将提供流的值,以便产生合理的吞吐量。肯定是非阴性的。流的数量可能低于请求的数量,这取决于表的并行性和系统允许的最大并行量。
源代码:
https://stackoverflow.com/questions/59959473
复制相似问题