2017-01-05 7 views
1

プレトレインされた埋め込みをレイヤーに読み込むことはできないようです。行の数は、私が使用する語彙の単語数と数のが、以下のフォーマットを有するembeddings.txtとCNTK:ファイルから事前に埋め込まれた単語埋め込みの回避策

model = create_model() 

    E = [p for p in model.parameters if p.name == 'E'][0] 
    emb = np.asarray(np.loadtxt('embeddings.txt', delimiter=' '), dtype='float32') 
    model = model.clone(CloneMethod.clone, { E: constant(emb) }) 

:私は回避策としてやったhere

は以下の通りです参照してください。列は、私は私の埋め込みのために選択した寸法である:... -0.05952413007617 0.12596195936203 -0.189506858587265 -0.0871662572026253 -0.0454806201159954 -0.126074999570847 ... ...

上記は正しいworkaroのように見えるんうん? 私はトレーニングセッションを開始しました。パラメータの数は、埋め込みレイヤーを訓練するときに得たものに比べて少なくなりました。

答えて

0

これが修正されました。例:

# embedding, initialized from a user-supplied constant weight table 
e = Embedding(weights=[[1, 3, 2], [3, 4, 1]]) 

# (you would get the weights from a file instead) 

# test it: 
y = Input(2) 

dat = np.array([[-1., 1.]], dtype=np.float32) 
res = e(y).eval({y: dat}) 

npout = np.matrix(dat[0]) * e.E.value 
np.testing.assert_array_equal(res[0], npout, err_msg='Error in constant embedding layer') 
2

お試しください:E.value = emb代替回避策として。

あなたの回避策は、埋め込みを定数に固定します。それが受け入れられず、埋め込みをさらに訓練したい場合は、上記の方法を選択することができます。

関連する問題