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)))
# 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()