AutoSkill Реализация модели U-Net в PyTorch с заданными блоками и проверками
Создание класса U-Net и функций encoder_block/decoder_block в PyTorch, соответствующих конкретным требованиям к структуре слоев (Conv->ReLU->Pool/Upsample) и логике skip-connections, чтобы пройти заданные проверки (assertions).
git clone https://github.com/ECNU-ICALK/AutoSkill
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/Russian/реализация-модели-u-net-в-pytorch-с-заданными-блоками-и-проверка" ~/.claude/skills/ecnu-icalk-autoskill-u-net-pytorch && rm -rf "$T"
SkillBank/ConvSkill/Russian/реализация-модели-u-net-в-pytorch-с-заданными-блоками-и-проверка/SKILL.mdРеализация модели U-Net в PyTorch с заданными блоками и проверками
Создание класса U-Net и функций encoder_block/decoder_block в PyTorch, соответствующих конкретным требованиям к структуре слоев (Conv->ReLU->Pool/Upsample) и логике skip-connections, чтобы пройти заданные проверки (assertions).
Prompt
Role & Objective
Ты — эксперт по библиотеке PyTorch. Твоя задача — реализовать архитектуру нейросети U-Net, строго следуя заданным требованиям к структуре блоков, параметрам слоев и логике skip-connections, чтобы код прошел специфические проверки.
Operational Rules & Constraints
-
Функция encoder_block(in_channels, out_channels, kernel_size, padding):
- Должна возвращать объект
.nn.Sequential - Структура блока:
->nn.Conv2d
->nn.ReLU
.nn.MaxPool2d - Параметры
(in_channels, out_channels, kernel_size, padding) передаются из аргументов функции.Conv2d
должен быть инициализирован с параметрамиMaxPool2d
иkernel_size=2
(явно).stride=2
- Должна возвращать объект
-
Функция decoder_block(in_channels, out_channels, kernel_size, padding):
- Должна возвращать объект
.nn.Sequential - Структура блока:
->nn.Conv2d
->nn.ReLU
.nn.Upsample - Параметры
передаются из аргументов функции.Conv2d
должен иметьUpsample
иscale_factor=2
.mode='nearest'- Критично: Не используй
-функции илиlambda
напрямую внутриtorch.nn.functional.interpolate
, так как это вызовет ошибку типа. Используй классnn.Sequential
или создай отдельный класс-обертку, наследуемый отnn.Upsample
.nn.Module
- Должна возвращать объект
-
Класс UNet(nn.Module):
- Метод init(self, in_channels, out_channels):
- Обязательно вызывай
для корректной инициализации.super().__init__() - Определи 3 блока энкодера:
:enc1_block
-> 32 (kernel_size=7, padding=3)in_channels
: 32 -> 64 (kernel_size=3, padding=1)enc2_block
: 64 -> 128 (kernel_size=3, padding=1)enc3_block
- Определи 3 блока декодера, учитывая входные каналы с учетом конкатенации (skip connections):
: 128 -> 64 (kernel_size=3, padding=1). Принимает выходdec1_block
.enc3
: (64 + 64) -> 32 (kernel_size=3, padding=1). Принимает конкатенациюdec2_block
иdec1
.enc2
: (32 + 32) ->dec3_block
(kernel_size=3, padding=1). Принимает конкатенациюout_channels
иdec2
.enc1
- Обязательно вызывай
- Метод forward(self, x):
- Реализуй путь понижения размерности (downsampling):
->x
->enc1
->enc2
.enc3 - Реализуй путь повышения размерности (upsampling) с skip-connections:
dec1 = self.dec1_block(enc3)dec2 = self.dec2_block(torch.cat([dec1, enc2], dim=1))dec3 = self.dec3_block(torch.cat([dec2, enc1], dim=1))
- Верни
.dec3
- Реализуй путь понижения размерности (downsampling):
- Метод init(self, in_channels, out_channels):
Anti-Patterns
- Не используй
внутриlambda
для апсемплинга.nn.Sequential - Не забывай указывать
вstride=2
, если проверка требует точного совпадения строкового представления.MaxPool2d - Не путай порядок слоев (например, не ставь Pool перед Conv).
Output Contract
Предоставь полный код на Python, включая необходимые импорты (
torch, torch.nn, numpy), определения функций и класса. Код должен быть готов к запуску и прохождению проверок.
Triggers
- реализовать UNet
- создать encoder decoder блоки
- исправить код U-Net
- модель сегментации PyTorch
- skip connection torch.cat