Добавление смещения для встраивания слоя в Keras

Я строю модель, используя керасы, чтобы выучить вложения слов, используя скипграмму с отрицательной выборкой. Мой ввод - это пара слов: (context_word, target_word) и, конечно, метка 1 для положительных и 0 для отрицательных пар. Что мне нужно сделать, это добавить смещение к модели. Смещение должно быть только смещением целевого слова для каждого ввода, а не для обоих слов.

До сих пор у меня есть код:

input_u = Input((1,))
input_v = Input((1,))

item_embedding = Embedding(input_dim = items_size, 
                           output_dim = embed_dim,                           
                           name = 'item_embedding')

bias_embedding = Embedding(input_dim = items_size, 
                           output_dim = 1, 
                           embeddings_initializer = 'zeros', 
                           name = 'bias_embedding')

u = item_embedding(input_u)
v = item_embedding(input_v)
b_v = bias_embedding(input_v)

dot_p_layer = merge.dot([u, v], axes = 1)
with_bias = merge.add([dot_p_layer, b_v])
flattenned = Flatten()(with_bias)

output_layer = Dense(1, 
                     activation = 'sigmoid', 
                     use_bias = False)(flattenned)
print (output_layer.shape)

model = Model(inputs=[input_u, input_v], outputs=output_layer)
model.compile(loss='binary_crossentropy', optimizer = 'adam', metrics = ['accuracy'])

Тем не менее, я не могу заставить его работать. Код работает, но я получаю большую потерю и меньшую точность, чем модель без смещения. Так что я думаю, что я делаю что-то не так. Плюс, когда я проверяю размеры, я все равно получаю размер моего вложения, а не размер вложения + 1

Я думал об использовании другого плотного слоя (даже не уверен, логично или правильно), чтобы добавить смещение после точечного продукта, но я не мог заставить его работать.

Я действительно хотел бы помочь с добавлением смещения в модель.

1 ответ

Решение

Если ты хочешь dimension + 1 ты ищешь concatenate, не для add,

Я не знаю размер после dot (точка странное поведение, смеется), но если это 3D (batch, embedding, embedding), вам нужно будет сплющить перед объединением.

Другие вопросы по тегам