CNN重量卡住

时间:2018-07-16 14:43:26

标签: conv-neural-network pytorch gradients hyperparameters

这是一个理论上的问题。下图是训练CNN时的损耗图。 Y轴是MSE,X轴是纪元数。enter image description here

CNN的描述:

class Net(nn.Module):

def __init__ (self):
    super(Net, self).__init__()
    self.conv1 = nn.Conv1d(in_channels = 1, out_channels = 5, kernel_size = 9) #.double
    self.pool1 = nn.MaxPool1d(3)
    self.fc1 = nn.Linear(5*30, 200)
    #self.dropout = nn.Dropout(p = 0.5)
    self.fc2 = nn.Linear(200, 99)

def forward(self, x):
    x = self.pool1(F.relu(self.conv1(x)))
    x = x.view(-1, 5 * 30)
    #x = self.dropout(F.relu(self.fc1(x)))
    x = F.relu(self.fc1(x))
    x = self.fc2(x)
    return x

def init_weights(m):
    if type(m) == nn.Linear:
       nn.init.xavier_uniform_(m.weight)
       m.bias.data.fill_(0.01)


 net = Net()
 net.apply(init_weights)

 criterion = nn.MSELoss()
 optimizer = optim.Adam(net.parameters(), lr=0.01-0.0001) # depends

输入和输出都是数字数组。这是一个多回归输出问题。

如果我使用较低的学习率,那么损失/权重卡在不正确位置的问题就不会那么多了。但是,它仍然发生。从某种意义上讲,这意味着由CNN参数创建的超维空间与许多局部最小值交错在一起。这可能是正确的,因为CNN的输入非常相似。增加CNN的层,转换层和完全连接的线性是否会解决此问题,因为它们的超维空间可能更平滑?还是这种直觉是完全不正确的? 一个更广泛的问题,您何时应该倾向于添加更多的卷积层?我知道,实际上,您几乎不应该从头开始,而应该使用其他模型的前几层。但是,我使用的输入与我在网上找到的任何输入都大不相同,因此无法执行此操作。

1 个答案:

答案 0 :(得分:0)

这是一个多类分类问题吗?如果是这样,您可以尝试使用cross entropy loss。而输出之前的softmax层呢?我不确定,因为我不知道模型的输入和输出是什么。