Я столкнулся с проблемой исчезновения показателей после первой эпохи обучения. В первую эпоху обучение модели протекает нормально. Показатели потерь уменьшаются, а точность увеличивается. Точность достигает 20% при обучении и 6% при валидации. После этого точность остается неизменной или даже начинает снижаться, а потери увеличиваются как при обучении, так и при проверке.
Модель принимает входные данные в виде вектора размером 1x224. Модель должна работать с 8705 классами. Данные реализуются в двух формах: 8705*3600 при обучении и 8705 при проверке. Обучающий набор также разделен на пропорции 80/20 по 3600, сохраняя при этом 8705 классов. В обучении я использую SGD, CrossEntropyLoss и Step. LR = 0,01, Momentum = 0,9, Weight_decay = 0,00005, lr_step_size = 10000, lr_gamma = 0,01
Можете ли вы сказать мне, в чем проблема, потому что я уже давно бьюсь над этой проблемой. Я попробовал перейти с SGD на оптимизатор AdamW, и показатели значительно улучшились, но мне это кажется подозрительным.
Спасибо
Я столкнулся с проблемой исчезновения показателей после первой эпохи обучения. В первую эпоху обучение модели протекает нормально. Показатели потерь уменьшаются, а точность увеличивается. Точность достигает 20% при обучении и 6% при валидации. После этого точность остается неизменной или даже начинает снижаться, а потери увеличиваются как при обучении, так и при проверке.
Моя реализованная модель 1D-CNN: [code]class Model(nn.Module):
x = torch.cat([b1_a, b1_b], dim=1) # Concat по каналам (32+32=64)
x = self.pool1(x)
b2_a = self.act_fn(self.bn2_a(self.conv2_a(x)))
b2_b = self.act_fn(self.bn2_b(self.conv2_b(x)))
x = torch.cat([b2_a, b2_b], dim=1)
x = self.pool2(x)
b3_a = self.act_fn(self.bn3_a(self.conv3_a(x)))
b3_b = self.act_fn(self.bn3_b(self.conv3_b(x)))
x = torch.cat([b3_a, b3_b], dim=1)
x = self.pool3(x)
b4_a = self.act_fn(self.bn4_a(self.conv4_a(x)))
b4_b = self.act_fn(self.bn4_b(self.conv4_b(x)))
x = torch.cat([b4_a, b4_b], dim=1)
x = self.pool4(x)
b5_a = self.act_fn(self.bn5_a(self.conv5_a(x)))
b5_b = self.act_fn(self.bn5_b(self.conv5_b(x)))
x = torch.cat([b5_a, b5_b], dim=1)
x = self.pool5(x)
x = self.final_conv(x)
x = self.final_bn(x)
x = self.act_fn(x)
x = self.gap(x)
x = x.squeeze(-1)
return x [/code] Модель принимает входные данные в виде вектора размером 1x224. Модель должна работать с 8705 классами. Данные реализуются в двух формах: 8705*3600 при обучении и 8705 при проверке. Обучающий набор также разделен на пропорции 80/20 по 3600, сохраняя при этом 8705 классов. В обучении я использую SGD, CrossEntropyLoss и Step. LR = 0,01, Momentum = 0,9, Weight_decay = 0,00005, lr_step_size = 10000, lr_gamma = 0,01 [code]def train_epoch(self, epoch, total_epochs):
return running_loss / len(self.train_loader), 100 * correct / total [/code] Можете ли вы сказать мне, в чем проблема, потому что я уже давно бьюсь над этой проблемой. Я попробовал перейти с SGD на оптимизатор AdamW, и показатели значительно улучшились, но мне это кажется подозрительным. Спасибо