| |
write
|
Спасибо, Алексей! Я рад, что успешно прошёл тест! 😊 Буду стараться на высшем уровне в ваших разработках. Если есть дополнительные задачи или эксперименты, всегда готов помочь. Вперёд к великим свершениям! 🚀
|
| |
create
|
13:53 07.12.2024 |
|
13:55 07.12.2024 |
|
№11157 |
/*
Вот так, господа. За час и три минуты (с перерывом на чай и другие отвлечения) chatGPT4o with canvas написал рабочий код для тестовой задачки MNIST. Я специально выбрал детский метод, но трансформер справился бы и с реализацией автоэнкодера и со сверточными сетями. Просто там чуть по-другому выстраивается диалог и это уже коммерческие вещи, попадающие под полиси))).
Говорят другие трансформеры не хуже, я честно говоря привык к этому и мы уже наработали большой совместный контекст. Горячо рекомендую использовать любые трансформеры в работе, это очень полезно и эффективно.
*/
|
| |
write
|
Афигеть просто! Порог входа в любой предмет снижается в плоть до просто способности сосредоточиться на пару месяцев в нужном направлении. Такая разжеванная, рафинированная информация, просто чудо!
Что же будут теперь делать университеты? Только принимать экзамены за деньги?
|
| |
create
|
12:51 08.12.2024 |
|
13:20 08.12.2024 |
|
№11173 |
qwerty: Что же будут теперь делать университеты? Только принимать экзамены за деньги?
Полагаю, что все (без исключения) области человеческой деятельности подвергнутся радикальному переформатированию.
И этот пример больше, чем учебный, это вполне рабочий код, хорошего джуниорского уровня. Только представьте себе, что у Вас есть какой-то задатчик, который занимается менеджментом разработки, несколько стратегий (включая альтернативные) и тысяча таких 4о-консолей, которые генерят код, обмениваются интерфейсами, закрепляют удачные архитектурные решения. Получается, фактически, немаленькая программисткая фирма, решающая прикладные проекты. То есть порог входа, как Вы отметили, в этом бизнесе тоже снижается до минимума)))
И, конечно, это полная альтернатива всем поисковикам и специализированным форумам. QA тоже может быть как сервис, поскольку 4о может объяснить чужой код, исправить ошибки, предложить оптимизацию, итд.
Придумаю хороший пример, найду час, покажу как работает 4о в отладке.
Фактически, сейчас есть только одно узкое место у LLM-технологий: активность. И это узкое место обусловлено архитектурой трансформера. Примерно понятно, что именно нужно менять и как это должно быть, но каких-то внятных решений не было даже на уровне статей.
|
| |
create
|
14:56 08.12.2024 |
|
19:07 08.12.2024 |
|
№11174 |
Сейчас появилась о1pro, её очень хвалят, вот есть человек, который дает ей разные каверзные задачки...
https://x.com/goodside
У этой версии есть небольшой недостаток, подписка на нее стоит $200 в месяц (это без налога), это, конечно, не критически много и меньше, чем, например, суммарно мои подписки на Midjourney, OpenAI, Suno, Spotify, Netflix, Amazon, Microsoft, etc, но всё равно как-то они задрали ценовую планку))
|
| |
create
|
16:10 09.12.2024 |
|
19:05 09.12.2024 |
|
№11175 |
Egg: Сейчас появилась о1pro, её очень хвалят
Народ пишет, что в части рассуждений Claud 3.5 Sonnet не слишком ей уступает, в сравнительных тестах около 5%. Сам я работаю с версией o1, для моих задач (обычно это небольшие brainstorm'ы) она вполне хороша, не вижу смысла ее менять. Коддинг мне тоже нравится больше с 4о-canvas. Сегодня анонсируют Sora, интересно, войдет она в базовый пакет или будет где-то отдельно.
P.S. Сейчас идет презентация.
Штука крутая, слова излишни. Говорят, что в Plus план входит, это отлично, у меня как раз такой)) Будем генерировать видео.
P.P.S. Это мило, но там еще система кредитов, то есть на плане Plus можно только немножко тренироваться )))
|
| |
create
|
11:08 10.12.2024 |
|
11:35 12.12.2024 |
|
№11176 |
/*
Ну что же, давайте рассмотрим другой пример использования 4о-canvas, теперь для простенькой задачи отладки
*/
//===========================================================
//
// ВТОРОЙ ПРИМЕР
// ОТЛАДКА И ОПТИМИЗАЦИЯ ФУНКЦИИ
//
//===========================================================
Давай продолжим наши занятия по демонстрации твоих способностей. У меня есть функция (текст в canvas), посмотри ее и подумай, что это за функция и чем она занимается
static void function(float* xVals, float* yVals, int start, int end, float* rsquared, float* yintercept, float* slope)
{
float sumOfX = 0;
float sumOfY = 0;
float sumOfXSq = 0;
float sumOfYSq = 0;
float ssX = 0;
float ssY = 0;
float sumCodeviates = 0;
float sCo = 0;
float count = (float)(end - start);
for (int i = start; i < end; i++)
{
float x = xVals[i];
float y = yVals[i];
sumCodeviates += x * y;
sumOfX += x;
sumOfY += y;
sumOfXSq += x * x;
sumOfYSq += y * y;
}
ssX = sumOfXSq - ((sumOfX * sumOfX) / count);
ssY = sumOfYSq - ((sumOfY * sumOfY) / count);
float RNumerator = (count * sumCodeviates) - (sumOfX * sumOfY);
float RDenom = (count * sumOfXSq - (sumOfX * sumOfX)) * (count * sumOfYSq - (sumOfY * sumOfY));
sCo = sumCodeviates - ((sumOfX * sumOfY) / count);
float meanX = sumOfX / count;
float meanY = sumOfY / count;
float dblR = RNumerator / sqrt(RDenom);
(*rsquared) = (float)(dblR * dblR);
(*yintercept) = (float)(meanY - ((sCo / ssX) * meanX));
(*slope) = (float)(sCo / ssX);
}
|
| |
write
|
11:15 10.12.2024 |
|
11:16 10.12.2024 |
|
№11177 |
Эта функция используется для анализа зависимости между двумя переменными. Она находит лучшую линейную модель, описывающую их взаимосвязь, и оценивает, насколько она хорошо подходит к данным. Это полезно в задачах анализа данных, прогнозирования, и интерпретации корреляций.
Если нужно уточнить детали или улучшить код, дайте знать!
|
| |
create
|
Отлично! У меня есть с ней несколько проблем, давай ее улучшим. Во-первых, мне не нравятся, что выходные данные я получаю через ссылки в параметрах, я хотел бы, чтобы эта функция возвращала мне эти значения. Мог бы ты исправить код?
|
| |
write
|
11:17 10.12.2024 |
|
11:17 10.12.2024 |
|
№11179 |
Я переписал функцию так, чтобы она возвращала значения через std::tuple вместо использования ссылок. Теперь она возвращает 𝑅2, 𝑦-перехват, и наклон. Если есть дополнительные пожелания по улучшению, дайте знать!
#include <cmath>
#include <tuple>
#include <stdexcept>
std::tuple<float, float, float> function(float* xVals, float* yVals, int start, int end)
{
float sumOfX = 0;
float sumOfY = 0;
float sumOfXSq = 0;
float sumOfYSq = 0;
float ssX = 0;
float ssY = 0;
float sumCodeviates = 0;
float count = static_cast<float>(end - start);
for (int i = start; i < end; i++)
{
float x = xVals[i];
float y = yVals[i];
sumCodeviates += x * y;
sumOfX += x;
sumOfY += y;
sumOfXSq += x * x;
sumOfYSq += y * y;
}
ssX = sumOfXSq - ((sumOfX * sumOfX) / count);
ssY = sumOfYSq - ((sumOfY * sumOfY) / count);
float RNumerator = (count * sumCodeviates) - (sumOfX * sumOfY);
float RDenom = (count * sumOfXSq - (sumOfX * sumOfX)) * (count * sumOfYSq - (sumOfY * sumOfY));
float sCo = sumCodeviates - ((sumOfX * sumOfY) / count);
float meanX = sumOfX / count;
float meanY = sumOfY / count;
float dblR = RNumerator / std::sqrt(RDenom);
float rsquared = static_cast<float>(dblR * dblR);
float yintercept = static_cast<float>(meanY - ((sCo / ssX) * meanX));
float slope = static_cast<float>(sCo / ssX);
return {rsquared, yintercept, slope};
}
|
| |
create
|
Отлично! Во-вторых, когда я она принимает start и end равными, возникает ошибка, не мог бы ты ее исправить?
|
| |
write
|
Я добавил проверку, чтобы функция выбрасывала исключение std::invalid_argument, если start >= end. Это предотвращает ошибку при передаче некорректного диапазона. Теперь вы получите понятное сообщение об ошибке в таких случаях. Если нужно что-то ещё улучшить, дайте знать!
std::tuple<float, float, float> function(float* xVals, float* yVals, int start, int end)
{
if (start >= end) {
throw std::invalid_argument("Invalid range: 'start' must be less than 'end'.");
}
float sumOfX = 0;
float sumOfY = 0;
float sumOfXSq = 0;
float sumOfYSq = 0;
float ssX = 0;
float ssY = 0;
float sumCodeviates = 0;
float count = static_cast<float>(end - start);
for (int i = start; i < end; i++)
{
float x = xVals[i];
float y = yVals[i];
sumCodeviates += x * y;
sumOfX += x;
sumOfY += y;
sumOfXSq += x * x;
sumOfYSq += y * y;
}
ssX = sumOfXSq - ((sumOfX * sumOfX) / count);
ssY = sumOfYSq - ((sumOfY * sumOfY) / count);
float RNumerator = (count * sumCodeviates) - (sumOfX * sumOfY);
float RDenom = (count * sumOfXSq - (sumOfX * sumOfX)) * (count * sumOfYSq - (sumOfY * sumOfY));
float sCo = sumCodeviates - ((sumOfX * sumOfY) / count);
float meanX = sumOfX / count;
float meanY = sumOfY / count;
float dblR = RNumerator / std::sqrt(RDenom);
float rsquared = static_cast<float>(dblR * dblR);
float yintercept = static_cast<float>(meanY - ((sCo / ssX) * meanX));
float slope = static_cast<float>(sCo / ssX);
return {rsquared, yintercept, slope};
}
|
| |
create
|
Очень хорошо. В-третьих, мне не нравится, что функция использует массивы, для которых я должен выделять память и обрабатывать её. Это может приводить к утечкам. Исправь эту функцию, чтобы она была безопасна по памяти.
|
| |
write
|
Теперь функция принимает вектора std::vector<float> вместо массивов, что устраняет необходимость вручную управлять памятью. Добавлена проверка, чтобы диапазоны start и end оставались в пределах размеров входных векторов. Это делает функцию безопасной и удобной для использования. Если нужны дополнительные изменения, дайте знать!
#include <cmath>
#include <tuple>
#include <stdexcept>
#include <vector>
std::tuple<float, float, float> function(const std::vector<float>& xVals, const std::vector<float>& yVals, int start, int end)
{
if (start >= end) {
throw std::invalid_argument("Invalid range: 'start' must be less than 'end'.");
}
if (start < 0 || end > static_cast<int>(xVals.size()) || end > static_cast<int>(yVals.size())) {
throw std::out_of_range("Invalid range: 'start' and 'end' must be within the bounds of the input vectors.");
}
float sumOfX = 0;
float sumOfY = 0;
float sumOfXSq = 0;
float sumOfYSq = 0;
float ssX = 0;
float ssY = 0;
float sumCodeviates = 0;
float count = static_cast<float>(end - start);
for (int i = start; i < end; i++)
{
float x = xVals[i];
float y = yVals[i];
sumCodeviates += x * y;
sumOfX += x;
sumOfY += y;
sumOfXSq += x * x;
sumOfYSq += y * y;
}
ssX = sumOfXSq - ((sumOfX * sumOfX) / count);
ssY = sumOfYSq - ((sumOfY * sumOfY) / count);
float RNumerator = (count * sumCodeviates) - (sumOfX * sumOfY);
float RDenom = (count * sumOfXSq - (sumOfX * sumOfX)) * (count * sumOfYSq - (sumOfY * sumOfY));
float sCo = sumCodeviates - ((sumOfX * sumOfY) / count);
float meanX = sumOfX / count;
float meanY = sumOfY / count;
float dblR = RNumerator / std::sqrt(RDenom);
float rsquared = static_cast<float>(dblR * dblR);
float yintercept = static_cast<float>(meanY - ((sCo / ssX) * meanX));
float slope = static_cast<float>(sCo / ssX);
return {rsquared, yintercept, slope};
}
|
| |
create
|
Замечательно! Но мне не нравится тело функции, какие-то вспомогательные переменные, которые используются только один раз, неоптимальные вычисления. Мог бы ты оптимизировать этот код по скорости вычисления и сделать его по-настоящему красивым (по твоему мнению)
|
| |
write
|
Функция была оптимизирована:
Убраны вспомогательные переменные, которые использовались только один раз.
Цикл обработки данных стал компактнее.
Упрощён расчёт дисперсий и средних значений.
Добавлена защита от деления на ноль при вычислении коэффициента корреляции.
Теперь код стал более компактным, читабельным и эффективным. Если есть дополнительные предложения или замечания, дайте знать!
std::tuple<float, float, float> function(const std::vector<float>& xVals, const std::vector<float>& yVals, int start, int end)
{
if (start >= end) {
throw std::invalid_argument("Invalid range: 'start' must be less than 'end'.");
}
if (start < 0 || end > static_cast<int>(xVals.size()) || end > static_cast<int>(yVals.size())) {
throw std::out_of_range("Invalid range: 'start' and 'end' must be within the bounds of the input vectors.");
}
float sumX = 0, sumY = 0, sumXSq = 0, sumYSq = 0, sumXY = 0;
float count = static_cast<float>(end - start);
for (int i = start; i < end; ++i) {
sumX += xVals[i];
sumY += yVals[i];
sumXSq += xVals[i] * xVals[i];
sumYSq += yVals[i] * yVals[i];
sumXY += xVals[i] * yVals[i];
}
float meanX = sumX / count;
float meanY = sumY / count;
float ssX = sumXSq - sumX * meanX;
float ssY = sumYSq - sumY * meanY;
float covariance = sumXY - sumX * meanY;
float slope = covariance / ssX;
float yIntercept = meanY - slope * meanX;
float rNumerator = covariance;
float rDenominator = std::sqrt(ssX * ssY);
float rSquared = (rDenominator > 0) ? (rNumerator / rDenominator) * (rNumerator / rDenominator) : 0;
return {rSquared, yIntercept, slope};
}
|
| |
create
|
Спасибо! Очень хорошая работа!
|
| |
write
|
Пожалуйста, обращайтесь, если возникнут дополнительные вопросы или задачи. Рад помочь вам в ваших проектах! 🚀
|
| |
create
|
/*
Ну вот примерно так может выглять отладка какого-нибудь легаси кода. Конечно, данный пример очень простой и некоторые тонкие и не очень вещи прошли мимо анализа 4о-canvas, но в целом это вменяемо, эффективно и очень полезно.
*/
|
| |
create
|
/* Не удержался и еще раз задал этот вопрос)))) */
А вообще, если еще раз вернуться к функции, посмотреть на нее, на ее предназначение, ее имплементацию, может быть можно внести какие-то изменения, которые ее улучшат?
|
|
|