def test_selector(): b1 = MockBrickBottom(name="b1") b2 = MockBrickBottom(name="b2") b3 = MockBrickBottom(name="b3") t1 = MockBrickTop([b1, b2], name="t1") t2 = MockBrickTop([b2, b3], name="t2") s1 = Selector([t1]) s11 = s1.select("/t1/b1") assert s11.bricks[0] == b1 assert len(s11.bricks) == 1 s12 = s1.select("/t1") assert s12.bricks[0] == t1 assert len(s12.bricks) == 1 s2 = Selector([t1, t2]) s21 = s2.select("/t2/b2") assert s21.bricks[0] == b2 assert len(s21.bricks) == 1 assert s2.select("/t2/b2.V")[0] == b2.params[0] params = list(s1.get_params().items()) assert params[0][0] == "/t1/b1.V" assert params[0][1] == b1.params[0] assert params[1][0] == "/t1/b1.W" assert params[1][1] == b1.params[1] assert params[2][0] == "/t1/b2.V" assert params[2][1] == b2.params[0] assert params[3][0] == "/t1/b2.W" assert params[3][1] == b2.params[1]
def inject_parameter_values(bricks, param_values): """Inject parameter values into a bricks hierarchy. Parameters ---------- bricks : :class:`.Brick` or :class:`.Selector or list of :class:`Brick` The top bricks. param_values : dict of (parameter name, :class:`~numpy.ndarray`) pairs The parameter values. """ if isinstance(bricks, Brick): bricks = Selector([bricks]) if not isinstance(bricks, Selector): bricks = Selector(bricks) for name, value in param_values.items(): selected = bricks.select(name) if len(selected) == 0: logger.error("Unknown parameter {}".format(name)) if not len(selected) == 1: raise ValueError selected = selected[0] assert selected.get_value( borrow=True, return_internal_type=True).shape == value.shape selected.set_value(value) params = bricks.get_params() for name in params.keys(): if name not in param_values: logger.error( "No value is provided for the parameter {}".format(name))
def test_selector(): b1 = MockBrickBottom(name="b1") b2 = MockBrickBottom(name="b2") b3 = MockBrickBottom(name="b3") t1 = MockBrickTop([b1, b2], name="t1") t2 = MockBrickTop([b2, b3], name="t2") s1 = Selector([t1]) s11 = s1.select("/t1/b1") assert s11.bricks[0] == b1 assert len(s11.bricks) == 1 s12 = s1.select("/t1") assert s12.bricks[0] == t1 assert len(s12.bricks) == 1 s2 = Selector([t1, t2]) s21 = s2.select("/t2/b2") assert s21.bricks[0] == b2 assert len(s21.bricks) == 1 assert s2.select("/t2/b2.V")[0] == b2.params[0] params = list(s1.get_params().items()) assert params[0][0] == "/t1/b1.V" assert params[0][1] == b1.params[0] assert params[1][0] == "/t1/b1.W" assert params[1][1] == b1.params[1] assert params[2][0] == "/t1/b2.V" assert params[2][1] == b2.params[0] assert params[3][0] == "/t1/b2.W" assert params[3][1] == b2.params[1]
def test_selector(): class MockBrickTop(Brick): def __init__(self, children, **kwargs): super(MockBrickTop, self).__init__(**kwargs) self.children = children self.params = [] class MockBrickBottom(Brick): def __init__(self, **kwargs): super(MockBrickBottom, self).__init__(**kwargs) self.params = [theano.shared(0, "V"), theano.shared(0, "W")] b1 = MockBrickBottom(name="b1") b2 = MockBrickBottom(name="b2") b3 = MockBrickBottom(name="b3") t1 = MockBrickTop([b1, b2], name="t1") t2 = MockBrickTop([b2, b3], name="t2") s1 = Selector([t1]) s11 = s1.select("/t1/b1") assert s11.bricks[0] == b1 assert len(s11.bricks) == 1 s12 = s1.select("/t1") assert s12.bricks[0] == t1 assert len(s12.bricks) == 1 s2 = Selector([t1, t2]) s21 = s2.select("/t2/b2") assert s21.bricks[0] == b2 assert len(s21.bricks) == 1 assert s2.select("/t2/b2.V")[0] == b2.params[0] params = list(s1.get_params().items()) assert params[0][0] == "/t1/b1.V" assert params[0][1] == b1.params[0] assert params[1][0] == "/t1/b1.W" assert params[1][1] == b1.params[1] assert params[2][0] == "/t1/b2.V" assert params[2][1] == b2.params[0] assert params[3][0] == "/t1/b2.W" assert params[3][1] == b2.params[1]
def extract_parameter_values(bricks): """Extract parameter values from a bricks hierarchy. Parameters ---------- bricks : (list of) :class:`.Brick`, or :class:`.Selector` The top bricks. Returns ------- A dictionary of (parameter name, numpy array) pairs. """ if isinstance(bricks, Brick): bricks = Selector([bricks]) if not isinstance(bricks, Selector): bricks = Selector(bricks) return OrderedDict([(name, variable.get_value(borrow=True)) for name, variable in bricks.get_params().items()])
def test_selector(): class MockBrickTop(Brick): def __init__(self, children, **kwargs): super(MockBrickTop, self).__init__(**kwargs) self.children = children self.params = [] class MockBrickBottom(Brick): def __init__(self, **kwargs): super(MockBrickBottom, self).__init__(**kwargs) self.params = [theano.shared(0, "V"), theano.shared(0, "W")] b1 = MockBrickBottom(name="b1") b2 = MockBrickBottom(name="b2") b3 = MockBrickBottom(name="b3") t1 = MockBrickTop([b1, b2], name="t1") t2 = MockBrickTop([b2, b3], name="t2") s1 = Selector([t1]) s11 = s1.select("/t1/b1") assert s11.bricks[0] == b1 assert len(s11.bricks) == 1 s12 = s1.select("/t1") assert s12.bricks[0] == t1 assert len(s12.bricks) == 1 s2 = Selector([t1, t2]) s21 = s2.select("/t2/b2") assert s21.bricks[0] == b2 assert len(s21.bricks) == 1 assert s2.select("/t2/b2.V")[0] == b2.params[0] params = list(s1.get_params().items()) assert params[0][0] == "/t1/b1.V" assert params[0][1] == b1.params[0] assert params[1][0] == "/t1/b1.W" assert params[1][1] == b1.params[1] assert params[2][0] == "/t1/b2.V" assert params[2][1] == b2.params[0] assert params[3][0] == "/t1/b2.W" assert params[3][1] == b2.params[1]
def load_params(bricks, path): """Load brick parameters. Loads parameters from .npz file where they are saved with their pathes. Parameters ---------- bricks : Brick or Selector The bricks. path : str or file Source for loading. """ if isinstance(bricks, Brick): bricks = Selector([bricks]) assert isinstance(bricks, Selector) param_values = { name.replace("-", "/"): value for name, value in numpy.load(path).items() } for name, value in param_values.items(): selected = bricks.select(name) if len(selected) == 0: logger.error("Unknown parameter {}".format(name)) assert len(selected) == 1 selected = selected[0] assert selected.get_value( borrow=True, return_internal_type=True).shape == value.shape selected.set_value(value) params = bricks.get_params() for name in params.keys(): if name not in param_values: logger.error( "No value is provided for the parameter {}".format(name))
def save_params(bricks, path): """Save bricks parameters. Saves parameters with their pathes into an .npz file. Parameters ---------- bricks : Brick or Selector The bricks. path : str of file Destination for saving. """ if isinstance(bricks, Brick): bricks = Selector([bricks]) assert isinstance(bricks, Selector) params = bricks.get_params() # numpy.savez is vulnerable to slashes in names param_values = { name.replace("/", "-"): param.get_value() for name, param in params.items() } numpy.savez(path, **param_values)