#python #neural-network #pytorch
Вопрос:
Я создаю простую полностью подключенную нейронную сеть для миссии векторного отображения, str_features (3202 X 100) — это входные данные сети, sem_features (3202 X 1903) — это векторы, которые мне нужно сравнить, размер in_size равен 100 dim, размер out_size равен 1900 dim. Сетевые коды и функция оптимизации следующие:
```
net = torch.nn.Sequential(torch.nn.Linear(in_size, 128),
torch.nn.ReLU(),
torch.nn.Linear(128, out_size)).to('cuda:0')
optimizer = torch.optim.Adam(net.parameters(), lr=0.01)
loss_func = torch.nn.MSELoss()
for epoch in range(100):
net.train()
logits = net(str_features)
loss = loss_func(logits[train_idx], sem_features[train_idx])
optimizer.zero_grad()
loss.backward()
optimizer.step()
```
Я пробовал многие методы настройки параметров, такие как функции активации (пробовал: ReLU, Tanh, Дырявый Relu), количество слоев (пробовал: 3,4,5), количество скрытых блоков (пробовал: 64, 128, 500, 1000), функции потерь (попробовано: MSELoss, SmoothL1Loss, косинусоидальность, косинусоидальность), количество эпох обучения и т. Д. Но каждый раз он сходится к тестовому значению около 0,5 (диапазон значений [-1,1]) после 100 тренировочных эпох.
Находится ли это в ловушке локального оптимального решения, и как мне выпрыгнуть из него? Любая помощь приветствуется.