defpredict_rnn_pytorch(prefix, num_chars, model, vocab_size, device, idx_to_char,char_to_idx): state = None output = [char_to_idx[prefix[0]]] # output会记录prefix加上输出 for t inrange(num_chars + len(prefix) - 1): X = torch.tensor([output[-1]], device=device).view(1, 1) if state isnotNone: ifisinstance(state, tuple): # LSTM, state:(h, c) state = (state[0].to(device), state[1].to(device)) else: state = state.to(device)
(Y, state) = model(X, state) if t < len(prefix) - 1: output.append(char_to_idx[prefix[t + 1]]) else: output.append(int(Y.argmax(dim=1).item())) return''.join([idx_to_char[i] for i in output])