一般,我们在参加某个比赛或者实现某种算法的时候,需要经历以下几个过程:
- 数据集收集、清洗
- 特征构建
- 模型实现
- 得到结果,再根据反馈在2-4进行多次想法的迭代
其中,在模型实现上,比如我主要方向是NLP,而NLP如今基本是深度学习时代(特别是预训练模型BERT出来后),因此多需要对深度学习框架有比较深的了解和使用经验。而Tensorflow和Pytorch两家经常被用来做对比。Tensorflow其实更适合用在工业界(静态图,TensorFlow的运行机制属于”定义”与”运行“相分离。),而Pytorch由于其方便性(动态图)而广泛流行于学术界。所以往往,实际操作时,我们通常会使用Pytorch快速实现模型,在对结果进行多次尝试找到最优参数后,再将使用Tensorflow进行复现。也就是说,Tensorflow很重要!!
Tensorflow的概念:
- 张量(tensor):TensorFlow程序使用tensor数据结构来代表所有的数据,计算图中,操作间传递的数据都是tensor,你可以把TensorFlow tensor看做一个n维的数组或者列表。
- 变量(variable):常用于定义模型中的参数,是通过不断训练得到的值。比如权重和偏置。
- 占位符(placeholder):输入变量的载体。也可以理解成定义函数时的参数。
- 图中的节点操作(op):一个op获得0个或者多个Tensor,执行计算,产生0个或者多个Tensor。op是描述张量中的运算关系,是网络中真正结构。
一个TensorFlow图描述了计算的过程,为了进行计算,图必须在会话里启动,会话将图的op分发到诸如CPU或者GPU的设备上,同时提供执行op的方法,这些方法执行后,将产生的tensor返回,在python语言中,返回的tensor是numpy array对象,在C或者C++语言中,返回的tensor是tensorflow:Tensor实例。
session与图的交互过程中定义了以下两种数据的流向机制:
- 注入机制(feed):通过占位符向模式中传入数据
- 取回机制(fetch):从模式中取得结果
所以,这里就是记录一些,Tensorflow常用的函数之类的,也当做我的小小笔记本好了。
1 | # NLP类Tensorflow常用导入包 |
关于tensowflow中的会话相关操作,参考博客:https://www.cnblogs.com/zyly/p/8869763.html
1 | # set GPU fraction |
1 | with tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) as sess: |
Tensorflow的summary用法参考博客:https://www.cnblogs.com/lyc-seu/p/8647792.html
1 | # 指定一个文件用来保存图,之后可以使用tensorboard查看训练过程 |
构建多层RNN
1 | def _create_rnn_cell(self, hidden_size, rnn_type='lstm'): |
创建模型:
1 | class Seq2SeqModel(object): |
1 | # 优化器 |