fashionmnist数据集_在TPU上基于keras训练Fashion MNIST图像数据集

7c1a89fd331fa9c89cb4db4d88e06b45.png

概观

在此示例中,您可以尝试使用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,这将允许您运行并行训练和超参数调整 强大的分布式硬件上的自定义模型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值