Как использовать модель керас внутри другой модели в ТПУ

Я пытаюсь преобразовать модель keras в модель ТПУ в Google Colab, но эта модель имеет другую модель внутри.

Посмотрите на код: https://colab.research.google.com/drive/1EmIrheKnrNYNNHPp0J7EBjw2WjsPXFVJ

Это измененная версия одного из примеров в документации по Google Tpu: https://colab.research.google.com/github/tensorflow/tpu/blob/master/tools/colab/fashion_mnist.ipynb

Если sub_model конвертируется и используется напрямую, это работает, но если подмодель находится внутри другой модели, она не работает. Мне нужна сеть подмоделей типа, потому что я пытаюсь обучить сеть GAN, в которой есть 2 сети (gan = generator + дискриминатор), поэтому, если этот тест работает, вероятно, он будет работать и с gan.

Я пробовал несколько вещей:

  • Преобразование в модель без преобразования подмодели, в том случае, когда начинается обучение, выдается сообщение об ошибке, связанное со входами подмодели.
  • Преобразуйте как модель, так и суб-модель в tpu, в этом случае при преобразовании "родительской" модели выдается ошибка, исключение говорит только в конце "слоев".
  • Конвертируйте только субмодель в tpu, в этом случае ошибка не выдается, но tpu не ускоряет обучение, и оно очень медленное, как если бы вообще не было конвертации в tpu.
  • Использование фиксированного размера партии или нет, оба имеют одинаковый результат, модель не работает.

Есть идеи? Большое спасибо.

1 ответ

Разделите на части, сначала используйте только подмодель в tpu. Тогда поставьте что-нибудь простое вместо подмодели и используйте модель в ТПУ. Если это не сработает, создайте что-то очень простое, включающее аналогичную структуру с моделями, в которых вы уверены, что они работают, а затем шаг за шагом добавляйте элементы для конвергенции вашей сложной модели, которую вы хотите использовать в TPU.

Я борюсь с такими вещами. Что я сделал в самом начале, используя MNIST, так это обучил модель и получил коэффициенты снаружи, переписал relu плотное отсев и матрицы NN сам и запустил модель, используя numpy, затем cupy, а затем pyopencl, а затем я заменил функции своим собственным сырым cuda C и opencl функционирует таким образом, что, углубляясь и упрощая, я могу найти, что не так, когда что-то не работает. Наконец-то я написал свой генетический избирательный алгоритм обучения и многому научился.

И самое главное, это дало мне возможность попробовать некоторые сумасшедшие идеи для обучения и моделирования, манипулирования и понимания НС-коэффициентов.

На мой взгляд, проблема в том, что TF — Keras и т. д. слишком высокого уровня. Оптимизаторы - Солверы, тут слишком много неизвестного. Даже нейронные сети не под контролем. GAN проблематичен, во время обучения он не сходится каждый раз, когда обучение занимает несколько дней. Даже если вы тренируетесь. Вы понятия не имеете, как это сходится. Большинство приемов, которые защищают вас от исчезающего градиента, не имеют математического обоснования, тем не менее они работают очень изумительно. (?!?)

** Шаг за шагом усложняйте и усложняйте. Следуйте практике, на которой вы поймете столько, сколько сможете ** Это потребует некоторого времени и энергии, но, на мой взгляд, принесет вам огромную пользу.

Другие вопросы по тегам