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