我想比较两个LSTM,一个是Wikipedia数据训练的,另一个是我自己的。设计第一个模型时出现问题。我定义了两个词嵌入词汇,一个仅基于维基百科数据构建,另一个也基于我的语料库进行训练。我想定义第一个具有嵌入层(从Wikipedia加载预先训练的权重)的LSTM,但是输出应该与其词汇量(10000)不同,实际上我想输出的类多达包含在其他词汇表中的词汇(50000)。这就是我现在拥有的:
model = Sequential()
model.add(Embedding(vocab_size_wikipedia, embedding_size, input_length=55, weights=[pretrained_weights_wikipedia]))
model.add(Bidirectional(LSTM(units=embedding_size)))
model.add(Dense(vocab_size, activation='softmax'))
model.compile(loss='categorical_crossentropy',
optimizer = RMSprop(lr=0.0005),
metrics=['accuracy'])
model.fit(np.array(X_train), np.array(y_train), epochs=10, validation_data=(np.array(X_val), np.array(y_val)))
这是我的变量和形状:
shape of pretrained_weights_wikipedia = (10000, 100)
vocab_size = 50000
embedding_size = 100
vocab_size_wikipedia = 10000
X_train.shape() = (1600,55)
y_train.shape() = (1600,50000)
X_train.shape() = (400,55)
X_train.shape() = (400,50000)
X_train.shape() = (200,55)
X_train.shape() = (200,50000) #the labels are padded
谢谢您的帮助!
答案 0 :(得分:0)
您要构建一个模型,在该模型中,您需要具有不同词汇量(此处为10000)的预训练权重,并将其微调为具有不同词汇量(此处为50000)的自己的语料库。
由于问题是对称的,因此应重用编码第一句话的机制(权重和全部)来编码第二句话。在这里,我们使用共享层对输入进行编码。
单击here,以获取有关shared layers
的更多信息。
input = Input(shape=55)
emb1 = Embedding(vocab_size_wikipedia, embedding_size, weights=pretrained_weights_wikipedia, trainable=False)(input)
emb2 = Embedding(50000, embedding_size)(input)
bi = Bidirectional(LSTM(embedding_size))
x1 = bi(emb1)
x2 = bi(emb2)
dense = Dense(vocab_size, activation='softmax')
op1 = dense(x1)
op2 = dense(x2)
model = Model(inputs=[input1, input2], outputs=[op1, op2])
model.compile(loss='categorical_crossentropy',
optimizer = RMSprop(lr=0.0005),
metrics=['accuracy'])
model.summary()