美文网首页
RNN模型 写诗/歌/信

RNN模型 写诗/歌/信

作者: poteman | 来源:发表于2019-08-08 16:38 被阅读0次
  • 导入所需的包
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.layers import Embedding, LSTM, Dense, Dropout, Bidirectional
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.models import Sequential
from tensorflow.keras.optimizers import Adam
from tensorflow.keras import regularizers
import tensorflow.keras.utils as ku 
import numpy as np 
  • 下载并预处理数据
tokenizer = Tokenizer()
!wget --no-check-certificate \
    https://storage.googleapis.com/laurencemoroney-blog.appspot.com/sonnets.txt \
    -O /tmp/sonnets.txt
data = open('/tmp/sonnets.txt').read()

corpus = data.lower().split("\n")

tokenizer.fit_on_texts(corpus)
total_words = len(tokenizer.word_index) + 1

# create input sequences using list of tokens
input_sequences = []
for line in corpus:
    token_list = tokenizer.texts_to_sequences([line])[0]
    for i in range(1, len(token_list)):
        n_gram_sequence = token_list[:i+1]
        input_sequences.append(n_gram_sequence)

# pad sequences 
max_sequence_len = max([len(x) for x in input_sequences])
input_sequences = np.array(pad_sequences(input_sequences, maxlen=max_sequence_len, padding='pre'))

# create predictors and label
predictors, label = input_sequences[:,:-1],input_sequences[:,-1]

label = ku.to_categorical(label, num_classes=total_words)
  • 定义模型
Embedding_dim = 100
LSTM_units_1 = 150
LSTM_units_2 = 100
Dense_units = total_words // 2
Dropout_rate = 0.2

model = Sequential()
model.add(Embedding(total_words, Embedding_dim, input_length=max_sequence_len-1))
model.add(LSTM(LSTM_units_1, return_sequences = True))
model.add(Dropout(Dropout_rate))
model.add(LSTM(LSTM_units_2))
model.add(Dense(Dense_units, kernel_regularizer=regularizers.l2(0.01), activation = 'relu'))
model.add(Dense(total_words, activation = 'softmax'))
# Pick an optimizer
model.compile(loss = 'categorical_crossentropy', optimizer = 'adam', metrics=['accuracy'])
print(model.summary())
  • 训练模型
 history = model.fit(predictors, label, epochs=100, verbose=1)
  • 查看训练曲线
import matplotlib.pyplot as plt
acc = history.history['acc']
loss = history.history['loss']

epochs = range(len(acc))

plt.plot(epochs, acc, 'b', label='Training accuracy')
plt.title('Training accuracy')

plt.figure()

plt.plot(epochs, loss, 'b', label='Training Loss')
plt.title('Training loss')
plt.legend()

plt.show()
  • 用训练好的模型来写诗
seed_text = "Help me Obi Wan Kenobi, you're my only hope"
next_words = 100
  
for _ in range(next_words):
  token_list = tokenizer.texts_to_sequences([seed_text])[0]
  token_list = pad_sequences([token_list], maxlen=max_sequence_len-1, padding='pre')
  predicted = model.predict_classes(token_list, verbose=0)
  output_word = ""
  for word, index in tokenizer.word_index.items():
    if index == predicted:
      output_word = word
      break
  seed_text += " " + output_word
  
print(seed_text)

【参考文献】
1.google colab
2.TF官网: 在启用 Eager Execution 的情况下使用 RNN 生成文本

相关文章

  • RNN模型 写诗/歌/信

    导入所需的包 下载并预处理数据 定义模型 训练模型 查看训练曲线 用训练好的模型来写诗 【参考文献】1.googl...

  • Lecture 10 循环神经网络

    本课重点: RNN的概念与多种形式 语言模型 图像标注、视觉问答、注意力模型 RNN梯度流 1 RNN的概念与多种...

  • NLP in TensorFlow: 不同的神经网络模型

    模型包括: 双向RNN,多层双向RNN,CNN,CNN+RNN。 导入数据和预处理 single bidirect...

  • 序列模型简介——RNN, Bidirectional RNN,

    摘要: 序列模型大集合——RNN, Bidirectional RNN, LSTM, GRU 既然我们已经有了前馈...

  • RNN LSTM语言模型 ——RNN

    RNN的结构 RNN的缺点 ref:https://blog.csdn.net/jizhidexiaoming/a...

  • RNN

    RNN RNN 是一种利用神经网络对序列模型的通用模型 利用历史信息结合当前输入进行预测 适合解决时间序列输入输出...

  • RNN模型笔记

    模型是什么 众所周知,RNN的特点是将以前保留的信息,传递给未来,使得RNN模型具有记忆的功能,其主要的原理类似于...

  • 双流rnn

    摘要 建立时间和空间上的模型。时间模型:堆叠RNN和分层RNN。提出两种将空间图像转为节点序列的方法。使用3D数据...

  • 使用Keras进行深度学习:(六)LSTM和双向LSTM讲解及实

    一 RNN的长期依赖问题 在上篇文章中介绍的循环神经网络RNN在训练的过程中会有长期依赖的问题,这是由于RNN模型...

  • 用RNN进行mnist分类

    RNN与LSTM RNN网络是在传统神经网络的基础上加入了记忆的成分。对于RNN模型来说,序列被看做一系列随着时间...

网友评论

      本文标题:RNN模型 写诗/歌/信

      本文链接:https://www.haomeiwen.com/subject/pkntjctx.html