def __init__(self, model: Model, num_classes, shape, n=10, gif_filename='./gif/manifold_{}.gif', gif_title='Label: {}\nBatch: {}', im_filename='./img/result_{}.jpg', save_gifs=True, fig_size=(None, None)): self.num_classes = num_classes self.figs = [[] for _ in range(num_classes)] self.periods = [] self.save_periods = list(range(100)) +\ list(range(100, 1000, 10)) +\ list(range(1000, 10000, 500)) # this is how many generated images we will draw per image self.n = n self.shape = shape self.model = model fig_w, fig_h = fig_size i_w, i_h, _ = shape if not fig_w: fig_w = (i_w // 28) * n if not fig_h: fig_h = (i_h // 28) * n self.fig_size = (fig_w, fig_h) print('Fig size: ') print(self.fig_size) self.gif_filename = gif_filename self.gif_title = gif_title self.im_filename = im_filename self.save_gifs = save_gifs # Так как сэмплируем из N(0, I), то сетку узлов, в которых генерируем цифры, # берем из обратной функции распределения self.grid_x = norm.ppf(np.linspace(0.05, 0.95, n)) self.grid_y = norm.ppf(np.linspace(0.05, 0.95, n)) self.batches_per_period = 20 # Как часто сохранять картинки model.add_listener(self)