batch_size=args.batch_size, shuffle=True) valid_loader = torch.utils.data.DataLoader(NACCDataset(val_dir, "valid"), batch_size=args.batch_size, shuffle=False) # to make the model #model = make_model(h=args.head_number, d_model=args.d_model, d_ff=args.d_ff, dropout=args.dropout, max_len=args.max_len, record_dim=args.record_dim, d_ff_hidden=args.d_ff_hidden, N=args.encoder_num, de_factor=args.de_factor) model = LinearRegression(args.feature_dim, args.output_dim) # put model into the correspoinding device device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") model.to(device) # define optimizer optimizer = optim.Adam(model.parameters(), lr=args.lr, betas=(args.beta1, args.beta2), eps=args.epsilon) # define scheduler scheduler = lr_scheduler.ReduceLROnPlateau(optimizer, mode="min", factor=0.5, patience=2, verbose=True) # define the criterion # How to get weights: # e.g., weight of NORM = (# all training samples) / (# normal samples) training_loss_weights = [2.488, 43.346, 3.295, 3.683]
y = torch.unsqueeze(torch.tensor([7.7, 7, 6.5, 6, 5.2, 5, 4.3, 3.8], dtype=torch.float ), 1) # * Vẽ đồ thị điểm # plt.scatter(x, y) # plt.show() # ! Linear regression # * Khởi tạo model linear regression thông báo số chiều của đầu vào là 1 và đầu ra là 1 model = LinearRegression(1, 1) # * Khởi tạo MSE loss function mse = nn.MSELoss() # * Learning rate alpha = 0.01 # * Tối ưu loss function với Stochastic gradient descent optimizer = torch.optim.SGD(model.parameters(), lr=alpha) # * Số lần lặp epoch iter_number = 5000 # * Chạy thuật toán for iter in range(iter_number): # * Từ giá trị theta của model hiện tại dự đoán giá trị ra y_pred = model(x) # * Từ giá trị dự đoán và giá trị thực tế tìm ra được loss function hiện tại loss = mse(y_pred, y) # print("Model: ", [i for i in model.parameters()]) print("Loss: ", loss.data) # print("Pred: ", y_pred.data) # print("Real: ", y) # * Tạo ra đạo hàm gốc là 0, pytorch sẽ cộng dồn đạo hàm trong quá trình back propagation.