New data files, python requirements, and new noise types

This commit is contained in:
Eduardo Cueto-Mendoza 2024-09-24 10:11:54 +01:00
parent 941cb7b00d
commit 17fa3b3e77
19 changed files with 145 additions and 10 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
<meta HTTP-EQUIV="REFRESH" content="0; url=http://www.cs.toronto.edu/~kriz/cifar.html">

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,4 +1,6 @@
import torch
import random
import numpy as np
from tqdm import tqdm
import matplotlib.pyplot as plt
from torchvision import datasets
@ -6,6 +8,8 @@ from torch.utils.data import Dataset
from torch.utils.data import DataLoader
import torchvision.transforms as transforms
torch.pi = torch.acos(torch.zeros(1)).item() * 2 # which is 3.1415927410125732
class AddGaussianNoise(object):
def __init__(self, mean=0., std=1.):
@ -19,12 +23,102 @@ class AddGaussianNoise(object):
return self.__class__.__name__ + '(mean={0}, std={1})'.format(self.mean, self.std)
class AddRaleighNoise(object):
def __init__(self, a=0.0, b=0.0):
self.std = (b * (4 - np.pi)) / 4
self.mean = a + np.sqrt((np.pi * b) / 4)
def __call__(self, tensor):
return tensor + torch.randn(tensor.size()) * self.std + self.mean
def __repr__(self):
return self.__class__.__name__ + '(mean={0}, std={1})'.format(self.mean, self.std)
class AddErlangNoise(object):
def __init__(self, a=0.0, b=0.0):
if a == 0.0:
self.std = 0.0
self.mean = 0.0
else:
self.std = b / a
self.mean = b / (2*a)
def __call__(self, tensor):
if self.mean == 0.0:
return tensor * self.mean
else:
return tensor + torch.randn(tensor.size()) * self.std + self.mean
def __repr__(self):
return self.__class__.__name__ + '(mean={0}, std={1})'.format(self.mean, self.std)
class AddExponentialNoise(object):
def __init__(self, a=0.0):
if a == 0.0:
self.mean = 0.0
else:
self.std = 1 / (2*a)
self.mean = 1 / a
def __call__(self, tensor):
if self.mean == 0.0:
return tensor * self.mean
else:
return tensor + torch.randn(tensor.size()) * self.std + self.mean
def __repr__(self):
return self.__class__.__name__ + '(mean={0}, std={1})'.format(self.mean, self.std)
class AddUniformNoise(object):
def __init__(self, a=0.0, b=0.0):
if a == 0.0:
self.std = 0.0
self.mean = 0.0
else:
self.std = (b - a)**2 / 12
self.mean = (b + a) / 2
def __call__(self, tensor):
if self.mean == 0.0:
return tensor * self.mean
else:
print('(mean={0}, std={1})'.format(self.mean, self.std))
return tensor + (torch.randn(tensor.size()) * self.std + self.mean)
def __repr__(self):
return self.__class__.__name__ + '(mean={0}, std={1})'.format(self.mean, self.std)
class AddInpulseNoise(object):
def __init__(self, a=0.0):
self.value = a
def __call__(self, tensor):
if random.gauss(0, 1) > 0:
return tensor * self.value
elif random.gauss(0, 1) < 0:
return tensor * (-1 * self.value)
else:
return tensor * 0.0
def __repr__(self):
return self.__class__.__name__ + '(a={0})'.format(self.value)
def get_mnist_loaders(batch_size=128, test_batch_size=1000, perc=1.0):
transform_train = transforms.Compose([
transforms.RandomCrop(28, padding=4),
transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,)),
AddGaussianNoise(0., 0.99),
# AddGaussianNoise(0., 0.0),
# AddRaleighNoise(1, 1),
# AddErlangNoise(0.0001, 0.0001),
# AddExponentialNoise(2),
# AddUniformNoise(2, 1),
AddInpulseNoise(0.5),
])
transform_test = transforms.Compose([
@ -33,8 +127,8 @@ def get_mnist_loaders(batch_size=128, test_batch_size=1000, perc=1.0):
])
train_loader = DataLoader(
datasets.MNIST(root='.data/mnist', train=True, download=True, transform=transform_train), batch_size=batch_size,
shuffle=True, num_workers=2, drop_last=True
datasets.MNIST(root='.data/mnist', train=True, download=True, transform=transform_train),
batch_size=batch_size, shuffle=True, num_workers=2, drop_last=True
)
train_eval_loader = DataLoader(
@ -52,10 +146,15 @@ def get_mnist_loaders(batch_size=128, test_batch_size=1000, perc=1.0):
def get_cifar_loaders(batch_size=128, test_batch_size=1000, perc=1.0):
transform_train = transforms.Compose([
#transforms.RandomCrop(32, padding=4),
transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,)),
AddGaussianNoise(0., 0.99),
transforms.RandomCrop(32, padding=0),
# transforms.Normalize((0.5,), (0.5,)),
# AddGaussianNoise(0., 0.25),
# AddRaleighNoise(1, 2), # Not worinkg for CIFAR
# AddErlangNoise(0.0001, 0.0001),
# AddExponentialNoise(2),
AddUniformNoise(2, 1), # Not working for CIFAR
# AddInpulseNoise(0.5),
])
transform_test = transforms.Compose([
@ -64,8 +163,8 @@ def get_cifar_loaders(batch_size=128, test_batch_size=1000, perc=1.0):
])
train_loader = DataLoader(
datasets.CIFAR10(root='.data/cifar', train=True, download=True, transform=transform_train), batch_size=batch_size,
shuffle=True, num_workers=2, drop_last=True
datasets.CIFAR10(root='.data/cifar', train=True, download=True, transform=transform_train),
batch_size=batch_size, shuffle=True, num_workers=2, drop_last=True
)
train_eval_loader = DataLoader(
@ -91,7 +190,7 @@ if __name__ == '__main__':
# # print(data)
images, labels = next(iter(train_loader))
#plt.imshow(images[0].reshape(3,32,32).transpose(0,2,3,1))
plt.imshow(images[0])
plt.imshow(images[0].permute(1, 2, 0))
# plt.imshow(images[0].reshape(28, 28), cmap='gray')
plt.show()
#print(images[0].shape)

35
requirements.txt Normal file
View File

@ -0,0 +1,35 @@
certifi
charset-normalizer
cmake
contourpy
cycler
filelock
fonttools
idna
Jinja2
kiwisolver
lit
MarkupSafe
matplotlib
mpmath
networkx
numpy
packaging
pandas
Pillow
psutil
pyparsing
python-dateutil
pytorch-triton-rocm
pytz
requests
seaborn
six
sympy
torch
torchaudio
torchvision
tqdm
typing_extensions
tzdata
urllib3