Большие изменения пришли в Lathe в последнем обновлении, но какие они могут быть?



Lathe — это инклюзивный модуль обучения с прогнозированием для Julia, который содержит множество интересных функций, написанных на стопроцентно чистом коде Julia. Lathe становится все более и более универсальным и, вероятно, сможет конкурировать с аналогичными модулями для решения повседневных задач с помощью еще нескольких обновлений. Однако, имея это в виду, я думаю, что скачок от Lathe 0.0.9 к Lathe 0.1.0, вероятно, является одним из самых значительных, которые пережил Lathe. С таким большим обновлением вы должны задаться вопросом…

Что нового в Lathe 0.1.0?

Суперструктуры

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

что действительно полезно для машинного обучения.

Представление

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

Гибкая парадигма

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

Инициализация

Как правило, все, что имеет большое сходство с функцией инициализации, было бы невозможно на таком языке. Однако именно этим и пользуются новые суперструктуры. Используя суперструктуры, изменяемые данные могут быть изменены и сохранены внутри структуры при создании типа. Использование суперструктур также позволяет функциям быть «потомками» типа, что делает структуру более похожей на класс из объектно-ориентированного языка программирования.

«Новый путь»

Единственным существенным недостатком, из-за которого это обновление требует обдумывания и тщательного рассмотрения, является то, что это будет первое обновление, которое сломает старый код Lathe. Я считаю это большим минусом, но, на мой взгляд, преимущества значительно перевешивают этот недостаток. «Новый способ» подгонки и прогнозирования в Lathe кажется намного более последовательным и намного более соответствующим тому, что есть в большинстве других сред машинного обучения. Старый способ ведения дел подгонял бы модель, создавая тип:

using Lathe.models: FourSquare
model = FourSquare(trainX, trainy)

а затем подключите этот тип к методу прогнозирования, который затем использует диспетчеризацию Джулии для маршрутизации типа в соответствующую функцию:

using Lathe.models: predict
yhat = predict(model, testX)

Новый способ ведения дел похож, но, безусловно, существенно отличается. Как обычно, мы начнем с создания нашего типа:

using Lathe.models: LinearRegression
model = LinearRegression(trainX, trainy)

Однако следует отметить, что при использовании этого метода «Линейная регрессия» не является типом. Нет, я не опечатался, и я повторю это снова, и вы можете процитировать меня.

Линейная регрессия — это не тип.

Линейная регрессия в этом примере на самом деле является функцией, которая возвращает тип, и, скорее всего, не так, как вы ожидаете. Если вы хотите узнать больше о том, как все это работает, у меня есть статья об этом!



Что значительно меняет обработку Lathe в этом отношении, так это то, что Lathe теперь может обрабатывать вещи с несколькими интервалами по прихоти пользователя. Функция прогнозирования теперь используется как дочерний элемент структуры, например:

yhat = model.predict(testX)

Нейронные сети

Кошка из мешка, и теперь вы можете начать строить нейронные сети в Lathe! Предстоит еще многое сделать и о многом позаботиться, но на данный момент с Lathe 0.1.0 вы можете импортировать функцию суперструктуры «Network» из Lathe.models и использовать нейронные сети Lathe так же, как и любые другие. Модель станка.

На данный момент в центре внимания находятся базовые сверточные нейронные сети, однако нейронные цепочки и другие предварительно построенные сети находятся в стадии разработки, так что следите за этим!

токарный станок.данные

Lathe.data — это новый подмодуль Lathe, созданный для загрузки, сериализации и пакетной обработки данных. Мало того, что это будет чрезвычайно важно для нейронных сетей, но для Джулии не так много подобных инструментов, которые легко использовать именно для этой цели. Найти загрузчик данных для данных изображения, который будет корректно работать в Джулии сегодня, все равно, что найти иголку в стоге сена.

Обновление версии

Последнее и, вероятно, наименее важное обновление Lathe для управления версиями. Я думаю, что управление версиями и поток кода Lathe будут продолжать развиваться и улучшаться с течением времени. Я думаю, что в то время как код улучшается, должны улучшаться и идеи для продвижения кода, а вместе с этим:

ветви

Хотя в этом, конечно, нет ничего нового, раньше Lathe очень спокойно относился к веткам. Это связано с тем, что, по моему личному мнению, ветки исправлений уродливы, когда вы полагаетесь на Github для передачи и зеркалирования версий. Поэтому, отбросив свои субъективные мысли, я подумал, что было бы неплохо попытаться найти золотую середину. Я решил иметь ветки для версий, а не ветки для исправлений. Это будет иметь множество преимуществ, одним из которых является код, который больше не будет работать из-за обновлений, таких как надстройка. Используя этот метод, версии Lathe будут по-прежнему доступны так же, как и ветка Unstable:

using Pkg
Pkg.add("Lathe"#Unstable)
Pkg.add("Lathe"#0.0.9)

Вывод

База Лате, безусловно, сильна и намерена стать сильнее. Я думаю, что главное изменение в надструктурах для повышения производительности, а также функциональности инициализации, безусловно, было сделано. Я очень рад, что решил написать этот модуль на таком гибком и мощном языке, где вполне возможно что-то диковинное. Нейронные сети и загрузка данных определенно унесут Лате еще дальше в стратосферу. Я в восторге от всех ожидаемых новых функций, и точно так же я рад иметь хранилище всех версий. В целом, Lathe, безусловно, находится на пьедестале из-за простоты написания кода на Julia и того, как быстро вы можете что-то сделать внутри языка.