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创建模型的方法:序列模型,函数式模型和继承子类模型

在自己专业领域,如何快速成(jia)为(zhuang)一名数据科学家? David 9的一些方法,#入门数据科学,#数据分析

David的粉丝中不少是跨学科学习机器学习(深度学习)的。如何在自己的专业领域里上手数据科学和分析是我经常被问到的问题。

这里我总结一些简单的方法,帮大家快速自学。

1,多数跨学科朋友都不是CS计算机专业的,所以不要折磨自己在编程上,专注一个容易上手的流行语言如R,python,julia可以为你减轻编程负担,如果能力有限建议只精通其中一种语言。

2,立即上手。不要害怕有些编程思想和理论还没有掌握,这里的上手是让你快速了解你这个专业的数据科学家在做什么,用了哪些流行工具?渠道大概有下面3种:

1) 找到你们行业领域的热门竞赛(如推荐领域有亚马逊,Netflix办的竞赛),如果你实在找不到,可以看官方的数据科学竞赛如kaggle, 阿里天池,以生物学DNA测序为例:

直接在kaggle中搜索:“DNA sequencing”就可以得到许多相关信息:

进入到第一个果蝇基因组的数据你就可以看到已经有一些kernel代码可以直接跑了学习: 继续阅读在自己专业领域,如何快速成(jia)为(zhuang)一名数据科学家? David 9的一些方法,#入门数据科学,#数据分析

TensorFlow 2.0入坑必备之No.1: 积极模式(Eager Execution), David 9的挖坑实战#1

标题虽然是“入坑”,但David认为这个坑并不深,不变的规律是:人类的工具总是向简单易用发展(并且不妨碍强大的功能)。

TensorFlow 2.0最大更新(我认为没有之一)的积极模式(Eager Execution)同样如此。

也许你曾经喜欢PyTorch即拿即用即求导的简单快捷:

# Create tensors.
x = torch.tensor(1., requires_grad=True)
w = torch.tensor(2., requires_grad=True)
b = torch.tensor(3., requires_grad=True)

# Build a computational graph.
y = w * x + b    # y = 2 * x + 3

# Compute gradients.
y.backward()

# Print out the gradients.
print(x.grad)    # x.grad = 2 
print(w.grad)    # w.grad = 1 
print(b.grad)    # b.grad = 1 
# 来自:https://github.com/yunjey/pytorch-tutorial

不过你现在不需要羡慕了,如果你用TensorFlow 2.0,默认的积极模式(Eager Execution)和PyTorch如出一辙(你只需使用tensorflow.contrib.eager模块):

import tensorflow.contrib.eager as tfe
def f_cubed(x):
    return x**3
grad = tfe.gradients_function(f_cubed)
grad(3.)[0].numpy()

值得强调的是,从TensorFlow 2.0开始,这种Eager Execution模式是默认的!也就是说,曾经我们在TensorFlow 1.0中的第一步构建流图graph,第二步让流图真正“流”起来的模式现在默认不适用了。对于TensorFlow 1.0, 要随时打印一个变量值几乎不可能(因为一个Tensor只是一个内部变量):

但是TensorFlow 2.0中,debug变得非常简单, 继续阅读TensorFlow 2.0入坑必备之No.1: 积极模式(Eager Execution), David 9的挖坑实战#1