Esempio n. 1
0
def train():   

    train_loader = DataLoader(dataset=dataset,
                                batch_size=config.batch,
                                shuffle=True,
                                collate_fn=collate_fn,
                                num_workers=0)

    model = SVM(config.embedding, config.strmaxlen, dataset.get_vocab_size(), config.output_size)
    optimizer = optim.SGD(model.parameters(), lr=config.lr)
    model.train()
    for epoch in range(config.epoch):

        sum_loss = 0
        for i, (data, labels) in enumerate(train_loader):


            optimizer.zero_grad()
            output = model(data).squeeze()
            weight = model.weight.squeeze()
            weight = weight.reshape((weight.shape[0],1))
            
            loss = model.loss(output, labels)
            tmp = weight.t() @ weight
            loss += config.c * tmp[0][0] / 2.0

            loss.backward()
            optimizer.step()

            sum_loss += float(loss)

        print("Epoch: {:4d}\tloss: {}".format(epoch, sum_loss /len(dataset)))
Esempio n. 2
0
# model = SVM()
# model.compile(lambda_=2.5e4, alpha=1e-7)  # 1e-7, reg=2.5e4,
# loss_history = model.train(X, y, eps=0.001, batch=200, iter_=1500)
#
# plt.plot(range(len(loss_history)), loss_history)
# plt.xlabel('Iteration number')
# plt.ylabel('Loss value')
# plt.show()
# print(loss_history[::100])
# lr, rg = SVM.ff(X, y, Xv, Yv, [1e-7, 1e-6],[2e4, 2.5e4, 3e4, 3.5e4, 4e4, 4.5e4, 5e4, 6e4])
# print(lr, rg)
model = SVM()
model.compile(alpha=1e-7, lambda_=2, activation=Softmax, reg=L2)
# model.compile(alpha=0, lambda_=0, activation=Hinge, Reg=L2, dReg=dL2)
history = model.train(Xd, Yd, iter_=0, eps=0.0001)
print(model.loss(model.X, model.y, add_ones=False),
      np.sum(model.grad(model.X, model.y, False)))
L, dW = model.grad(model.X, model.y, True)
print(L, np.sum(dW))
# print(np.sum(model.W))

# print(np.sum(model.grad(model.X, model.y, loss_=False)))
# print(np.sum(model.grad1(model.X, model.y)))
# L, dW = model.activation.loss_grad_loop(model.X, model.W, model.y)
# print(L, np.sum(dW))

loss_history = model.train(X, y, eps=0.0001, batch=200, iter_=1500)
plt.plot(range(len(loss_history)), loss_history)
plt.xlabel('Iteration number')
plt.ylabel('Loss value')
plt.show()