Tensorflow 在GCMLE上使用TPU训练和评估()批量大小
我正在尝试使用带有训练和评估的TPUEstimator在GCMLE上进行实验。TPUEstimator有一个必需的参数train_batch_size,它显然指定了批大小。但是,对于列_和列_评估,我还通过列规范指定了批次大小:Tensorflow 在GCMLE上使用TPU训练和评估()批量大小,tensorflow,google-cloud-platform,google-cloud-ml,google-cloud-tpu,Tensorflow,Google Cloud Platform,Google Cloud Ml,Google Cloud Tpu,我正在尝试使用带有训练和评估的TPUEstimator在GCMLE上进行实验。TPUEstimator有一个必需的参数train_batch_size,它显然指定了批大小。但是,对于列_和列_评估,我还通过列规范指定了批次大小: train_input = lambda: input_fn( filenames = hparams.train_files, batch_size = hparams.train_batch_size, hparams = hparams,
train_input = lambda: input_fn(
filenames = hparams.train_files,
batch_size = hparams.train_batch_size,
hparams = hparams,
num_epochs = hparams.num_epochs,
shuffle=True,
skip_header_lines=1
)
train_spec = tf.estimator.TrainSpec(train_input, max_steps = hparams.train_steps)
estimator = tpu_estimator.TPUEstimator(
use_tpu=True,
model_fn=model_fn,
config=run_config,
train_batch_size = hparams.train_batch_size,
eval_batch_size = hparams.eval_batch_size,
)
tf.estimator.train_and_evaluate(tpu_estimator, train_spec, eval_spec)
在这个例子中,考虑TrimeScript中的TrimeA输入有它自己的TBCH大小,它对于TF.Tr.Pr.T批量或TF.DATETET.Stand之类的东西也是如此,也是TPUpHuffor的要求。p> 在我看来,在两个不同的地方传递train_batch_大小似乎非常草率-建议只是为了确保将相同的批次大小传递给TPUEstimator和TrainSpec吗?如果TPUEstimator中的批次大小与传递给train_的TrainSpec中的批次大小不同,请评估优先选择什么?是否有更好的方法使用训练和评估,不需要在两个不同的地方通过此批量
此外,TPUEstimator似乎会自动创建参数['batch_size'],根据文档,该参数似乎是有效的批次大小。有效批次大小如何与列车批次大小相关?如果我的列车批次大小为1024,则有效批次大小128,因为有8个核心?您应该分别调用train和evaluate,而不是train_和_evaluate。train\u和\u evaluate似乎试图以不同于train或evaluate单独的方式设置分布式集群。您应该分别调用train和evaluate,而不是train\u和\u evaluate。train_和_evaluate似乎试图以不同于train或evaluate单独的方式建立分布式集群。正常估计器和TPUEstimator之间的批量处理略有不同 对于正态估计器,批量大小对估计器不明确可见;相反,它是input_fn故事的一部分,就像您的示例所做的那样 对于TPU,批次大小的处理方式不同。具体而言,TPUEstimator构造函数中的xxx_批次大小系列(例如,列车批次大小)是模型的全局批次大小。通过将tf.contrib.tpu.TPUConfig.per_host_input_更改为_training,TPUEstimator将以不同的方式调用您的input_fn 这里,参数['batch_size']是碎片批量大小,由构造函数中的train_batch_大小计算 一个具体的例子是:比如说,train_batch_大小为64,对于Cloud TPU 如果用于培训的每主机输入为False,则在云TPU上将调用输入fn 8次,这称为每核心模式。在这种情况下,input_fn中的参数['batch_size']为64/8=8。您的模型看到的总全局批处理大小是64,这是上面通过TPUEstimator构造函数传递的列批处理大小 如果将用于训练的每主机输入翻转为bool true,则输入fn中的参数['batch\u size']将为64而不是64/8,并且只调用一次输入fn。所以,全局批处理大小仍然是64 两种情况下都可以使用相同的输入 对于TPU吊舱,这与params相同,['batch_size']是每个主机的碎片批量大小 总结如下: 全局批处理大小应通过TPUEstimator构造函数传递 输入_fn应该从params['batch_size']中获取碎片批量大小,并根据该值创建数据集
希望这有帮助。正常估计器和TPUEstimator之间的批量处理略有不同 对于正态估计器,批量大小对估计器不明确可见;相反,它是input_fn故事的一部分,就像您的示例所做的那样 对于TPU,批次大小的处理方式不同。具体而言,TPUEstimator构造函数中的xxx_批次大小系列(例如,列车批次大小)是模型的全局批次大小。通过将tf.contrib.tpu.TPUConfig.per_host_input_更改为_training,TPUEstimator将以不同的方式调用您的input_fn 这里,参数['batch_size']是碎片批量大小,由构造函数中的train_batch_大小计算 一个具体的例子是:比如说,train_batch_大小为64,对于Cloud TPU 如果用于培训的每主机输入为False,则在云TPU上将调用输入fn 8次,这称为每核心模式。在这种情况下,input_fn中的参数['batch_size']为64/8=8。您的模型看到的总全局批处理大小是64,这是上面通过TPUEstimator构造函数传递的列批处理大小 如果将用于训练的每主机输入翻转为bool true,则输入fn中的参数['batch\u size']将为64而不是64/8,并且只调用一次输入fn。所以,全局批处理大小仍然是64 两种情况下都可以使用相同的输入 对于TPU吊舱,这与params相同,['batch_size']是每个主机的碎片批量大小 总结如下: 全局批处理大小应通过TPUEstimator构造函数传递 输入为 应该从params['batch_size']获取碎片批量大小,并遵守该值来创建数据集 希望这有帮助