Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 在GCMLE上使用TPU训练和评估()批量大小_Tensorflow_Google Cloud Platform_Google Cloud Ml_Google Cloud Tpu - Fatal编程技术网

Tensorflow 在GCMLE上使用TPU训练和评估()批量大小

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,

我正在尝试使用带有训练和评估的TPUEstimator在GCMLE上进行实验。TPUEstimator有一个必需的参数train_batch_size,它显然指定了批大小。但是,对于列_和列_评估,我还通过列规范指定了批次大小:

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']获取碎片批量大小,并遵守该值来创建数据集

希望这有帮助