2019 年 1 月 10 日 — Sam Witteveen 的客座文章
您知道Colab 包括为训练模型选择免费 Cloud TPU 的功能吗?没错,您可以独享整个 TPU,在笔记本中使用!从 TensorFlow 1.11 开始,您就可以使用 TPU 训练 Keras 模型。
在本文中,让我们看看您需要对代码进行哪些更改才能在 TPU 上训练 Keras 模型。请注意,随着今年晚些时候 TensorFlow 2.0 的发布,其中一些内容可能会进一步简化,但我认为分享这些技巧会有所帮助,以防您想现在就尝试一下。
def train_input_fn(batch_size=1024):
# Convert the inputs to a Dataset.
dataset = tf.data.Dataset.from_tensor_slices((x_train,y_train))
# Shuffle, repeat, and batch the examples.
dataset = dataset.cache()
dataset = dataset.shuffle(1000, reshuffle_each_iteration=True)
dataset = dataset.repeat()
dataset = dataset.batch(batch_size, drop_remainder=True)
# Return the dataset.
return dataset
try:
device_name = os.environ[‘COLAB_TPU_ADDR’]
TPU_ADDRESS = ‘grpc://’ + device_name
print(‘Found TPU at: {}’.format(TPU_ADDRESS))
except KeyError:
print(‘TPU not found’)
接下来,我们需要选择用于模型的优化器。TensorFlow 优化器目前比 Keras 优化器支持得更好。在这里,您可以看到我们选择使用 TensorFlow Adam 优化器。# Use a tf optimizer rather than a Keras one for now
opt = tf.train.AdamOptimizer(learning_rate)
model.compile(
optimizer=opt,
loss='categorical_crossentropy',
metrics=['acc'])
最后,我们需要将 Keras 模型转换为 TPU 模型。目前,我们通过使用 keras_to_tpu 函数并传入一个分布式策略来实现。(最终,此步骤将移入编译函数中,您只需将分布式策略传递到 Keras 模型的编译函数中。)tpu_model = tf.contrib.tpu.keras_to_tpu_model(
model,
strategy=tf.contrib.tpu.TPUDistributionStrategy(
tf.contrib.cluster_resolver.TPUClusterResolver(TPU_ADDRESS)))
完成此操作后,您应该会看到类似于此的输出,显示 TPU 已准备好开始训练。我们还可以看到 TPU 设备的详细信息。keras_to_tpu 函数的输出 |
tpu_model.fit(
train_input_fn,
steps_per_epoch = 60,
epochs=10,
)
2019 年 1 月 10 日 — Sam Witteveen 的客座文章
您知道Colab 包括为训练模型选择免费 Cloud TPU 的功能吗?没错,您可以独享整个 TPU,在笔记本中使用!从 TensorFlow 1.11 开始,您就可以使用 TPU 训练 Keras 模型。
在本文中,让我们看看您需要对代码进行哪些更改才能在 TPU 上训练 Keras 模型。请注意,其中一些内容可能会进一步简化,随着今年晚些时候 TensorFlow 2.0 的发布…