深度学习入门学习之杂

全连接层

1、定义
由于每个输出节点与全部的输入节点相连接,这种网络层称为全连接层(Fully-connected Layer),或者稠密连接层(Dense Layer),W 矩阵叫做全连接层的权值矩阵,𝒃向量叫做全连接层的偏置
在这里插入图片描述
2、实现

  • 张量方式实现
    在 TensorFlow 中,要实现全连接层,只需要定义好权值张量 W 和偏置张量 b,并利用TensorFlow 提供的批量矩阵相乘函数 tf.matmul()即可完成网络层的计算
  • 层方式实现
    TensorFlow 中有更加高层、使用更方便的层实现方式:layers.Dense(units, activation),只需要指定输出节点数 Units激活函数类型即可。输入节点数将根据第一次运算时的输入 shape 确定,同时根据输入、输出节点数自动创建并初始化权值矩阵 W 和偏置向量 b
    通过内部的成员名kernel 和 bias 来获取权值矩阵 W 和偏置 b
x = tf.random.normal([4,3])
#导入层模块
from tensorflow.keras import layers
#指定输出的维度
net = layers.Dense(5)
out = net(x)#完成一次全连接层的计算
print("权值矩阵:",net.kernel)
print("偏置:",net.bias)
#在优化参数时,需要获得网络的所有待优化的参数张量列表,可以通过类的trainable_variables 来返回待优化参数列表
print(net.trainable_variables)

在这里插入图片描述
在这里插入图片描述

神经网络

  • 张量方式实现
  • 层方式实现
    可以通过 Sequential 容器封装成一个网络大类对象,调用大类的前向计算函数即可完成所有层的前向计算:
x = tf.random.normal([2,3])
#通过sequential容器封装为一个网络类
model = keras.Sequential([keras.layers.Dense(2,activation="relu"),#创建隐藏层1
                          keras.layers.Dense(2,activation="relu"),#创建隐藏层2
                          keras.layers.Dense(2)#创建输出层
                         
                         ])
out = model(x)
print(out)

在这里插入图片描述

误差

利用误差反向传播算法进行反向计算的过程也叫反向传播
从另一个角度来理解神经网络,它完成的是特征的维度变换的功能。比如 4 层的MNIST 手写数字图片识别的全连接网络,它依次完成了784 → 256 → 128 → 64 → 10的特征降维过程。原始的特征通常具有较高的维度,包含了很多底层特征及无用信息,通过神经网络的层层特征变换,将较高的维度降维到较低的维度,此时的特征一般包含了与任务强相关的高层特征信息,通过对这些特征进行简单的逻辑判定即可完成特定的任务。
误差计算的几种方式:(损失函数)
均方差
MSE 误差函数的值总是大于等于 0,当 MSE 函数达到最小值 0 时,输出等于真实标签,此时神经网络的参数达到最优状态。均方差广泛应用在回归问题中,在分类问题中也可以应用均方差误差。在 TensorFlow中,可以通过函数方式或层方式实现 MSE 误差计算。
(应用见下面的代码)
keras.losses.MeanSquaredError()
交叉熵
最小化交叉熵的过程也是最大化正确类别的预测概率的过程。
在这里插入图片描述

激活函数及其梯度

sigmoid或者Logistic函数

tf.nn.sigmoid(XXX)

在这里插入图片描述
ReLU

``
tf.nn.relu(XXXX)
`

在 ReLU(REctified Linear Unit,修正线性单元)激活函数提出之前,Sigmoid 函数通常是神经网络的激活函数首选。但是 Sigmoid 函数在输入值较大或较小时容易出现梯度值接近于 0 的现象,称为梯度弥散现象,网络参数长时间得不到更新,很难训练较深层次的网络模型。
在这里插入图片描述
LeakyReLU
ReLU函数在x<0时梯度恒为0,也可能造成梯度弥散现象,LeakyReLU函数表达式为:
在这里插入图片描述
其中𝑝为用户自行设置的某较小数值的超参数,如 0.02 等。当𝑝 = 0时,LeayReLU 函数退化为 ReLU 函数;当𝑝 ≠ 0时,𝑥 < 0能够获得较小的梯度值𝑝,从而避免出现梯度弥散现
象。
在这里插入图片描述
Tanh

tf.tanh(XXX)

将输入压缩到(-1,1]之间
在这里插入图片描述
在这里插入图片描述

输出层设计

除了和隐藏一样,具有维度变换、特征提取的功能,还作为输出层呢过使用,需要根据具体的任务场景来决定是否使用激活函数。常见的几种输出类型包括:
在这里插入图片描述
多分类问题:[0,1]区间,和为1.可以在输出层添加softmax函数实现
在 Softmax 函数的数值计算过程中,容易因输入值偏大发生数值溢出现象;在计算交
叉熵时,也会出现数值溢出的问题。为了数值计算的稳定性,TensorFlow 中提供了一个统一的接口,将 Softmax 与交叉熵损失函数同时实现,同时也处理了数值不稳定的异常,一般推荐使用,避免单独使用 Softmax 函数与交叉熵损失函数

tf.keras.losses.categorical_crossentropy(y_true, y_pred, from_logits=False)

z = tf.random.normal([2,10])#构造输出层的输出
y_onehot = tf.constant([1,3])#构造真实值
y_onehot = tf.one_hot(y_onehot,depth=10)
print(y_onehot)
#输出层未使用softmax函数,将from_logits设置为True
loss = keras.losses.categorical_crossentropy(y_onehot,z,from_logits = True)
#1、
loss = tf.reduce_mean(loss)
print(loss)
#用 losses.CategoricalCrossentropy(from_logits)类方式同时实现 Softmax 与交叉熵损失函数的计算
criteon = keras.losses.CategoricalCrossentropy(from_logits=True)
loss = criteon(y_onehot,z)
print(loss)

在这里插入图片描述

单输出感知机

在这里插入图片描述
多输出感知机
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值