含Keras的Bi-LSTM:维度必须相等,但为7和300

yr9zkbsy  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(135)

我是第一次用keras创建bilstm,但我遇到了困难。所以你明白,这里是我做的步骤:
1.我用Glove为x创建了一个嵌入矩阵;

def create_embeddings(fichier,dictionnaire,dictionnaire_tokens):
    with open(fichier) as file:
        line = file.readline()
        max_words = max(dictionnaire_tokens.values())+1 #1032
        max_size_dimensions = 300
        emb_matrix = np.zeros((max_words,max_size_dimensions))
        for item,count in dictionnaire_tokens.items():
            try:
                vecteur = dictionnaire[item]
            except:
                pass
            if vecteur is not None:
                emb_matrix[count]= vecteur
        return emb_matrix

1.我用我的y做了一些热编码;

def one_hot_encoding(file):
    with open(file) as file:
        line = file.readline()
        liste = []
        while line:
            tag = line.split(" ")[1]
            tag = [tag]
            line = file.readline()
            liste.append(tag)
    one_hot = MultiLabelBinarizer()
    array = one_hot.fit_transform(liste)
    return array

1.我用Keras编译了我的模型
第一个
1.我训练我的模型。但是当我想要训练它时,我得到以下消息:值错误:维度必须相等,但对于具有输入形状的“{{node binary_crossentropy/穆尔}} = Mul[T=DT_FLOAT](binary_crossentropy/Cast,binary_crossentropy/Log)”,维度必须为7和300:[?,7]、[?,300,300]。
我的嵌入矩阵是用手套300 d做的,所以它有300维。而我的标签,我只有7个标签。所以我必须让我的x和y有相同的维度,但怎么做?谢谢!!!

pgvzfuti

pgvzfuti1#

keras.backend.clear_session()
from tensorflow.keras.layers import Bidirectional
model = Sequential()

_input = keras.layers.Input(shape=(300,1))
model.add(_input)
bilstm_layer = Bidirectional(LSTM(units=300, return_sequences=False))
model.add(bilstm_layer)
model.add(Dense(7, activation="relu")) #here 7 is the number of classes you have and None is the batch_size
#crf_layer = CRF(units=len(self.tags), sparse_target=True)
#model.add(crf_layer)
model.compile(optimizer="adam", loss='binary_crossentropy', metrics='acc')
model.summary()

相关问题