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.