【问题标题】:LSTM neural network with two sources of data具有两个数据源的 LSTM 神经网络
【发布时间】:2018-10-27 17:28:27
【问题描述】:

我有以下配置:一个 lstm 网络接收 n-gram 大小为 2 的文本。下面是一个简单的示意图:

经过一些测试,我注意到对于某些类,当我使用大小为 3 的 ngram 时,我的准确率会显着提高。现在我想同时训练一个具有两种 ngram 大小的新 LSTM 神经网络,如下图所示:

我怎样才能提供数据并建立这个模型,使用 keras 来执行这个任务?

【问题讨论】:

    标签: neural-network keras lstm recurrent-neural-network


    【解决方案1】:

    我假设您已经有了将单词拆分为 n-gram 的功能,因为您已经让 2-gram 和 3-gram 模型工作了?因此,我只是为一个工作示例构建了一个“酷”一词的示例示例。我不得不在我的示例中使用嵌入,因为具有 26^3=17576 个节点的 LSTM 层对于我的计算机来说有点太多了。我希望您在 3 克代码中也这样做了?

    下面是一个完整的工作示例:

    from tensorflow.keras.layers import Input, Embedding, LSTM, Dense, concatenate
    from tensorflow.keras.models import Model
    import numpy as np
    
    # c->2 o->14 o->14 l->11
    np_2_gram_in = np.array([[26*2+14,26*14+14,26*14+11]])#co,oo,ol
    np_3_gram_in = np.array([[26**2*2+26*14+14,26**2*14+26*14+26*11]])#coo,ool
    
    np_output = np.array([[1]])
    
    output_shape=1
    lstm_2_gram_embedding = 128
    lstm_3_gram_embedding = 192
    
    inputs_2_gram = Input(shape=(None,))
    em_input_2_gram = Embedding(output_dim=lstm_2_gram_embedding, input_dim=26**2)(inputs_2_gram)
    lstm_2_gram = LSTM(lstm_2_gram_embedding)(em_input_2_gram)
    inputs_3_gram = Input(shape=(None,))
    em_input_3_gram = Embedding(output_dim=lstm_3_gram_embedding, input_dim=26**3)(inputs_3_gram)
    lstm_3_gram = LSTM(lstm_3_gram_embedding)(em_input_3_gram)
    concat = concatenate([lstm_2_gram, lstm_3_gram])
    output = Dense(output_shape,activation='sigmoid')(concat)
    
    model = Model(inputs=[inputs_2_gram, inputs_3_gram], outputs=[output])
    model.compile(optimizer='adam', loss='binary_crossentropy')
    
    model.fit([np_2_gram_in, np_3_gram_in], [np_output], epochs=5)
    model.predict([np_2_gram_in,np_3_gram_in])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-15
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多