LINUX.ORG.RU

Leaf 0.2 — высокопроизводительная платформа машинного обучения

 , , ,


7

6

Анонсирован выход новой версии Leaf 0.2. Leaf написан на языке программирования Rust и является модульной, производительной и переносимой платформой машинного обучения.

По тестам на производительность, Leaf 0.2 опережает другие платформы, являясь, на данный момент, самой быстрой платформой машинного обучения. По словам разработчиков, они смогли добиться этого за счёт выбора языка программирования Rust и библиотеки для высокопроизводительных вычислений Collenchyma (также написанной на Rust). Также, за счёт использования библиотеки Collenchyma можно обучать и запускать модели на CPU, GPU, FPGA, и т.д. с использованием OpenCL или CUDA или другого вычислительного языка, на разных машинах и операционных системах, без лишней адаптации кода. Это делает очень удобным возможность разворачивания моделей на серверах, рабочих станциях, смартфонах, а также современных встраиваемых устройствах.

Чтобы ознакомиться, разработчики предлагают установить Leaf 0.2 и поиграться с примерами, включая популярные Глубокие Нейронные Сети как Alexnet, Overfeat, VGG и другие.

>>> Подробности

★★★★★

Проверено: subwoofer ()
Последнее исправление: dotcoder (всего исправлений: 6)

чорт.

fn frob0(x: i32, s: &str, t: &str) -> &str { // error
  if( x == 0 ) {s} else {t}
}

fn frob1<'a>(x: i32, s: &str, t: &str) -> &str { // error
  if( x == 0 ) {s} else {t}
}

fn frob2<'a>(x: i32, s: &'a str, t: &'a str) -> &'a str {
  if( x == 0 ) {s} else {t}
}

fn main( ) {
    println!( "{}", frob0(1, "0", "1") );
    println!( "{}", frob1(1, "0", "1") );
    println!( "{}", frob2(1, "0", "1") );
}

этож какой-то адов ад. И только для того, чтоб выбрать 1 указатель из 2.

anonymous
()
Ответ на: комментарий от anonymous

Кстати, я лично не могу понять, что делает 'a 'b 'huebe?

мимо

RIGHT GONORARY

anonymous
()
Ответ на: комментарий от anonymous

ты надеюсь понимаешь, что смысл в функции и результате ИЗ функции, а не просто сравнить x и вернуть что-то? это просто простой пример, который вылился в синтаксический ад

anonymous
()
Ответ на: комментарий от anonymous

Смысл в том что в расте принято почти полностью прописывать типы входящих аргументов и возвращаемого значения из функции. Если у тебя там x*2 в функции и используется в одном месте, просто лямбду используй и все, компилятор все равно оба варианта к одному результату приведет.

anonymous
()
Ответ на: комментарий от anonymous

А как ты собрался без указания лайфтаймов выбирать один указатель из двух? Ты сто хотел чтобы компилятор по умолчанию считал что у всех параметров должен быть одинаковый лайфтайм? Но что если это не должно быть так, что бывает сплошь и рядом. Что ты можешь предложить с более «вменяемым» на твой взгляд синтаксисом? Думаю, что ничего.

Esteban_Garcia
()
Ответ на: комментарий от Esteban_Garcia

Ты сто хотел чтобы компилятор по умолчанию считал что у всех параметров должен быть одинаковый лайфтайм?

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

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

anonymous
()
Ответ на: комментарий от anonymous

в функцию 2/3/50 константных ссылок и возвращаешь одну

Ну передаю я 3 константы, но возвращаю только 2 из них. Или ты хочешь чтобы компилятор записался на курсы экстрасенсов? То есть, чтобы он смотрел в функцию и анализировал, что возвращается? А если я допущу ошибку, и случайно верну не ту строку? Компилятор должен на менять прототип функции?

fn foo<'a>(cond: &str, ok: &'a str, other: &'a str) -> &'a str {
    match cond {
        "foo" | "bar" => ok,
        _ => other,
    }
}
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.