А я думал, что импортозамещение, это производство товара в стране, такое что позволяет избавиться от импорта, что кстати в дальнейшем приводит к рецессии экономики. Если вдруг в Россию вдруг перестанут завозить ПЛИС, сможет ли Николай Ковач задизайнить плату? И еще, вы говорите про импортозамещение, а почему тогда не используются Воронежские ПЛИСины?
Я дал советы человеку, чтобы он лучше знал плюсы, а не чтобы читателю было легче. Тем более всегда можно сделать пояснения в непонятных моментах. Ну и понять что transform - это аналог map или zip в любом другом языке не сложно.
...не надо особо заморачиваться с хедерами и ссылками на вектора...
За нейронку - 5, за С++ - 2. 1. Вы передаете вектора в функцию не по ссылке. 2. void аргументах это уже не нужно даже в современном С, не говоря уже о С++. 3. for (size_t layer = 0; layer <= layer_count; layer++) - здесь UB. 4. Часть циклов можно переписать на алгоритмы типа: std::transform(expected.begin(), expected.end(), layers[layer_count + 1].begin(), delta[layer_count].begin(), [](double t, double y) {return y * (1 - y) * (t - y);});
Я к тому, что С++ - в данном случае неудачный вариант для изучения нейросети. Потому что здесь нельзя так расслаблено писать. Если бы на питоне дали пример, вопросов бы не было.
P.S. Открыл исходники. Вы в целом недавно начали изучать плюсы. using namespace std да еще и в хедере - это расстрельная статья.
Вы бросаете исключения, а где вы их перехватываете? Или у вас план вызывать std::terminate при каждом исключении? Тогда вопросов нет. И там где надо не бросаете, например при делении.
У вас магические числа при том что есть дефайны. Кстати о них. Дефайны - это С, но ни как не С++. Для констант лучше constexpr и enum class.
Разбирать на самом деле еще очень много, я описал только что бросилось в глаза. В общем если эту лабу приняли, у меня серьезные вопросы к компетенциям препода.
C++, напротив, позволяет вручную управлять памятью с помощью соответствующих ключевых слов и функций: new, delete, malloc и free.
Уже давно ручное управление памятью является bad practice. RAII-концепция захватывает все больше вещей в С++, начиная с просто умных указателей, заканчивая автоматическим управлением потоками - std::jthread. Проблем конечно хватает даже с умными указателями. Но так манипулировать тоже не стоит.
Скажите, где в России условный айтишник зарабатывает 4-5к долларов на руки в месяц? Реллокацию не упоминайте, т.к. это резко выходит за рамки "спокойно".
ФПМИ. Учеба учитывает что уже большая часть студентов работает, поэтому в расписании есть 3 дня без пар. Помимо обязательных предметов, можно взять сколько угодно других, даже с других кафедр, только надо договариваться с кафедрой. Я взял пару курсов из бакалавриата. В целом за год набрал больше знаний и практики, чем за года 3 на работе.
Ну и следует понимать, чтобы все успевать, в целом забываешь что такое отдельный выходной. Ты делаешь что-то всегда и в любое время.
В 30 лет поступил на платную очную магистратуру МФТИ. Учебу оплатил бизнес, которому я делаю дипломный проект, так-же они платят зп, небольшую, но я и работаю там удаленно на четверть ставки.
Напрямую в регистр можно записать случайно бит где вместо Open Drain поставится Push-Pull и сгорит вход. А теперь смотрим за руками: пишем компайл-тайм функцию записи в регистр, проверяем внутри допустимость записи для того или иного регистра. Вуаля - вход не спален. Ну и где безопаснее?
Функции: обеспечивает надежную передачу данных, контроль ошибок, сегментацию и повторную сборку данных. Гарантирует, что данные передаются без потерь и дубликатов.
Примеры: TCP (Transmission Control Protocol), UDP (User Datagram Protocol).
UDP не относится ни к чему, что приведено в функциях.
Да тут даже проблема не в малом приросте производительности. Эти методы в целом нереализуемы на практике - там константа требует памяти больше, чем есть на всей планете.
В случае с геттерами, сеттерами. Их не нужно городить в каждом классе. Они нужны только для того, что если у вас в классе должен сохраняться инвариант, и чтобы пользователь не мог его нарушить. А теперь такой вопрос, какой инвариант может нарушиться если мы доступ к position сделаем public? Что можно сломать? И зачем тогда нужны методы get/set?
А я думал, что импортозамещение, это производство товара в стране, такое что позволяет избавиться от импорта, что кстати в дальнейшем приводит к рецессии экономики. Если вдруг в Россию вдруг перестанут завозить ПЛИС, сможет ли Николай Ковач задизайнить плату? И еще, вы говорите про импортозамещение, а почему тогда не используются Воронежские ПЛИСины?
А можно все таки узнать, в чем собственно состоит замещение? Комплектующие - иностранные, ПО с помощью которого разводили плату скорее всего тоже.
Не знал, что код-ревью называется самоутверждением. Если человек выкладывает статью, следует ожидать критику.
Я дал советы человеку, чтобы он лучше знал плюсы, а не чтобы читателю было легче. Тем более всегда можно сделать пояснения в непонятных моментах. Ну и понять что transform - это аналог map или zip в любом другом языке не сложно.
В плюсах либо сразу писать нормально либо никак.
За нейронку - 5, за С++ - 2.
1. Вы передаете вектора в функцию не по ссылке.
2. void аргументах это уже не нужно даже в современном С, не говоря уже о С++.
3.
for (size_t layer = 0; layer <= layer_count; layer++)
- здесь UB.4. Часть циклов можно переписать на алгоритмы типа:
std::transform(expected.begin(), expected.end(),
layers[layer_count + 1].begin(), delta[layer_count].begin(),
[](double t, double y) {return y * (1 - y) * (t - y);});
Я к тому, что С++ - в данном случае неудачный вариант для изучения нейросети. Потому что здесь нельзя так расслаблено писать. Если бы на питоне дали пример, вопросов бы не было.
P.S. Открыл исходники. Вы в целом недавно начали изучать плюсы.
using namespace std да еще и в хедере - это расстрельная статья.
Вы бросаете исключения, а где вы их перехватываете? Или у вас план вызывать std::terminate при каждом исключении? Тогда вопросов нет. И там где надо не бросаете, например при делении.
У вас магические числа при том что есть дефайны. Кстати о них. Дефайны - это С, но ни как не С++. Для констант лучше constexpr и enum class.
Разбирать на самом деле еще очень много, я описал только что бросилось в глаза.
В общем если эту лабу приняли, у меня серьезные вопросы к компетенциям препода.
А вы живете в Чехии? Иначе почему вы PyCharm назвали отечественным продуктом?
Прочитал, приемуществ так и не увидел. Опять же, я наверное уже не мог всерьез читать после фраз про то как IDE отжирают много ресурсов.
А можете подробно объяснить приемущества Eclipse + make, вместо того же CMake + VSCode/Qt?
Уже давно ручное управление памятью является bad practice. RAII-концепция захватывает все больше вещей в С++, начиная с просто умных указателей, заканчивая автоматическим управлением потоками - std::jthread. Проблем конечно хватает даже с умными указателями. Но так манипулировать тоже не стоит.
Не уверен как в процессорах общего назначения, но в DSP-процах или там где есть DSP-сопроцессор, там умножение с накоплением выполняется за 1 такт.
Вы уже сбросили до 3-4к долларов? И сеньор - это уже не рядовой разраб. Т.е. уже по вашим словам большая часть разрабов только подбираются к 3к?
Скажите, где в России условный айтишник зарабатывает 4-5к долларов на руки в месяц? Реллокацию не упоминайте, т.к. это резко выходит за рамки "спокойно".
ФПМИ. Учеба учитывает что уже большая часть студентов работает, поэтому в расписании есть 3 дня без пар. Помимо обязательных предметов, можно взять сколько угодно других, даже с других кафедр, только надо договариваться с кафедрой. Я взял пару курсов из бакалавриата. В целом за год набрал больше знаний и практики, чем за года 3 на работе.
Ну и следует понимать, чтобы все успевать, в целом забываешь что такое отдельный выходной. Ты делаешь что-то всегда и в любое время.
В 30 лет поступил на платную очную магистратуру МФТИ. Учебу оплатил бизнес, которому я делаю дипломный проект, так-же они платят зп, небольшую, но я и работаю там удаленно на четверть ставки.
А кто вам сказал, что компилятор должен проверять еще и схемотехнику?
Напрямую в регистр можно записать случайно бит где вместо Open Drain поставится Push-Pull и сгорит вход. А теперь смотрим за руками: пишем компайл-тайм функцию записи в регистр, проверяем внутри допустимость записи для того или иного регистра. Вуаля - вход не спален. Ну и где безопаснее?
UDP не относится ни к чему, что приведено в функциях.
Да тут даже проблема не в малом приросте производительности. Эти методы в целом нереализуемы на практике - там константа требует памяти больше, чем есть на всей планете.
Вы для всех float делаете проверку на NaN?
В случае с геттерами, сеттерами. Их не нужно городить в каждом классе. Они нужны только для того, что если у вас в классе должен сохраняться инвариант, и чтобы пользователь не мог его нарушить. А теперь такой вопрос, какой инвариант может нарушиться если мы доступ к position сделаем public? Что можно сломать? И зачем тогда нужны методы get/set?