2017-01-05 6 views
1

Похоже, что загружать предварительно наклеенные вложения на слой невозможно. См hereCNTK: Временное решение для загрузки предварительно подготовленных словесных вложений из файла

То, что я сделал, как обходной путь заключается в следующем:

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) }) 

с embeddings.txt, имеющей следующий формат, где количество строк является количество слов в словаре, я использую и количество столбцы размеров, которые я выбрал для моих вложений: -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 в качестве альтернативного обходного пути.

Ваше обходное решение замораживает вложение в константу. Если это неприемлемо, и вы хотите продолжить обучение вложений, вышеуказанный подход может быть вашим выбором.

 Смежные вопросы

  • Нет связанных вопросов^_^