【卷积神经网络】针对训练过程中Loss突然变大问题的思考

在神经网络的训练过程中,正常情况下整体的过程是一个Loss不断下降的过程,然而在训练过程中往往存在一些batch_size输入时,前向传播得到的Loss突然变大的情景。

在训练神经网络过程中,经过softmax函数输出概率后,当当前最大概率对应的类别与训练标签一致时,损失Loss往往较小,而经过softmax输出时,训练标签所对应的概率softmax概率较小,此时的Loss计算结果往往很大。对此引出两个解决问题的思路:

1.可能是训练标签未进行很好的标注,假设当前是一个二分类问题,我们需要提前定义的标签类别为0,1。假设一个标签被错误的定义为2,导致此batch输入无论怎么训练得到的结果都是错误的分类,导致Loss过大情形,此时需要我们可以通过重新制作训练标签来解决。

2.可以通过设定一些条件来对Loss进行约束,在训练过程中如果出现Loss增大程度超出了一定的阈值,可以将此时的Loss强制设为0,这样在反向传播时就不会对权重和bias系数的迭代更新做贡献。

### 使用 DeepSeek R1 进行猫狗分类模型训练 DeepSeek R1 是一款专注于增强大型语言模型推理能力的大规模预训练模型[^2]。然而,该模型主要用于自然语言处理任务,并不是专门为图像识别设计的框架。对于猫狗分类这样的计算机视觉任务,通常会采用卷积神经网络(CNNs)或其他专门针对图像数据优化的深度学习架构。 尽管如此,在某些情况下可以尝试将文本描述与图片相结合的方式利用到多模态学习中去。如果确实希望基于 DeepSeek R1 来实现这一目标,则可能需要考虑以下几个方面: #### 数据准备 为了适应 DeepSeek R1 的输入格式,应当收集并标注大量带有文字说明的猫狗照片作为训练集。每张图片都应该配有清晰的文字标签来指示其类别——即“猫”或“狗”。 #### 特征提取 考虑到原始版本可能是为了解决NLP问题而构建,因此有必要引入额外的技术手段用于从图像中抽取特征向量。这一步骤可以通过迁移学习的方法完成,比如选用已经过ImageNet预训练过的ResNet、VGG等经典CNN结构来进行特征编码工作。 #### 跨模态融合 接下来就是思考怎样把上述两部分的信息有效地结合起来传递给 DeepSeek R1 。一种可行方案是先分别获取各自领域内的表示形式再加以拼接;另一种则是探索更复杂的交互机制如注意力机制等让两者之间产生更多关联度更的交流模式。 #### 训练过程调整 最后也是最关键的一环在于重新定义损失函数以及微调超参数使得整个系统能够在新的目标任务上取得良好表现。由于涉及到不同类型的输入源所以这里可能会遇到一些挑战,例如权重初始化策略的选择或是正则化方法的应用等等都需要仔细斟酌。 ```python import torch from transformers import AutoModelForSequenceClassification, AutoTokenizer from torchvision.models import resnet50 from PIL import Image from torch.utils.data import Dataset, DataLoader class MultiModalDataset(Dataset): def __init__(self, image_paths, texts, labels): self.image_transform = ... # Define your transformation pipeline here self.tokenizer = AutoTokenizer.from_pretrained('deepseek-r1') self.images = [Image.open(path).convert('RGB') for path in image_paths] self.texts = texts self.labels = labels def __len__(self): return len(self.labels) def __getitem__(self, idx): img_tensor = self.image_transform(self.images[idx]) text_encoding = self.tokenizer( self.texts[idx], truncation=True, padding='max_length', max_length=512, return_tensors="pt" ) item = { 'input_ids': text_encoding['input_ids'].squeeze(), 'attention_mask': text_encoding['attention_mask'].squeeze(), 'image_features': img_tensor, 'label': self.labels[idx], } return item def train_model(): device = "cuda" if torch.cuda.is_available() else "cpu" model_text = AutoModelForSequenceClassification.from_pretrained('deepseek-r1').to(device) model_image = resnet50(pretrained=True).to(device) dataset = MultiModalDataset(image_paths=['path/to/images'], texts=["description"], labels=[0]) # Replace with actual data. dataloader = DataLoader(dataset, batch_size=8, shuffle=True) optimizer = ... for epoch in range(num_epochs): for batch in dataloader: outputs_text = model_text(input_ids=batch["input_ids"].to(device), attention_mask=batch["attention_mask"].to(device)) features_img = model_image(batch["image_features"].unsqueeze(0).to(device)) combined_representation = torch.cat((outputs_text.logits.mean(dim=-1), features_img.flatten()), dim=-1) loss_fn(combined_representation, batch["labels"]) optimizer.zero_grad() loss.backward() optimizer.step() train_model() ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值