主頁 > 區塊鏈 > Embedding理解及keras中Embedding引數詳解,代碼案例說明

Embedding理解及keras中Embedding引數詳解,代碼案例說明

2020-09-13 02:42:08 區塊鏈

Embedding理解

嵌入層將正整數(下標)轉換為具有固定大小的向量 ------官網

詞嵌入是一種語意空間到向量空間的映射,簡單說就是把每個詞語都轉換為固定維數的向量,并且保證語意接近的兩個詞轉化為向量后,這兩個向量的相似度也高,
舉例說明embedding程序:
“Could have done better”

  1. 通過索引對該句子進行編碼,每個單詞分配一個索引,上面的句子就會變成這樣:
122  8 114 12
  1. 創建嵌入矩陣,即每一個索引需要分配多少維向量,也就是說每個詞需要轉化為多少維向量,這里設定為5,嵌入矩陣就會變成這樣:
索引122對應的詞向量:0.0190721  -0.04473796  0.03923314  0.04681129 -0.02183579
索引8對應的詞向量:0.01421751 -0.00090249  0.01750712 -0.03774468  0.04996594
索引114對應的詞向量:-0.04607415  0.04186441  0.02681447 -0.00218643 0.03448829
索引12對應的詞向量:-0.03162882  0.03427991  0.0324514   0.03953638  0.01771886

下面參考蘇神的一段話,我理解的是經常一起出現的詞詞向量數值會比較接近,也就是說經常一起共線的詞語意是相似的,天吶,我是理解錯了,還是這不在我的常識范圍內呀,任重道遠!!!

最后,解釋一下為什么這些字詞向量會有一些性質,比如向量的夾角余弦、向量的歐氏距離都能在一定程度上反應字詞之間的相似性?這是因為,我們在用語言模型無監督訓練時,是開了視窗的,通過前n個字預測下一個字的概率,這個n就是視窗的大小,同一個視窗內的詞語,會有相似的更新,這些更新會累積,而具有相似模式的詞語就會把這些相似更新累積到可觀的程度,我舉個例子,“忐”、“忑”這兩個字,幾乎是連在一起用的,更新“忐”的同時,幾乎也會更新“忑”,因此它們的更新幾乎都是相同的,這樣“忐”、“忑”的字向量必然幾乎是一樣的,“相似的模式”指的是在特定的語言任務中,它們是可替換的,比如在一般的泛化語料中,“我喜歡你”中的“喜歡”,以及一般語境下的“喜歡”,替換為“討厭”后還是一個成立的句子,因此“喜歡”與“討厭”必然具有相似的詞向量,但如果詞向量是通過情感分類任務訓練的,那么“喜歡”與“討厭”就會有差異較大的詞向量,-----蘇神,來自參考資料2

Keras中embedding引數詳解

from keras.layers.embeddings import Embedding
keras.layers.Embedding(input_dim, #詞匯表大小,就是你的文本里你感興趣詞的數量
output_dim, #詞向量的維度
embeddings_initializer='uniform',# Embedding矩陣的初始化方法
embeddings_regularizer=None,# Embedding matrix 的正則化方法
activity_regularizer=None, 
embeddings_constraint=None, # Embedding  matrix 的約束函式
mask_zero=False, #是否把 0 看作"padding" 值,取值為True時,接下來的所有層都必須支持 masking,詞匯表的索引要從1開始(因為檔案填充用的是0,如果詞匯表索引從0開始會產生混淆,input_dim
=vocabulary + 1)                 
input_length=None)# 輸入序列的長度,就是檔案經過padding后的向量的長度,

'''


函式輸入:尺寸為(batch_size, input_length)的2D張量,
batch_size就是你的mini batch里的樣本量,
input_length就是你的檔案轉化成索引向量(每個詞用詞索引表示的向量)后的維數,

函式輸出:尺寸為(batch_size, input_length,output_dim)的3D張量,
上面說了,output_dim就是詞向量的維度,就是詞轉化為向量,這個向量的維度,
比如word2vec把“哈哈”轉化為向量[1.01,2.9,3],那么output_dim就是3.
'''

代碼案例說明

