Перенос обучения или индуктивный перенос — это исследовательская проблема в области машинного обучения, которая фокусируется на сохранении знаний, полученных при решении одной проблемы, и применении их к другой, но связанной проблеме. Например, знания, полученные при обучении распознаванию автомобилей, можно применить при попытке распознать грузовики.

Это особенно полезно, когда у нас есть небольшой набор данных. В этой статье мы обсудим, как переобучить только последние слои сети с помощью tensorflow.

Трансферное обучение очень полезно при работе со свёрточными нейронными сетями, где когда-то полностью обученные свёрточные слои становятся очень хорошими в выявлении паттернов. Таким образом, переобучив классификаторы, т.е. только последние слои, мы сможем сэкономить много времени при обучении.

Следующий вопрос, на который нужно ответить, — из каких сетей мне нужно переобучить модели. Сети, подготовленные для участия в соревнованиях imagenet, могли бы стать хорошим началом. Вы можете найти дополнительную информацию о сетях Imagenet по следующей замечательной ссылке: https://adeshpande3.github.io/The-9-Deep-Learning-Papers-You-Need-To-Know-About.html.

После того, как вы решили, какую сеть вы хотите использовать для передачи обучения, возникает вопрос, как это сделать в Tensorflow.

Метод, который я нашел полезным, заключается в загрузке весов и сети из репозиториев github и передаче ваших текущих изображений / данных через предварительно обученные сети и сохранении выходных данных из нужных слоев. Затем нам нужно построить новый слой для классификации и передать выходные данные, сохраненные из предварительно обученной модели, и переобучить только конечные нанослои, как показано на диаграмме, с использованием подходящего оптимизатора.

Вы можете найти ссылку на один из мини-проектов, которые я сделал для своей Udacity Nano Degree. здесь: https://github.com/ck2886/TransferLearning_Tensoflow/blob/master/Transfer_Learning.ipynb