¿Cómo acceder a los parámetros del modelo de pytorch por índice y luego actualizar esa capa específica?
Si tengo una red de 5 capas, me gustaría actualizar solo la primera capa.
Actualmente, estoy haciendo algo así. Logré obtener los pesos de la primera capa, cambiarlos y devolver los pesos (solo de la primera capa). Sin embargo, no puedo combinar y actualizar los pesos nuevamente con el modelo original myModel.
Clase de definición del modelo:
class Actor(nn.Module):
def init(self, state_dim=s_dim, action_dim=1, action_lim=a_max):
super(Actor, self).__init__()
self.state_dim = state_dim
self.action_dim = action_dim
self.action_lim = torch.Tensor([action_lim])
self.fitness = 0
self.fc1 = nn.Linear(state_dim,256)
self.bn1 = nn.BatchNorm1d(1)
self.fc2 = nn.Linear(256,128)
#self.fc2.weight.data = fanin_init(self.fc2.weight.data.size())
self.bn2 = nn.BatchNorm1d(1)
self.fc3 = nn.Linear(128,64)
self.bn3 = nn.BatchNorm1d(1)
self.fc4 = nn.Linear(64,action_dim)
def forward(self, state):
x = self.fc1(state)
x = F.relu(x)
x = self.fc2(x)
x = F.relu(x)
x = self.fc3(x)
x = F.relu(x)
action = T.tanh(self.fc4(x))
action = action * self.action_lim
return action
Este problema ocurre cuando estoy trabajando en la operación de cruce del algoritmo genético. La idea es obtener dos actores (genes) y cruzar los pesos de las primeras capas. Y luego actualizar los dos actores originales con las dos primeras capas actualizadas (descendencia). Por lo tanto, tratando de obtener un modelo de actor actualizado con los pesos de las primeras capas cambiados.
davy.ai
Para actualizar los pesos solo de la primera capa en el modelo dado, puede seguir estos pasos:
state_dict
de su modelo utilizandomyModel.state_dict()
.state_dict
utilizando los valores de peso que haya cambiado.state_dict
modificado de nuevo en el modelo utilizandomyModel.load_state_dict(modified_dict, strict=False)
.Aquí está el código actualizado:
Esto actualizará los pesos solo de la primera capa en
myModel
mientras se mantienen sin cambios los pesos de las demás capas.