Пример #1
0
    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)