• 1000 Моя модель похожа на
# architecture Autorec
class Model(nn.Module):
def __init__(self, num_latent, num_items, dropout=0.05):
super(Model, self).__init__()
self.encoder = nn.Linear(num_items, num_latent)
self.decoder = nn.Linear(num_latent, num_items)
def forward(self, inputs):
x = self.encoder(inputs)
x = F.leaky_relu(x)
outputs = self.decoder(x)
#outputs = F.linear(x)
return outputs
И функция поезда выглядит как
def train(num_epochs, batch_size, criterion, optimizer, model, dataset):
dataloader = DataLoader(dataset, batch_size, shuffle=True)
train_error = []
test_error = []
model.train()
for epoch in range(num_epochs):
epoch_average_loss = 0.0
for (X, y) in (dataloader):
print(X.requires_grad())
y_pre = model(X)
loss = criterion(y_pre, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
epoch_average_loss += loss.item() * batch_size / len(train_set)
model.eval()
with torch.no_grad():
y_pre_val = model(torch.from_numpy(np.array(w_test)).float())
error = criterion(y_pre_val, torch.tensor(np.array(w_test_merged)).float()).item()
test_error.append(error)
train_error.append(epoch_average_loss)
if ((epoch+1)%1 == 0):
print('Epoch [{}/{}], Loss_error: {:.4f}'
.format(epoch+1, num_epochs, epoch_average_loss))
return train_error, test_error
Итак, во-первых, как обновить только вес, связанный с вводом, отличным от нуля? Я знаю, что должен использовать requires_grad = False
, но не знаю, как.
Тогда есть ли способ сделать это с помощью batch_size> 1?