首页 > 解决方案 > 在 keras 中创建无监督嵌入模型?

问题描述

我想创建一个具有以下架构的自动编码器:

    path_source_token_input = Input(shape=(MAX_CONTEXTS,), dtype=tf.int32, name='source_token_input')
    path_input = Input(shape=(MAX_CONTEXTS,), dtype=tf.int32, name='path_input')
    path_target_token_input = Input(shape=(MAX_CONTEXTS,), dtype=tf.int32, name='target_token_input')

    paths_embedded = Embedding(PATH_SIZE, DEFAULT_EMBEDDINGS_SIZE, name='path_embedding')(path_input)

    token_embedding_shared_layer = Embedding(TOKEN_SIZE, DEFAULT_EMBEDDINGS_SIZE, name='token_embedding')
    path_source_token_embedded = token_embedding_shared_layer(path_source_token_input)
    path_target_token_embedded = token_embedding_shared_layer(path_target_token_input)

    context_embedded = Concatenate()([path_source_token_embedded, paths_embedded, path_target_token_embedded])  # --> this up to now, is the output of the STANDALONE embedding model

    -------- SPLIT HERE? ------

    context_after_dense = TimeDistributed(Dense(CODE_VECTOR_SIZE, use_bias=False, activation='tanh'))(context_embedded)  # in short, this layer probably has to stay

    encoded = LSTM(100, activation='relu', input_shape=context_after_dense.shape)(context_after_dense)
    decoded = RepeatVector(MAX_CONTEXTS)(encoded)
    decoded = LSTM(100, activation='relu', return_sequences=True)(decoded)
    result = TimeDistributed(Dense(1), name='PROBLEM_is_here')(decoded)  # this seems to be some trick according to https://github.com/keras-team/keras/issues/10753, so probably don't remove

    inputs = (path_source_token_input, path_input, path_target_token_input)
    model = tf.keras.Model(inputs=inputs, outputs=result)

到目前为止,我已经了解到在解码器中实现反向嵌入层是不可能的,所以我的结论自然是将我的网络一分为二:一个生成输入的串联嵌入,第二部分是自动编码器本身与输入作为连接嵌入(第一部分的输出)。现在我的问题是,是否可以在 keras 中创建无监督嵌入模型?或其他任何地方。我的数据是未标记的,我最终的神经网络的重点是创建所述未标记数据的集群。

标签: kerasembeddingautoencoder

解决方案


推荐阅读