TensorFlow Keras 官方教程 * * * * *

TensorFlow版本:1.10.0 > Guide > Keras

Keras 简介

Keras 是建立和训练深度学习模型的高级 API。它被用于快速原型、高级研究和生产。Keras 具有三个主要优点:

  • 好用的 API
    Keras API 简单、稳定、容易调试。
  • 高度模块化
    Keras API 可以像搭积木一样来构建深度学习系统。
  • 易于扩展
    可以很容易地实现研究过程中的各种新奇想法。
    比如:自定义层、自定义损失函数、提升state of art 模型的性能等。

1. 导入 tf.keras

tf.keras是 Keras API 在 TensorFlow 里的实现。Keras 是一个高级 API,用于构建和训练模型,同时兼容 TensorFlow 的绝大部分功能,比如,eager executiontf.data 模块,及 Estimators

tf.keras 使得 TensorFlow 更容易使用,且保持 TF 的灵活性和性能。

使用 tf.keras,首先需要在您的代码开始时导入tf.keras

import tensorflow as tf
from tensorflow import keras

tf.keraskeras 绝对兼容,但请注意:

  • tf.keraskeras 版本相同时,才绝对兼容。可以通过 tf.keras.__version__.来查看 tf.keras 的版本。
  • 保存模型参数时,tf.keras 默认保存成 checkpoint 格式。可以通过设置 save_format=‘h5’ 来保存成 HDF5 格式。

2. 建立简单模型

2.1 使用 Sequential API 建立简单模型

在 Keras 里,你用 layers 来搭建模型。一个模型(通常)是一个 layer 组成的图(Graph)。最常见的模型类型一般是由多个 layer 堆叠体:tf.keras.Sequential 模型

以构建一个简单的全连接网络(比如:多层感知器)为例:

model = keras.Sequential()
# Adds a densely-connected layer with 64 units to the model:
model.add(keras.layers.Dense(64, activation='relu'))
# Add another:
model.add(keras.layers.Dense(64, activation='relu'))
# Add a softmax layer with 10 output units:
model.add(keras.layers.Dense(10, activation='softmax'))

2.2 设置层的参数

tf.keras.layers 中有很多层,下面是一些通用的构造函数的参数:

  • activation:设置层使用的激活函数。
    指定方法:名称 或 可调用对象
    默认为空。
  • kernel_initializerbias_initializer:设置层创建时,权重和偏差的初始化方法。
    指定方法:名称 或 可调用对象
    默认为"Glorot uniform" initializer。
  • kernel_regularizerbias_regularizer:设置层的权重、偏差的正则化方法。比如:L1 或 L2 正则。
    默认为空。

下面是一个实例,例子中对层的参数进行了指定:

# Create a sigmoid layer:
layers.Dense(64, activation='sigmoid')
# Or:
layers.Dense(64, activation=tf.sigmoid)

# A linear layer with L1 regularization of factor 0.01 applied to the kernel matrix:
layers.Dense(64, kernel_regularizer=keras.regularizers.l1(0.01))
# A linear layer with L2 regularization of factor 0.01 applied to the bias vector:
layers.Dense(64, bias_regularizer=keras.regularizers.l2(0.01))

# A linear layer with a kernel initialized to a random orthogonal matrix:
layers.Dense(64, kernel_initializer='orthogonal')
# A linear layer with a bias vector initialized to 2.0s:
layers.Dense(64, bias_initializer=keras.initializers.constant(2.0))

3. 建立复杂模型

3.1 使用 Function API 建立复杂模型

tf.keras.Sequential 模型只适用于多层简单堆叠网络,不能表示复杂模型。使用 Keras functional API 可以构建有复杂拓扑结构的模型。比如:

  • 多个输入的模型(Multi-input models)
  • 多个输出的模型(Multi-output models)
  • 有共享层的模型(Models with shared layers (the same layer called several times))
  • 有 non-sequential 数据流的模型(Models with non-sequential data flows (例如,残差连接))

函数式 API 特点:

  1. 层是可调用的,返回值是一个 tensor。
  2. 输入 tensors 和输出 tensors 被用来定义一个 tf.keras.Model
    实例。
  3. 函数式 API 构建的模型的训练同 Sequential 模型。

下面的代码使用函数式 API 构建了一个简单的全连接网络:

inputs = keras.Input(shape=(32,))  # Returns a placeholder tensor

# A layer instance is callable on a tensor, and returns a tensor.
x = keras.layers.Dense(64, activation='relu')(inputs)
x = keras.layers.Dense(64, activation='relu')(x)
predictions = keras.layers.Dense(10, activation='softmax')(x)

# Instantiate the model given inputs and outputs.
model = keras.Model(inputs=inputs, outputs=predictions)

# The compile step specifies the training configuration.
model.compile(optimizer=tf.train.RMSPropOptimizer(0.001),
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# Trains for 5 epochs
model.fit(data, labels, batch_size=32, epochs=5)

3.2 编写 Model 的子类来构建模型(Model subclassing)

通过编写 tf.keras.Model 的子类来构建一个自定义模型,并且定义你的模型的前向传播。在 init 方法里创建 layers。在 call 方法里定义前向传播过程。

当使用 eager execution 时,Model subclassing 方法特别有用(pytorch 里确实也是这么干的)。

提示: 根据工作的不同,请使用不同的 API。虽然 model subclassing 提供了灵活性,但也更复杂、更容易出错。如果可能,请尽量使用 function API。

下面是 model subclassing 例子:

class MyModel(keras.Model):

  def __init__(self, num_
  • 12
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值