Exemple #1
0
    train_loader = DataLoader(d_train, batch_size=batch_size, shuffle=True)
    val_loader = DataLoader(d_val, batch_size=batch_size, shuffle=False)

    ### Train model
    print('Train LSTM ... ')

    model = LSTMClassifier(embedding_dim, hidden_dim, num_layers, batch_size)
    model.init_weights()
    model.embedding.weight = torch.nn.Parameter(torch.Tensor(word2vec.wv.syn0))
    model.embedding.weight.requires_grad = False
    model.cuda()
    print(model)

    criterion = nn.NLLLoss()
    optimizer = optim.Adam(
        filter(lambda p: p.requires_grad, model.parameters()))

    for epoch in range(4):
        train(epoch, model, criterion, optimizer, train_loader)
        validate(epoch, model, val_loader)

    print('Done !')

    ### Save model
    print('Save model ... ', end='')

    torch.save(model.state_dict(), '_model.pt')

    print('Done !')
Exemple #2
0
        outputs = model(words)
        # print("output_shape")
        # print(outputs.shape)
        # if y would be one-hot, we must apply
        # labels = torch.max(labels, 1)[1]
        loss = F.cross_entropy(outputs, labels)

        # Backward and optimize
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

    if (epoch + 1) % 100 == 0:
        print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')

print(f'final loss: {loss.item():.4f}')

data = {
    "model_state": model.state_dict(),
    "input_size": input_size,
    "hidden_size": hidden_size,
    "output_size": output_size,
    "all_words": all_words,
    "tags": tags
}

FILE = "lstmmodel.pth"
torch.save(data, FILE)

print(f'training complete. file saved to {FILE}')