• Линейная регрессия и градиентный спуск
    0
    Скомпилировав код

    Питон как бы не компилируемый язык =)
  • PlayStation 5 поступит в продажу в конце 2020 года
    0
    По слухам обратную совместимость с PS4 обещают сделать. Как будет на самом деле — посмотрим. По цене — врядли она будет в итоге стоить 1к, думаю на старте ~600 будет. Причем говорят, что, возможно, сразу выпустят две версии, типо про и не очень.
  • Российский геймдев, бессмысленный и беспощадный
    +1

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

  • Российский геймдев, бессмысленный и беспощадный
    0
    Это то все понятно, но повторюсь:
    Возьмем пример iOS (в андроиде ситуация аналогичная думаю). Когда анонсируют новую ось (например iOS 13) сразу выкатывают бета версию, все разработчики могут ее поставить и начинать тестить работу своих приложений, с момента появления первой бета версии до офф релиза проходит пол года и более, соответственно у разрабов есть пол года что бы все пофиксить если надо, а не два дня как вы говорите.
  • Российский геймдев, бессмысленный и беспощадный
    0
    Мне кажется, но мажорные версии операционок тех же не выходят неожиданно за два дня до релиза. Обычно о том, что грядет мажорное обновление известно чуть ли не за год до их релиза, ту же iOS бета версию обычно пол года можно тестить и подгонять свои программы под новое обновление. А если, неожиданно, выйдет минорное обновление «которое все ломает» то его уж можно и игнорировать в такой ситуации, все равно разницы на презентации ни кто не заметит.
    Так что все грядущие обновления ОС и прочих важных систем, которые могут повлиять на работу тысяч разных приложений, обычно анонсируют сильно заранее, что бы как раз избежать таких вот ситуаций.
  • Распознавание объектов в режиме реального времени на iOS с помощью YOLOv3
    0
    iOS 13 ничем в этом плане не отличается от iOS 11, главное не ниже, если пользоваться CoreML. А задача которую вы описали довольно простая, поэтому конечно можно и с помощью iPod её реализовать. Да и вообще с помощью обычного компа, который будет обрабатывать картинки с камеры и играть роль сервера если камер много.
  • Распознавание объектов в режиме реального времени на iOS с помощью YOLOv3
    0
    Вообще на данный момент NMS довольно хорошо показывает себя на практике и нет смысла его заменять, в том числе из-за возможных проблем с производительностью. В статье и не было идеи описать теорию сети и процесс её обучения. Насчет количество слоев: при такой архитектуре для достижения оптимального mAP их как раз нормальное количество. Например в той же tiny версии их меньше, что уже сказывается на точности.
  • Распознавание объектов в режиме реального времени на iOS с помощью YOLOv3
    +1
    Фары как деталь будут распознаваться на более ранних слоях, на слоях повыше все эти фрагменты будут «сводиться» в единый объект и распознаваться сразу целиком.
  • Comment from a drafted post.
  • Comment from a drafted post.
  • Comment from a drafted post.
  • Comment from a drafted post.
  • Comment from a drafted post.
  • Comment from a drafted post.
  • Comment from a drafted post.
  • Comment from a drafted post.
  • Comment from a drafted post.
  • Разработка интерфейса на нескольких экранах. Шаг к использованию ИИ
    +1
    чего то я не понял, а где собственно искусственный интеллект?

    интеллект подчиненных

    Подчиненных сотрудников или кого?

    В последнем случае команды можно отдавать мысленно.

    Ого, серьезно?
  • Пишем на Rust + CUDA C
    0
    и я это доказал выше.

    поздравляю) удачи вам, обсуждение можно считать закрытым.
  • Пишем на Rust + CUDA C
    0
    Где вы написали на rust программу для «вычисления скалярного произведения векторов»?

    Открываем файл main.rs (.rs — означает, что он написан на языке Rust). Коментируем unsafe блок кода. Получаем такой файл:
    main.rs
    extern crate libc;
    extern crate rand;
    
    use libc::{c_float, size_t};
    use rand::Rng;
    
    const VEC_SIZE: usize = 10;
    const MAX: f32 = 10.;
    const MIN: f32 = 0.;
    
    
    extern "C" {
      fn dot(v1: *mut c_float, v2: *mut c_float, N: size_t) -> c_float;
    }
    
    fn cpu_dot(v1: Vec<f32>, v2: Vec<f32>) -> f32 {
      let mut res: f32 = 0.;
      for i in 0..v1.len() {
        res += v1[i] * v2[i];
      }
      return res;
    }
    
    fn main() {
      let mut v1: Vec<f32> = Vec::new();
      let mut v2: Vec<f32> = Vec::new();
      let mut gpu_res: c_float;
      let mut cpu_res: f32 = 0.;
    
      let mut rng = rand::thread_rng();
      for _ in 0..VEC_SIZE {
        v1.push(rng.gen_range(MIN, MAX));
        v2.push(rng.gen_range(MIN, MAX));
      }
    
      println!("{:?}", v1);
      println!("{:?}", v2);
    
      println!("GPU computing started");
     // unsafe {
        //gpu_res = dot(v1.as_mut_ptr(), v2.as_mut_ptr(), VEC_SIZE);
    //  }
      println!("GPU computing finished");
      println!("GPU dot product result: {}", gpu_res);
      
      cpu_res = cpu_dot(v1, v2);
      println!("CPU dot product result: {}", cpu_res);
    }


    в нем ищем функцию cpu_dot, которая вычисляет скалярное произведение двух векторов на языке Rust (dot product на английском означает скалярное произведение), формулу скалярного произведения я тоже привел.
    Компилируем это и получаем простую программу для вычисления скалярного произведения на Rust.
    Я отвечу — нигде.

    Уверены? Берете свои слова обратно? Или сейчас вы скажете, что ее я не сам написал?
    Я слушаю про внимательность и тому подобное.

    Слушайте: читайте пожалуйста внимательно. Не надо придираться к словам.

    И может хватит уже? Мне надоело повторять одно и то же, вы меня все равно не хотите слушать.
  • Пишем на Rust + CUDA C
    0
    Все с вами ясно, пустил в коменты на свою голову) вам заняться нечем? Так пишите свои статьи на чисто «похайпить», я вам что мешаю? Мне на это абсолютно все равно, не судите по себе других. Повторюсь, статья о том, как собрать Rust + С + CUDA и прописать зависимости, что бы все работало, а не о том как писать на CUDA, это все написано в самом начале. Это даже не статья, это небольшой туториал, все это так же отмечено в самом начале под заголовком, прочтите внимательно еще раз.
  • Пишем на Rust + CUDA C
    0
    Когда будете писать свою статью назовете её как захотите. Я больше спорить с вами не буду, потому что у меня сложилось впечатление, что вы просто придираетесь к словам и к постановке предложений, ищите какой то тайный смысл в них.
  • Пишем на Rust + CUDA C
    +1
    Это ничего не изменит.


    Изменит)

    И даже если принять вашу логику — кернелом будет gpu_dot, но вы её не вызываете — вы вызываете обёртку над gpu_dot.


    Если принять мою логику то gpu_dot будет кернелом а уже эту функцию я могу вызвать из раст) Так что если принять мою логику то это изменит кое что.

    Ну это принципиальный момент. По-сути из статьи можно выкинуть cuda и ничего не изменится, т.к. статья чисто про вызов сишной функции из раста.


    Этот туториал в том числе можно использовать как инструкцию для вызова обычного си кода из раст, в комментариях это уже упоминалось, посмотрите выше. В статье рассказывается как писать и собирать Rust + С + CUDA C.
  • Пишем на Rust + CUDA C
    +1
    Не могу ничего сказать по поводу AMDGPU, посмотрите в сторону OpenCL если вам нужно более платформо-независимое решение.
  • Пишем на Rust + CUDA C
    0
    Нельзя. Это вызов обёртки dot, которая вызывает обёртку, которая вызывает кернел. dot никоим образом не вызвает кернел.


    Эту обертку поверх обертки можно убрать, не принципиально, тут уже на ваш вкус и зависит от архитектурного решения вашего приложения. В статье приведен лишь пример не более.

    Поэтому как это не называй — это обычный вызов сишной функции из раста. Этот вызов никак не связан с cuda, вообще никак.


    Да, это обычный вызов сишной функции в которой мы можем писать CUDA код (а можем и не писать, можем ее вообще не вызывать), спорить не буду, можете называть этот вызов функции как вам удобно)
  • Пишем на Rust + CUDA C
    +1
    Конечно, формально это вызов си-функции которая вызывает кернел, из раста нарямую нет смысла вызывать функцию кернела, просто потому, что помимо самого кернела, если вы посмотрите внимательно в файл dot_gpu.cu, есть предшествующий код в виде инициализации памяти на GPU, копирование переменных в GPU и тд, это все уже относится к СUDA.

    Так что вызов си-функции обвязки из раста в которой находится CUDA-зависимый код в том числе вызов самого кернела и которая возвращает результат работы кернела, можно грубо назвать «вызовом кернела из раста».
  • Пишем на Rust + CUDA C
    +1
    Так и надо сделать если писать полноценное приложение. Код из данного туториала конечно нельзя использовать в реальных задачах, да и зачем, ведь он просто считает произведение векторов, ничего полезного по сути он не делает. Это всего лишь небольшой пример, инструкция, как соединить Rust и CUDA. Далее на основе этого уже можно брать и писать «правильный» и «безопасный» unsafe код, оборачивать еще дополнительно во все то, что нужно.
  • Пишем на Rust + CUDA C
    +1
    Здесь:
    unsafe {
      gpu_res = dot(v1.as_mut_ptr(), v2.as_mut_ptr(), VEC_SIZE);
    }
    
  • Пишем на Rust + CUDA C
    0
    Вообщем да, вы правы, видел подобное, например тут и тут. Но честно говоря, я так не делал, мне проще и понятней написать кернел код на чистом CUDA C. Да и даже в статье, что я выше скинул говорится, что на данный момент поддержка nvptx и CUDA в частности делается с большими костылями и не совсем стабильная. Если есть еще какая то новая инфа по этому поводу буду рад ее услышать.
  • Пишем на Rust + CUDA C
    +1
    .cpp не ради iostream и cout, .cpp вообще здесь не ради чего то, в нем нет глубокого смысла и необходимости, можно вообще все запихнуть в один файл .c и написать в нем и функцию обертку которая будет вызываться из Rust и CUDA кернел. Я это сделал просто так, дабы показать возможность линковки нескольких исходных файлов (.cpp в частности) в добавок ко всему.
  • Пишем на Rust + CUDA C
    0
    1. Нет, не получится. Код для вычисления на GPU все так же пишется на CUDA C. Да и честно говоря не вижу смысла переносить CUDA на Rust если достаточно в данном случае написать кернел для необходимых вычислений, вызвать этот кернел из Rust и результат вернуть обратно.

    2. Не совсем понял при чем тут stub/mock и макось. Если это то о чем я подумал, то оно вроде вообще не имеет привязки к операционной системе. Поэтому все что вы хотите сделать, все возможно. На Rust/С/С++/CUDA можно писать и запускать на разных платформах, главное собрать правильно.
  • Пишем на Rust + CUDA C
    +1
    По сути да. И не только сишных, и с++ — шных тоже. В случае с CUDA самое главное это прописать пути к исполняемым файлам, что бы Rust корректно подгрузил их как динамическую либу.
  • Пишем на Rust + CUDA C
    +4
    Одного поста не хватит, что бы описать программирование с использованием CUDA. В данной статье я лишь показал как использовать CUDA и Rust вместе. И как заметили выше сама по себе CUDA используется как обычно. А так, возможно, в дальнейшем еще опишу некоторые интересные моменты именно программирования CUDA в связке с Rust.
  • Как я свою онлайн игру создавал. Часть 1: Работа с сетью
    +6
    Я думаю, если бы вы все расписали как описали в коментарии, было бы намного лучше. С пояснениями и объяснениями, что зачем и почему. Тогда и читалось бы все легче и было бы еще интересней. Все таки чужой код читать с нуля (пусть и с коментами) не всем нравится, надо ведь потратить время, что бы в нем разобраться. Ну а если все разжевать словами и уже потом приводить примеры кода, будет понятней и человек возьмет только то, что ему надо из статьи, и не будет тратить время на разбор чужого кода.
  • Как я свою онлайн игру создавал. Часть 1: Работа с сетью
    +4
    Мне кажется, вы не совсем правильно понимаете что такое статья. Статья — не исходник, в ней должно быть описание задачи словами и желательно детальное.

    Или где вы такие «статьи» видели в которых один код, на гитхабе?
  • Mixture Density Networks
    0
    Дело в том, что плотность y не зависит от классификатора, это задано самой «природой» данных. А классификатор учится эту «природу» моделировать.
  • Mixture Density Networks
    0
    Да, наверное следовало больше раскрыть теорию MDN. Правда там уже особо нечего раскрывать, оно все выводится из формулы 5, по сути это loss функция для обучения. pi(x) — не подбирается, оно имеет вид распределения поэтому и получается из softmax функции.

    pi = F.softmax(self.pi(x), dim=1)

    pi(x) — обучается, собственно как и mu(x) как и sigma_sq(x), опять же на основе формулы 5. Реализация ее приведена в коде в статье.

    А вот это:

    self.pi = nn.Linear(layer_size, coefs)
    self.mu = nn.Linear(layer_size, out_dim*coefs) # mean
    self.sigma_sq = nn.Linear(layer_size, coefs) # variance

    По сути выходные слои для этих трех обучаемых значений.

    Ну гридсерч тут не поможет точно. pi(x) — это не параметр который находится гридсерчем, это один из слоев нейронной сети. Да и «просто застекать» не выйдет, ведь стекинг, бустинг и прочее все таки предназначены для других задач. А тут немного другая именно архитектура сетки (ее выходных слоев).
  • Mixture Density Networks
    0
    они и есть слишком хорошие, они же сгенерированы из периодической функции синуса + плюс некий разброс или шум. И в данном случае проблема переобучения не важна. Тут речь идет о том как моделировать mixture distributions.
  • Mixture Density Networks
    0
    Mixture Density это один из типов выходного слоя нейронных сетей, если вкратце, с помощью него можно работать с данными в которых смешанно несколько распределений сразу, это его основная особенность. Собственно и задачи на практике могут бать разными, такие, когда природа данных подразумевает, что данные смешанные и не однородные, например речь. пример 1 или пример 2.
  • Multi-output в машинном обучении
    0
    Это я понял по названию. Но! Первое непонятно зачем в начале описан Imputer, он предназначен для предобработки данных все таки, а не для предсказаний чего либо. Если же ставится задача восстановления части упущенных данных, путем анализа существующих, необходимо уже разделение датасетов на разные части, и вообще другая задача, Imputer тут тоже не при чем.

    Во второй части «описаны» мульти-регрессоры, но как то смутно все. Что, зачем, каким образом предсказывается не очень понятно, это не описано словами, просто представлен кусок кода. Если была цель описать, что в sklearn существует такая возможность, то опять же как то все не явно и сухо, в документации по моему больше инфы.

    В итоге, что я лично увидел, взяли какой-то датасет, что то там импортнули с sklearn-а, получили какую-то точность предсказания и все. Поэтому и написал, что плохо понял о чем статья.