2017-12-27 8 views
0

Ich versuche, versteckte Einheiten zu einem neuronalen Netzwerk mit drei Ebenen (Eingabe, verborgen, Ausgabe) dynamisch hinzuzufügen, wenn ich es trainiere. Ich möchte die Gewichte von geschultem Teil des Netzes zu halten, wie ich neue versteckt units.This hinzuzufügen ist mein Code,Dynamisches Hinzufügen von versteckten Einheiten in pytorch

class my_network(torch.nn.Module): 
    def __init__(self,input_dim,hidden_dim,output_dim): 
     super(my_network,self).__init__() 
     self.I = input_dim 
     self.H = hidden_dim 
     self.O = output_dim 
     self.layer1 = torch.nn.Linear(input_dim,hidden_dim) 
     self.layer2 = torch.nn.Linear(hidden_dim,output_dim) 

    def add_neurons(self,no_of_neurons,flag): 
     if flag == 1: 
      weights = [self.layer1.weight.data,self.layer2.weight.data] 
      self.layer1 = torch.nn.Linear(self.I,self.H+no_of_neurons) 
      self.layer2 = torch.nn.Linear(self.H+no_of_neurons,self.O) 
      self.layer1.weight.data[0:-no_of_neurons,:] = weights[0] 
      self.layer2.weight.data[:,0:-no_of_neurons] = weights[1] 
      self.H = self.H + no_of_neurons 
     return self.layer1.weight.shape[0] 

    def forward(self,x): 
     temp = self.layer1(x) 
     out = self.layer2(temp) 
     return out 

Ich habe bemerkt, dass, sobald ich „add_neurons“ Methode aufrufen, die Gewichte zu stoppen Aktualisierung (während Gradienten sind generiert). Jede Hilfe würde sehr geschätzt werden.

Antwort

0

Der Optimierer wird möglicherweise nicht über neue Parameter informiert, die Sie zu Ihrem Modell hinzugefügt haben. Am einfachsten wäre es wahrscheinlich, das Optimizer-Objekt mit der aktualisierten Liste der Modellparameter neu zu erstellen.

Verwandte Themen