上一篇文章:關于《注意力模型--Attention注意力機制》的學習?是對注意力模型的理論知識進行學習箭阶,這一篇文章將結合,在github上找到的一份基于keras框架實現(xiàn)的可運行的注意模型代碼:Attention_Network_With_Keras?進行分析喘沿,進一步理解Attention模型蘸炸。
將jupyter的文件轉換為.py文件湖雹,方便在Pycharm中運行調試,轉換方法如下圖:
先解決一個問題:
因為Python環(huán)境不同乍钻,而導致的一個問題莺禁,運行程序時會在下圖中報一個錯:TypeError: softmax() got an unexpected keyword argument 'axis'
跳轉到我目前版本的tensorflow后端softmax()函數(shù)沒有參數(shù)axis:
問題解決完畢!F粞摹1岫隆!结洼!
程序分析與理解:
1.獲取模型的樣子
想獲取搭建模型的樣子黎做,先按照上圖:文件轉換操作方法。將文件轉換成.py文件松忍,然后在Pycharm中運行程序代碼蒸殿。再參考文章:《kears可視化模塊keras.utils.visualize_util 的安裝配置與錯誤解決辦法》?按照這篇文章處理后,添加語句:plot_model(model,to_file='AttentionModel.png',show_shapes=True)
2.對模型的思路進行理解分析
以["six hours and fifty five am","06:55"]實例為例進行模型分析:
問題定義:
將人類語言描述的時間,記為X宏所;將標準數(shù)字描述的時間酥艳,記為Y。即<X,Y>類型爬骤,符合Encoder-Decoder框架充石。 ?X=["six hours and fifty five am"],Y=["06:55"] ? ?任務:將X通過模型轉換成Y
數(shù)據處理:
對數(shù)據進行處理霞玄。數(shù)據集中<X,Y>句對樣例有1萬個赫冬,數(shù)據集在Time Dataset.json文件中。X集合溃列,可以由41個不同的字符構成劲厌,將這41個字符存為字典類型;Y集合听隐,可以由11個不同的字符構成补鼻,將這11個字符存為字典。其實這兩個字典數(shù)據就存在Time Vocabs.json文件中雅任。
將X风范、Y數(shù)據處理成索引形式,每一個索引對應于一個one-hot向量沪么。比如:
X="six hours and fifty five am" ? len(X)=27 ?,模型中設置了X數(shù)據中的最大長度為41硼婿,索引len(X)=27<41,得進行索引填充(padding)禽车。
X=['s','i','x',' ','h','o','u','r','s',' ','a','n','d',' ','f','i','f','t','y',' ','f','i','v','e',' ','a','m']
去字典human_vocab查詢其索引值寇漫,并填充到41的長度,于是:
索引X=[31 22 36 0 21 27 33 30 31 0 14 26 17 0 19 22 19 32 37 0 19 22 34 18 0 14 25 40 40 40 40 40 40 40 40 40 40 40 40 40 40]
同理殉摔,Y="06:55"州胳,len(Y)=5,Y數(shù)據集的長度都為5逸月,所以不需要填充栓撞。
Y=['0','6',':','5,'5']
去字典machine_vocab查詢其索引值,得到:
索引Y=[0 6 10 5 5]
然后再將X索引轉換為Xoh(one-hot)形式碗硬,Xoh維度:(41x41)瓤湘;將Y索引轉換為Yoh(one-hot)形式,Yoh維度:(5x11)恩尾。如下圖:
模型搭建:
1)通過get_model()函數(shù)獲得搭建的模型
2)get_model()函數(shù)理解
3)attention_layer()獲取注意力的實現(xiàn)
4)one_step_of_attention()每一步獲取注意力的過程
5) 模型訓練
6)對各個網絡層進行命名后的模型圖片弛说,兩個下劃線'__'后面的表示這個層在哪個函數(shù)中。
7)模型圖片劃分