суббота, 25 февраля 2017 г.

Deep learning в R. Пакет tinydnn

Недавно появилась минималистичная (без внешних зависимостей - нужен только компилятор C++) библиотека для глубокого обучения под названием tiny-dnn (хабр). А две недели назад для нее сделали и R-пакет tinydnn. Ставится пакет очень просто: devtools::install_github("yixuan/tinydnn"); перед этим нужно установить RTools, причем путь к папке должен быть без пробелов. 
По своим возможностям сильно уступает mxnet, но для изучения темы библиотека крайне полезная и годная. Сделал пример сверточной сетки: взял за основу этот пример, прочитал краткую справку ?layers - и с первой попытки все заработало. Изумительная простота, впервые такое вижу. Скорость работы с mxnet или чем-нибудь еще специально не сравнивал, но на первый взгляд она вполне типичная для расчетов без использования GPU.
LeNet для этой библиотеки выглядит так:
net <- net_seq()
net %<%
    fc(ncol(train_x), 
       ncol(train_x), 
       act = "identity") %<%
    conv(in_width        = 28,  
         in_height       = 28, 
         window_width    = 5, 
         window_height   = 5, 
         in_channels     = 1,  # set to 1 for grayscale images
         out_channels    = 20, # number of filters
         act = "tan_h") %<%
    max_pool(in_width    = 24, # smaller images after convolution
             in_height   = 24,
             in_channels = 20, # number of filters in conv
             pool_size_x = 2,
             pool_size_y = 2,
             stride_x    = 2, 
             stride_y    = 2,
             activation  = "identity") %<%
    conv(in_width        = 12, 
         in_height       = 12, 
         window_width    = 5, 
         window_height   = 5, 
         in_channels     = 20,
         out_channels    = 50,
         act = "tan_h") %<%
    max_pool(in_width    = 8, 
             in_height   = 8,
             in_channels = 50,
             pool_size_x = 2,
             pool_size_y = 2,
             stride_x    = 2, 
             stride_y    = 2,
             activation   = "identity") %<%
    fc(800, 500, act = "tan_h") %<%
    fc(500, nlevels(train_y), act = "softmax")

Комментариев нет:

Отправить комментарий