舉例1:

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
@author:
@contact:
@time:
@context:
"""
from keras.layers.embeddings import Embedding
from keras.models import Sequential
import numpy as np

#我們隨機生成第一層輸入,即每個樣本存盤于單獨的list,此list里的每個特征或者說元素用正整數索引表示,同時所有樣本構成list
input_array = np.random.randint(1000, size=(32, 10))
'''
[[250 219 228  56 572 110 467 214 173 342]
 [678  13 994 406 678 995 966 398 732 715]
 ...
 [426 519 254 180 235 707 887 962 834 269]
 [775 380 706 784 842 369 514 265 797 976]
 [666 832 821 953 369 836 656 808 562 263]]
'''

model = Sequential()
model.add(Embedding(1000, 64, input_length=10))#詞匯表里詞999,詞向量的維度64,輸入序列的長度10
# keras.layers.Embedding(input_dim, output_dim, input_length)#詞匯表大小,詞向量的維度,輸入序列的長度

print(model.input_shape)
print(model.output_shape)
'''
(None, 10) #其中 None的取值是batch_size
(None, 10, 64)

input_shape:函式輸入,尺寸為(batch_size, 10)的2D張量(矩陣的意思)
output_shape:函式輸出,尺寸為(batch_size, 10,64)的3D張量
'''

model.compile('rmsprop', 'mse')
output_array = model.predict(input_array)
assert output_array.shape == (32, 10, 64)
print(output_array)
print(len(output_array))
print(len(output_array[1]))
print(len(output_array[1][1]))
'''
[
[[] [] [] ... [] [] []]
[[] [] [] ... [] [] []]
...
[[] [] [] ... [] [] []]
]


32:最外層維數32,32個樣本
10:第二層維數10,每個樣本用10個詞表示
64:最內層維數64,每個詞用64維向量表示
'''

舉例2:

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
@author:
@contact:
@time:
@context:
"""
from keras.preprocessing.text import one_hot
from keras.preprocessing.sequence import pad_sequences
from keras.models import Sequential
from keras.layers.embeddings import Embedding

#我們定義一個檔案集合存盤于List,每個檔案為list的一個元素,每個檔案都對應一個標簽,存盤于labels
docs = ['Well done!',
      'Good work',
      'Great effort',
      'nice work',
      'Excellent!',
      'Weak',
      'Poor effort!',
      'not good',
      'poor work',
      'Could have done better.']
labels = [1,1,1,1,1,0,0,0,0,0]

vocab_size = 50#估計的詞匯表大小,設定時要比真實的詞匯量大,不然會產生不同單詞分配了相同的索引,
#通過索引對上面10個句子進行編碼,one_hot編碼映射到[1,vocab_size],不包括0
encoded_docs = [one_hot(d, vocab_size) for d in docs]
print(encoded_docs)
'''
[[3, 38], [20, 9], [36, 28], [15, 9], [21], [5], [45, 28], [1, 20], [45, 9], [31, 37, 38, 10]]
'''

# 文本編碼成數字格式并padding到相同長度,這里長度設定為4,在后面補0,這也是為什么前面one-hot不會映射到0的原因,
max_length = 4
padded_docs = pad_sequences(encoded_docs, maxlen=max_length, padding='post')
print(padded_docs)
'''
[[ 3 38  0  0]
 [20  9  0  0]
 [36 28  0  0]
 [15  9  0  0]
 [21  0  0  0]
 [ 5  0  0  0]
 [45 28  0  0]
 [ 1 20  0  0]
 [45  9  0  0]
 [31 37 38 10]]
'''

# define the model
model = Sequential()
model.add(Embedding(vocab_size, 8, input_length=max_length))
print(model.input_shape)
print(model.output_shape)
'''
(None, 4)
(None, 4, 8)
'''

