Moving MNIST ist ein Testsatz zur Bewertung der Sequenzvorhersage und -rekonstruktion. Eine Sammlung von Bildern, die so erstellt wurden, dass sich handgeschriebene Zahlen auf dem Bildschirm bewegen.
Das linke ist der Datensatz und das rechte ist ein Beispiel für die Vorhersage. Zitiert aus dieser Site.
Es gibt 10.000 Datentypen mit jeweils 20 Frames. Das Bild hat eine Größe von 64 x 64 und zeigt zwei Zahlen.
Sie können es von [dieser Site] herunterladen (http://www.cs.toronto.edu/~nitish/unsupervised_video/).
!curl -o mnist_test_seq.npy http://www.cs.toronto.edu/~nitish/unsupervised_video/mnist_test_seq.npy
Lesen Sie die Daten.
import numpy as np
path="./mnist_test_seq.npy"
data = np.load(path)
print(data.shape) # (20, 10000, 64, 64)
Lassen Sie uns ipywidgets verwenden, um zu überprüfen, ob das Video korrekt ist.
%matplotlib inline
import matplotlib.pyplot as plt
from ipywidgets import interact
def f(k):
plt.imshow(data[k][0], 'gray')
plt.show()
interact(f, k=(0,19,1) )
Es gibt 10.000 solcher Sets.
So erstellen Sie einen Datensatz, wenn Sie 10 Frames mit 10 Frames vorhersagen.
import numpy as np
from torch.utils.data import Dataset
class MovingMnistDataset(Dataset):
def __init__(self, path="./mnist_test_seq.npy"):
self.data = np.load(path)
# (t, N, H, W) -> (N, t, C, H, W)
self.data = self.data.transpose(1, 0, 2, 3)[:, :, None, ...]
def __len__(self):
return len(self.data)
def __getitem__(self, i):
return self.data[i, :10, ...].astype(np.int32), self.data[i, 10:, ...].astype(np.int32)
dataset = MovingMnistDataset()