Napisz sieci konwolucyjne klasyfikujące obrazki z bazy MNIST i
CIFAR-10.
Wymagana skuteczność na zbiorze testowym MNIST to 98.8%.
Wymagana skuteczność na zbiorze testowym CIFAR-10 to 54.0%
Termin: 7 listopada za 1,00 punkt
Termin: 14 listopada za 0,50 punktu
Proponowana architektura dla bazy MNIST (dozwolone są modyfikacje; w szczególności adaptując sieć do bazy CIFAR-10):
import autograd.scipy.signal convolve = autograd.scipy.signal.convolve def apply_conv(x, shape, kernel): kernel = np.reshape(kernel, shape) conv = convolve(x, kernel, axes=([2, 3], [2, 3]), dot_axes=([1], [0]), mode='valid') return conv ... apply_conv(batch, [N, 2N, 4, 4], weights.next()) # 2N filtrow wielkosci Nx4x4Podczas normalizacji, dla każdego "koloru" (współrzędna odpowiadająca wynikom konwolucji jednego ustalonego fitra) liczymy średnią i wariancję wszystkich wartości konwolucji (czyli po wszystkich obrazkach w batchu, i wszystkich przyłożeniach ustalonego filtra do tego obrazka). Następnie odejmujemy średnią i wydzielamy przez pierwiastek z wariacji. Następnie skalujemy z powrotem do docelowej wariancji i średniej, które są parametrami wyuczanymi przez model. Oto kodzik liczący wektor wspomnianych średnich:
mean = np.mean(x, (0, 2, 3), keepdims=True)Uwagi: