基於LSTM + keras 的詩歌生成器

    最近在github 上發現了一個好玩的項目,一個基於LSTM + keras 實現的詩歌生成器,地址是: https://github.com/youyuge34/Poems_generator_Keras. 我去看了一下代碼,實現的原理其實很common,就是普通的基於LSTM 的序列模型。模型使用了43030首詩進行訓練,最後生成的詩歌仍是有模有樣的(固然僅限於有模有樣,天然是不能深究的了)
 
  1. 模型的核心思路:
1 input_tensor = Input(shape=(self.config.max_len, len(self.words)))
2 lstm = LSTM(512, return_sequences=True)(input_tensor)
3 dropout = Dropout(0.6)(lstm)
4 lstm = LSTM(256)(dropout)
5 dropout = Dropout(0.6)(lstm)
6 dense = Dense(len(self.words), activation='softmax')(dropout)
7 self.model = Model(inputs=input_tensor, outputs=dense)
8 optimizer = Adam(lr=self.config.learning_rate)
9 self.model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])
keras 真的是極簡的深度學習語言,上述短短的9行代碼就已經包括了所有的模型結構,並且不須要註釋基本都能看懂代碼在作什麼。
  • 第一行: 構造輸入向量
  • 第二行,構造了一個LSTM layer, hidden units size = 512
  • 第三行,構造了一個dropout layer,dropout rate = 0.6
  • 第四行,構造了一個LSTM layer,hidden units size = 256
  • 第五行,構造了一個dropout layer,dropout rate = 0.6
  • 第六行,構造了一個全鏈接層+softmax 做爲 output layer
  • 第七行,利用 inputs 和 outputs 構造Model
  • 第八行,使用 Adam 優化器
  • 第九行,compile model,指定了模型的損失函數類型爲交叉熵損失,優化器以及評價指標

 

 
 首春:寒隨窮律變,春逐鳥聲開。初風飄帶柳,晚雪間花梅。碧林青舊竹,綠沼翠新苔。芝田初雁去,綺樹巧鶯來。
 初晴落景:晚霞聊自怡,初晴彌可喜。日晃百花色,風動千林翠。池魚躍不一樣,園鳥聲還異。寄言博通者,知予物外志。
 初夏:一朝春夏改,隔夜鳥花遷。陰陽深淺葉,曉夕重輕煙。哢鶯猶響殿,橫絲正網天。珮高蘭影接,綬細草紋連。碧鱗驚棹側,玄燕舞檐前。何須汾陽處,始復有山泉。
度秋:夏律昨留灰,秋箭今移晷。峨嵋岫初出,洞庭波漸起。桂白髮幽巖,菊黃開灞涘。運流方可嘆,含毫屬微理。
  • 冒號前的是詩的名字,冒號後的是詩的內容
 
3. 訓練
  • 我使用的單卡 RTX2080ti(11G顯存) 進行訓練,按照做者的默認配置,一共 訓練了 34000+ epoch,每一個 epoch 耗時 1s 左右,總共訓練了接近10個小時。最終獲得的keras 可用的模型文件以及訓練日誌我放到百度雲了,地址是:https://pan.baidu.com/s/1XV9InTe9vMmwKNs5lBS-tQ
 
4.訓練完成以後,原始的代碼一共提供了4個進行predict 的API:
  • predict_first:給定一個漢字,輸出一首五言絕句
  • predict_random:隨機從所有的訓練詩做當中抽出一首詩的首句,而後生成一首詩
  • predict_gen:給定五個漢字做爲首句,生成一首五言絕句
  • predict_hide:給定四個漢字,輸出以這個四個漢字開頭的藏頭詩
  • 爲了方便預測,我封裝了一個簡單的 命令行工具,提供了四種預測,代碼能夠參考我對原始repo 的 fork 版本(https://github.com/Lyrichu/Poems_generator_Keras/tree/huchengchun),使用方式以下:
 
 
 
 
 
5. 愉快地生成詩歌玩耍吧
相關文章
相關標籤/搜索