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), ])
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), ])
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), ])
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), ])
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), ])
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