예제 #1
0
def network(insize=1, size=256, winlen=19, stride=2, alphabet_info=None):
    nbase = 4 if alphabet_info is None else alphabet_info.nbase

    return Serial([
        Convolution(insize, size, winlen, stride=stride, fun=tanh),
        Reverse(GruMod(size, size)),
        GruMod(size, size),
        Reverse(GruMod(size, size)),
        GruMod(size, size),
        Reverse(GruMod(size, size)),
        GlobalNormFlipFlop(size, nbase),
    ])
예제 #2
0
def network(insize=1, size=512, winlen=19, stride=2, outsize=40):
    nbase = nbase_flipflop(outsize)

    return Serial([
        Convolution(insize, size, winlen, stride=stride, fun=tanh),
        Reverse(GruMod(size, size)),
        GruMod(size, size),
        Reverse(GruMod(size, size)),
        GruMod(size, size),
        Reverse(GruMod(size, size)),
        GlobalNormFlipFlop(size, nbase),
    ])
예제 #3
0
def network(insize=1, size=256, winlen=19, stride=2, outsize=40):
    nbase = nbase_flipflop(
        outsize)  #2 * nbase * (nbase + 1) -> 40 if nbase=4, but why??

    return Serial([
        Convolution(insize, size, winlen, stride=stride, fun=tanh),
        Reverse(GruMod(size, size)),
        GruMod(size, size),
        Reverse(GruMod(size, size)),
        GruMod(size, size),
        Reverse(GruMod(size, size)),
        GlobalNormFlipFlop(size, nbase),
    ])
예제 #4
0
def network(insize=1, size=256, winlen=19, stride=2, outsize=40):
    nbase = int(np.sqrt(outsize / 2))

    assert 2 * nbase * (nbase + 1) == outsize,\
        "Invalid size for a flipflop model: nbase = {}, size = {}".format(nbase, outsize)

    return Serial([
        Convolution(insize, size, winlen, stride=stride, fun=tanh),
        Reverse(GruMod(size, size)),
        GruMod(size, size),
        Reverse(GruMod(size, size)),
        GruMod(size, size),
        Reverse(GruMod(size, size)),
        GlobalNormFlipFlop(size, nbase),
    ])
예제 #5
0
def network(insize=1, size=256, winlen=19, stride=5, alphabet_info=None):
    nbase = 4 if alphabet_info is None else alphabet_info.nbase
    winlen2 = 5

    return Serial([
        Convolution(insize, 4, winlen2, stride=1, fun=swish),
        Convolution(4, 16, winlen2, stride=1, fun=swish),
        Convolution(16, size, winlen, stride=stride, fun=swish),
        Reverse(Lstm(size, size)),
        Lstm(size, size),
        Reverse(Lstm(size, size)),
        Lstm(size, size),
        Reverse(Lstm(size, size)),
        GlobalNormFlipFlop(size, nbase),
    ])
예제 #6
0
def parse_sublayer(sublayer):
    # TODO apply additional attributes (e.g. has_bias, convolutional padding)
    if sublayer['type'] == 'convolution':
        if sublayer['activation'] != 'tanh':
            sys.stderr.write((
                'Incompatible convolutional layer activation fucntion ' +
                '({}) encountered.\n').format(sublayer['type']))
            sys.exit(1)
        sys.stderr.write((
            'Loading convolutional layer with attributes:\n\tin size: {}\n' +
            '\tout size: {}\n\twinlen: {}\n\tstride: {}\n').format(
                sublayer['insize'], sublayer['size'], sublayer['winlen'],
                sublayer['stride']))
        layer = Convolution(
            sublayer['insize'], sublayer['size'], sublayer['winlen'],
            stride=sublayer['stride'], fun=tanh)
    elif sublayer['type'] == 'LSTM':
        sys.stderr.write((
            'Loading LSTM layer with attributes:\n\tin size: {}\n' +
            '\tout size: {}\n').format(
                sublayer['insize'], sublayer['size']))
        layer = Lstm(sublayer['insize'], sublayer['size'])
    elif sublayer['type'] == 'GruMod':
        sys.stderr.write((
            'Loading GRU layer with attributes:\n\tin size: {}\n' +
            '\tout size: {}\n').format(
                sublayer['insize'], sublayer['size']))
        layer = GruMod(sublayer['insize'], sublayer['size'])
    elif sublayer['type'] == 'reverse':
        sublayer = sublayer['sublayers']
        if sublayer['type'] == 'GruMod':
            sys.stderr.write((
                'Loading Reverse GRU layer with attributes:\n\tin size: {}\n' +
                '\tout size: {}\n').format(
                    sublayer['insize'], sublayer['size']))
            layer = Reverse(GruMod(sublayer['insize'], sublayer['size']))
        elif sublayer['type'] == 'LSTM':
            sys.stderr.write((
                'Loading Reverse LSTM layer with attributes:\n' +
                '\tin size: {}\n\tout size: {}\n').format(
                    sublayer['insize'], sublayer['size']))
            layer = Reverse(Lstm(sublayer['insize'], sublayer['size']))
        else:
            sys.stderr.write((
                'Invalid reversed-time layer type ({})\n').format(
                    sublayer['type']))
            sys.exit(1)
    elif sublayer['type'] == 'GlobalNormTwoState':
        nbase = nbase_flipflop(sublayer['size'])
        sys.stderr.write((
            'Loading flip-flop layer with attributes:\n\tin size: {}\n' +
            '\tnbases: {}\n').format(sublayer['insize'], nbase))
        layer = GlobalNormFlipFlop(sublayer['insize'], nbase)
    elif sublayer['type'] == 'GlobalNormTwoStateCatMod':
        output_alphabet = sublayer['output_alphabet']
        curr_can_base = 0
        collapse_alphabet = ''
        for can_i_nmod in sublayer['can_nmods']:
            collapse_alphabet += output_alphabet[curr_can_base] * (
                can_i_nmod + 1)
            curr_can_base += can_i_nmod + 1
        alphabet_info = alphabet.AlphabetInfo(
            output_alphabet, collapse_alphabet,
            sublayer['modified_base_long_names'], do_reorder=False)
        sys.stderr.write((
            'Loading modified bases flip-flop layer with attributes:\n' +
            '\tin size: {}\n\tmod bases: {}\n').format(
                sublayer['insize'], alphabet_info.mod_long_names))
        layer = GlobalNormFlipFlopCatMod(sublayer['insize'], alphabet_info)
    else:
        sys.stderr.write('Encountered invalid layer type ({}).\n'.format(
            sublayer['type']))
        sys.exit(1)

    layer = set_params(layer, sublayer['params'], sublayer['type'])

    return layer