model.compile('rmsprop', 'mse')
output_array = model.predict(padded_docs)
assert output_array.shape == (10, 4, 8)
print(len(output_array))
print(len(output_array[1]))
print(len(output_array[1][1]))
print(output_array)
'''
10
4
8
[[[ 0.04572607 -0.03112372  0.01548124  0.0287031   0.03369636
   -0.00907223 -0.02674365  0.0497326 ]
  [ 0.02971635  0.01706659  0.01427769  0.02391822  0.02066484
    0.03235774  0.00140371 -0.01571052]
  [-0.00396045 -0.04596293  0.00576807 -0.0294588  -0.03388958
   -0.0161563  -0.03131516  0.02193661]
  [-0.00396045 -0.04596293  0.00576807 -0.0294588  -0.03388958
   -0.0161563  -0.03131516  0.02193661]]

 [[ 0.00637207  0.01458801 -0.02587212  0.0391363   0.04890009
   -0.00473984  0.01941831 -0.03002635]
  [ 0.02272599  0.01335565 -0.03088844  0.01404381 -0.00329325
    0.0016606   0.00242132 -0.04546838]
  [-0.00396045 -0.04596293  0.00576807 -0.0294588  -0.03388958
   -0.0161563  -0.03131516  0.02193661]
  [-0.00396045 -0.04596293  0.00576807 -0.0294588  -0.03388958
   -0.0161563  -0.03131516  0.02193661]]

 [[-0.02061187 -0.01111162  0.04552659  0.0447114  -0.02017692
    0.04908471  0.00620199  0.04637216]
  [ 0.04651392 -0.01801343  0.01927176 -0.03393314 -0.02526757
   -0.00044692  0.01945822  0.01561001]
  [-0.00396045 -0.04596293  0.00576807 -0.0294588  -0.03388958
   -0.0161563  -0.03131516  0.02193661]
  [-0.00396045 -0.04596293  0.00576807 -0.0294588  -0.03388958
   -0.0161563  -0.03131516  0.02193661]]

 [[ 0.04023353 -0.04503194 -0.01476847  0.04025214 -0.01467079
   -0.04541937  0.00791662  0.04561491]
  [ 0.02272599  0.01335565 -0.03088844  0.01404381 -0.00329325
    0.0016606   0.00242132 -0.04546838]
  [-0.00396045 -0.04596293  0.00576807 -0.0294588  -0.03388958
   -0.0161563  -0.03131516  0.02193661]
  [-0.00396045 -0.04596293  0.00576807 -0.0294588  -0.03388958
   -0.0161563  -0.03131516  0.02193661]]

 [[ 0.03823347 -0.01298066 -0.01494864 -0.00328387 -0.00303971
    0.02827323  0.0077986   0.02893318]
  [-0.00396045 -0.04596293  0.00576807 -0.0294588  -0.03388958
   -0.0161563  -0.03131516  0.02193661]
  [-0.00396045 -0.04596293  0.00576807 -0.0294588  -0.03388958
   -0.0161563  -0.03131516  0.02193661]
  [-0.00396045 -0.04596293  0.00576807 -0.0294588  -0.03388958
   -0.0161563  -0.03131516  0.02193661]]

 [[-0.00584649 -0.03266752 -0.043061    0.02855167 -0.0270277
    0.01577503 -0.03172879  0.03462131]
  [-0.00396045 -0.04596293  0.00576807 -0.0294588  -0.03388958
   -0.0161563  -0.03131516  0.02193661]
  [-0.00396045 -0.04596293  0.00576807 -0.0294588  -0.03388958
   -0.0161563  -0.03131516  0.02193661]
  [-0.00396045 -0.04596293  0.00576807 -0.0294588  -0.03388958
   -0.0161563  -0.03131516  0.02193661]]

 [[ 0.04572607 -0.03112372  0.01548124  0.0287031   0.03369636
   -0.00907223 -0.02674365  0.0497326 ]
  [ 0.04651392 -0.01801343  0.01927176 -0.03393314 -0.02526757
   -0.00044692  0.01945822  0.01561001]
  [-0.00396045 -0.04596293  0.00576807 -0.0294588  -0.03388958
   -0.0161563  -0.03131516  0.02193661]
  [-0.00396045 -0.04596293  0.00576807 -0.0294588  -0.03388958
   -0.0161563  -0.03131516  0.02193661]]

 [[ 0.04651392 -0.01801343  0.01927176 -0.03393314 -0.02526757
   -0.00044692  0.01945822  0.01561001]
  [ 0.00637207  0.01458801 -0.02587212  0.0391363   0.04890009
   -0.00473984  0.01941831 -0.03002635]
  [-0.00396045 -0.04596293  0.00576807 -0.0294588  -0.03388958
   -0.0161563  -0.03131516  0.02193661]
  [-0.00396045 -0.04596293  0.00576807 -0.0294588  -0.03388958
   -0.0161563  -0.03131516  0.02193661]]

 [[ 0.04572607 -0.03112372  0.01548124  0.0287031   0.03369636
   -0.00907223 -0.02674365  0.0497326 ]
  [ 0.02272599  0.01335565 -0.03088844  0.01404381 -0.00329325
    0.0016606   0.00242132 -0.04546838]
  [-0.00396045 -0.04596293  0.00576807 -0.0294588  -0.03388958
   -0.0161563  -0.03131516  0.02193661]
  [-0.00396045 -0.04596293  0.00576807 -0.0294588  -0.03388958
   -0.0161563  -0.03131516  0.02193661]]

 [[ 0.04632286 -0.03914303 -0.00696329  0.04238543  0.04322089
   -0.02889879  0.0167807   0.03662675]
  [ 0.03823347 -0.01298066 -0.01494864 -0.00328387 -0.00303971
    0.02827323  0.0077986   0.02893318]
  [ 0.02971635  0.01706659  0.01427769  0.02391822  0.02066484
    0.03235774  0.00140371 -0.01571052]
  [ 0.04477728 -0.02921386  0.03259372 -0.04354361 -0.02253401
    0.04778937  0.03554988  0.01400479]]]
'''

