CNN 权重卡住
CNN weights getting stuck
这是一个略带理论性的问题。下面是一张图表,描绘了 CNN 正在接受训练时的损失。 Y轴是MSE,X轴是Epochs的数量。
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
输入和输出都是一个数字数组。这是一个多元回归输出问题。
如果我使用较低的学习率,loss/weights 卡在错误位置的问题就不会发生。但是,它仍然会发生。从某种意义上说,这意味着由 CNN 参数创建的超维 space 带有许多局部最小值。这可能是真的,因为 CNN 的输入非常相似。增加 CNN 的层数(conv 层和完全连接的线性层)是否有助于解决这个问题,因为它们的超维 space 可能更平滑?或者这种直觉是完全错误的?
一个更广泛的问题,你应该在什么时候倾向于添加更多的卷积层?我知道在实践中你几乎不应该从头开始,而是使用另一个模型的前几层。但是,我使用的输入与我在网上找到的任何输入都非常不同,因此无法执行此操作。
这是一个多类分类问题吗?如果是这样,您可以尝试使用 cross entropy loss。也许在输出之前有一个 softmax 层?我不确定,因为我不知道模型的输入和输出是什么。
这是一个略带理论性的问题。下面是一张图表,描绘了 CNN 正在接受训练时的损失。 Y轴是MSE,X轴是Epochs的数量。
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
输入和输出都是一个数字数组。这是一个多元回归输出问题。
如果我使用较低的学习率,loss/weights 卡在错误位置的问题就不会发生。但是,它仍然会发生。从某种意义上说,这意味着由 CNN 参数创建的超维 space 带有许多局部最小值。这可能是真的,因为 CNN 的输入非常相似。增加 CNN 的层数(conv 层和完全连接的线性层)是否有助于解决这个问题,因为它们的超维 space 可能更平滑?或者这种直觉是完全错误的? 一个更广泛的问题,你应该在什么时候倾向于添加更多的卷积层?我知道在实践中你几乎不应该从头开始,而是使用另一个模型的前几层。但是,我使用的输入与我在网上找到的任何输入都非常不同,因此无法执行此操作。
这是一个多类分类问题吗?如果是这样,您可以尝试使用 cross entropy loss。也许在输出之前有一个 softmax 层?我不确定,因为我不知道模型的输入和输出是什么。