Google Colab 中的 Keras 调谐器和 TPU

Posted

技术标签:

【中文标题】Google Colab 中的 Keras 调谐器和 TPU【英文标题】:Keras tuner and TPU in Google Colab 【发布时间】:2020-09-11 04:49:41 【问题描述】:

我在使用 keras 调谐器和 tpu 时遇到了一些问题。当我运行下面的代码时,一切正常,网络训练很快。

vocab_size = 5000
embedding_dim = 64
max_length = 2000

def create_model():
  model = tf.keras.Sequential([
      tf.keras.layers.Embedding(vocab_size, embedding_dim),
      tf.keras.layers.LSTM(100, dropout=0.5, recurrent_dropout=0.5),
      tf.keras.layers.Dense(embedding_dim, activation='relu'),
      tf.keras.layers.Dense(4, activation='softmax')
  ])
  return model

resolver = tf.distribute.cluster_resolver.TPUClusterResolver(tpu='grpc://' + os.environ['COLAB_TPU_ADDR'])
tf.config.experimental_connect_to_cluster(resolver)
tf.tpu.experimental.initialize_tpu_system(resolver)
strategy = tf.distribute.experimental.TPUStrategy(resolver)

with strategy.scope():
  model = create_model()
  model.compile(optimizer='adam',
                loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
                metrics=['sparse_categorical_accuracy'])

model.fit(train_padded, y_train,
          epochs=10,
          validation_split=0.15,
          verbose=1, batch_size=128)

当我使用 keras 调谐器时,神经网络学习缓慢。我相信没有使用TPU。

vocab_size = 5000
max_length = 2000
resolver = tf.distribute.cluster_resolver.TPUClusterResolver(tpu='grpc://' + os.environ['COLAB_TPU_ADDR'])
tf.config.experimental_connect_to_cluster(resolver)
tf.tpu.experimental.initialize_tpu_system(resolver)
strategy = tf.distribute.experimental.TPUStrategy(resolver)

def build_model(hp):
    model = tf.keras.Sequential()
    activation_choice = hp.Choice('activation', values=['relu', 'sigmoid', 'tanh', 'elu', 'selu'])
    embedding_dim = hp.Int('units_hidden', min_value=128, max_value=24, step=8)
    model.add(tf.keras.layers.Embedding(vocab_size, embedding_dim))
    model.add(tf.keras.layers.LSTM(hp.Int('LSTM_Units', min_value=50, max_value=500, step=10), 
                                  dropout=hp.Float('dropout', 0, 0.5, step=0.1, default=0), 
                                  recurrent_dropout=hp.Float('recurrent_dropout', 0, 0.5, step=0.1, default=0)))
    model.add(tf.keras.layers.Dense(embedding_dim, activation=activation_choice))
    model.add(tf.keras.layers.Dense(4, activation='softmax'))
    model.compile(
        optimizer=hp.Choice('optimizer', values=['adam', 'rmsprop', 'SGD']),
        loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
        metrics=['sparse_categorical_accuracy'])
    return model


with strategy.scope():
    tuner = Hyperband(
      build_model,
      objective='val_accuracy',
      max_epochs=10,
      hyperband_iterations=2)
    tuner.search(train_padded, y_train,
             batch_size=128,
             epochs=10,
             callbacks=[EarlyStopping(patience=1)],
             validation_split=0.15,
             verbose=1)

best_models = tuner.get_best_models(1)
best_model.save('/content/drive/My Drive/best_model.h5')

Notebook link

如何使 keras 调谐器与 TPU 一起工作?

【问题讨论】:

【参考方案1】:

你需要将它传递给调谐器:

tuner = Hyperband(
      build_model,
      objective='val_accuracy',
      max_epochs=10,
      hyperband_iterations=2,
      distribution_strategy=strategy,)

(并删除 strategy.scope() 部分)

【讨论】:

这可行,但是...我遇到另一个错误“文件系统方案'[本地]'未实现。似乎无法写入检查点文件。这发生在 kt.BayesianOptimization。我认为调谐器应该写信给 GCS(我在 google colab 上)。还有什么建议吗? 更新:我认为有一个名为“目录”的参数,如果我将它设置为指向某个 gs:// 位置,那么我将不再看到错误。

以上是关于Google Colab 中的 Keras 调谐器和 TPU的主要内容,如果未能解决你的问题,请参考以下文章

在哪里可以找到安装在google Colab中的现有软件包

如何在 Google colab 中更改 Keras/tensorflow 版本?

使用大数据集在 Google Colab TPU 上训练 seq2seq 模型 - Keras

使用 Keras 在 Google colab 上运行 3D CNN 的问题

Google Colab keras Sequential 模型返回一个空的 history.history 对象“”

使用 TPU 运行时在 Google Colab 上训练 Keras 模型时出错