From 0704fbafa336e8d5bfc4cdd955afd51c7245534f Mon Sep 17 00:00:00 2001 From: Sulong <88147012+Su-long-ai@users.noreply.github.com> Date: Wed, 12 Mar 2025 12:30:53 +0800 Subject: [PATCH 1/3] Update semantic-segmentation-and-dataset.md --- .../semantic-segmentation-and-dataset.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/chapter_computer-vision/semantic-segmentation-and-dataset.md b/chapter_computer-vision/semantic-segmentation-and-dataset.md index 9cc5fc5d8..e607c13e1 100644 --- a/chapter_computer-vision/semantic-segmentation-and-dataset.md +++ b/chapter_computer-vision/semantic-segmentation-and-dataset.md @@ -447,7 +447,7 @@ voc_test = VOCSegDataset(False, crop_size, voc_dir) batch_size = 64 train_iter = gluon.data.DataLoader(voc_train, batch_size, shuffle=True, last_batch='discard', - num_workers=d2l.get_dataloader_workers()) + num_workers=0) for X, Y in train_iter: print(X.shape) print(Y.shape) @@ -459,7 +459,7 @@ for X, Y in train_iter: batch_size = 64 train_iter = torch.utils.data.DataLoader(voc_train, batch_size, shuffle=True, drop_last=True, - num_workers=d2l.get_dataloader_workers()) + num_workers=0) for X, Y in train_iter: print(X.shape) print(Y.shape) @@ -472,7 +472,7 @@ batch_size = 64 train_iter = paddle.io.DataLoader(voc_train, batch_size=batch_size, shuffle=True, drop_last=True, return_list=True, - num_workers=d2l.get_dataloader_workers()) + num_workers=0) for X, Y in train_iter: print(X.shape) print(Y.shape) @@ -490,7 +490,7 @@ def load_data_voc(batch_size, crop_size): """加载VOC语义分割数据集""" voc_dir = d2l.download_extract('voc2012', os.path.join( 'VOCdevkit', 'VOC2012')) - num_workers = d2l.get_dataloader_workers() + num_workers = 0 train_iter = gluon.data.DataLoader( VOCSegDataset(True, crop_size, voc_dir), batch_size, shuffle=True, last_batch='discard', num_workers=num_workers) @@ -507,7 +507,7 @@ def load_data_voc(batch_size, crop_size): """加载VOC语义分割数据集""" voc_dir = d2l.download_extract('voc2012', os.path.join( 'VOCdevkit', 'VOC2012')) - num_workers = d2l.get_dataloader_workers() + num_workers = 0 train_iter = torch.utils.data.DataLoader( VOCSegDataset(True, crop_size, voc_dir), batch_size, shuffle=True, drop_last=True, num_workers=num_workers) @@ -524,7 +524,7 @@ def load_data_voc(batch_size, crop_size): """加载VOC语义分割数据集""" voc_dir = d2l.download_extract('voc2012', os.path.join( 'VOCdevkit', 'VOC2012')) - num_workers = d2l.get_dataloader_workers() + num_workers = 0 train_iter = paddle.io.DataLoader( VOCSegDataset(True, crop_size, voc_dir), batch_size=batch_size, shuffle=True, return_list=True, drop_last=True, num_workers=num_workers) From 70ed75e38912f10ac1dbf9ad8efee0d9c72c9bfe Mon Sep 17 00:00:00 2001 From: Sulong <88147012+Su-long-ai@users.noreply.github.com> Date: Wed, 12 Mar 2025 12:32:11 +0800 Subject: [PATCH 2/3] Update semantic-segmentation-and-dataset_origin.md --- .../semantic-segmentation-and-dataset_origin.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/chapter_computer-vision/semantic-segmentation-and-dataset_origin.md b/chapter_computer-vision/semantic-segmentation-and-dataset_origin.md index 93a82a363..94ea90a21 100644 --- a/chapter_computer-vision/semantic-segmentation-and-dataset_origin.md +++ b/chapter_computer-vision/semantic-segmentation-and-dataset_origin.md @@ -383,7 +383,7 @@ Different from in image classification or object detection, labels here are thre batch_size = 64 train_iter = gluon.data.DataLoader(voc_train, batch_size, shuffle=True, last_batch='discard', - num_workers=d2l.get_dataloader_workers()) + num_workers=0) for X, Y in train_iter: print(X.shape) print(Y.shape) @@ -395,7 +395,7 @@ for X, Y in train_iter: batch_size = 64 train_iter = torch.utils.data.DataLoader(voc_train, batch_size, shuffle=True, drop_last=True, - num_workers=d2l.get_dataloader_workers()) + num_workers=0) for X, Y in train_iter: print(X.shape) print(Y.shape) @@ -414,7 +414,7 @@ def load_data_voc(batch_size, crop_size): """Load the VOC semantic segmentation dataset.""" voc_dir = d2l.download_extract('voc2012', os.path.join( 'VOCdevkit', 'VOC2012')) - num_workers = d2l.get_dataloader_workers() + num_workers = 0 train_iter = gluon.data.DataLoader( VOCSegDataset(True, crop_size, voc_dir), batch_size, shuffle=True, last_batch='discard', num_workers=num_workers) @@ -431,7 +431,7 @@ def load_data_voc(batch_size, crop_size): """Load the VOC semantic segmentation dataset.""" voc_dir = d2l.download_extract('voc2012', os.path.join( 'VOCdevkit', 'VOC2012')) - num_workers = d2l.get_dataloader_workers() + num_workers = 0 train_iter = torch.utils.data.DataLoader( VOCSegDataset(True, crop_size, voc_dir), batch_size, shuffle=True, drop_last=True, num_workers=num_workers) From 1a7f75e83b6badb668a5284efeff96ca643b9c26 Mon Sep 17 00:00:00 2001 From: Sulong <88147012+Su-long-ai@users.noreply.github.com> Date: Fri, 4 Jul 2025 20:09:03 +0800 Subject: [PATCH 3/3] Update seq2seq.md --- chapter_recurrent-modern/seq2seq.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/chapter_recurrent-modern/seq2seq.md b/chapter_recurrent-modern/seq2seq.md index 0b587cb8d..9ddcb00c8 100644 --- a/chapter_recurrent-modern/seq2seq.md +++ b/chapter_recurrent-modern/seq2seq.md @@ -609,17 +609,20 @@ class MaskedSoftmaxCELoss(gluon.loss.SoftmaxCELoss): ```{.python .input} #@tab pytorch #@save -class MaskedSoftmaxCELoss(nn.CrossEntropyLoss): +class MaskedSoftmaxCELoss(nn.Module): """带遮蔽的softmax交叉熵损失函数""" # pred的形状:(batch_size,num_steps,vocab_size) # label的形状:(batch_size,num_steps) # valid_len的形状:(batch_size,) + def __init__(self, **kwargs): + super(MaskedSoftmaxCELoss, self).__init__(**kwargs) + # 初始化 nn.CrossEntropyLoss 作为类的成员 + # reduction='none' 确保返回的是未聚合的逐元素损失,方便遮蔽 + self.cross_entropy = nn.CrossEntropyLoss(reduction='none') def forward(self, pred, label, valid_len): weights = torch.ones_like(label) weights = sequence_mask(weights, valid_len) - self.reduction='none' - unweighted_loss = super(MaskedSoftmaxCELoss, self).forward( - pred.permute(0, 2, 1), label) + unweighted_loss = self.cross_entropy(pred.permute(0, 2, 1), label) weighted_loss = (unweighted_loss * weights).mean(dim=1) return weighted_loss ``` @@ -1120,4 +1123,4 @@ for eng, fra in zip(engs, fras): :begin_tab:`paddle` [Discussions](https://discuss.d2l.ai/t/11838) -:end_tab: \ No newline at end of file +:end_tab: