TensorFlow手把手入门之 — TensorFlow保存还原模型的正确方式,Saver的save和restore方法,亲测可用

许多TensorFlow初学者想把自己训练的模型保存,并且还原继续训练或者用作测试。但是TensorFlow官网的介绍太不实用,网上的资料又不确定哪个是正确可行的。

今天David 9 就来带大家手把手入门亲测可用的TensorFlow保存还原模型的正确方式,使用的是网上最多的Saver的save和restore方法, 并且把关键点为大家指出。

今天介绍最为可行直接的方式来自这篇Stackoverflow:https://stackoverflow.com/questions/33759623/tensorflow-how-to-save-restore-a-model 亲测可用:

保存模型:

import tensorflow as tf

#Prepare to feed input, i.e. feed_dict and placeholders
w1 = tf.placeholder("float", name="w1")
w2 = tf.placeholder("float", name="w2")
b1= tf.Variable(2.0,name="bias")
feed_dict ={w1:4,w2:8}

#Define a test operation that we will restore
w3 = tf.add(w1,w2)
w4 = tf.multiply(w3,b1,name="op_to_restore")
sess = tf.Session()
sess.run(tf.global_variables_initializer())

#Create a saver object which will save all the variables
saver = tf.train.Saver()

#Run the operation by feeding input
print sess.run(w4,feed_dict)
#Prints 24 which is sum of (w1+w2)*b1 

#Now, save the graph
saver.save(sess, 'my_test_model',global_step=1000)

必须强调的是:这里4,5,6,11行中的name=’w1′, name=’w2′,  name=’bias’, name=’op_to_restore’ 千万不能省略,这是恢复还原模型的关键。 继续阅读TensorFlow手把手入门之 — TensorFlow保存还原模型的正确方式,Saver的save和restore方法,亲测可用

ICLR 2017论文精选#3 机器自我编程—用”递归” 提高神经编程解释器(NPI)的泛化能力(Best paper award 最佳论文奖)

机器自主编程的发展比我们想象的要快, 并且, 人们容易忽略的是, 互联网上数不尽的源代码本身是高质量的”训练数据”. —— David 9

今天的最佳论文, 是伯克利改进去年 DeepMind 突破性论文: NPI (神经编程解释器). 论文题为: MAKING NEURAL PROGRAMMING ARCHITECTURES GENERALIZE VIA RECURSION

能够让机器自己具有推理能力和编程能力一直是人们梦想, 而如今, 即使深度学习和神经网络发展壮大, 我们在这一领域依然是”婴儿学步”. 去年DeepMind的论文NEURAL PROGRAMMER-INTERPRETERS (NPI) 又似乎让我们看到了曙光. 一旦研究能在工业界大范围应用, 使用伪代码编程, 甚至构造”自治”的下一代互联网都成为可能.

言归正传, 伯克利的这篇论文对去年NPI的改进, 已经能够模拟简单的冒泡排序,拓扑排序,快速排序, 小学生进位加法运算等简单算法. 基本目标如下:

上图蓝色部分是NPI核心, 目标是训练出一个神经网络(往往基础是LSTM), 来模拟一个程序的行为. 最后训练出一个和目标程序行为一样的神经网络.

读者可能好奇训练数据是什么? 继续阅读ICLR 2017论文精选#3 机器自我编程—用”递归” 提高神经编程解释器(NPI)的泛化能力(Best paper award 最佳论文奖)

ICLR 2017论文精选#2—用半监督知识迁移增强深度学习中训练数据的隐私(Best paper award 最佳论文奖)

藏私房钱的男同胞们, 是不是先要把钱分好几份, 然后藏在房间中的不同位置 ?    现在, 这种”智慧”用在了数据隐私上 …  —— David 9

虽然本届ICLR有许多不公平的评审传言, 但是令人欣慰的是, 目前深度学习发展如此迅猛, 以至于一些好的理论文章没有通过评审, 而有用的实际应用文章又如此之多让评审员为难. 无论如何, 今天要讲的这篇论文在保护训练隐私数据上非常有用, 从而浮出水面.

这篇论文也出自Google 大脑之手, 名为: SEMI-SUPERVISED KNOWLEDGE TRANSFER FOR DEEP LEARNING FROM PRIVATE TRAINING DATA. 论文给出了一种通用性的训练隐私数据的解决方案,名为”「教师」集成模型的隐私聚合”(Private Aggregation of Teacher Ensembles/PATE),PATE 发音类似”法国肉酱”这种食物。

框架总览:

目前对于模型隐私数据的攻击威胁一般基于以下两个假设: 继续阅读ICLR 2017论文精选#2—用半监督知识迁移增强深度学习中训练数据的隐私(Best paper award 最佳论文奖)

