#python #tensorflow #keras
#python #тензорный поток #keras
Вопрос:
У меня есть NN, и обучение с помощью Model.fit() занимает довольно много времени. Я всегда получаю следующее:
WARNING:tensorflow:7 out of the last 12 calls to <function Model.make_train_function.<locals>.train_function at 0x7f128aee0ae8> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.
Есть ли способ сообщить Model.fit() использовать experimental_relax_shapes=True ?
Другими словами, я хотел бы написать
@tf.function(experimental_relax_shapes=True)
перед определением Model.fit() . Как я могу это сделать?
Если я сделаю что-то вроде этого:
@tf.function(experimental_relax_shapes=True)
def fit(x):
return model.fit(x)
Я получаю
RuntimeError: Detected a call to `Model.fit` inside a `tf.function`. `Model.fit is a high-level endpoint that manages its own `tf.function`. Please move the call to `Model.fit` outside of all enclosing `tf.function`s. Note that you can call a `Model` directly on `Tensor`s inside a `tf.function` like: `model(x)`.
Итак, я действительно хочу изменить tf.функция, управляемая Model.подходит для использования experimental_relax_shapes=True .
Комментарии:
1. Помогла ли эта статья ?
2. Делает ли это github.com/tensorflow/tensorflow/issues /… помогает?
3. Хотя это и поучительно, это не помогло. Моя модель быстро предсказывает, потому что я использую experimental_relax_shapes=True перед каждой самоопределяющейся функцией вызова. Тем не менее, model.fit(), похоже, не использует это, поэтому обучение занимает довольно много времени. Я также уже использую размер пакета 1.
4. РЕДАКТИРОВАТЬ: добавлено что-то, что не сработало, чтобы уточнить, что я хочу сделать.
Ответ №1:
Я решил это, написав свой собственный цикл обучения, подобный первому примеру здесь: https://keras.io/guides/writing_a_training_loop_from_scratch /
Любопытно, что когда я поставил @tf.function(experimental_relax_shapes=True) перед определением функции, которая запускает цикл, этапы обучения заняли от 30 до 40 секунд. Когда я попробовал это без, они заняли меньше секунды.
Комментарии:
1. Это любопытно. После написания собственного цикла обучения вы решили
experimental_relax_shapes=True
остановиться?