function [ scratch, scratch_score, scratch_da, scratch_da_score, tl, tl_score, tl_da, tl_da_score, ft, ft_score, ft_da, ft_da_score ] = execute_experiment( ...
   ...
        EXPERIMENT_NAME, ...
        dataset_name, ...
        ds, ...
        ds_da,...
        DS_SPLIT_RATIO, ...
        nn_name, ...
        nn ...     
    )


    disp(strcat("Experiment:",EXPERIMENT_NAME));




        options_no_augmented = trainingOptions('sgdm', ...
            'InitialLearnRate',0.0001, ...
            'MaxEpochs',20, ...
            'Shuffle','every-epoch', ...
            'MiniBatchSize',50,...
            'ValidationFrequency',100, ...
            'Plots','training-progress', ...
            'Verbose',false, ...
            'ExecutionEnvironment','gpu',...
            'ValidationData',ds{2});
        
        % prepare for data augmentation training
        options_augmented = trainingOptions('sgdm', ...
            'InitialLearnRate',0.0001, ...
            'MaxEpochs',20, ...
            'Shuffle','every-epoch', ...
            'MiniBatchSize',50,...
            'ValidationFrequency',100, ...
            'Plots','training-progress', ...
            'Verbose',false, ...
            'ExecutionEnvironment','gpu',...
            'ValidationData',ds_da{2});


    train_options = [ options_no_augmented, options_augmented];


    [scratch,scratch_score] = train_and_store(dataset_name,ds,ds,DS_SPLIT_RATIO,strcat(nn_name,"_scratch"),nn(1),train_options(1));
    %save(EXPERIMENT_NAME)
    %[scratch_da,scratch_da_score] = train_and_store(dataset_name,ds_da,ds,DS_SPLIT_RATIO,strcat(nn_name,"_scratch_da"),nn(1),train_options(2));
    %save(EXPERIMENT_NAME)
    %[tl,tl_score]  = train_and_store(dataset_name,ds,ds,DS_SPLIT_RATIO,strcat(nn_name,"_tl"),nn(2),train_options(1));
    %save(EXPERIMENT_NAME)
    %[tl_da,tl_da_score] = train_and_store(dataset_name,ds_da,ds,DS_SPLIT_RATIO,strcat(nn_name,"_tl_da"),nn(2),train_options(2));
    %save(EXPERIMENT_NAME)
 
    %[ft,ft_score]  = train_and_store(dataset_name,ds,ds,DS_SPLIT_RATIO,strcat(nn_name,"_ft"),nn(3),train_options(1));
    %save(EXPERIMENT_NAME)
    %[ft_da,ft_da_score] = train_and_store(dataset_name,ds_da,ds,DS_SPLIT_RATIO,strcat(nn_name,"_ft_da"),nn(3),train_options(2));
    %save(EXPERIMENT_NAME)

end

