Бесплатный курс по Deep Learning от MIT 🤓
Что там внутри?
🔥 Актуальная программа на 2025 год. С лекциями про LLM, генеративки, компьютерное зрение и вот это всё.
🎥 Все лекции на YouTube. Полный цикл, от основ до больших языковых моделей (LLM) и генеративного ИИ.
👨💻 Практика на GitHub. Три жирные лабы (генерация музыки, распознавание лиц, файнтюн LLM), которые запускаются в Google Colab.
Короче, это полный, структурированный и актуальный набор материалов для самостоятельного изучения глубокого обучения от одного из ведущих технических вузов мира. Надо брать.
👉🏻 Ссылки:
Официальный сайт: introtodeeplearning.com
Код и лабы на GitHub: MITDeepLearning/introtodeeplearning
Что там внутри?
🎥 Все лекции на YouTube. Полный цикл, от основ до больших языковых моделей (LLM) и генеративного ИИ.
Короче, это полный, структурированный и актуальный набор материалов для самостоятельного изучения глубокого обучения от одного из ведущих технических вузов мира. Надо брать.
👉🏻 Ссылки:
Официальный сайт: introtodeeplearning.com
Код и лабы на GitHub: MITDeepLearning/introtodeeplearning
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍6❤2⚡2🙏2 1
Одна строчка кода, которая выдаёт в тебе новичка (или застрявшего в прошлом)
Серьезно, когда в следующий раз увижу в чужом коде🤨
Это не просто громоздко и неэффективно. Это маркер, который кричит: "Я мыслю как на Java/C, а не как на Python!". На одном из курсов, где я преподаю, во всех учебных материала так!🤦♂️
Есть же элегантный, читаемый и просто правильный способ —
Вот вам гайд, где всё по полочкам:
- Почему
- Как
- Про аргумент
- Про ошибку, из-за которой можно часами отлаживать код.
- И когда
🫱🏻 Читаем 🫲🏻
Серьезно, когда в следующий раз увижу в чужом коде
for i in range(len(...)):
, у меня глаз начнет дёргаться Это не просто громоздко и неэффективно. Это маркер, который кричит: "Я мыслю как на Java/C, а не как на Python!". На одном из курсов, где я преподаю, во всех учебных материала так!
Есть же элегантный, читаемый и просто правильный способ —
enumerate()
.Вот вам гайд, где всё по полочкам:
- Почему
range(len())
— это кринж и антипаттерн.- Как
enumerate()
делает код чище и понятнее.- Про аргумент
start
, чтобы не писать i + 1
.- Про ошибку, из-за которой можно часами отлаживать код.
- И когда
enumerate()
наоборот не нужен.🫱🏻 Читаем 🫲🏻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥9 3🙏2⚡1👎1🤔1💯1
🍕 Разбор задачки о доставке пиццы
Всем привет! Время разбирать задачку про курьеров и заказы. Задачка имеет очень лаконичное решение.
Самый математически красивый подход выглядит так:
🤔 Как это работает?
Давайте рассуждать по шагам.
1️⃣ Шаг 1: Все возможные перестановки.
Представим, что у нас есть
2️⃣ Шаг 2: Учитываем наше правило.
Главное правило:
Возьмём любую пару, например,
3️⃣ Шаг 3: Обобщаем на все пары.
У нас
Получаем финальную формулу:
- Сложность по времени:
- Сложность по памяти:
Всем привет! Время разбирать задачку про курьеров и заказы. Задачка имеет очень лаконичное решение.
Ключевая идея для решения большинства подобных задач — сначала посчитать все возможные варианты без ограничений, а затем "отсечь" те, которые нарушают наши правила.
Самый математически красивый подход выглядит так:
import math
def count_valid_orders(n: int) -> int:
return math.factorial(2 * n) // (2**n)
🤔 Как это работает?
Давайте рассуждать по шагам.
1️⃣ Шаг 1: Все возможные перестановки.
Представим, что у нас есть
2n
уникальных событий (P1, D1, P2, D2, ..., Pn, Dn
). Сколько всего существует способов расставить их в линию? Правильно, это просто перестановки, то есть (2n)!
.2️⃣ Шаг 2: Учитываем наше правило.
Главное правило:
Pi
всегда должно стоять раньше Di
.Возьмём любую пару, например,
(P1, D1)
. В общем числе перестановок (2n)!
ровно в половине случаев P1
будет стоять раньше D1
, а в другой половине — D1
раньше P1
. Нас устраивает только первый вариант. Значит, чтобы отсечь все неподходящие варианты для пары (P1, D1)
, нужно поделить общее число перестановок на 2.3️⃣ Шаг 3: Обобщаем на все пары.
У нас
n
таких независимых пар! Для каждой из них мы должны отсечь половину невалидных последовательностей. Поэтому мы делим общее число перестановок на 2 n
раз.Получаем финальную формулу:
(2n)! / 2^n
.- Сложность по времени:
O(N)
, так как вычисление факториала (2n)!
занимает линейное время от его аргумента.- Сложность по памяти:
O(1)
.Telegram
PythonTalk
Алгоритмическая задачка 🐍
Сегодня задачка на комбинаторику, завёрнутая в аппетитную обёртку.
Представьте, что вы разрабатываете алгоритм для новой службы доставки пиццы 🍕. Система должна планировать последовательность действий для курьеров.
Условие
У вас…
Сегодня задачка на комбинаторику, завёрнутая в аппетитную обёртку.
Представьте, что вы разрабатываете алгоритм для новой службы доставки пиццы 🍕. Система должна планировать последовательность действий для курьеров.
Условие
У вас…
❤4🔥3👍2⚡1🙏1
🍉 Как выбрать арбуз с помощью Python
Сезон арбузов в самом разгаре! Уже кушали? Если да, то точно столкнулись с извечной проблемой оптимизация процесса выбора арбуза.
Забываем дедовские методы, мы же не хотим полагаться на какую-то интуицию и субъективщину? В 21 веке такие важные решения должны приниматься исключительно на основе данных. Нам нужны метрики, пайплайны и воспроизводимые результаты!
Итак, представляю вам фреймворк
Этап 1: Сбор данных
Подходим к арбузному развалу. Наша задача — собрать первичный датасет. Для каждого экземпляра (
-
-
-
-
-
-
Этап 2: Препроцессинг и Feature Engineering
Сырые данные — мусор. Нам нужны производные признаки, которые действительно коррелируют с целевой переменной
Этап 3: Модель принятия решений (Decision Model)
Никаких
Итоговый алгоритм:
1. Подходите к развалу.
2. Достаете ноутбук, весы, рулетку, диктофон и палитру Pantone.
3. На недоумевающие взгляды продавца и других покупателей отвечаете: "Спокойно, я шарю".
4. Скрупулезно собираете датасет по 5-10 кандидатам.
5. Запускаете Jupyter-ноутбук, выполняете все ячейки.
6. Модель выдает вам
7. Покупаете его.
8. Дома разрезаете... а он неспелый.
Потому что ваша модель переобучилась на локальных данных, не учла сезонные дрифты и аномалии в поставке! Нужна MLOps-инфраструктура, постоянный мониторинг и версионирование моделей. В следующем году построим.
#хих
Сезон арбузов в самом разгаре! Уже кушали? Если да, то точно столкнулись с извечной проблемой оптимизация процесса выбора арбуза.
Забываем дедовские методы, мы же не хотим полагаться на какую-то интуицию и субъективщину? В 21 веке такие важные решения должны приниматься исключительно на основе данных. Нам нужны метрики, пайплайны и воспроизводимые результаты!
Итак, представляю вам фреймворк
Watermelon Driven Development (WDD)
.Этап 1: Сбор данных
Подходим к арбузному развалу. Наша задача — собрать первичный датасет. Для каждого экземпляра (
candidate
) нам нужны следующие фичи:-
weight
(float): Масса. Взвешиваем на местных весах. Если их нет — используем безмен или оцениваем на глаз, предварительно откалибровав руку на известном весе (например, на своем макбуке).-
volume
(float): Объем. Определяется методом погружения в таз с водой, но на рынке это может вызвать подозрения. Поэтому аппроксимируем до эллипсоида и считаем по формуле. Замеры делаем рулеткой.-
acoustic_response
(dict): Акустический отклик. Стучим по арбузу костяшкой пальца в трех разных точках (экватор, полюс №1, полюс №2). Записываем звук на диктофон. Позже прогоним через FFT-анализ для поиска резонансных частот.-
surface_pattern_complexity
(float): Сложность паттерна полосок. Фотографируем и прогоняем через простенькую CV-модель для оценки энтропии изображения. Чем контрастнее и четче полоски — тем выше метрика.-
peduncle_dryness_coefficient
(float): Коэффициент сухости хвостика. Значения от 0.0 (свежесрезанный, зеленый) до 1.0 (засохший, ломкий).-
stain_yellowness_index
(int): Индекс желтизны земляного пятна. Используем цветовую палитру Pantone для точной оценки. Градация от 1 (белый) до 10 (насыщенно-желтый).Этап 2: Препроцессинг и Feature Engineering
Сырые данные — мусор. Нам нужны производные признаки, которые действительно коррелируют с целевой переменной
sweetness_score
.def preprocess_watermelon_data(candidates: list) -> pd.DataFrame:
processed_data = []
for candidate in candidates:
# Плотность - ключевой показатель!
candidate['density'] = candidate['weight'] / candidate['volume']
# Анализируем звук: "звонкий" звук имеет пик в определенном диапазоне частот
fft_peaks = analyze_fft(candidate['acoustic_response'])
candidate['is_sound_ringing'] = 500 < fft_peaks.main_freq < 800
# Нормализуем остальные фичи
# ... (тут сложная математика)
processed_data.append(candidate)
return pd.DataFrame(processed_data)
Этап 3: Модель принятия решений (Decision Model)
Никаких
if-else
! Это слишком примитивно. Мы будем использовать взвешенную скоринговую модель. Веса подобраны на основе анализа тысяч арбузов (нет).# Веса фичей, подобранные экспертным путем в ходе A/B-теста
WEIGHTS = {
'density': 0.4,
'is_sound_ringing': 0.3,
'peduncle_dryness_coefficient': 0.15,
'stain_yellowness_index': 0.1,
'surface_pattern_complexity': 0.05,
}
def get_watermelon_score(candidate: pd.Series) -> float:
"""Рассчитывает итоговый скор для кандидата."""
score = 0
score += candidate['density'] * WEIGHTS['density']
score += candidate['is_sound_ringing'] * WEIGHTS['is_sound_ringing']
# ... и так далее для всех фичей
return score
# Выбираем арбуз с максимальным скором
best_watermelon = candidates_df.loc[candidates_df['score'].idxmax()]
Итоговый алгоритм:
1. Подходите к развалу.
2. Достаете ноутбук, весы, рулетку, диктофон и палитру Pantone.
3. На недоумевающие взгляды продавца и других покупателей отвечаете: "Спокойно, я шарю".
4. Скрупулезно собираете датасет по 5-10 кандидатам.
5. Запускаете Jupyter-ноутбук, выполняете все ячейки.
6. Модель выдает вам
id
лучшего арбуза.7. Покупаете его.
8. Дома разрезаете... а он неспелый.
Потому что ваша модель переобучилась на локальных данных, не учла сезонные дрифты и аномалии в поставке! Нужна MLOps-инфраструктура, постоянный мониторинг и версионирование моделей. В следующем году построим.
#хих
😁29 8🤣5❤3🔥3⚡1👍1👏1 1
Примеры функций для работы с файловой системой и файлами 🗂
🤡 Пока вы перевариваете этот баян, переварите ещё и немного полезной информации 🤓
– Что общего у программиста и пасечника?
– Импорт ос?
– import os
🤡 Пока вы перевариваете этот баян, переварите ещё и немного полезной информации 🤓
👍4🔥3😁2❤1🙏1👌1💯1🏆1👾1 1
У меня тоже такие мысли, конечно, периодически проскакивают, но я давно нашёл очень простой способ с этим бороться.
💬 Общайтесь с другими людьми!
Серьезно, кто постоянно в этом синдроме, вы вообще разговариваете с коллегами? 😅
Стоит мне пообсуждать с кем-то работу и любые другие профессиональные моменты, этот синдром очень быстро и надолго сдувает.
В "очередной раз" выясняется, что никто ни хрена не умеет, у всех везде велосипеды из говна и палок, вот-вот все рассыпится, сплошной треш и угар.
Главное — не получить синдром единственного адекватного человека в горящем дурдоме
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣14👍7😁5❤2🔥2🤪2 2⚡1👏1🙏1
This media is not supported in your browser
VIEW IN TELEGRAM
Погружаемся в Матрицу! 🤖
Вышла Matrix-Game 2.0 — интерактивная модель мира, которая в реальном времени (25 FPS!) генерирует окружение по командам с клавиатуры и мыши.
Проще говоря: вы жмете «W», и нейросеть на лету дорисовывает вам мир в стиле GTA или Minecraft, в котором вы движетесь вперед. Это уже не «сделай мне ролик», а «построй мне мир, я в нем поиграю».
Все это добро опенсорсное и на Python.
GTA VII уже будет полностью так генерироваться?🤔
Для тех, кто хочет попробовать — написал гайд по запуску у себя на машине, с разбором зависимостей и кода.
👉 Читать здесь
#щупаем_сорцы
Вышла Matrix-Game 2.0 — интерактивная модель мира, которая в реальном времени (25 FPS!) генерирует окружение по командам с клавиатуры и мыши.
Проще говоря: вы жмете «W», и нейросеть на лету дорисовывает вам мир в стиле GTA или Minecraft, в котором вы движетесь вперед. Это уже не «сделай мне ролик», а «построй мне мир, я в нем поиграю».
Все это добро опенсорсное и на Python.
GTA VII уже будет полностью так генерироваться?
Для тех, кто хочет попробовать — написал гайд по запуску у себя на машине, с разбором зависимостей и кода.
👉 Читать здесь
#щупаем_сорцы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🤯3❤1🔥1😱1 1
❤3👍3👌2🙏1
Чего там, группу в Max 💩 уже надо переводить или ещё живём несколько месяцев?
Please open Telegram to view this post
VIEW IN TELEGRAM
Вводим «санкции» и «тарифы» на импорт Python-библиотек 🗽
Наткнулся на забавный пакет
И после этого в консоль выводится сообщение в стиле Трампа:
Это, конечно, 10/10 😂
Для тех, кто в теме, это абсолютно шикарная демонстрация monkey-patching'а
Вот сам репо◀️
Наткнулся на забавный пакет
tariff
. Он позволяет делать вот так:import tariff
# Вводим пошлины на "иностранные" пакеты
tariff.set({
"numpy": 50,
"pandas": 200,
})
# Теперь импорт будет медленнее...
import pandas
И после этого в консоль выводится сообщение в стиле Трампа:
JUST IMPOSED a 200% TARIFF on pandas! Original import took 87103 us, now takes 261309 us. American packages are WINNING AGAIN! #MIGA
Это, конечно, 10/10 😂
Для тех, кто в теме, это абсолютно шикарная демонстрация monkey-patching'а
builtins.__import__
.Вот сам репо
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣8❤4🤪3🔥1😁1
🎓Полный гайд по List Comprehensions в Python
В Python существует множество способов решить одну и ту же задачу, но не все они одинаково «питоничные». Классический подход к созданию списков через цикл
Именно для таких случаев и существуют списковые включения (List Comprehensions) — инструмент для создания списков в одну строку, декларативно и эффективно.
Эта статья поможет досконально разобраться в теме, от основ до неочевидных приемов. Внутри не только базовый синтаксис, но и продвинутые техники.
В общем, всё, что нужно, чтобы писать более чистый, выразительный и зачастую более быстрый код.
В Python существует множество способов решить одну и ту же задачу, но не все они одинаково «питоничные». Классический подход к созданию списков через цикл
for
и метод .append()
— яркий тому пример. Он работает, но часто бывает многословным и менее читаемым.Именно для таких случаев и существуют списковые включения (List Comprehensions) — инструмент для создания списков в одну строку, декларативно и эффективно.
Эта статья поможет досконально разобраться в теме, от основ до неочевидных приемов. Внутри не только базовый синтаксис, но и продвинутые техники.
В общем, всё, что нужно, чтобы писать более чистый, выразительный и зачастую более быстрый код.
This media is not supported in your browser
VIEW IN TELEGRAM
Anthropic выкатили интересный апдейт для Claude Code: теперь можно переключить режим вывода кода командой
1️⃣
2️⃣
Чтобы не брейнротить от копипасты любых ответов и для обучение — любопытный инструмент.
/output-styles
на режимы:1️⃣
Explanatory
: Claude не просто пишет код, а комментирует каждое свое решение. Почему выбрал именно такую архитектуру, какие были альтернативы, какие плюсы и минусы у подхода. По сути, это эмуляция опытного программиста, который сидит рядом и вслух проговаривает свой мыслительный процесс.2️⃣
Learning
: ИИ пишет код, а потом в ключевых местах останавливается, вставляет #TODO
и говорит: "а вот этот кусок допиши-ка сам". Как бы парное программирование с ментором, который заставляет тебя думать, а не тупо копипастить.Чтобы не брейнротить от копипасты любых ответов и для обучение — любопытный инструмент.
👍6🔥4🤔2❤1⚡1🙏1