這周計劃本來是將im2txt的模型用代碼實現一遍,然后開始跑模型了锚国。但是蒙袍,現在卻還沒完成俊卤。主要花費的時間部分為:做數據集7+個小時,整合im2txt與NMT代碼3+個小時害幅。
做數據集
以往做圖片的數據集,應該使用TFRecord格式來進行讀取岂昭。但是以现,我在使用的過程中發(fā)現,1萬張圖片寫入到TFRecord文件中约啊,占用的空間達到了2.7個G邑遏,按照這種比例來計算,整個比賽項目的數據有21萬恰矩,驗證數據集有3萬记盒,那么整個寫入到磁盤中,不得超過60個G外傅?我電腦中空間可沒有這么大纪吮,而且比賽的時候,到時還得將這60個G上傳到服務器萎胰,這也是個不小的時間開銷碾盟。
剛好,上周看了Importing Data技竟,而且冰肴,在seq2seq的項目中,我也用代碼實踐了榔组。所以打算熙尉,自己使用DataSet實現一個自己的數據集。這一改動搓扯,就各種報錯检痰,星期六的上午本來是打算直接開始模型代碼,確實整個上午一直處于報錯之中擅编。
后來攀细,在星期天的上午箫踩,終于仔細排查下,發(fā)現了是pad(它是用來填充位置谭贪,保持數據長度一致)設置的問題境钟。因為我在使用圖片名讀取圖片后,pad_batch函數不知道怎么自己設置這個圖片數據的pad數據了俭识。后來慨削,我直接將pad_types的維度修改下,然后將pad_values去掉就好了套媚。但是缚态,我覺得這還不是很好的解決方案,因為文字序列堤瘤,我需要設置pad玫芦,暫時還沒找到方法,而且我的pad_id其實和默認值0是一樣的本辐,就暫時先放放這個了桥帆。
下圖是終于能看到數據了
整合im2txt與NMT代碼
看了im2txt的源代碼,發(fā)現相比于NMT慎皱,它簡單很多老虫,相比于seq2seq的代碼,那就更簡單了(由于seq2seq里面可以實現機器翻譯茫多、文本摘要祈匙、圖片字幕,所以它的封裝程度很高天揖,看起來非常復雜)夺欲。然后,我就打算在im2txt中一些代碼宝剖,改成NMT里面的實現方式洁闰,看看效果怎么樣。
然后万细,我就整合完了扑眉,不過,運行之后赖钞,又是報錯腰素。看時間也不早了雪营,然后明天開始調錯誤吧弓千!
總結與計劃
總結:在使用的過程中,又一次發(fā)現自己對tensorflow很不熟悉献起,當想要實現某些功能時洋访,都不知道該怎么用函數去實現镣陕。不過,現在比以前好多了姻政,里面一般的方法呆抑,自己知道怎么去查了。特別是發(fā)現其實tensorflow里面封裝了很多基本的方法汁展,例如字符串的操作鹊碍,分割、連接食绿、求長度等等侈咕,它里面其實也封裝了一系列方法去進行操作。上周看到tensorflow里面的這些操作時器紧,感覺耀销,有點進入一個新的世界。
計劃:
- 將模型代碼跑通品洛,并盡快放到服務器開始跑树姨,這一周要看到效果。
- 看看seq2seq中對im2txt的實現桥状,看看有沒有更好的trick