def train_gru():
    logging.info('GRU original ...')
    num_epochs, num_steps, batch_size, lr, clipping_theta = 160, 35, 32, 1e2, 1e-2
    pred_period, pred_len, prefixes = 40, 50, ['分开', '不分开']
    train_and_predict_rnn(gru, get_params, init_gru_state, num_hiddens,
                          vocab_size, device, corpus_indices, idx_to_char,
                          char_to_idx, False, num_epochs, num_steps, lr,
                          clipping_theta, batch_size, pred_period, pred_len,
                          prefixes)

    logging.info('GRU with PyTorch ...')
    lr = 1e-2  # 注意调整学习率
    gru_layer = nn.GRU(input_size=vocab_size, hidden_size=num_hiddens)
    model = RNNModel(gru_layer, vocab_size).to(device)
    train_and_predict_rnn_pytorch(model, num_hiddens, vocab_size, device,
                                  corpus_indices, idx_to_char, char_to_idx,
                                  num_epochs, num_steps, lr, clipping_theta,
                                  batch_size, pred_period, pred_len, prefixes)
示例#2
0
    H = state_h
    C = state_c
    outputs = []
    for X in inputs:
        I = nd.sigmoid(nd.dot(X, W_xi) + nd.dot(H, W_hi) + b_i)
        F = nd.sigmoid(nd.dot(X, W_xf) + nd.dot(H, W_hf) + b_f)
        O = nd.sigmoid(nd.dot(X, W_xo) + nd.dot(H, W_ho) + b_o)
        C_tilda = nd.tanh(nd.dot(X, W_xc) + nd.dot(H, W_hc) + b_c)
        C = F * C + I * C_tilda
        H = O * nd.tanh(C)
        Y = nd.dot(H, W_hy) + b_y
        outputs.append(Y)
    return (outputs, H, C)


seq1 = '分开'
seq2 = '不分开'
seq3 = '战争中部队'
seqs = [seq1, seq2, seq3]

utils.train_and_predict_rnn(rnn=lstm_rnn, is_random_iter=False, epochs=200,
                            num_steps=35, hidden_dim=hidden_dim,
                            learning_rate=.2, clipping_norm=5,
                            batch_size=32, pred_period=20, pred_len=100,
                            seqs=seqs, get_params=get_params,
                            get_inputs=get_inputs, ctx=ctx,
                            corpus_indices=corpus_indices,
                            idx_to_char=idx_to_char, char_to_idx=char_to_idx,
                            is_lstm=True)
示例#3
0
        Z = torch.sigmoid(torch.matmul(X, W_xz) + torch.matmul(H, W_hz) + b_z)
        R = torch.sigmoid(torch.matmul(X, W_xr) + torch.matmul(H, W_hr) + b_r)
        H_tilda = torch.tanh(
            torch.matmul(X, W_xh) + R * torch.matmul(H, W_hh) + b_h)
        H = Z * H + (1 - Z) * H_tilda
        Y = torch.matmul(H, W_hq) + b_q
        outputs.append(Y)
    return outputs, (H, )


print('训练并创作歌词')
num_epochs, num_steps, batch_size, lr, clipping_theta = 300, 35, 32, 1e2, 1e-2
pred_period, pred_len, prefixes = 40, 50, ['可爱女人', '龙卷风']
utils.train_and_predict_rnn(gru, get_params, init_gru_state, num_hiddens,
                            vocab_size, device, corpus_indices, idx_to_char,
                            char_to_idx, False, num_epochs, num_steps, lr,
                            clipping_theta, batch_size, pred_period, pred_len,
                            prefixes)
'''
训练并创作歌词
epoch 40, perplexity 101.107354, time 2.45 sec
 - 可爱女人 我想要你的爱写 像在我的爱你 让我们 你不是 快兽人 的灵魂 有一种 三颗 一直两 一颗 三颗 一
 - 龙卷风 我想要你的爱人 让我们 你不是 一颗两 三颗 一颗 三颗 一颗 三颗 三颗 有一种 三颗 一直两
epoch 80, perplexity 7.574267, time 2.49 sec
 - 可爱女人 沉许在美索不达米亚平原 爷爷泡的茶 有一种味道叫做家 他羽泡的茶 听说名和利 不拿跳动 全天用双截
 - 龙卷风 我会怕着二碎人人就能眼泪 别手不能够永远不及   难道这不是我要的天堂景象 沉沦假象 你只会感到更
epoch 120, perplexity 1.670065, time 2.59 sec
 - 可爱女人 沉亮的欢乐琴上的红色油漆 反射出儿时天真的嬉戏模样  被期待 被覆盖 蜕变的公式我学不来  难道这
 - 龙卷风 我想要你想远想一点汗融戏 最后再一个人慢慢的回忆 没有了过去 我将往事抽离 如果我遇见你是一场悲剧
epoch 160, perplexity 1.094771, time 2.59 sec
 - 可爱女人 沉不容易不要再让 没有你梦的有 一本又抱半岛铁 爷爷泡的茶 像幅泼墨的山水画 唐朝千年的风沙 现在