Exemplo n.º 1
0
    def _make_init_state(dream):
        r"""

        CommandLine:
            python -m ibeis_cnn.draw_net _make_init_state --show

        Example:
            >>> # DISABLE_DOCTEST
            >>> # Assumes mnist is trained
            >>> from ibeis_cnn.draw_net import *  # NOQA
            >>> from ibeis_cnn.models import mnist
            >>> model, dataset = mnist.testdata_mnist(dropout=.5)
            >>> model.init_arch()
            >>> dream = Dream(model, init='rgauss', niters=200)
            >>> ut.quit_if_noshow()
            >>> import plottool as pt
            >>> import vtool as vt
            >>> #pt.qt4ensure()
            >>> initial_state = dream._make_init_state().transpose((0, 2, 3, 1))[0]
            >>> pt.imshow(initial_state, pnum=(1, 2, 1), fnum=1)
            >>> pt.imshow(vt.norm01(initial_state), pnum=(1, 2, 2), fnum=1)
            >>> ut.show_if_requested()
        """
        init = dream.init
        input_shape = dream.model.input_shape
        b, c, w, h = input_shape

        rng = np.random.RandomState(0)

        if init is None or init == 'zeros':
            # intializing to zeros seems to do nothing on mnist data
            initial_state = np.zeros(input_shape, dtype=np.float32)
        if init in ['rand', 'random']:
            initial_state = rng.rand(*input_shape)
        elif init in ['randn']:
            initial_state = np.abs(rng.randn(*input_shape)) / 6
            initial_state = np.clip(initial_state, 0, 1)
        elif init in ['gauss']:
            import vtool as vt
            initial_state = np.array([[vt.gaussian_patch((h, w), sigma=None)
                                       for _ in range(c)]] * b)
            #initial_state /= initial_state.max()
        elif init in ['rgauss']:
            import vtool as vt
            initial_state = np.array([[vt.gaussian_patch((h, w), sigma=None)
                                       for _ in range(c)]] * b)
            #initial_state /= initial_state.max()
            raug = (np.abs(rng.randn(*input_shape)) * (initial_state.max() / 12))
            initial_state += raug
            initial_state = np.clip(initial_state, 0, 1)

        elif init in ['perlin']:
            import vtool as vt
            b, c, w, h = input_shape
            initial_state = np.array([[vt.perlin_noise((w, h), rng=rng)
                                       for _ in range(c)]] * b)
            initial_state = initial_state.astype(np.float32) / 255
        initial_state = initial_state.astype(np.float32)
        return initial_state