代码学习笔记(一)

本文是关于代码学习的笔记,主要探讨了深度学习中的卷积模块,包括tf.keras.layers.Conv2D和LeakyReLU,以及注意力机制的相关操作。详细介绍了卷积层的作用、LeakyReLU激活函数的非线性特性,平均池化和最大池化的区别,以及如何利用tf.transpose、Multiply等操作。此外,还提到了特征提取和全连接层在神经网络中的应用,以及使用快速傅里叶变换处理信号的方法。
摘要由CSDN通过智能技术生成

代码学习笔记(一)

卷积模块

tf.keras.layers.Conv2D

用于描述卷积层,卷积层的作用是提取一个局部区域的特征,不同的卷积核相当于不同的特征提取器。

outputs = tf.keras.layers.Conv2D(filters=filters,
                                         kernel_size=(1, 3),
                                         strides=(1, 1),
                                         padding="same",
                                         activation=None)(inputs)
参数描述
filters卷积过滤器的数量,对应输出的维数–卷积核的数目(即输出的维度)
kernel_size过滤器的大小,单个整数或由两个整数构成的list/tuple,表示卷积核的宽度和长度。如果为单个整数,则表示在各个空间维度的相同长度。
strides横向和纵向的步长,单个整数或由两个整数构成的list/tuple,为卷积的步长。如果为一个整数则横向和纵向相同步长。任何不为1的strides均与任何不为1的dilation_rata均不兼容
padding补0策略,为"valid",“same”。“valid”代表只进行有效的卷积,即对边界数据不处理。“same”代表保留边界处的卷积结果,通常会导致输出shape与输入shape相同。
activation激活函数,如果不指定该参数,将不会使用任何激活函数(即使用线性激活函数:a(x)=x)
inputs把上一层的输出作为输入(直接将上一层作为参数输入即可)

tf.keras.layers.LeakyReLU

激活函数:在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。
引入激活函数是为了增加神经网络模型的非线性
如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机(Perceptron)。
如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

outputs = tf.keras.layers.LeakyReLU()(outputs)

一些复杂的激活函数如:Leaky ReLU、PReLU是不可以这样直接使用的,必须使用add方法将高级激活函数作为层(layer)来使用.
这里我们在卷积层中去掉激活函数的参数,并在卷积层后加入高级激活层

注意力机制

作为一种资源分配方案,将有限的计算资源用来处理更重要的信息,是解决信息超载的重要手段。

inputs.shape.as_list()

用于tensor来返回shape,但是是一个元组,需要通过as_list()的操作转换成list.

tf.keras.layers.AveragePooling2D

平均池化(average pooling):计算图像区域的平均值作为该区域池化后的值。

参数描述
pool_size2个整数的整数或元组/列表:(pool_height,pool_width),用于指定池窗口的大小;可以是单个整数,以指定所有空间维度的相同值.
strides2个整数的整数或元组/列表,指定池操作的步幅.可以是单个整数,以指定所有空间维度的相同值.
padding一个字符串,填充方法:“'valid”或“same”,不区分大小写.

属性:input
检索图层的输入张量.

只适用于图层只有一个输入,即如果它连接到一个输入层.

返回:

输入张量或输入张量列表.

可能引发的异常:

AttributeError:如果图层连接到多个输入图层.
RuntimeError:如果在Eager模式下调用.
AttributeError:如果找不到入站节点.

tf.transpose

 outputs = tf.transpose(outputs, [0, 1, 3, 2])

置换 outputs,根据 [0,1,3,2] 重新排列尺寸.

tf.keras.layers.Multiply

该层接收一个列表的同shape张量,并返回它们的逐元素积的张量,shape不变。

特征提取层

tf.keras.layers.MaxPooling2D

最大池化(max pooling):选图像区域的最大值作为该区域池化后的值。
池化层:池化层是模仿人的视觉系统对数据进行降维,用更高层次的特征表示图像。 实施池化的目的: (1) 降低信息冗余; (2) 提升模型的尺度不变性、旋转不变性; (3) 防止过拟合。
无论max pooling还是mean pooling,都没有需要学习的参数。因此,在卷积神经网络的训练中,Pooling层需要做的仅仅是将误差项传递到上一层,而没有梯度的计算。

特征提取

tf.keras.layers.Flatten

