Tensorflow之RNN实践(一)

来源:互联网 发布:网络流行词汇有哪些 编辑:程序博客网 时间:2024/05/22 05:37

最近学tensorflow里面的RNN,tensorflow框架下给RNN封装了很多方便利用的函数模块。RNN在自然语言处理中使用的较为广泛,https://github.com/tensorflow/tensorflow/tree/master/tensorflow/models/rnn/ptb, 官网给的这个例子就是基于NLP的,根据上文预测下一个词,再讲RNN的结构之前,感觉数据处理这块有必要详细的总结一下,从官网这个例子入手,分析一下reader.py如何处理输入文档。

第一段将输入的文本文字读入:

def _read_words(filename):  with tf.gfile.GFile(filename, "r") as f:    return f.read().decode("utf-8").replace("\n", "<eos>").split()

第二段从输入的文本文字中构建一个字典库:

def _build_vocab(filename):  data = _read_words(filename)  counter = collections.Counter(data)  count_pairs = sorted(counter.items(), key=lambda x: (-x[1], x[0]))  words, _ = list(zip(*count_pairs))  word_to_id = dict(zip(words, range(len(words))))  return word_to_id

第三段将文本文字使用字典库的单词编号替换:

def _file_to_word_ids(filename, word_to_id):  data = _read_words(filename)  return [word_to_id[word] for word in data if word in word_to_id]

接下来构建样本数据和标记数据:

   with tf.name_scope(name, "PTBProducer", [raw_data, batch_size, num_steps]):        raw_data = tf.convert_to_tensor(raw_data, name="raw_data", dtype=tf.int32)        data_len = tf.size(raw_data)        #设置batch长度        batch_len = data_len // batch_size        data = tf.reshape(raw_data[0 : batch_size * batch_len],                          [batch_size, batch_len])        #设置迭代轮数        epoch_size = (batch_len - 1) // num_steps        assertion = tf.assert_positive(            epoch_size,            message="epoch_size == 0, decrease batch_size or num_steps")        with tf.control_dependencies([assertion]):            epoch_size = tf.identity(epoch_size, name="epoch_size")        #tf.train.range_input_producer产生一个从1至epoch_size-1的整数至队列中        i = tf.train.range_input_producer(epoch_size, shuffle=False).dequeue()        #tf.slice参数[0,i*num_steps],第一个0,决定了从data的第一行开始,第二个参数,从第一行的第i*num_steps个数开始抽取batch_size*num_steps个数字,由此可以看出,label y是训练样本x的下一个词        x = tf.slice(data, [0, i * num_steps], [batch_size, num_steps])        y = tf.slice(data, [0, i * num_steps + 1], [batch_size, num_steps])    return x, y

至此,训练样本构建完毕
tensorflow的部分函数解释参考:
http://blog.csdn.net/chenxieyy/article/details/53031943
http://blog.csdn.net/lenbow/article/details/52181159

0 0