所以我试图将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),我认为这与标签如何适合模型有关
答案 0 :(得分:0)
train_textEI应该是一个Numpy字符串数组,而不是字符串列表。试试这个:
train_textEI = np.array(train_textEI, dtype=object)