概观
在此示例中,您可以尝试使用tf.keras和Cloud TPU在FashionMNIST数据集上训练模型。该模型在Cloud TPU上训练10个Epoch,大约需要2分钟才能运行。
学习目标
在本文中,您将学习如何:
- 标准conv net的代码,在Keras的每一层之间有3层,具有退出和批量标准化。
- 使用生成器函数和fit_generator来训练模型。
- 运行预测以查看模型如何预测fashion类别并输出结果。
说明
如果是在Google Cola上训练,则需要选择TPU训练
1、在主菜单上,单击“运行时”,然后选择“更改运行时类型”。将“TPU”设置为硬件加速器。
2、再次单击Runtime并选择Runtime> Run All。您也可以使用Shift-ENTER手动运行单元格。
数据准备
首先使用tf.keras.datasets下载fashion MNIST数据集,如下所示。
import
定义模型
以下示例使用标准conv-net,其中3层具有每层之间的退出和批量标准化。
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.BatchNormalization(input_shape=x_train.shape[1:]))
model.add(tf.keras.layers.Conv2D(64, (5, 5), padding='same', activation='elu'))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2), strides=(2,2)))
model.add(tf.keras.layers.Dropout(0.25))
model.add(tf.keras.layers.BatchNormalization(input_shape=x_train.shape[1:]))
model.add(tf.keras.layers.Conv2D(128, (5, 5), padding='same', activation='elu'))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))
model.add(tf.keras.layers.Dropout(0.25))
model.add(tf.keras.layers.BatchNormalization(input_shape=x_train.shape[1:]))
model.add(tf.keras.layers.Conv2D(256, (5, 5), padding='same', activation='elu'))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2), strides=(2,2)))
model.add(tf.keras.layers.Dropout(0.25))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(256))
model.add(tf.keras.layers.Activation('elu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(10))
model.add(tf.keras.layers.Activation('softmax'))
model.summary()
在TPU上训练
要开始训练,请在TPU上构建模型,然后进行编译。
以下代码演示了如何使用生成器函数和fit_generator来训练模型。 或者,您可以将x_train和y_train传递给tpu_model.fit()。
注意:tf.contrib.tpu.keras_to_tpu_model()这个函数是在试验阶段,可能会被随时移除
import os
tpu_model = tf.contrib.tpu.keras_to_tpu_model(
model,
strategy=tf.contrib.tpu.TPUDistributionStrategy(
tf.contrib.cluster_resolver.TPUClusterResolver(tpu='grpc://' + os.environ['COLAB_TPU_ADDR'])
)
)
tpu_model.compile(
optimizer=tf.train.AdamOptimizer(learning_rate=1e-3, ),
loss=tf.keras.losses.sparse_categorical_crossentropy,
metrics=['sparse_categorical_accuracy']
)
def train_gen(batch_size):
while True:
offset = np.random.randint(0, x_train.shape[0] - batch_size)
yield x_train[offset:offset+batch_size], y_train[offset:offset + batch_size]
tpu_model.fit_generator(
train_gen(1024),
epochs=1,
steps_per_epoch=1000,
validation_data=(x_test, y_test),
)
检查结果(推断)
现在您已经完成了训练,看看模型如何预测fashion类别!
ABEL_NAMES = ['t_shirt', 'trouser', 'pullover', 'dress', 'coat', 'sandal', 'shirt', 'sneaker', 'bag', 'ankle_boots']
cpu_model = tpu_model.sync_to_cpu()
from matplotlib import pyplot
%matplotlib inline
def plot_predictions(images, predictions):
n = images.shape[0]
nc = int(np.ceil(n / 4))
f, axes = pyplot.subplots(nc, 4)
for i in range(nc * 4):
y = i // 4
x = i % 4
axes[x, y].axis('off')
label = LABEL_NAMES[np.argmax(predictions[i])]
confidence = np.max(predictions[i])
if i > n:
continue
axes[x, y].imshow(images[i])
axes[x, y].text(0.5, 0.5, label + 'n%.3f' % confidence, fontsize=14)
pyplot.gcf().set_size_inches(8, 8)
plot_predictions(np.squeeze(x_test[:16]),
tpu_model.predict(x_test[:16]))
扩展阅读
- 了解Google专门设计和优化的云TPU,以加快和扩展ML工作负载以进行训练和推理,并使ML工程师和研究人员能够更快地进行迭代。
在Google云端平台上,除了预先配置的深度学习虚拟机上提供的GPU和TPU之外,您还可以找到用于训练自定义模型的AutoML(测试版),无需编写代码和Cloud ML Engine,这将允许您运行并行训练和超参数调整 强大的分布式硬件上的自定义模型。