Я надеюсь, что некоторые из вас могут помочь мне с этим:
Итак, у меня есть сеть, состоящая из 36 входов. Обычно эта сеть имеет более полумиллиона полей данных, но в настоящее время я работаю с меньшим количеством данных. (Около 40.000 данных)
Цель сетей - предсказать количество людей в комнате в зависимости от их среды. Окружение представлено 36 входными нейронами.
Во-первых, я попытался использовать 4 слоя с 36 входами и выходами. Абсолютная разница между прогнозируемыми людьми и количеством людей, которые должны быть там, составляет около 160. Это довольно много, когда сумма перемещается только между 0 и 2100. Когда я делаю это со всеми данными, это около 200.
Итак, теперь я попытался увеличить количество слоев и нейронов в моей сети. Как вы можете видеть в моем коде, у меня есть 10 слоев, все они имеют по крайней мере 10.000 выходных нейронов. Как может быть, что моя сеть все еще настолько неточна? Влияет ли изменение на мою сеть каким-либо образом? Может кто-нибудь сказать мне, пожалуйста? Я знаю схему нейронных сетей, и увеличение всех этих параметров должно помочь ... обычно ...
Итак, это мой класс сети:
class Network(nn.Module):
def __init__(self):
super(Network, self).__init__()
self.linear1 = nn.Linear(36, 10000) #36 Input-Neurons, 36 Output-Neurons, Linearer Layer
self.linear2 = nn.Linear(36, 10000)
self.linear3 = nn.Linear(36, 10000)
self.linear4 = nn.Linear(36, 10000)
self.linear5 = nn.Linear(36, 20000)
self.linear6 = nn.Linear(36, 20000)
self.linear7 = nn.Linear(36, 10000)
self.linear8 = nn.Linear(36, 10000)
self.linear9 = nn.Linear(36, 10000)
self.linear10 = nn.Linear(36, 1)
def forward(self, x):
pax_predict = F.torch.relu(self.linear1(x))
pax_predict = F.torch.relu(self.linear2(x))
pax_predict = F.torch.relu(self.linear3(x))
pax_predict = F.torch.relu(self.linear4(x))
pax_predict = F.torch.relu(self.linear5(x))
pax_predict = F.torch.relu(self.linear6(x))
pax_predict = F.torch.relu(self.linear7(x))
pax_predict = F.torch.relu(self.linear8(x))
pax_predict = F.torch.relu(self.linear9(x))
pax_predict = self.linear10(x)
return pax_predict
def num_flat_features(self, pax_predict):
size = pax_predict.size()[1:]
num = 1
for i in size:
num *= i
return num
network = Network()
print('Netzwerk:')
print(network)
print()
После обучения:
optimizer = torch.optim.Adam(network.parameters(), lr=50)
#optimizer = torch.optim.SGD(network.parameters(), lr=0.0022, momentum=0.8)
switch = 1
def training():
target = y_train_tensor
for epoch in range(200):
input = x_train_tensor
y_prediction = network(input)
loss = criterion(y_prediction, target)
wurzel = math.sqrt(loss)
loss_avg = loss /len(y_train_tensor)
wurzel_avg = math.sqrt(loss_avg)
optimizer.zero_grad()
loss.backward()
optimizer.step()
print('Epoch:', epoch, ' Total Loss:', loss.data,'Sqroot:', wurzel)
print('Average Loss:', loss_avg, 'Avg. Sqrt:', wurzel_avg)
print()
plt.scatter(epoch, loss_avg.data, color='r', s=10, marker='.')
plt.xlabel('Epochen')
plt.ylabel('Loss')
plt.savefig('./plot/loss/figure.png', dpi = 300)
## Gewichtsausgabe #########################################################################################
############################################################################################################
weights_list = list(network.parameters())
print('Gewichtsliste:')
print (weights_list)
weights_numpy = np.asarray(weights_list)
print('Array:', weights_numpy)
Я надеюсь, что кто-то из вас сможет мне помочь.
Большое спасибо заранее! Большое сообщество
С уважением, Кристиан Рихтер