如何在Pytorch中的3 * n矩阵的三个轴上使用三个Conv1d?

时间:2017-11-03 05:01:03

标签: deep-learning pytorch

以下是我的CNN。它的输入是一个(3,64)矩阵,我想用三个卷积核分别处理x,y,z轴。

class Char_CNN(nn.Module):
    def __init__(self):
        super(Char_CNN, self).__init__()
        self.convdx = nn.Conv1d(1, 12, 20)
        self.convdy = nn.Conv1d(1, 12, 20)
        self.convdz = nn.Conv1d(1, 12, 20)
        self.fc1 = nn.Linear(540, 1024)
        self.fc2 = nn.Linear(1024, 30)
        self.fc3 = nn.Linear(30, 13)

    def forward(self, x):
        after_convd = [self.convdx(x[:, :, 0]), self.convdy(x[:, :, 1]), self.convdz(x[:, :, 2])]
        after_pool = [F.max_pool1d(F.relu(value), 3) for value in after_convd]

        x = torch.cat(after_pool, 1)
        x = x.view(x.size(0), -1)
        x = self.fc1(x)
        x = self.fc2(x)
        x = self.fc3(x)
        x = F.softmax(x)
        return x

但在loss = criterion(out, target)运行期间,会发生RunTime错误:

  

RuntimeError:断言`cur_target> = 0&& cur_target< n_classes'失败。

我对pytorch很新,所以我找不到代码的错误。 你能救我吗?

1 个答案:

答案 0 :(得分:0)

卷积的方式还可以。问题是我的标签在1到13之间,正确的范围是0到12。 修改后,我的CNN成功运作。 但作为Pytorch的新鲜和深度学习,我想我的卷积模式可以更清晰,更容易。欢迎指出我的错误!