/
akp1n
/
ADVML
Обзор
Документация
Войти
/
akp1n
/
ADVML
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Lab1/Experiments.py
75 строк
4 KB
Artemiy
Fix
25 дек 2024, 16:19
25 дек 2024, 16:19
e9aa2b5
Код
Авторство
О чём код?
import numpy as np from torch import optim import torch.nn as nn from Models import Net, generate_data, visualize_regression_multiple, find_best_batch_size, test_and_visualize_models, \ generate_simple_data n_samples: int = 10000 n_features: int = 1 n_features_complex = 100 n_targets_complex = 100 n_targets: int = 1 noise: float = 0.8 epochs: int = 30 lr: float = 0.001 batch_sizes: list[int] = [16, 64, 256] loss: nn.Module = nn.MSELoss() def test_simple(): data_simple: list[tuple[np.ndarray, np.ndarray]] = generate_simple_data(n_samples=n_samples, noise=noise) best_batch_size: int = find_best_batch_size(data=data_simple, batch_sizes=batch_sizes, input_size=n_features, output_size=n_targets, epochs=epochs, lr=lr, loss=loss) models: list[Net] = [ Net(input_size=n_features, output_size=n_targets, is_batch_norm=False, is_dropout=False), Net(input_size=n_features, output_size=n_targets, is_batch_norm=True, is_dropout=False), Net(input_size=n_features, output_size=n_targets, is_batch_norm=False, is_dropout=True), Net(input_size=n_features, output_size=n_targets, is_batch_norm=True, is_dropout=True), ] test_and_visualize_models( models=models, data=data_simple, batch_size=best_batch_size, epochs=epochs, lr=lr, loss_fn=nn.MSELoss(), optimizer_cls=optim.Adam, simple_visualization=True ) def test_complex(): data_complex: list[tuple[np.ndarray, np.ndarray]] = generate_data(n_samples=n_samples, n_features=n_features_complex, n_targets=n_targets_complex, noise=noise) best_batch_size: int = find_best_batch_size(data=data_complex, batch_sizes=batch_sizes, input_size=n_features_complex, output_size=n_targets_complex, epochs=epochs, lr=lr, loss=loss) models: list[Net] = [ Net(input_size=n_features_complex, output_size=n_targets_complex, is_batch_norm=False, is_dropout=False), Net(input_size=n_features_complex, output_size=n_targets_complex, is_batch_norm=True, is_dropout=False), Net(input_size=n_features_complex, output_size=n_targets_complex, is_batch_norm=False, is_dropout=True), Net(input_size=n_features_complex, output_size=n_targets_complex, is_batch_norm=True, is_dropout=True), ] test_and_visualize_models( models=models, data=data_complex, batch_size=best_batch_size, epochs=epochs, lr=lr, loss_fn=nn.MSELoss(), optimizer_cls=optim.Adam, simple_visualization=False ) test_simple() test_complex() #Вывод: # На сгенерированных мною данных лучше всего показывает себя модель без батчевой нормализации и без дропаута. # Данные скучкованы и не склонны к переобучению, поэтому батчевая нормализация и дропаут только мешают # Лучший размер батча -- 16 для небольших размерностей, и 64 для больших. # С небольшими размерностями это связано с тем, что чаще меняются значения весов. С большими -- точность вычисления градиента. # Не 256 а 64, потому что с 256 веса меняются очень редка и модель обучается хуже.