def __init__(self):
self.embedding_size = nlp_segment.flags.embedding_size
self.num_tags = nlp_segment.flags.num_tags
self.num_hidden = nlp_segment.flags.num_hidden
self.learning_rate = nlp_segment.flags.learning_rate
self.sentence_length = nlp_segment.flags.max_sentence_len
self.word2vec_path = nlp_segment.word_vec_path
self.model_save_path = nlp_segment.model_save_path
self.hidden_layer_num = 1
self.max_grad_norm = nlp_segment.flags.max_grad_norm
self.input_x = tf.placeholder(dtype=tf.int32,shape=[None,self.sentence_length],name="input_x")
self.labels = tf.placeholder(dtype=tf.int32,shape=[None,self.sentence_length],name='label')
self.lengths = tf.placeholder(dtype=tf.int32,shape=[None],name='lengths')
self.dropout = tf.placeholder(dtype=tf.float32,name='dropout')
with tf.name_scope("embedding_layer"):
self.word_embedding = tf.Variable(data_loader.load_w2v(),name="word_embedding")
inputs_embed = tf.nn.embedding_lookup(self.word_embedding,self.input_x)
# ?????????,????(batch_size, n_steps, n_input)????????n_steps???,
# ????????(batch_size, n_input), ????LSTM???????
inputs_embed = tf.unstack(inputs_embed, self.sentence_length, 1)
features = self.bi_lstm_layer(inputs_embed)
with tf.variable_scope('Softmax') as scope:
self.W = tf.get_variable(shape=[self.num_hidden *2,self.num_tags],
initializer=tf.truncated_normal_initializer(stddev=0.01),
name='weights',
regularizer= l2_regularizer(0.001))
self.b = tf.Variable(tf.zeros([self.num_tags],name='bias'))
scores = tf.matmul(features,self.W) + self.b
self.scores = tf.reshape(scores, [-1, self.sentence_length, self.num_tags])
with tf.name_scope("crf"):
log_likelihood,self.trans_form = crf.crf_log_likelihood(self.scores,self.labels,self.lengths)
with tf.name_scope("output"):
self.loss = tf.reduce_mean(-1.0 * log_likelihood)
self.global_step = tf.Variable(0,name="global_step",trainable=False)
self.optimizer = tf.train.AdamOptimizer(self.learning_rate)
t_vars = tf.trainable_variables()
grads,_ = tf.clip_by_global_norm(tf.gradients(self.loss,t_vars),self.max_grad_norm)
self.trans_op = self.optimizer.apply_gradients(zip(grads,t_vars),self.global_step)
self.saver = tf.train.Saver()
评论列表
文章目录