暑期在上海海知智能公司实习两个月,算法岗位,主要工作内容机器学习、深度学习、自然语言处理(NLP)。工程项目和科学研究很不相同,主要是算法的落地之前项目经验较少,本次实习收获颇丰,学习过程中也是参考多个博客和网上资料,写个总结记录一下。
算法
涉及到的除了数据预处理和特征提取,主要算法有:
- nlp相关算法
- 命名实体识别:lstm+crf并结合中文分析,seq2seq等;
- 文本分类: tf-idf,word2vec, fasttext等方法
- 机器学习相关
svm, 决策树,xgboost等方法。
tensor2tensor框架学习
tensor2tensor 包含现有的深度学习模型CNN、RNN、LSTM等,NLP的相关模型seq2seq、seq2class(eg. semantic analysis)、 Language Modeling等,以及image和语音识别相关的模型。
tensor2tensor对问题进行了分解主要包含三部分
- Problem: 问题定义了数据集和task在训练过程中的超参数。可以使用框架定义好的问题,也可以自定义问题,自定义问题必须注册才能使用
@registry.register_problem
。 - Dataset: 数据会用
tensorflow.Example
标准化为统一的TFRecord
文件。所有的数据集都必须register ,并且通过data generator
生成数据。 - Model:模型定义了tensor-to-tensor的转换,这个过程是与输入输出是独立的。同样的模型也必须注册
@registry.register_model
,定义自己的模型一般继承自T2Tmodel
,定义在t2t_model.py
添加自己的数据集,须重新定义Problem。Walkthrough
tensorflow 笔记
1. 模型存储和加载
模型存储和加载主要是saver
saver = tf.train.Saver()
#save
saver.save(session_to_save, save_path)
# restore
saver.restore(session_restored_to, path_restored_from)
模型保存四个文件:参考
- checkpoint 文本文件,纪录最新的checkpoint文件以及其它checkpoint文件列表。
- 二进制文件,保存模型中的变量参数(权重)信息:weights, biases, gradients等变量。
- model.ckpt.index 当前参数名
- model.ckpt.data-00000-of-00001 当前参数值
- model.ckpt.meta 二进制文件,保存模型的计算图结构信息(模型的网络结构:变量,operation,集合等)
只加载参数,不加载图结构
参数保存的是Variable变量的值,其它参数(例如batch_size等),在restore时可能希望修改,但是图结构在train时一般就已经确定了。所以,我们可以使用 tf.Graph().as_default()新建一个默认图,从而利用这个新图修改和变量无关的参数值大小。
with tf.Session() as sess:
saver = tf.train.Saver()
# check point
ckpt = tf.train.get_checkpoint_sate('./model')
if ckpt and ckpt.model_checkpoint_path:
saver.restore(sess, './model/model.ckpt-0')
2. 同时加载多个模型
tf.Session()可以通过graph参数指定session运行在哪个graph上。通过tensorflow.Graph().as_default()指定session所用的图。