Kerars是基于tensorflow框架的:符号主义的计算首先定义各种变量,“计算图”,计算图规定了各个变量之间的计算关系。建立好的计算图需要编译已确定其内部细节,然而,此时的计算图还是一个“空壳子”,里面没有任何实际的数据,只有当你把需要运算的输入放进去后,才能在整个模型中形成数据流,从而形成输出值训练是静态框架。
导入基本包
from keras.models import Model, Input
from keras.layers import Dense, Bidirectional, Dropout, LSTM, TimeDistributed, Masking
from keras.utils import to_categorical, plot_model
模型初始化计算图说明
输入层:bert_output = Input(shape=(200, 312, ), name="bert_output")#输入层200*312,Input是tensor类型
lstm=Bidirectional(LSTM(units=128,return_sequences=True), name="bi_lstm")(bert_output)#双向lstm:300*256
drop = Dropout(0.1, name="dropout")(lstm)#dropout
dense = TimeDistributed(Dense(n_tags, activation="softmax"), name="time_distributed")(drop)#全连接层,激活函数为softmax
model = Model(inputs=bert_output, outputs=dense)#将初始参数定义加入到模型中
模型设置
model.compile(loss=crf.loss_function, optimizer='adam', metrics=[crf.accuracy])#模型编译参数:损失函数,优化器,评价指标
model.summary()#打印模型结构
Model.fit(self, x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0,validation_data=None, shuffle=True, class_weight=None, sample_weight=None,initial_epoch=0,steps_per_epoch=None, validation_steps=None) model.fit(train_x, train_y, validation_data=(dev_x, dev_y), batch_size=16, epochs=10) #输入x,输出标签:y,batch_size:指定进行梯度下降时每个batch包含的样本数。训练时一个batch的样本会被计算一次梯度下降,使目标函数优化一步。 epochs:训练终止时的epoch值,训练将在达到该epoch值时停止,当没有设置initial_epoch时,它就是训练的总轮数,否则训练的总轮数为epochs - inital_epoch validation_data:形式为(X,y)或(X,y,sample_weights)的tuple,是指定的验证集。此参数将覆盖validation_spilt。
model.save("%s_ner.h5" % event_type)#保存模型为h5文件