用于将输入层的数据压成一维的数据,一般用在卷积层和全连接层之间(因为全连接层只能接收一维数据,而卷积层可以处理二维数据,就是全连接层处理的是向量,而卷积层处理的是矩阵)

对信号做快速傅里叶变换

FFT的基本思想是把原始的N点序列,依次分解成一系列的短序列。充分利用DFT计算式中指数因子 所具有的对称性质和周期性质,进而求出这些短序列相应的DFT并进行适当组合,达到删除重复计算,减少乘法运算和简化结构的目的。

tf.reshape

函数的作用是将tensor变换为参数shape形式,其中的shape为一个列表形式,特殊的是列表可以实现逆序的遍历,即list(-1).-1所代表的含义是我们不用亲自去指定这一维的大小,函数会自动进行计算,但是列表中只能存在一个-1。(如果存在多个-1,就是一个存在多解的方程)

tf.pad

 tf.pad( tensor,paddings, mode='CONSTANT',name=None)

填充函数
tensor是要填充的张量
padings ,代表每一维填充多少行/列,它的维度一定要和tensor的维度是一样的,这里的维度不是传统上数学维度,如[[2,3,4],[4,5,6]]是一个3乘4的矩阵,但它依然是二维的,所以pad只能是[[1,2],[1,2]]这种。

tf.abs

计算张量的绝对值.

tf.signal.fft

tf.signal.rfft(
    input_tensor, fft_length=None, name=None
)

tf.cast

tf.cast()函数的作用是执行 tensorflow 中张量数据类型转换,比如读入的图片如果是int8类型的,一般在要在训练前把图像的数据格式转换为float32。

cast(x, dtype, name=None)

全连接层

全连接层在整个网络卷积神经网络中起到“特征提取器”的作用。如果说卷积层、池化层和激活函数等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的特征表示映射到样本的标记空间的作用

tf.keras.layers.Dense

tf.keras.layers.Dense( units, # 正整数,输出空间的维数
 activation=None, # 激活函数,不指定则没有)

tf.keras.layers.Dropout

tf.keras.layers.Dropout(rate)

作用:将Dropout应用于输入
Dropout层在训练期间的每一步中将输入单位随机设置为0,频率为速率,这有助于防止过拟合。
未设置为0的输入将按1 /(1-rate)放大,以使所有输入的总和不变。
请注意,仅当训练设置为True时才应用Dropout层,以便在推理过程中不会丢弃任何值。
使用model.fit时,训练将自动适当地设置为True,在其他情况下,可以在调用图层时将kwarg显式设置为True。
(这与为Dropout图层设置trainable = False形成对比。trainable不会影响该图层的行为,
因为Dropout没有任何可以在训练期间冻结的变量/权重。)

网络结构

tf.keras.layers.Concatenate

作用是:它接受一个张量列表作为输入,除了连接轴外,所有的张量形状都相同,返回一个张量,它是所有输入的连接。

损失函数

tf.keras.losses.CategoricalCrossentropy

计算标签和预测之间的交叉熵损失。

度量函数

tf.keras.metrics.CategoricalAccuracy

用于度量测试集的准确率。
(无论是训练还是评估,loss是都会保存在history中的,也即可以当做loss是默认的评估指标;但是我们还可以指定另外的评估指标,一般情况下都是使用训练和测试精度accuracy这个指标,也即在history中保留住每个epoch的训练精度;当然也可以使用交叉熵crossentropy这个指标,每个epoch都计算一下此次循环里的output和label的平均交叉熵。)

训练过程

tf.GradientTape

tf.GradientTape () 是一个自动求导的记录器。 只要进入了 with tf.GradientTape () as tape 的上下文环境,则在该环境中计算步骤都会被自动记录。

model.trainable_variables

查看管理变量的函数

tape.gradient

GradientTape是eager模式下计算梯度用的,而eager模式(eager模式的具体介绍请参考文末链接)是TensorFlow 2.0的默认模式。 通过GradientTape可以对损失的计算过程、计算方式进行深度定制,即所谓的Custom training, 而不仅仅是通过model.train这样过于高级(傻白甜)的API的方式进行训练。这在很多场合下是非常有用的。

apply_gradients

该函数的作用是将compute_gradients()返回的值作为输入参数对variable进行更新。

tf.keras.optimizers.Adam

其大概的思想是开始的学习率设置为一个较大的值,然后根据次数的增多,动态的减小学习率,以实现效率和效果的兼得。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值