使用 TensorFlow Eage Execution 和 Keras 实现更灵活的模型

生成对抗网络、神经风格迁移和自然语言处理中无处不在的注意力机制等高级应用过去很难用 Keras 声明式编码范式实现。现在,随着 TensorFlow Eage Execution 的出现,情况发生了变化。这篇文章探讨了如何在 R 中使用 Eage Execution。

来源:RStudio AI博客

如果您曾使用 Keras 创建神经网络,那么您无疑会熟悉 Sequential API,它将模型表示为层的线性堆栈。Functional API 为您提供了更多选项:使用单独的输入层,您可以将文本输入与表格数据相结合。使用多个输出,您可以同时执行回归和分类。此外,您可以在模型内部和模型之间重用层。

Sequential API Functional API

使用 TensorFlow Eage Execution,您可以获得更大的灵活性。使用自定义模型,您可以完全随意地定义通过模型的前向传递。这意味着许多架构变得更容易实现,包括上面提到的应用程序:生成对抗网络、神经风格迁移、各种形式的序列到序列模型。此外,由于您可以直接访问值而不是张量,因此模型开发和调试速度大大加快。

自定义模型 随意

它是如何工作的?

在 Eager Execution 中,操作不会被编译成图,而是直接在 R 代码中定义。它们返回值,而不是计算图中节点的符号句柄 - 这意味着,您不需要访问 TensorFlow 会话来评估它们。

会话
m1 <- 矩阵(1:8, nrow = 2, ncol = 4)m2 <- 矩阵(1:8, nrow = 4, ncol = 2)tf$matmul(m1, m2)
m1 <- 矩阵(1:8, nrow = 2, ncol = 4)m2 <- 矩阵(1:8, nrow = 4, ncol = 2)tf$matmul(m1, m2) m1 <- 矩阵(1:8, nrow = 2, ncol = 4) m1 <- 矩阵 矩阵 ( 1 : 8 = 2 = 4 ) m2 <- 矩阵(1:8, nrow = 4, ncol = 2) m2 <- 矩阵 矩阵 ( 1 : 8 = 4 = 2 ) tf$matmul(m1, m2) tf $ matmul ( m1 m2 )
tf.Tensor([[ 50 114] [ 60 140]], shape=(2, 2), dtype=int32)
tf.Tensor([[ 50 114] [ 60 140]], shape=(2, 2), dtype=int32)

尽管 Eager Execution 是最近才推出的,但目前 CRAN 版本的 keras 和 tensorflow 已经支持该功能。Eager Execution 指南详细描述了该工作流程。

keras 张量流 急切执行指南 模型 tfdatasets GradientTape with(tf$GradientTape() %as% Tape, { with with ( $ GradientTape ( ) %as% 胶带 { (