AutoKeras:开源AutoML初体验,自动搜索和构建最优深度模型,贝叶斯搜索器,以及mnist示例代码

20 美元/时的AutoML太贵?试试AutoKeras吧

自动搜索构建深度学习模型和调参一直是数据科学家们向往的工具,而我们知道Google AI发布的AutoML是要收费的,如果想要开源的而且想要对AutoML背后技术一探究竟的,可以看看这款AutoKeras

AutoKeras开发处于初期阶段,它基于Keras(也有pytorch),而keras我们知道是基于TensorFlow,所以GPU利用可以不用担心(只要你安装了gpu版TensorFlow即可)。由于Keras代码极其简洁,autokeras上手也较容易 。

所以直接上autokeras版mnist训练代码:

from keras.datasets import mnist
from autokeras.image_classifier import ImageClassifier

if __name__ == '__main__':
    (x_train, y_train), (x_test, y_test) = mnist.load_data()
    x_train = x_train.reshape(x_train.shape + (1,))
    x_test = x_test.reshape(x_test.shape + (1,))

    clf = ImageClassifier(verbose=True, augment=False)
    clf.fit(x_train, y_train, time_limit=12 * 60 * 60)
    clf.final_fit(x_train, y_train, x_test, y_test, retrain=True)
    y = clf.evaluate(x_test, y_test)
    print(y * 100)

这里有几个要点,第一,代码需要在python3.6上跑否则会有兼容性问题(目前autokeras只支持python3.6), 继续阅读AutoKeras:开源AutoML初体验,自动搜索和构建最优深度模型,贝叶斯搜索器,以及mnist示例代码

CVPR2018精选#3: 端到端FCN学会在黑暗中看世界,全卷积网络处理低曝光、低亮度图片并进行还原,及其TensorFlow源码

与其说AI智能时代,不如说是“泛智能的自动化”时代,或者,以人类为智能核心的 “机器智能辅助”时代 — David 9

最近流传的一些AI“寒冬论”, David 9 觉得很可笑。二十年前深蓝击败卡斯帕罗夫时,自动化智能已经开始发展,只是现今更“智能”而已,而这个更智能、更普及的趋势不是任何人可以控制的。

人类无尽的贪婪和惰性需要外部智能辅助和填补,也许以后的核心不是“深度学习”或者增强学习,但终究会有更“好”的智能去做这些“脏”活“累”活,那些人类不想干或人类做不到的活。。。

CVPR2018上,伊利诺伊大学和Intel实验室的这篇“学会在黑暗中看世界” 就做了人类做不到的活, 自动把低曝光、低亮度图片进行亮度还原

来自论文:Learning to See in the Dark

人肉眼完全开不到的曝光环境下,机器实际是可以还原出肉眼可识别的亮度。

该论文的第一个贡献是See-in-the-Dark (SID)数据集的整理:

来自论文:Learning to See in the Dark

因为目前的数据集没有针对低曝光同时低亮度的图片集,如上图,作者用索尼和富士相机收集低曝光的室内室外图片,同时配对正常曝光的图片用来训练: 继续阅读CVPR2018精选#3: 端到端FCN学会在黑暗中看世界,全卷积网络处理低曝光、低亮度图片并进行还原,及其TensorFlow源码

tensorboard快速上手,tensorboard可视化普及贴(代码基于tensorflow1.2以上)

有太多小伙伴问David 9关于Tensorboard的入门了,

我们都知道tensorflow训练一般分两步走:第一步构建流图graph,第二步让流图真正“流”起来(即进行流图训练)。

tensorboard会对这两步都进行跟踪,启动这种跟踪你必须先初始化一个tensorflow的log文件writer对象

writer = tf.train.SummaryWriter(logs_path, graph=tf.get_default_graph())

然后启动tensorboard服务:

[root@c031 mnist]# tensorboard --logdir=/tmp/mnist/2
TensorBoard 1.5.1 at http://c031:6006 (Press CTRL+C to quit)

即可看到你定义的流图:

