def get_feed_dict(self, seqs, labels=None, lr=None, dropout=None): """ :param seqs: :param labels: :param lr: :param dropout: :return: feed_dict """ word_ids, seq_len_list = pad_sequences(seqs, pad_mark=0) feed_dict = { self.word_ids: word_ids, self.sequence_lengths: seq_len_list } if labels is not None: labels_, _ = pad_sequences(labels, pad_mark=0) feed_dict[self.labels] = labels_ if lr is not None: feed_dict[self.lr_pl] = lr if dropout is not None: feed_dict[self.dropout_pl] = dropout return feed_dict, seq_len_list
def predict_one_batch(seqs, stub, dropout=1.0): request = predict_pb2.PredictRequest() # request.model_spec.name = 'mnist' # for test request.model_spec.name = 'bi_lstm_crf' request.model_spec.signature_name = \ tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY word_ids, seq_len_list = pad_sequences(seqs, pad_mark=0) request.inputs['word_ids'].CopyFrom( tf.contrib.util.make_tensor_proto(word_ids, shape=[1, seq_len_list[0]])) request.inputs['sequence_lengths'].CopyFrom( tf.contrib.util.make_tensor_proto(seq_len_list, shape=[1])) request.inputs['dropout'].CopyFrom( tf.contrib.util.make_tensor_proto(dropout, shape=[])) # result_future = stub.Predict.future(request, 2.0) # e = result_future.exception() # if e: # print e # return # result = result_future.result() result = stub.Predict(request, 2.0) logits_proto = result.outputs['logits'] # logits_shape = [logits_proto.tensor_shape.dim[i].size # for i in range(len(logits_proto.tensor_shape.dim))] # logits = numpy.array(logits_proto.float_val).reshape(logits_shape) logits = tf.contrib.util.make_ndarray(logits_proto) transition_params_proto = result.outputs['transition_params'] # transition_params_shape = [transition_params_proto.tensor_shape.dim[i].size # for i in range(len(transition_params_proto.tensor_shape.dim))] # transition_params = numpy.array(transition_params_proto.float_val).reshape(transition_params_shape) transition_params = tf.contrib.util.make_ndarray(transition_params_proto) label_list = [] for logit, seq_len in zip(logits, seq_len_list): viterbi, viterbi_score = viterbi_decode(logit[:seq_len], transition_params) label_list.append(viterbi) return label_list, seq_len_list
def get_feed_dict(self, seqs, labels): seqs, seqs_len, max_len = pad_sequences(seqs, pad_mark='。') labels, _, _ = pad_sequences(labels, pad_mark='O') return seqs, seqs_len, labels, max_len
def get_feed_dict_seq(self, seqs): seqs, seqs_len, max_len = pad_sequences(seqs, pad_mark='。') return seqs, seqs_len, max_len