【深度学习 | Keras】Keras操作工具类大全,确定不来看看?

发布时间:2024年01月12日

在这里插入图片描述

🤵?♂? 个人主页: @AI_magician
📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。
👨?💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱?🏍
🙋?♂?声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)

在这里插入图片描述

【深度学习 | 核心概念】那些深度学习路上必经的核心概念,确定不来看看? (一)
作者: 计算机魔术师
版本: 1.0 ( 2023.8.27 )

摘要: 本系列旨在普及那些深度学习路上必经的核心概念,文章内容都是博主用心学习收集所写,欢迎大家三联支持!本系列会一直更新,核心概念系列会一直更新!欢迎大家订阅

该文章收录专栏
[?— 《深入解析机器学习:从原理到应用的全面指南》 —?]

Tools

multiply

原理概述

layers.MultiplyKeras中的一个层,它用于对输入进行逐元素相乘。

其原理很简单,它接收两个张量作为输入,并通过逐元素相乘将它们相乘。它可以接收两个形状相同的张量,也可以广播其中一个张量以匹配另一个张量的形状。输出的张量形状与输入张量形状相同。

具体地说,如果我们有两个输入张量 A A A B B B,并且它们具有相同的形状 ( b a t c h s i z e , n ) (batch_size, n) (batchs?ize,n),那么它们的逐元素相乘的结果 C C C可以表示为:

C = A ⊙ B C = A \odot B C=AB

其中, ⊙ \odot 表示逐元素相乘。

在实际应用中,layers.Multiply通常用于实现注意力机制(Attention Mechanism),其中需要对输入进行逐元素相乘以加强某些特征的重要性。

输入与输出

layers.multiplyKeras 中的一种层类型,用于对输入进行逐元素乘积运算。该层有以下特点:

  • 输入:可以是两个张量或两个列表中的张量。张量的形状必须相同。
  • 输出:形状与输入相同的张量,其每个元素都是输入张量对应元素的乘积。

该层可以用于许多不同的场景,例如:

  • 将一个张量乘以另一个张量,用于实现元素级别的加权或缩放
  • 将两个张量进行点乘操作,用于计算两个向量之间的相似度或相关性。
  • 在模型中添加一个可训练的缩放因子,以便模型能够学习数据的缩放
    • 或者乘上注意力权重,实现注意力机制

该层的实现非常简单,只需要对输入张量进行逐元素的乘积运算即可。在 Keras 中,可以使用 multiply 函数来实现这个操作。在层的实现中,通常会将该函数包装成一个 Lambda 层来使用,示例代码如下:

pythonCopy codefrom tensorflow.keras.layers import Lambda, Input
import tensorflow.keras.backend as K

# 定义两个输入张量
input1 = Input(shape=(10,))
input2 = Input(shape=(10,))

# 定义一个逐元素乘积运算的 Lambda 层
multiply_layer = Lambda(lambda x: K.multiply(x[0], x[1]))

# 将两个输入张量通过逐元素乘积运算进行合并
output = multiply_layer([input1, input2])

在这个例子中,我们定义了两个形状为 (10,) 的输入张量 input1input2,然后使用 Lambda 层定义了一个逐元素乘积运算,最后将两个输入张量通过该运算进行合并得到输出张量 output

需要注意的是,由于 multiply 层并没有任何可训练的参数,因此它不会对输入进行任何修改或转换,只是对输入进行逐元素乘积运算。

Permute

原理详解

layers.PermuteKeras 中的一种层类型,其作用是对输入张量的维度进行重排,即进行置换操作。它的原理如下:

假设输入张量的维度为 (batch_size, dim1, dim2, dim3),若 layers.Permutedims 参数设置为 (2, 1, 3, 0),则输出张量的维度为 (dim2, dim1, dim3, batch_size),即将原输入张量的第 1 维移动到输出张量的第 4 维,第 2 维移动到第 2 维,第 3 维移动到第 3 维,第 4 维移动到第 1 维。

在深度学习中,有时候需要对输入张量的维度进行重排以便进行后续操作,例如在自然语言处理中将序列的时间维移动到批次维前面,或在图像处理中将图像通道维移动到批次维前面等。layers.Permute 就是为了实现这一功能而设计的。

