Лямбда-слой Keras: умножить тензор на матрицу постоянной - PullRequest
0 голосов
/ 23 декабря 2018

Я пишу лямбда-слой в Керасе, чтобы вычислить умножение тензора и матрицы констант.Но размер в выходных данных оказался неправильным.

В коде jdes - тензор с размерностью TensorShape([Dimension(None), Dimension(100)]).Далее, six_title_embedding - это матрица констант, и она имеет форму (6, 100).

def cosine_distance(input):
    jd = K.l2_normalize(input, axis=-1)
    jt_six = K.l2_normalize(six_title_embedding, axis=-1)
    return jd * jt_six
distance = Lambda(cosine_distance, output_shape=(None, 6,100))(jdes)
result = Dense(1, activation='sigmoid')(distance)

. В выводе я ожидал, что result будет иметь форму (None, 6, 1), но теперь это (6, 1), поэтомучисло batch_size теряется при вычислении лямбда-слоя.Форма distance теперь TensorShape([Dimension(6), Dimension(100)]).Должно ли это быть (None, 6, 100), чтобы результат мог иметь (None, 6, 1)?

1 Ответ

0 голосов
/ 24 декабря 2018

Вам необходимо создать дополнительную ось для jdes, чтобы при умножении ее на постоянный тензор они могли транслироваться в одну и ту же форму:

def cosine_distance(input):
    jd = K.l2_normalize(input, axis=-1)
    jt_six = K.l2_normalize(six_title_embedding, axis=-1)
    jd = K.expand_dims(jd, axis=1)  # now it would have a shape of (None, 1, 100)
    return jd * jt_six  # the result would be (None, 6, 100)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...