给普通科研人员跑TensorFlow Models项目的一点建议,编译tf,谷歌Bazel,TensorFlow Slim和其他

TensorFlow Models项目是谷歌TensorFlow项目下存放大量官方SOTA模型论文模型实现的子项目,大量的科研学习可以从这里开始(每个论题模型都是科研机构各自维护的):

但要快速上手任意模型,对于普通科研人员并不容易(除非你同时是CS系或同时熟悉C和python编程等)。这里David就带大家绕过一些不必要的坑。

models/research下的迁移学习domain_adaptation项目为例NIPS 2016论文),缺少编程经验的朋友(或者只会python的朋友)如果按照introduction走,很快就傻眼了:

普通科研人员不会知道bazel是google的一个编译工具,也不知道slim是什么东西(TF-slim其实是TensorFlow Models项目中独立出来的通用库)。事实上,对于只需研究模型本身的研究人员,这些都可以绕过!对于上述红框中的命令你完全可以用下面命令替代:

# python download_and_convert_data.py -- --dataset_dir $DSN_DATA_DIR --dataset_name=mnist

Models子项目虽然用bazel管理,但本质上都是TF的python项目,你总能找到python主入口跑这个项目,而不是用bazel这种专业工具(谷歌内部喜欢用的工具)。同样,slim本质上也是一个python库,用python脚本跑程序就可以:

$ python download_and_convert_data.py \
    --dataset_name=flowers \
    --dataset_dir="${DATA_DIR}"

另外,路径出错也是常见错误,

Traceback (most recent call last):
  File "dsn_eval.py", line 28, in <module>
    from domain_adaptation.datasets import dataset_factory
ImportError: No module named domain_adaptation.datasets

如上错误很可能是domain_adaption这个文件夹路径没有找到而已,这时对于一些不熟悉linux命令行的朋友,建软链或加环境变量不是最佳选择,最直接的方法是修改代码,比如在代码中插入下面两行,就可以把目录上两级库也添加进来,解决问题: 继续阅读给普通科研人员跑TensorFlow Models项目的一点建议,编译tf,谷歌Bazel,TensorFlow Slim和其他

3种用Keras和TensorFlow2.0创建模型的方法:序列模型,函数式模型和继承子类模型

David不经常聊代码,之所以单独post这篇文章,实在是这三种创建模型的方式很有代表性。市面上所有深度模型框架,在创建模型时,也不外乎这三种方式:

来自:https://www.pyimagesearch.com/2019/10/28/3-ways-to-create-a-keras-model-with-tensorflow-2-0-sequential-functional-and-model-subclassing/

第一种,序列模型。这是Keras最简单的构建模型方式(也许是所有框架中最简单构建方式),它顺序地把所有模型层依次定义,可以共享层的定义,多输入输出,但是如果要有分支,自定义层,就很困难了,下面是一个简单例子:

def shallownet_sequential(width, height, depth, classes):
  # initialize the model along with the input shape to be
  # "channels last" ordering
  model = Sequential()
  inputShape = (height, width, depth)

  # define the first (and only) CONV => RELU layer
  model.add(Conv2D(32, (3, 3), padding="same",
    input_shape=inputShape))
  model.add(Activation("relu"))

  # softmax classifier
  model.add(Flatten())
  model.add(Dense(classes))
  model.add(Activation("softmax"))

  # return the constructed network architecture
  return model

在Keras中只要模型是Sequential类,那就是使用了序列模型。

第二种,函数式模型。熟悉函数式编程的朋友对这种方式很好理解,即一切定义都是基于函数的。这种方式给了自定义层的更大空间,可更简单地定义层的分支,合并(concatenate)等继续阅读3种用Keras和TensorFlow2.0创建模型的方法:序列模型,函数式模型和继承子类模型

对经验“抽样”的艺术:增强学习(RL)的底层逻辑线索,回顾与总结

人类是一个神奇的物种,他们竟然可以把过往经验和自身感知叠加在一起进行“抽样”,他们管这种行为叫做:“灵感”  — David 9

人对“时间”的感知似乎比其他动物都强,这也许导致我们对过往经历(或经验)的认识更加清晰。如果是神经网络的拥护者,可能会把类似RL增强学习“行为决策”的问题用类似“路径感知”的方法解释,即,我们的行为是对过往经历(经验)的感知后得出的。

无论这种直觉是否正确,发生在人类身上的“增强学习”有时还掺杂了许多自身其他复杂的感知:

毕加索的“朵拉·玛尔”肖像画

有人说毕加索的创作灵感许多来自超空间感知(五维空间?) 不可否认毕加索似乎是在用多只“眼睛”看世界,他的创作过程显然不是对经验“抽样”那么简单。

但对于纯AI领域的增强学习,更多是对经验“抽样”的艺术之前David其实聊过策略学习的大体系(RL, IRL,DPL),今天,我们专注于讨论增强学习中的价值学习(Value Learning),这是透露RL底层逻辑的重要线索。

开启经验“抽样”旅程的第一步,是我们认识到除了IRL模仿学习,大多数增强学习,对于过往行为经验,都会给出回报(Reward)值。广义上任何行为都可以看做一种博弈游戏(game),而游戏的过程中总可以给出回报值(粗粒度或细粒度)。

以一个简单的路径游戏为例:

如果走到最右边的棕色悬崖扣一分-1,而如果走到蓝色框加两分(如左图+2分)。

如上图,现在摆在我们面前的看似只有两条实验路径(episode)。这是原始的蒙特卡罗法看到的抽样结果,这种抽样的偏见(bias)是明显的,它(智能体)今后会趋向选择“偏上”的路线,因为有一条+2的路线是靠上的。

事实上,我们抽样得到的不仅仅是2条路径 继续阅读对经验“抽样”的艺术:增强学习(RL)的底层逻辑线索,回顾与总结