Dacă stocăm straturi neuronale într-o listă Python standard (self.layers = [nn.Linear(10, 10)...]), PyTorch nu va înregistra parametrii acestora ca aparținând modelului părinte. În consecință, apelul model.parameters() va ignora complet aceste greutăți, iar optimizatorul nu le va antrena.
Soluția este utilizarea containerelor speciale nn.ModuleList și nn.ModuleDict:
import torch
import torch.nn as nn
class DeepMLP(nn.Module):
def __init__(self, in_features, hidden_size, num_layers):
super().__init__()
# Înregistrare corectă a listei de straturi
self.layers = nn.ModuleList([
nn.Linear(in_features if i == 0 else hidden_size, hidden_size)
for i in range(num_layers)
])
self.activation = nn.GELU()
def forward(self, x):
for layer in self.layers:
x = self.activation(layer(x))
return x
model = DeepMLP(64, 128, 4)
print("Număr parametri înregistrați:", len(list(model.parameters())))
Toate sub-modulele adăugate în ModuleList sunt migrate corect la apelarea model.to('cuda').
Întrebări & Exemple practice:
Colecții Dinamice de Straturi: nn.ModuleList și nn.ModuleDictAi o întrebare despre Colecții Dinamice de Straturi: nn.ModuleList și nn.ModuleDict sau ai descoperit un truc, prompt sau fragment de cod util? Distribuie-l cu ceilalți membri ai comunității!
Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau resurse pentru această pagină. Dacă ai testat un prompt sau ai un snippet util, adaugă-l mai jos pentru comunitate.