需求
- 流式数据:如果数据不是收集好的一整块,而是流式(非批量数据),我又确实需要一点点学习,而不是数据准备齐全了再学
- 优化模型:不想耗时的重头训练,或只想针对别的模型做的差的再挑出来学习一遍(典型的基于SVM的增量学习,先挑出SVM学不好的边界点,再次学习提升)
- 现实需求:用户增加、用户删减,不适合数百、数万的用户都重来一遍。运营中修正
- 模拟人类:人是渐进式学习的,一天天课堂、业余式时间。模式是一个个知识点,效果未必比学个大纲,整本吃下要差
做法
典型的方式:
实例
借花献佛:有个可以跑通的一个例子,分三个; 代码可跑
note: line29,config.read(trainning_task_file, encoding = ‘UTF-8’)
原文的未指定编码,用gbk出错,强制为utf-8可借;
1 模型配置:
link:配置表
2 模型首次跑动
link:TF首次跑起来
3 模型再次取得网络结构、权重值,再次训练
link:再次取得神经网络和参数表ckpt并再次训练
核心操作就一个:
line:85-88,原本加图后,init改为 保存点加载模型和参数表后 restore恢复TF-NN神经网络
sess = tf.Session(graph=graph)
sess.run(init) # Very important
Changed to:
sess = tf.Session(graph=graph)
check_point_path = 'saved_model/' # 保存好模型的文件路径
ckpt = tf.train.get_checkpoint_state(checkpoint_dir=check_point_path)
saver.restore(sess,ckpt.model_checkpoint_path)
说白了,这里所谓“增量学习”还是很粗浅的,就是将一次完整训练打断,中间saver保存现场,下次有了新数据再重新启动训练。
这里并没有涉及到,新小量数据的灌入、训练不好的地方的查漏补缺的“人的智能”的实现的。机器还是比较傻的,需要我辈更努力去改进。