時間序列表示

2022-06-22 23:24:22 字數 1659 閱讀 9303

自然界的資料型別(用於神經網路處理)大致可分為兩種,一種是未知相關的資料(如卷積神經網路中處理的二維),另一種叫做序列訊號(也可以理解為時間軸上的資料)。

比如一段語音,就是乙個序列訊號,因為它的資料之間有乙個時間的先後順序;再比如聊天記錄,它可能並不是乙個時間序列,但是我們閱讀的時候會有乙個先後順序。這種沿著乙個時間序列不停的產生訊號的資料我們就稱之為序列(訊號)。

在深度學習中就有一種網路使用了這種資料處理方式,它就是rnn(迴圈神經網路,結構如上圖),rnn的應用之一就是自然語言處理。在自然語言處理中(拿文字翻譯來說),我們總是需要乙個單詞乙個單詞的按先後順序讀入,從而產生和翻譯結果中一一對應的關係。

現假設某一英文句子有十個單詞,每個單詞用長度為4的一維向量來表示,那麼這個句子就可以用乙個shape[10,4]的tensor來表達。

sequence embedding的一種表示方法為[b,seq_len,feature_len],其中b代表句子個數,seq_len代表每句話中的單詞個數,feature_len代表每個單詞表示成資料的長度。

另一種表示方法為[seq_len,b,feature_len],這種表達方式可以理解為每次在第seq_len時刻(某單詞出現的時刻,seq_len進行時間上的滑動處理)有b條訊號曲線(波形曲線),每條曲線上對應乙個feature_len向量

序列並不限於自然語言處理等直觀的含序列關係的資料處理,它也可以用於影象處理,因為影象的畫素與畫素之間本身就存在乙個上下文關係。

序列是從string型別到資料型別的轉換,但是數值中存在大小關係,而string句子中往往不存在大小關係而是存在語義關係。那麼如何實現乙個這樣的轉換呢(不僅僅是邏輯上的轉化還有語義上的轉化)?

對於不同的需求,也有不同的處理方式。

比如,如果系統只需要處理一些特定的地點訊號(從文字中提取地名),這樣的任務就可以通過簡單的onehot編碼實現,即每乙個地名對應乙個label,但是這種方式的缺點也是顯而易見的——浪費儲存空間(onehot編碼中大部分都是0,只有乙個位置是1)、高維度(日常交流中人的詞彙量上萬甚至上十萬),而優點就是可以保留語義相似度並且可訓練,即語義相似的單詞之間可以通過概率的方式展示出來,比如,「男性」一詞,我們可以訓練使得「男人」,「男生」與它進行高相似度匹配,通過onehot處理的結果就是以top概率展示出來。

對於word embedding,最常見的有兩種embadding方式,一種叫word2vec,顧名思義,就是將單詞轉化為向量,另一種叫glove(關於它可參考文章:

在tensorflow中提供了乙個很簡單的層來幫助我們學習語言文字的表示方法,使用過程如下:

可以理解為我們要分析十個地名,每個地名使用長度為4的資料表示

rails 表示時間

time time.now time time.now time 得到當前本地時間,thu jun 07 01 04 38 0800 2007 time 得到當前本地時間,thu jun 07 01 04 38 0800 2007 time.gmtime 得到格林威治時間,wed jun 06 17...

分組元素(列表 無序列表示例 有序列表示例)

定義列表 無序列表示例 有序列表示例 div元素是沒有語義的通用分組元素,早期設計中常用div標籤進行網頁布局。blockquote元素表示摘自另乙個源的大段內容的語義化元素。在顯示上有段落空隙,在左右兩邊縮排 增加外邊距 pre元素用來定義預格式化文字,在 標籤內容中的文字通常會保留空格和換行符,...

ruby 時間表示

time time.new puts 當前時間 time.inspect puts time.year 日期的年份 puts time.month 日期的月份 1 到 12 puts time.day 乙個月中的第幾天 1 到 31 puts time.wday 一周中的星期幾 0 是星期日 put...