将ELMo与Keras结合使用时,如何正确输入训练集和标签?

时间:2019-03-08 18:28:17

标签: python tensorflow keras neural-network embedding

所以我试图将Elmo与Keras结合使用,所以我使用了此Elmo代码,因为它是唯一可训练的Elmo

使用此Elmo,嵌入被集成为输入层之后的一层,因此输入层实际上是一个字符串。但是,我不确定如何将输出标签放置在model.fit()中,应该将它们作为字符串输入,还是与输入语句具有相同的结构(但这不起作用),或者它们应该是1热编码,但是如果是这样,输出标签的长度将如何匹配输入句子的长度?有任何想法吗?

下面是我的代码的一部分,这是我使用提供标签的方式以及输入和输出标签的示例(如何提供)得到的错误

input_word = layers.Input(shape=(1,), 
                        dtype="string",name='word_input')
input_pred = layers.Input(shape=(1,), 
                     dtype="string",name='pred_input')

embedding1 = ElmoEmbeddingLayer()(input_word)
embedding2 = ElmoEmbeddingLayer()(input_pred)

print('embedding 1 ',embedding1)
embeddingsCon = [embedding1, 
            embedding2]

con11 = keras.layers.concatenate(embeddingsCon)
print('con 11 ',con11)
DenseInjy= layers.Dense(1, activation='relu', name='Dense1')(con11)
print('DenseI',DenseI)


DenseI2= layers.Dense(15, activation='softmax', name='Dense2')(DenseI)

print('DenseI2',DenseI2)

modelI = Model([input_word, input_pred], DenseI2)
modelI.compile(optimizer='adam',
                           loss='categorical_crossentropy',
                           metrics=['categorical_accuracy'])

modelI.fit([train_textEI,train_predIE], train_labelEI,
                       batch_size = 5,
                       epochs = 10 )
  

Train_textEI [0]:[['拉合尔大学学习中心的成立是为了   教师队伍的专业发展。']

     

Train_predEI [0]:[['已建立已建立已建立已建立   建立建立建立建立   建立建立建立建立   建立的建立的建立的建立的']]

     

Train_labelEI [['A0-B   A0-I A0-I A0-I A0-I A0-I A0-I O P-B O A1-B A1-I A1-I A1-I A1-I A1-I   A1-I A1-I A1-I O']] INFO:tensorflow:Saver未创建,因为那里   图中没有变量可恢复I0308 17:55:39.423806   140704918992768 saver.py:1483]未创建保护程序,因为没有   图形中的变量以恢复result.shape ELMO(?,1024)

     

shape =(?, 1024),dtype = float32)con 11   张量(“ concatenate_12 / concat:0”,shape =(?, 2048),dtype = float32)   DenseI Tensor(“ Dense1_10 / Relu:0”,shape =(?, 1),dtype = float32)   DenseI2 Tensor(“ Dense2_6 / Softmax:0”,shape =(?, 15),dtype = float32)

错误:检查目标时出错:预期Dense2具有2个维,但形状为数组(2905,1,1),我认为这与标签如何适合模型有关

1 个答案:

答案 0 :(得分:0)

train_textEI应该是一个Numpy字符串数组,而不是字符串列表。试试这个:

train_textEI = np.array(train_textEI, dtype=object)