参数详解

layers.Permute层没有特定的参数,只有一个输入参数dims,它指定要进行排列的维度顺序。dims是一个整数列表,用于指定输入张量的新维度顺序。例如,如果dims=[2,1],则将输入张量的第2个维度移动到第1个维度的位置,将第1个维度移动到第2个维度的位置。它可以用来对输入张量的维度顺序进行重新排列,以适应后续层的需要。

RepeatVector

layers.RepeatVector是Keras中的一个层,它用于在神经网络中重复输入向量或矩阵。它接受一个参数n,表示要重复的次数。让我们更详细地了解一下它的功能和用法。

使用layers.RepeatVector层,你可以将一个向量或矩阵重复多次来创建一个新的张量,其中每个副本都是原始输入的副本。这对于许多序列生成任务非常有用,例如机器翻译、文本生成和时间序列预测等。

下面是layers.RepeatVector的一些重要特点和使用示例:

  1. 输入形状:layers.RepeatVector层的输入应该是一个2D张量,形状为(batch_size, features),其中batch_size表示批量大小,features表示输入的特征数。

  2. 输出形状:输出形状为(batch_size, n, features),其中n是通过layers.RepeatVector指定的重复次数。

  3. 示例代码:

    import tensorflow as tf
    from tensorflow.keras import layers
    
    # 假设输入数据的形状为(batch_size, features)
    input_data = tf.keras.Input(shape=(features,))
    
    # 使用RepeatVector重复输入向量10次
    repeated_data = layers.RepeatVector(10)(input_data)
    
    # 在此之后,输出形状将变为(batch_size, 10, features)
    # 这意味着输入向量将重复10次,每个副本都是原始输入的副本
    
    # 接下来可以继续添加其他层进行处理或生成输出
    

    在上面的示例中,我们创建了一个input_data变量作为输入张量,并使用layers.RepeatVector将其重复10次。这样,repeated_data的形状就变成了(batch_size, 10, features)

总结一下,layers.RepeatVector层允许你在神经网络中重复输入向量或矩阵,以便进行序列生成任务。它接受一个参数n,表示要重复的次数。

@keras_export("keras.layers.RepeatVector")
class RepeatVector(Layer):
    """Repeats the input n times.

    Example:

    ```python
    model = Sequential()
    model.add(Dense(32, input_dim=32))
    # now: model.output_shape == (None, 32)
    # note: `None` is the batch dimension

    model.add(RepeatVector(3))
    # now: model.output_shape == (None, 3, 32)


    Args:
      n: Integer, repetition factor.
    Input shape: 2D tensor of shape `(num_samples, features)`.
    Output shape: 3D tensor of shape `(num_samples, n, features)`.
    """

Flatten

原理详解

Flatten 是一个简单的层,用于将输入的多维张量转换为一维张量,其原理可以概括为将输入的张量拉伸成一条向量。例如,输入形状为 (batch_size, a, b, c) 的张量,经过 Flatten 层处理后,输出形状为 (batch_size, a * b * c) 的一维张量。

Flatten通常用于将卷积层或池化层的输出张量转换为全连接层的输入张量。因为全连接层要求输入为一维张量,所以需要将其他维度的特征“拉平”成一维。

在实现上,Flatten 层没有可训练的参数,它只是对输入进行简单的变换。

参数详解

在使用 Flatten 层时,需要注意输入张量的维度,通常要保证输入张量的最后两个维度是空间维度(如图片的宽和高),前面的维度是批次大小和通道数,这样才能保证张量能够正确地展平为向量。

举个例子,如果输入张量的形状是 (batch_size, 28, 28, 3),表示有 batch_size 个 28x28 的彩色图片,那么使用 Flatten 层将其展开后的形状就是 (batch_size, 2352),即每个图片都被展开成了一个长度为 2352 的向量。

Concatenate

拼接模型输出

在这里插入图片描述

						  🤞到这里,如果还有什么疑问🤞
					🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩
					 	 🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳
文章来源:https://blog.csdn.net/weixin_66526635/article/details/135549353
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。