『tensotflow』基礎rnn網路分類問題
『tensotflow』rnn中文文字_上
『tensotflow』基礎rnn網路回歸問題
『tensotflow』rnn中文文字_下_暨研究生開學感想
預處理結果是二維資料,相當於batch條一維資料,每個資料對應一首詩,每個字是乙個scalar;
embedding之後,將每個字對映為乙個rnn_size大小的向量,資料變為三維;
經過遞迴神經網路,輸出維度不變;
將之調整為二維資料,這裡面第二維度(即每一行)對應乙個字;
全連線對映,將每乙個字由rnnsize的向量對映為乙個長度為總字數的向量,這樣方便計算loss,實際計算loss時,會將label(二維向量,一行一首詩,字為scalar)拉伸為一維向量,每行只有乙個字scalar,one_hot之後和此時資料正好對應,方便計算
softmax不改變張量形狀,只是將結果以概率分布的形式輸出
**見github
lstm_model.py
:lstm網路模型,提供了end_points介面,被其他部分呼叫
poetry_porcess.py
:資料讀取、預處理部分,會返回打包好的batch,被main呼叫
gen_poetry.py
:古詩生成程式,擁有可選的風格引數,被main呼叫
main.py
:主函式,既可以呼叫前兩個程式獲取預處理資料並使用lstm網路進行訓練,也可以呼叫gen_poetry.py生成古詩
在main.py
最後有如下指令,
if __name__ == "__main__": words,poetry_vector,to_num,x_batches,y_batches = poetry_porcess.poetry_process() # train(words, poetry_vector, x_batches, y_batches) # gen_poetry(words, to_num) generate(words_, to_num_, style_words="狂沙將軍戰燕然,大漠孤煙黃河騎。")此時實際上處於生成模式,對於最後的三行, train:表示訓練 gen_poetry:表示根據首字元生成 generate:表示根據首句和風格句生成古詩
訓練時注釋掉後兩行,保留train行,
if __name__ == "__main__": words,poetry_vector,to_num,x_batches,y_batches = poetry_porcess.poetry_process() train(words, poetry_vector, x_batches, y_batches) # gen_poetry(words, to_num) # generate(words_, to_num_, style_words="狂沙將軍戰燕然,大漠孤煙黃河騎。")生成時不需要修改,但是
generate(words_, to_num_, style_words="狂沙將軍戰燕然,大漠孤煙黃河騎。")可以替換style_word為任何你想要的風格句,注意最好使用7言或者5言,因為這句會大概率影響到你生成的古詩的句子長度(不絕對),這只是風格提取,你可以輸入任意長度;在執行了指令碼後,螢幕會提示輸入起始句,輸入的句子一般5或者7個字,這個由於會拿來直接做首句(由結果示範可以看到),輸入長度不宜過長。
對於上面的兩種情況,修改完成後執行指令碼即可,
python main.py即可顯示結果
原網路結構如下,實際上不需要像下面這樣寫了,不過當時費了好大事,所以保留一下原來版本的**,head:床前明月光 + style:黃沙百戰金甲:床前明月光輝,魏武徵夫血絮紅。
數步崩雲復遺主,縞衣東,帝京舉,玉輪還滿出書初。
秋秋慘慘垂楊柳,夢斷黃鶯欲斷腸。
花凋柳映阮家幾,屋前病,歇馬空留門。
當年皆月林,獨往深山有素。
head:少小離家老大回 + style:山雨欲來風滿樓:
少小離家老大回,四壁百月弄鴉飛。
掃香花間春風地,隔天傾似爛桃香。
近來誰伴清明日,兩株愁味在羅幃。
仍通西疾空何處,軋軋涼吹日方明。
head:少小離家老大回 + style:鐵馬冰河入夢來:
少小離家老大回,化空千里便成絲。
官拋十里同牛頷,莫礙風光雪片雲。
飲水遠濤飛漢地,雲連城戶翠微低。
一樹鐵門永珍聳,白雲三尺各關高。
同言東甸西遊子,誰道承陽要舊憂。
少小離家老大回,含顰玉燭拂樓台。
初齊去府芙蓉死,細緩行雲向國天
with tf.variable_scope('placeholder'):
input_vec = tf.placeholder(tf.int32,[none,none])
output_targets = tf.placeholder(tf.int32,[none,none])
def rnn_network(rnn_size=128,num_layers=2):
def lstm_cell():
l_cell = tf.contrib.rnn.basiclstmcell(rnn_size,state_is_tuple=true,reuse=tf.get_variable_scope().reuse)
return l_cell
cell = tf.contrib.rnn.multirnncell([lstm_cell() for _ in range(num_layers)])
initial_state = cell.zero_state(batch_size, tf.float32) # 初始化lstm網路節點,引數為尺寸
with tf.variable_scope('lstm'):
with tf.variable_scope('embedding'):
e = tf.get_variable('embedding',[len(words_list) + 1,rnn_size])
input_embedding = tf.nn.embedding_lookup(e,input_vec)
output_embedding, last_state = tf.nn.dynamic_rnn(cell, input_embedding, initial_state=initial_state,scope='lstm')
output = tf.reshape(output_embedding,[-1,rnn_size])
with tf.variable_scope('output'):
w = tf.get_variable('w', [rnn_size,len(words_list)+1])
b = tf.get_variable('b', [len(words_list)+1])
logits = tf.matmul(output,w) + b
probs = tf.nn.softmax(logits)
return logits, last_state, probs, cell, initial_state
另外,直接使用tf.nn.rnn_cell而不是用tf.contrib.rnn也可以。 古詩十九首
古詩十九首 組詩名。漢無名氏作 其中有八首 玉臺新詠 題為漢枚乘作,後人 多疑其不確 非一時一人所為,一般認為大都出於東漢末年。南朝梁蕭統合為一 組,收入 文選 題為 古詩十九首 內容多寫夫婦朋友間的離愁別緒和士人 的彷徨失意,有些作品表現出追求富貴和及時行樂的思想。語言樸素自然,描寫生 動真切,在...
喜歡的古詩
朝代 唐代 將進酒 君不見,黃河之水天上來,奔流到海不復回。君不見,高堂明鏡悲白髮,朝如青絲暮成雪。人生得意須盡歡,莫使金樽空對月。天生我材必有用,千金散盡還復來。烹羊宰牛且為樂,會須一飲三百杯。岑夫子,丹丘生,將進酒,杯莫停。與君歌一曲,請君為我傾耳聽。鐘鼓饌玉不足貴,但願長醉不復醒。古來聖賢皆寂...
兒童背誦古詩
1 詠鵝 駱賓王 鵝鵝鵝,曲項向天歌 白毛浮綠水,紅掌撥清波 2憫農 李紳 春種一粒粟,秋收萬顆子 四海無閒田,農夫猶餓死 鋤禾日當午,汗滴禾下土 誰知盤中餐,粒粒皆辛苦 3靜夜思 李白 床前明月光,疑是地上霜 舉頭望明月,低頭思故鄉 4夜宿山寺 李白 危樓高百尺,手可摘星辰 不敢高聲語,恐驚天上人...