J'essaie d'extraire les poids d'une couche linéaire, mais ils ne semblent pas changer, bien que l'erreur baisse de façon monotone (c'est-à-dire que la formation se produit). En imprimant la somme des poids, rien ne se passe car elle reste constante:
np.sum (model.fc2.weight.data.numpy ())
Voici les extraits de code:
def train(epochs):
model.train()
for Epoch in range(1, epochs+1):
# Train on train set
print(np.sum(model.fc2.weight.data.numpy()))
for batch_idx, (data, target) in enumerate(train_loader):
data, target = Variable(data), Variable(data)
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step()
et
# Define model
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
# an affine operation: y = Wx + b
self.fc1 = nn.Linear(100, 80, bias=False)
init.normal(self.fc1.weight, mean=0, std=1)
self.fc2 = nn.Linear(80, 87)
self.fc3 = nn.Linear(87, 94)
self.fc4 = nn.Linear(94, 100)
def forward(self, x):
x = self.fc1(x)
x = F.relu(self.fc2(x))
x = F.relu(self.fc3(x))
x = F.relu(self.fc4(x))
return x
Peut-être que je regarde les mauvais paramètres, bien que j'aie vérifié les documents. Merci de votre aide!
Utilisez model.parameters()
pour obtenir un poids entraînable pour n'importe quel modèle ou couche. N'oubliez pas de le mettre dans list (), sinon vous ne pourrez pas l'imprimer.
La capture de code suivante a fonctionné
>>> import torch
>>> import torch.nn as nn
>>> l = nn.Linear(3,5)
>>> w = list(l.parameters())
>>> w