如何合并多个嵌入层,其中数据集中的每一列在keras中具有不同的嵌入层

时间:2019-08-05 18:11:44

标签: python deep-learning lstm

我有一个供体选择的数据集,并使用此数据集实现了一个模型,模型的体系结构显示在图像https://i.imgur.com/w395Yk9.png中,数据集图像看起来像https://imgur.com/kdsCY58 我们可以将项目批准作为标签。我的主要问题是如何在此处合并多个嵌入层,以及如何通过将所有数据堆叠在一起来训练模型。下面是我只在文章列上尝试过的代码,但是我需要添加其他列的嵌入层。此外,我还需要在转换后将所有列堆叠起来,但是有2d列表无法转换为矩阵。

this is the code to convert data into list of word ranks.

'''

    def convert_data(x):
      vector = CountVectorizer() 
      vector.fit(x)
      vocab = vector.get_feature_names()
      print('No. of words in the Vocabulary : ',len(vocab))
      corpus = dict()
      freq_word = []
      index = 0
      for s in x:
        for w in s.split():
          corpus.setdefault(w,[]).append(index)
          index += 1
      for w in vocab:
        freq_word.append(len(corpus[w]))
      sort_index =np.argsort(np.array(freq_word))[::-1]
      word_dict=dict()
      rank=1
      for i in sort_index:
        word_dict[vocab[i]]=rank
        rank +=1
      updated_data=[]
      #print(word_dict)
      for sentence in x:
        rank_list=[]
        for words in sentence.split():
          if(len(words)>=2):
            rank_list.append(word_dict[words])
        updated_data.append(rank_list)
      return(updated_data)

'''     这是模型架构 '''

    m1 = Sequential()
    m1.add(Embedding(51, embd_vec_len, input_length=max_essay_length))
    m1.add(LSTM(10))
    m1.add(Dense(100, activation='relu'))
    m1.add(Dropout(0.))
    m1.add(Dense(50, activation='relu'))
    m1.add(Dropout(0.2))
    m1.add(Dense(1, activation='sigmoid'))
    print(m1.summary())
    import keras.backend as k

    from keras.optimizers import SGD
    from sklearn.utils import class_weight
    from keras import optimizers
    class_weights = class_weight.compute_class_weight('balanced',
                                             np.unique(y_tr),
                                             y_tr)
    sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
    m1.compile(loss='binary_crossentropy',
                  optimizer=sgd,
                  metrics=['accuracy']
                  )
    # Fitting the data to the model

    history_1 = m1.fit(essay_train, y_tr, nb_epoch=2,batch_size=5000,
                       class_weight=class_weights  ,verbose=1,validation_data=(essay_test, y_test)
              )

'''

1 个答案:

答案 0 :(得分:0)

我在StackOverflow上发现了这个old post。 它指出,当您需要多个嵌入层时,应使用Keras功能API。 该帖子还引用了此kaggle script,希望它有用。