Пример #1
0
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]
Пример #2
0
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))
Пример #3
0
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]
Пример #4
0
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]
Пример #5
0
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()])
Пример #6
0
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]
Пример #7
0
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))
Пример #8
0
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)