W linii 59 kodu można ustalić, ile pikseli oryginalnego wzorca zostanie odwrócone czarnego na biały (litery zapisano w postaci macierzy 9x9, co daje 81 pikseli; podawane na wejścia sieci sygnały skonstruowano następująco: do litery L dodano obraz o osłabionej jasności litery T (stanowiącej 50% oryginalnej jasności), a następnie z takiego obrazu odwracano losowo 39 pikseli; szum więc był bardzo wysoki, bo stanowił około 48% sygnału; patrz linie kodu 56 i 58). Szare piksele na animacji - to efekt nałożenia osłabionego obrazu litery T na obraz litery L. Analogicznie tworzono sygnał wejściowy dla litery T

Do obliczeń i wygenerowania animacji wykorzystano darmowy notatnik colab google dostępny online. import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation from IPython.display import HTML

# Funkcje pomocnicze

def show_pattern_ax(pattern, ax, frame_color="green"): ax.imshow(pattern.reshape((9,9)), cmap="gray_r") for spine in ax.spines.values(): spine.set_edgecolor(frame_color) spine.set_linewidth(3) ax.axis("off")

def hebbian_weights(patterns): n = patterns.size W = np.zeros((n,n)) for p in patterns: W += np.outer(p, p) np.fill_diagonal(W, 0) return W / len(patterns)