Kotlin logo

Kotlin

A concise multiplatform language developed by JetBrains

Data Science Ecosystem Kotlin

Глубокое обучение на Kotlin: вышла альфа-версия KotlinDL

Мы выпустили первую альфа-версию KotlinDL, фреймворка для глубокого обучения нейросетей, API которого мы старались сделать максимально похожим на Keras (фреймворк на Python поверх TensorFlow).

В KotlinDL вы найдете простые API как для описания, так и для тренировки нейронных сетей. За счет высокоуровневого API и аккуратно подобранных значений по умолчанию для множества параметров мы надеемся снизить порог входа в глубокое обучение на JVM. Вот так, например, выглядит тренировка и сохранение простой нейросети, написанной при помощи KotlinDL:

private val model = Sequential.of(
   Input(28,28,1),
   Flatten(),
   Dense(300),
   Dense(100),
   Dense(10)
)

fun main() {
   val (train, test) = Dataset.createTrainAndTestDatasets(
       trainFeaturesPath = "datasets/mnist/train-images-idx3-ubyte.gz",
       trainLabelsPath = "datasets/mnist/train-labels-idx1-ubyte.gz",
       testFeaturesPath = "datasets/mnist/t10k-images-idx3-ubyte.gz",
       testLabelsPath = "datasets/mnist/t10k-labels-idx1-ubyte.gz",
       numClasses = 10,
       ::extractImages,
       ::extractLabels
   )
   val (newTrain, validation) = train.split(splitRatio = 0.95)

   model.use{
       it.compile(optimizer = Adam(),
               loss = Losses.SOFT_MAX_CROSS_ENTROPY_WITH_LOGITS,
               metric = Metrics.ACCURACY)

       it.summary()

       it.fit(dataset = newTrain,
               epochs = 10,
               batchSize = 100,
               verbose = false)

       val accuracy = it.evaluate(dataset = validation,
               batchSize = 100).metrics[Metrics.ACCURACY]

       println("Accuracy: $accuracy")
       it.save(File("src/model/my_model"))
   }
}

Поддержка GPU

Тренировка моделей на центральном процессоре может занимать значительное время. Распространенной практикой является запуск вычислений на GPU. Для этого вам понадобится установленная CUDA от NVIDIA. Для запуска тренировки модели на GPU достаточно добавить всего одну зависимость.

Что вошло в API

В этой ранней версии вы найдете все необходимые методы для описания многослойных перцептронов и сверточных сетей. Для большинства гиперпараметров проставлены разумные значения по умолчанию, но в то же время у вас есть широкий выбор оптимизаторов, инициализаторов, функций активации и прочих настроек. Полученную в процессе тренировки модель можно сохранить и использовать в backend-приложении, написанном на Kotlin или Java.

Загрузка моделей, тренированных на Keras

KotlinDL не только умеет загружать модели, тренированные этим же фреймворком, но и предоставляет возможность загрузить и использовать модель, натренированную с помощью Keras на языке Python (поддерживаются версии Keras 2.*).

При загрузке моделей вы также можете использовать технику Transfer Learning, которая позволяет вам не тренировать огромные нейронные сети с нуля, а воспользоваться уже имеющейся моделью и просто подогнать ее под вашу задачу.

Текущие ограничения

В этой, самой ранней версии доступно ограниченное количество слоев: Input(), Flatten(), Dense(), Dropout(), Conv2D(), MaxPool2D() и AvgPool2D().
Это ограничение распространяется и на то, какие Keras-модели можно загружать. Это означает, что архитектуры VGG-16 и VGG-19 поддерживаются уже сейчас, а, например, ResNet50 пока что не поддерживается. В ближайшие месяцы мы планируем выпустить следующую минорную версию, в которой увеличится количество поддерживаемых архитектур.

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

А что под капотом?

В качестве движка KotlinDL использует TensorFlow Java API. Все вычисления выполняются в TensorFlow, в нативной памяти, причем во время тренировки все данные остаются в нативе.

Попробуйте и поделитесь впечатлениями!

В документации к проекту вы найдете статьи (на английском), которые, надеемся, помогут вам попробовать наш фреймворк:

Будем рады вашим замечаниям, пожеланиям, баг-репортам и другим отзывам в GitHub Issues. Особенно приветствуются пул-реквесты. Присоединяйтесь к каналу #deeplearning в Kotlin Slack.

Ваша команда Kotlin
The Drive to Develop

Оригинал статьи опубликован на habr.com:
https://habr.com/ru/company/JetBrains/news/t/532990/

Ecosystem

Deep Learning With Kotlin: Introducing KotlinDL-alpha

Hi folks!
Today we would like to share with you the first preview of KotlinDL (v.0.1.0), a high-level Deep Learning framework written in Kotlin and inspired by Keras. It offers simple APIs for building, training, and deploying deep learning models in a JVM environment. High-level APIs and sensible defaults for many parameters make it easy to get started with KotlinDL. You can create and train your first simple neural network with only a few lines of Kotlin code:

GPU support

Training deep learning models can be resource-heavy, and you may wish to accelerate the process by running it on a GPU. This is easily achievable with KotlinDL!
With just one additional dependency, you can run the above code without any modifications on an NVIDIA GPU device.

Rich API

KotlinDL comes with all the necessary APIs for building and training feedforward neural networks, including Convolutional Neural Networks. It provides reasonable defaults for most hyperparameters and offers a wide range of optimizers, weight initializers, activation functions, and all the other necessary levers for you to tweak your model.
With KotlinDL, you can save the resulting model, and import it for inference in your JVM backend application.

Keras models import

Out of the box, KotlinDL offers APIs for building, training, saving deep learning models, and loading them to run inference. When importing a model for inference, you can use a model trained with KotlinDL, or you can import a model trained in Python with Keras (versions 2.*).

For models trained with KotlinDL or Keras, KotlinDL supports transfer learning methods that allow you to make use of an existing pre-trained model and fine-tune it to your task.

Temporary limitations

In this first alpha release, only a limited number of layers are available. These are: Input(), Flatten(), Dense(), Dropout(), Conv2D(), MaxPool2D(), and AvgPool2D(). This limitation means that not all Keras models are currently supported. You can import and fine-tune a pre-trained VGG-16 or VGG-19 model, but not, for example, a ResNet50 model. We are working hard on bringing more layers for you in the upcoming releases.

Another temporary limitation concerns deployment. You can deploy a model in a server-side JVM environment, however, inference on Android devices is not yet supported, but it is coming in later releases.

What’s under the hood?

KotlinDL is built on top of the TensorFlow Java API which is being actively developed by the open source community.

Give it a try!

We’ve prepared some tutorials to help you get started with KotlinDL:

Feel free to share your feedback through GitHub issues, create your own pull requests, and join the #deeplearning community on Kotlin slack.

Discover more