import torchvision.transforms as transforms
from torchvision.datasets import MNIST
from torch.utils.data import DataLoader
from PIL import Image
import torchvision
def display_img(pixels, label = None):
plt.imshow(pixels, cmap="gray")
if label:
plt.title("Label: %d" % label)
plt.axis("off")
plt.show()
class NoisyMNIST(torchvision.datasets.MNIST):
def __init__(self, root, train=True, transform=None, target_transform=None, download=False):
super(NoisyMNIST, self).__init__(root, train=train, transform=transform, target_transform=target_transform, download=download)
def __getitem__(self, index):
img, target = self.data[index], self.targets[index]
img = Image.fromarray(img.numpy(), mode="L")
if self.transform is not None:
img = self.transform(img)
# add the noise
noise_level = 0.3
noise = self.generate_safe_random_tensor(img) * noise_level
noisy_img = img + noise
return noisy_img, noise, img, target
def generate_safe_random_tensor(self, img):
"""generates random noise for an image but limits the pixel values between -1 and 1"""
min_values = torch.clamp(-1 - img, max=0)
max_values = torch.clamp(1 - img, min=0)
return torch.rand(img.shape) * (max_values - min_values) + min_values
# Define transformations to apply to the data
transform = transforms.Compose([
transforms.ToTensor(), # Convert images to tensors
transforms.Normalize((0.1307,), (0.3081,)),
])
train_dataset = NoisyMNIST(root='./data', train=True, download=True, transform=transform)
test_dataset = NoisyMNIST(root='./data', train=False, download=True, transform=transform)
np_noise = train_dataset[img_id][1]
np_data = train_dataset[img_id][0]
display_img(np_data_sub_noise, 4)
В идеале это дало бы мне обычный набор данных MNIST вместе с зашумленными изображениями MNIST и коллекцией добавленного шума. Учитывая это, я предполагал, что смогу вычесть шум из зашумленного изображения и вернуться к исходному изображению, но мои операции с изображением необратимы.
Любые указатели или фрагменты кода будут иметь большое значение. оценил. Ниже приведены изображения, которые я сейчас получаю с помощью моего кода:
Исходное изображение:
Я хотел бы добавить обратимый шум в набор данных MNIST для некоторых экспериментов. Вот что я пытаюсь сделать: [code]import torchvision.transforms as transforms from torchvision.datasets import MNIST from torch.utils.data import DataLoader from PIL import Image import torchvision
# Define transformations to apply to the data transform = transforms.Compose([ transforms.ToTensor(), # Convert images to tensors transforms.Normalize((0.1307,), (0.3081,)), ])
[/code] В идеале это дало бы мне обычный набор данных MNIST вместе с зашумленными изображениями MNIST и коллекцией добавленного шума. Учитывая это, я предполагал, что смогу вычесть шум из зашумленного изображения и вернуться к исходному изображению, но мои операции с изображением необратимы. Любые указатели или фрагменты кода будут иметь большое значение. оценил. Ниже приведены изображения, которые я сейчас получаю с помощью моего кода: Исходное изображение: [img]https ://i.stack.imgur.com/YsX1R.png[/img]
С добавленным шумом: [img]https://i.stack.imgur.com/s77Ls.png[/img]
И с вычтенным шумом для изображения с шумом: [img]https://i.stack.imgur.com/cMmJV.png[/img]
Я хочу сохранить набор данных поезда, набор тестовых данных и набор данных проверки в трех отдельных папках.
Сделать это для обучения и тестирования легко
# Get training and testing data
all_training_data = getattr(datasets, config )(
root=...
Я хочу сохранить набор данных поезда, набор тестовых данных и набор данных проверки в трех отдельных папках.
Сделать это для обучения и тестирования легко
# Get training and testing data
all_training_data = getattr(datasets, config )(
root=...
Я весь день искал, почему ситуация не улучшается, потери остаются на уровне 4,1 после первых двух партий. Я новичок в PyTorch. Заранее благодарим за любую помощь!
Вот набор данных