Как стать автором
Обновить

Учимся летать: симуляция эволюции на Rust. 2/5

Уровень сложностиСредний
Время на прочтение20 мин
Количество просмотров5.8K
Всего голосов 30: ↑30 и ↓0+40
Комментарии4

Комментарии 4

Годнота. Жду генетического алгоритма

Очень интересно, с точки изучения раста. Плюсую обеими руками.

А еще в этой статье показано, как ни в коем случае не нужно делать нейронки :)
Прохождение слоя делается двумя матричными операциям - умножение и сложение. Для этого нужно реализовать всего две функции - собственно, умножение матриц и сложение. Но это скучнее, конечно :))

Из-за особенностей векторизации f32-вычислений (отсутствие ассоциативности) .map(..).sum() можно безопасно заменить на .fold:

let mut output = zip(inputs, &self.weights)
            .into_iter()
            .map(|(input, weight)| input * weight)
            .sum();
let mut output = zip(inputs, &self.weights)
            .into_iter()
            .fold(0.0, |acc, (input, weight)| acc + input * weight);

Вот тут можно увидеть что варианты для i32 используют SIMD, а для f32 - уже нет
https://rust.godbolt.org/z/9T464GToG

Rust предоставляет два макроса, позволяющие пометить функцию как находящуюся в процессе разработки: todo!() и устаревший unimplemented!().

Он не устаревший, просто у этих двух макросов разная семантика. Макрос `todo!()` - это временная заглушка, пока код находится в процессе написания, чтобы можно было писать код поэтапно и компилировать без ошибок. Вызов `todo!()` по идее довольно быстро заменяется на итоговый вариант, и обычно не коммитится в репозиторий. А вот `unimplemented!()` - напротив, подсказка, что данный кусок не имплеиментирован, и в обозримом будущем скорее всего не будет. Например, вы реализуете какой-то трейт, и часть функций вам не нужны в данной реализации, или они никогда не вызываются, и поэтому реализовывать их нет особого смысла. Ну а сами макросы делают примерно одно и то же - кидают панику, но сообщение об ошибке будет немного разным - в одном случае "not implemented", а в другом - "not yet implemented", что как бы намекает что ситуация временная.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий