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
- Tensorflow之RNN实践(一)
- Tensorflow 实践RNN(一)
- Tensorflow 实践RNN(一)
- Tensorflow之RNN实践(二)
- 基于tensorflow的RNN-LSTM(一)实现RNN
- 解读tensorflow之rnn
- 解读tensorflow之rnn
- tensorflow之RNN
- 解读tensorflow之rnn
- Tensorflow(二)- 实践一
- RNN实践之唐诗创作
- RNN代码解读之char-RNN with TensorFlow(model.py)
- RNN代码解读之char-RNN with TensorFlow(train.py)
- RNN代码解读之char-RNN with TensorFlow(util.py)
- RNN代码解读之char-RNN with TensorFlow(sample.py)
- tensorflow实践(一) 安装和调试
- TensorFlow 研究实践 一
- RNN时间序列预测(2)-Tensorflow入门,RNN操作
- ESP32 模块入门
- leetcode(11)24. Swap Nodes in Pairs
- 设计模式—六大原则
- Flex 图片和文字转化为BitmapData数据
- Linux成长之路(六)——简单的文本处理和数据流重定向
- Tensorflow之RNN实践(一)
- Chapter 11 浅析Exchanger类
- ESP32 模块编译
- C++琐碎小知识点记录
- hihoCoder-1032 - 最长回文子串(Manacher 马拉车)
- HDU3790-最短路径问题(最短路+dp)
- Finding Nemo(FPFA没看懂,先存着)
- iOS类别可以扩展类的属性
- 统计学习方法笔记(8)——提升方法之前向分布算法和提升树