GRAPHS中的每个方框代表tensorflow代码中的scope作用域,比如上图就定义了7个作用域:train,  cross_entropy,  Accuracy,  softmax,  input,  weights,  biases. 每个作用域下都可能有一些Variable或者计算操作的Tensor,可以对方框双击鼠标放大

上图可见,input的scope下有两个placeholder:x-input和y-input. 继续阅读tensorboard快速上手,tensorboard可视化普及贴(代码基于tensorflow1.2以上)

TensorFlow如何充分使用所有CPU核数,提高TensorFlow的CPU使用率,以及Intel的MKL加速

许多朋友使用服务器时,碰巧服务器没有安装GPU或者GPU都被占满了。可是,服务器有很多CPU都是空闲的,其实,把这些CPU都充分利用起来,也可以有不错的训练效果。

但是,如果你是用CPU版的TF,有时TensorFlow并不能把所有CPU核数使用到,这时有个小技巧David 9要告诉大家:

with tf.Session(config=tf.ConfigProto(
  device_count={"CPU":12},
  inter_op_parallelism_threads=1,
  intra_op_parallelism_threads=1,
  gpu_options=gpu_options,
)) as sess:

在Session定义时,ConfigProto中可以尝试指定下面三个参数: 继续阅读TensorFlow如何充分使用所有CPU核数,提高TensorFlow的CPU使用率,以及Intel的MKL加速

迁移学习101: Transfer learning, pretrained learning, fine tuning 代码与例程分析 源码实践

目前的迁移学习太粗浅, 归因于我们对表征的理解太粗浅. 但这是一个好方向, 如果我们能从”迁移学习”上升到”继承学习”, 任何模型都是”可继承”的, 不用担心今天的模型到了明天就毫无用处, 就像人类的基因一代代地演变, 是不是会有点意思 ? — David 9

太多初学者总是混淆迁移学习预训练模型, David 9一直想为大家区分两者, 其实迁移学习预训练并不难区分:

  1. 把模型的所有参数保存起来, 都可以宽泛地叫做预训练, 所以预训练比迁移学习宽泛的多. 我们并不设限预训练的保存模型未来的用处 (部署 or 继续优化 or 迁移学习)
  2. 把预训练的模型用在其他应用的训练可以称为迁移学习. 

迁移学习(Transfer learning) 的原理相当简单:

如上图, 复用之前预训练的复杂深度网络(第一行大蓝框), 我们复用倒数第二层对图像的输出特征作为新的训练输入.

使用这个输入, 我们再训练一个迷你的浅层网络(第二行绿底网络), 就可以应用在其他领域. 继续阅读迁移学习101: Transfer learning, pretrained learning, fine tuning 代码与例程分析 源码实践

TensorFlow手把手入门之分布式TensorFlow — 3个关键点,把你的TensorFlow代码重构为分布式!

分布式架构就像哈姆雷特,一千个人眼中有一千种分布式方式 — David 9

对于机器学习模型,分布式大致分两类:模型分布式数据分布式:

模型分布式非常复杂和灵活, 它把整个机器学习模型分割,分散在多个节点上,在每个节点上计算模型的各个部分, 最后把结果拼接起来。如果你造了一个并行性很高的深度网络,比如这个,那就更棒了。你只要在每个节点上,计算不同的层,最后把各个层的异步结果通过较为精妙的方式汇总起来。

而我们今天要手把手教大家的是数据分布式。模型把数据拷贝到多个节点上, 每次算Epoch迭代的时候,每个节点对于一个batch的梯度都会有一个计算值,一个batch结束后,所有节点把梯度值汇总起来(ps参数服务器的任务就是汇总所有参数更新),从而进行更新。这就会导致每个batch的计算都比非分布式方法精准。相对非分布式,并行方法下,同样的迭代次数,收敛较快。 继续阅读TensorFlow手把手入门之分布式TensorFlow — 3个关键点,把你的TensorFlow代码重构为分布式!

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方法,亲测可用