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

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

Уровень сложностиСредний
Время на прочтение20 мин
Количество просмотров4.7K
Всего голосов 29: ↑29 и ↓0+39
Комментарии3

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

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

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

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

Из-за особенностей векторизации 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

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