Я работаю с моделью предварительно подготовленного кераса и хочу запустить ее на TPU в Google Colab Laboratory, но получаю следующую ошибку:
ValueError: Слой имеет переменную форму в неразмер партии. Модели TPU должны иметь постоянные формы для всех операций.
Возможно, вам придется указать 'input_length' для слоев RNN / TimeDistributed.
Layer: Форма ввода: [(None, 128, 768),(Нет, 1)] Форма вывода: (Нет, Нет, 768)
Я работаю с keras-xlnet . Насколько я понимаю, TPU должен иметь фиксированный размер пакета при компиляции модели, как объяснено здесь и здесь .
Модель загружается с контрольной точки:
from keras_xlnet import Tokenizer, load_trained_model_from_checkpoint,
ATTENTION_TYPE_BI
checkpoint_path = 'xlnet_cased_L-12_H-768_A-12'
tokenizer = Tokenizer(os.path.join(checkpoint_path, 'spiece.model'))
model = load_trained_model_from_checkpoint(
config_path=os.path.join(checkpoint_path, 'xlnet_config.json'),
checkpoint_path=os.path.join(checkpoint_path, 'xlnet_model.ckpt'),
batch_size=BATCH_SIZE,
memory_len=512,
target_len=SEQ_LEN,
in_train_phase=False,
attention_type=ATTENTION_TYPE_BI,
)
model.summary()
модель затем компилируется (после нескольких изменений):
from keras_bert import AdamWarmup, calc_train_steps
decay_steps, warmup_steps = calc_train_steps(
y_train.shape[0],
batch_size=BATCH_SIZE,
epochs=EPOCHS,
)
model.compile(
AdamWarmup(decay_steps=decay_steps, warmup_steps=warmup_steps, lr=LR),
loss='binary_crossentropy',
)
Затем модель загружается в TPU, где происходит ошибка:
tpu_address = 'grpc://' + os.environ['COLAB_TPU_ADDR']
strategy = tf.contrib.tpu.TPUDistributionStrategy(
tf.contrib.cluster_resolver.TPUClusterResolver(tpu=tpu_address)
)
with tf.keras.utils.custom_object_scope(get_custom_objects()):
tpu_model = tf.contrib.tpu.keras_to_tpu_model(model, strategy=strategy)
IsЕсть ли способ исправить размер пакета во время компиляции, чтобы избавиться от ошибки выше? Или проблема в чем-то совершенно ином?