Я пытаюсь использовать TPUEstimator
с train_and_evaluate()
для эксперимента на GCMLE.У TPUEstimator
есть обязательный аргумент train_batch_size
, который явно указывает размер пакета.Однако для train_and_evaluate()
я также указываю размер пакета через TrainSpec:
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)
В этом примере учтите, что train_input
в пределах train_spec имеет свой собственный определенный batch_size (для чего-то вроде tf.train.batch() или tf.datasets.batch ()), а также train_batch_size
является требованием TPUEstimator.
Мне кажется очень неаккуратным, что train_batch_size
передается в двух разных местах - является ли рекомендацией просто убедиться, что один и тот же размер партии передается и TPUEstimator, и TrainSpec?Если batch_size в TPUEstimator отличается от batch_size в TrainSpec, переданном в train_and_evaluate()
, что предпочтет?Есть ли лучший способ использовать train_and_evaluate () с TPUEstimator, и нет необходимости передавать этот batch_size в двух разных местах?
Кроме того, кажется, что TPUEstimator автоматически создает параметры ['batch_size'], который выглядит как«эффективный размер партии» в соответствии с документацией.Как эффективный размер партии связан с train_batch_size?Если мой train_batch_size равен 1024, будет ли «эффективный размер партии» 128 (из-за 8 ядер)?