以下是我的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很新,所以我找不到代码的错误。 你能救我吗?
答案 0 :(得分:0)
卷积的方式还可以。问题是我的标签在1到13之间,正确的范围是0到12。 修改后,我的CNN成功运作。 但作为Pytorch的新鲜和深度学习,我想我的卷积模式可以更清晰,更容易。欢迎指出我的错误!