參考資料

參考資料1 keras官網
參考資料2 蘇神博客

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/19061.html

標籤:區塊鏈

上一篇:知網爪巴蟲 2.0

下一篇:python 行程超時自動退出 裝飾器

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • JAVA使用 web3j 進行token轉賬

    最近新學習了下區塊鏈這方面的知識,所學不多,給大家分享下。 # 1. 關于web3j web3j是一個高度模塊化,反應性,型別安全的Java和Android庫,用于與智能合約配合并與以太坊網路上的客戶端(節點)集成。 # 2. 準備作業 jdk版本1.8 引入maven <dependency> < ......

    uj5u.com 2020-09-10 03:03:06 more
  • 以太坊智能合約開發框架Truffle

    前言 部署智能合約有多種方式,命令列的瀏覽器的渠道都有,但往往跟我們程式員的風格不太相符,因為我們習慣了在IDE里寫了代碼然后打包運行看效果。 雖然現在IDE中已經存在了Solidity插件,可以撰寫智能合約,但是部署智能合約卻要另走他路,沒辦法進行一個快捷的部署與測驗。 如果團隊管理的區塊節點多、 ......

    uj5u.com 2020-09-10 03:03:12 more
  • 谷歌二次驗證碼成為區塊鏈專用安全碼,你怎么看?

    前言 谷歌身份驗證器,前些年大家都比較陌生,但隨著國內互聯網安全的加強,它越來越多地出現在大家的視野中。 比較廣泛接觸的人群是國際3A游戲愛好者,游戲盜號現象嚴重+國外賬號安全應用廣泛,這類游戲一般都會要求用戶系結名為“兩步驗證”、“雙重驗證”等,平臺一般都推薦用谷歌身份驗證器。 后來區塊鏈業務風靡 ......

    uj5u.com 2020-09-10 03:03:17 more
  • 密碼學DAY1

    目錄 ##1.1 密碼學基本概念 密碼在我們的生活中有著重要的作用,那么密碼究竟來自何方,為何會產生呢? 密碼學是網路安全、資訊安全、區塊鏈等產品的基礎,常見的非對稱加密、對稱加密、散列函式等,都屬于密碼學范疇。 密碼學有數千年的歷史,從最開始的替換法到如今的非對稱加密演算法,經歷了古典密碼學,近代密 ......

    uj5u.com 2020-09-10 03:03:50 more
  • 密碼學DAY1_02

    目錄 ##1.1 ASCII編碼 ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,并等同于國際標準ISO/IE ......

    uj5u.com 2020-09-10 03:04:50 more
  • 密碼學DAY2

    ##1.1 加密模式 加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codebook, 電子密碼本. 需要加密的訊息按照塊密碼的塊大小被分為數個塊,并對每個塊進 ......

    uj5u.com 2020-09-10 03:05:42 more
  • NTP時鐘服務器的特點(京準電子)

    NTP時鐘服務器的特點(京準電子) NTP時鐘服務器的特點(京準電子) 京準電子官V——ahjzsz 首先對時間同步進行了背景介紹,然后討論了不同的時間同步網路技術,最后指出了建立全球或區域時間同步網存在的問題。 一、概 述 在通信領域,“同步”概念是指頻率的同步,即網路各個節點的時鐘頻率和相位同步 ......

    uj5u.com 2020-09-10 03:05:47 more
  • 標準化考場時鐘同步系統推進智能化校園建設

    標準化考場時鐘同步系統推進智能化校園建設 標準化考場時鐘同步系統推進智能化校園建設 安徽京準電子科技官微——ahjzsz 一、背景概述隨著教育事業的快速發展,學校建設如雨后春筍,隨之而來的學校教育、管理、安全方面的問題成了學校管理人員面臨的最大的挑戰,這些問題同時也是學生家長所擔心的。為了讓學生有更 ......

    uj5u.com 2020-09-10 03:05:51 more
  • 位元幣入門

    引言 位元幣基本結構 位元幣基礎知識 1)哈希演算法 2)非對稱加密技術 3)數字簽名 4)MerkleTree 5)哪有位元幣,有的是UTXO 6)位元幣挖礦與共識 7)區塊驗證(共識) 總結 引言 上一篇我們已經知道了什么是區塊鏈,此篇說一下區塊鏈的第一個應用——位元幣。其實先有位元幣,后有的區塊 ......

    uj5u.com 2020-09-10 03:06:15 more
  • 北斗對時服務器(北斗對時設備)電力系統應用

    北斗對時服務器(北斗對時設備)電力系統應用 北斗對時服務器(北斗對時設備)電力系統應用 京準電子科技官微(ahjzsz) 中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS),因為是目前世界范圍內唯一可以大面積提供免費定位服務的系統,所以 ......

    uj5u.com 2020-09-10 03:06:20 more