ICLR 2017论文精选#1之颠覆三观—理解深度学习要重新审视泛化能力(Best paper award 最佳论文奖)

我似乎看到了一个未来: 机器自身不断生成全新的模型架构, 去应对各种未知的问题. —— David 9

最近是个躁动的时节(ICLR 2017, Google I/O , Openstack峰会, 微软Build 等等), David 9也有点忙晚更了, 大家见谅. 今天, 接着拿ICLR 2017的一篇最佳论文, 这篇毁三观的论文实在是忍不住要拿出来讲一下. 论文来自Google 大脑团队:

是不是看到了我们熟悉的Bengio? 但是 第一作者是MIT的实习生哦~ 是的, 其实这篇论文理论并不艰深, 亮点是实验方法颠覆三观的结论. 探讨的是机器学习界古老的话题: 泛化能力.
提到模型泛化能力, 人们一般的观念是VC维, 也就是模型越复杂(训练参数越多), 模型的泛化能力越差. 该文章用深度学习模型实验指出了这种错误观念, 事实上, 深度学习模型随着模型参数的增加, 模型依然具有一定泛化能力:

如上图, 对于一些经典深度学习网络, 我们用平均每个样本带有训练参数的数量来评价模型的复杂度, 继续阅读ICLR 2017论文精选#1之颠覆三观—理解深度学习要重新审视泛化能力(Best paper award 最佳论文奖)

用TensorFlow可视化卷积层的方法

深度学习中对于卷积层的可视化可以帮助理解卷积层的工作原理与训练状态,然而卷积层可视化的方法不只一种。最简单的方法即直接输出卷积核和卷积后的filter通道,成为图片。然而也有一些方法试图通过反卷积(转置卷积)了解卷积层究竟看到了什么。

在TensorFlow中,即使是最简单的直接输出卷积层的方法,网上的讲解也参差不齐,David 9 今天要把可运行的方法告诉大家,以免大家受到误导。

废话少说,最简单的方法在此:

如果你有一个卷积层,我们以Tensorflow自带的cifar-10训练为例子:

with tf.variable_scope('conv1') as scope:
  kernel = _variable_with_weight_decay('weights',
                                       shape=[5, 5, 3, 64],
                                       stddev=5e-2,
                                       wd=0.0)
  conv = tf.nn.conv2d(images, kernel, [1, 1, 1, 1], padding='SAME')
  biases = _variable_on_cpu('biases', [64], tf.constant_initializer(0.0))
  pre_activation = tf.nn.bias_add(conv, biases)
  conv1 = tf.nn.relu(pre_activation, name=scope.name)
  _activation_summary(conv1)

继续阅读用TensorFlow可视化卷积层的方法

用Keras训练一个准确率90%+的Cifar-10预测模型

第五届ICLR(ICLR2017)最近被炒的厉害,David 9回顾去年著名论文All you need is a good init,当时提出了一种新型初始化权重的方法,号称在Cifar-10上达到94.16%的精度,碰巧最近在看Keras。

好!那就用Keras来还原一下这个Trick。效果果然不错,没怎么调参,差不多200个epoch,testing准确率就徘徊在90%了,training准确率到了94%:

测试准确率
测试准确率

继续阅读用Keras训练一个准确率90%+的Cifar-10预测模型

MSRA微软亚洲研究院 最新卷积网络: Deformable Convolutional Networks(可变形卷积网络)

抽样方法的改进似乎像人类进化一样永无休止 — David 9

CVPR 2017机器视觉顶会今年6月21号才举办,但是2016年11月就投稿截止了。微软每年都是CVPR大户,今天我们要讲解的就是MSRA微软亚洲研究院的最新投稿论文:Deformable Convolutional Networks。(很可能被收录哦~)我们暂且翻译为:可变形卷积网络

这是一种对传统方块卷积的改进核。本质是一种抽样改进。

谈到抽样,人脑好像天生知道如何抽样获得有用特征,而现代机器学习就像婴儿一样蹒跚学步。我们学会用cnn自动提取有用特征,却不知用什么样的卷积才是最有效的。我们习惯于方块卷积核窗口,而Jifeng Dai的work认为方块不是最好的形状:

来自:https://arxiv.org/pdf/1703.06211.pdf
来自:https://arxiv.org/pdf/1703.06211.pdf

如果能让网络自己学习卷积窗口形状,是不是一件很美好的事情? 继续阅读MSRA微软亚洲研究院 最新卷积网络: Deformable Convolutional Networks(可变形卷积网络)