Text CNN 反向传播过程速度过慢

利用pytorch写的cnn网络,对文本进行分类,forward过程一般都是几毫秒,而backward过程需要六七十秒,不知道什么原因,求解答

img

我只能猜测你是不是反向没有调用cuda或者显存满了。
第二个就是pytorch本身的问题了,之前遇到过30系和cu111的版本匹配不好(1080ti一样的环境配置都没这个问题),前向大概0.8,反向将近8秒,差了10倍,但是没有像你这么夸张,你这个都上千倍了。后面重新搭建环境,将pytorch和cuda都换成新版之后好了,不过这个是一年多两年前,那时候是将torch1.7升级到torch1.8.2,后面就一直用的1.8.2版本没换过了,我也不知道其他版本会有别的问题没。

以下内容部分参考ChatGPT模型:


可能的原因是反向传播过程中计算的梯度过于复杂,导致计算时间较长。可以尝试以下方法优化反向传播过程:

  1. 减少网络层数或者减少每层的神经元数量,降低模型复杂度。

  2. 使用更高效的优化器,例如Adam或者Adagrad,可以加速反向传播过程。

  3. 对于文本分类问题,可以使用预训练的词向量,减少网络中需要训练的参数数量。

  4. 将模型转移到GPU上进行计算,加速模型训练。

以下是一些可能有用的代码示例:

  1. 使用Adam优化器:
import torch.optim as optim

optimizer = optim.Adam(model.parameters(), lr=0.001)
  1. 使用预训练的词向量:
import torch.nn as nn
import torch.nn.functional as F

class TextCNN(nn.Module):
    def __init__(self, embedding_matrix):
        super(TextCNN, self).__init__()
        self.embedding = nn.Embedding.from_pretrained(embedding_matrix, freeze=True)
        self.conv1 = nn.Conv2d(1, 16, (3, embedding_matrix.shape[1]))
        self.conv2 = nn.Conv2d(1, 16, (4, embedding_matrix.shape[1]))
        self.conv3 = nn.Conv2d(1, 16, (5, embedding_matrix.shape[1]))
        self.fc = nn.Linear(16*3, num_classes)

    def forward(self, x):
        x = self.embedding(x)
        x = x.unsqueeze(1)
        x1 = F.relu(self.conv1(x)).squeeze(3)
        x2 = F.relu(self.conv2(x)).squeeze(3)
        x3 = F.relu(self.conv3(x)).squeeze(3)

        x1 = F.max_pool1d(x1, x1.size(2)).squeeze(2)
        x2 = F.max_pool1d(x2, x2.size(2)).squeeze(2)
        x3 = F.max_pool1d(x3, x3.size(2)).squeeze(2)

        x = torch.cat((x1, x2, x3), 1)
        x = self.fc(x)
        return x
  1. 将模型转移到GPU上:
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

model.to(device)

如果我的建议对您有帮助、请点击采纳、祝您生活愉快