最新发布
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:46:47 more
  • Hyperledger Fabric 使用 CouchDB 和復雜智能合約開發

    在上個實驗中,我們已經實作了簡單智能合約實作及客戶端開發,但該實驗中智能合約只有基礎的增刪改查功能,且其中的資料管理功能與傳統 MySQL 比相差甚遠。本文將在前面實驗的基礎上,將 Hyperledger Fabric 的默認資料庫支持 LevelDB 改為 CouchDB 模式,以實作更復雜的資料... ......

    uj5u.com 2023-04-16 07:28:31 more
  • .NET Core 波場鏈離線簽名、廣播交易(發送 TRX和USDT)筆記

    Get Started NuGet You can run the following command to install the Tron.Wallet.Net in your project. PM> Install-Package Tron.Wallet.Net 配置 public reco ......

    uj5u.com 2023-04-14 08:08:00 more
  • DKP 黑客分析——不正確的代幣對比率計算

    概述: 2023 年 2 月 8 日,針對 DKP 協議的閃電貸攻擊導致該協議的用戶損失了 8 萬美元,因為 execute() 函式取決于 USDT-DKP 對中兩種代幣的余額比率。 智能合約黑客概述: 攻擊者的交易:0x0c850f,0x2d31 攻擊者地址:0xF38 利用合同:0xf34ad ......

    uj5u.com 2023-04-07 07:46:09 more
  • Defi開發簡介

    Defi開發簡介 介紹 Defi是去中心化金融的縮寫, 是一項旨在利用區塊鏈技術和智能合約創建更加開放,可訪問和透明的金融體系的運動. 這與傳統金融形成鮮明對比,傳統金融通常由少數大型銀行和金融機構控制 在Defi的世界里,用戶可以直接從他們的電腦或移動設備上訪問廣泛的金融服務,而不需要像銀行或者信 ......

    uj5u.com 2023-04-05 08:01:34 more
  • solidity簡單的ERC20代幣實作

    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "hardhat/console.sol"; //ERC20 同質化代幣,每個代幣的本質或性質都是相同 //ETH 是原生代幣,它不是ERC20代幣, ......

    uj5u.com 2023-03-21 07:56:29 more
  • solidity 參考型別修飾符memory、calldata與storage 常量修飾符C

    在solidity語言中 參考型別修飾符(參考型別為存盤空間不固定的數值型別) memory、calldata與storage,它們只能修飾參考型別變數,比如字串、陣列、位元組等... memory 適用于方法傳參、返參或在方法體內使用,使用完就會清除掉,釋放記憶體 calldata 僅適用于方法傳參 ......

    uj5u.com 2023-03-08 07:57:54 more
  • solidity注解標簽

    在solidity語言中 注釋符為// 注解符為/* 內容*/ 或者 是 ///內容 注解中含有這幾個標簽給予我們使用 @title 一個應該描述合約/介面的標題 contract, library, interface @author 作者的名字 contract, library, interf ......

    uj5u.com 2023-03-08 07:57:49 more
  • 評價指標:相似度、GAS消耗

    【代碼注釋自動生成方法綜述】 這些評測指標主要來自機器翻譯和文本總結等研究領域,可以評估候選文本(即基于代碼注釋自動方法而生成)和參考文本(即基于手工方式而生成)的相似度. BLEU指標^[^?88^^?^]^:其全稱是bilingual evaluation understudy.該指標是最早用于 ......

    uj5u.com 2023-02-23 07:27:39 more
  • 基于NOSTR協議的“公有制”版本的Twitter,去中心化社交軟體Damus

    最近,一個幽靈,Web3的幽靈,在網路游蕩,它叫Damus,這玩意詮釋了什么叫做病毒式營銷,滑稽的是,一個Web3產品卻在Web2的產品鏈上瘋狂傳銷,各方大佬紛紛為其背書,到底發生了什么?Damus的葫蘆里,賣的是什么藥? 注冊和簡單實用 很少有什么產品在用戶注冊環節會有什么噱頭,但Damus確實出 ......

    uj5u.com 2023-02-05 06:48:39 more