vocab_size = 50000

word_pos_morph_embeddings = torch.nn.Embedding(
    num_embeddings=len(itos) + 3, embedding_dim=args.emb_dim).cuda()
outVocabSize = 3 + len(itos)

itos_total = ["EOS", "OOV", "SOS"
              ] + itos  #+ itos_lemmas[:vocab_size] + itos_morph
assert len(itos_total) == outVocabSize
# could also provide per-word subcategorization frames from the treebank as input???

#baseline = nn.Linear(args.emb_dim, 1).cuda()

dropout = nn.Dropout(args.dropout_rate).cuda()

rnn_both = nn.GRU(2 * args.emb_dim, args.rnn_dim, args.rnn_layers).cuda()
for name, param in rnn_both.named_parameters():
    if 'bias' in name:
        nn.init.constant(param, 0.0)
    elif 'weight' in name:
        nn.init.xavier_normal(param)

decoder = nn.Linear(args.rnn_dim, outVocabSize).cuda()
#pos_ptb_decoder = nn.Linear(128,len(posFine)+3).cuda()

startHidden = nn.Linear(1, args.rnn_dim).cuda()
startHidden.bias.data.fill_(0)

components = [rnn_both, decoder, word_pos_morph_embeddings, startHidden]

hiddenToLogSDHidden = nn.Linear(args.rnn_dim, args.rnn_dim).cuda()
vocab_size = 50000

word_pos_morph_embeddings = torch.nn.Embedding(
    num_embeddings=len(itos) + 3, embedding_dim=args.emb_dim).cuda()
outVocabSize = 3 + len(itos)  #+vocab_size+len(morphKeyValuePairs)+3

itos_total = ["EOS", "OOV", "SOS"
              ] + itos  #+ itos_lemmas[:vocab_size] + itos_morph
assert len(itos_total) == outVocabSize
# could also provide per-word subcategorization frames from the treebank as input???

#baseline = nn.Linear(args.emb_dim, 1).cuda()

dropout = nn.Dropout(args.dropout_rate).cuda()

rnn_both = nn.GRU(2 * args.emb_dim, args.rnn_dim, args.rnn_layers).cuda()
for name, param in rnn_both.named_parameters():
    if 'bias' in name:
        nn.init.constant(param, 0.0)
    elif 'weight' in name:
        nn.init.xavier_normal(param)

decoder = nn.Linear(args.rnn_dim, outVocabSize).cuda()
#pos_ptb_decoder = nn.Linear(128,len(posFine)+3).cuda()

startHidden = nn.Linear(1, args.rnn_dim).cuda()
startHidden.bias.data.fill_(0)

components = [rnn_both, decoder, word_pos_morph_embeddings, startHidden]

char_embeddings = torch.nn.Embedding(num_embeddings=len(itos_chars_total) + 3,