神经网络softmax算法与卷积层

多类分类:

多类是分类算法中的一种,它区别于我们的0,1这样子的二进制分类,它会有多个分类的标签,让我们去取其中的一个。

softmax函数:

softmax回归算法是我们的sigmoid回归的推广。

上图就是softmax运行的规范。

左边就是我们的softmax回归函数,而我们的右边则是我们sigmoid回归函数。根据之前的规范了解我们知道了softmax回归算法的各个标签的概率之和为1.

这就是我们逻辑回归与我们的softmax回归的成本函数的不同,很明显的特点就是我们的softmax函数a的数量会远远大于我们的逻辑回归函数。

在神经网络中使用softmax算法:

在我们使用代码表现这个神经网络时,我们的损失函数要用到

复制代码
SparseCategoricalCrossentropy()
复制代码
from tensorflow.keras.losses import SparseCategoricalCrossentropy
model.compile(loss=SparseCategoricalCrossentropy())

from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.losses import SparseCategoricalCrossentropy

model = Sequential([
    Dense(units=25, activation="relu"),
    Dense(units=15, activation="relu"),
    Dense(units=1, activation="softmax")
])

model.compile(loss=SparseCategoricalCrossentropy())

model.fit(X,y,epochs=100)

这样我们就可以按照以前的方法训练我们的神经网络了。但实际上,在tensor flow中有更好的版本,我们会在后面学到。

改进softmax算法:

由于我们在tensorflow里使用的数值计算,一直会存在四舍五入的问题,我们的数值并不能得到一个比较准确的答案,于是我们对代码进行了优化。

复制代码
import tensorflow as tf
import numpy as np
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.losses import SparseCategoricalCrossentropy

model = Sequential([
    Dense(units=25, activation="relu"),
    Dense(units=15, activation="relu"),
    Dense(units=1, activation="linear")
])

model.compile(loss=SparseCategoricalCrossentropy(from_logits=True))

我们在最后的输出层,不再使用我们的soft Max算法,而是直接用我们的线性激活函数代替它,而在我们的损失算法中加入返回我们的输出值,这样一来,我们从原来的到其中的概率转变为了的到其中的值。但是我们在后面需要得到我们的概率,所以在后面我们需要重新加入一个softmax函数。

复制代码
model.fit(X,Y,epochs=100)
logits = model(X)
f_x = tf.nn.softmax(logits)

当我们遇到多标签分类问题:

这个样子就是我们的多标签分类问题。

当然我们会想到用三个神经网络我们可以分别得到我们的三个不同的值,比如有没有行人,有没有公交车,有没有汽车。我们就改变了一下我们的激活算法来通过一个神经网络同时得到三个值。

很明显,我们把我们的输出层变成三个神经元,然后把我们的激活函数变成sigmoid激活函数 ,这样我们就可以一次性得到我们的三个值。

注意:多类分类和多标签分类不是同一个。

优化算法:

我们在这里要介绍一种比梯度下降更加优化的算法,可以加快我们的梯度下降的速度。

我们可以看到,学习率是我们梯度下降的重点,我们要找到一个尽可能快的梯度下降,我们在之前,学习率这个值,我们需要列举多个值,通过比较才能找到一个适合的值,在这里介绍一种新的可以操控大小的算法,叫做"Adam"算法,它可以自主调节学习率的大小。

有一个很大的优点就是我们的学习率对于不同的值,它的系数并不是相同的,也就是他们并不是全局的,所以会有很多不同的学习率和不同的梯度下降函数一一对应。

它会根据梯度下降的情况,自动调节,当我们的梯度下降正常时,它会增加我们的,从而可以更快的梯度下降,但是当我们的梯度下降一直呈现的是来回震荡,这时它会主动减小,听上去,这似乎非常不可思议,但是这就是Adam算法的运行原理。

复制代码
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.losses import SparseCategoricalCrossentropy
from tensorflow.keras.optimizers import Adam

model = Sequential([
    Dense(units=25, activation="relu"),
    Dense(units=15, activation="relu"),
    Dense(units=1, activation="linear")
])

model.compile(optimizer=Adam(learning_rate=1e-3), loss=SparseCategoricalCrossentropy(from_logits=True))

我们在这里多加了一个优化器,也就是我们的Adam

复制代码
model.compile(optimizer=Adam(learning_rate=1e-3), loss=SparseCategoricalCrossentropy(from_logits=True))

它是写在我们的损失函数中的,learn_rate指的就是我们的学习率,它是从次。

卷积层(Convolution Layer):

卷积层指的是,我们把一个数据分为多个不同的部分。

这里的卷积层,就是我们的输入层是我们的卷积层,而我们的隐藏层中的神经元,会每个分别扫描不同的部分,而不是全部的卷积层,这也会带来一些优点,第一就是它的运行速度会更快,第二就是所需要的训练的数据更少。

这就是一个典型的卷积层神经网络,我们可以看到我们第一个隐藏层就是一个卷积层,它把我们输入层分为了10个部分,而我们的第二个隐藏层也是一个卷积层,它把我们的第一个隐藏层分为了三个部分,而最后的输出1层,则用了我们的sigmoid函数。

在我们使用不同的类型的层也会为我们的神经网络的多样化与多种不同的用处。

相关推荐
知乎的哥廷根数学学派3 分钟前
基于多尺度注意力机制融合连续小波变换与原型网络的滚动轴承小样本故障诊断方法(Pytorch)
网络·人工智能·pytorch·python·深度学习·算法·机器学习
xiatianxy5 分钟前
云酷科技用智能化方案破解行业难题
人工智能·科技·安全·智能安全带
jjjddfvv6 分钟前
超级简单启动llamafactory!
windows·python·深度学习·神经网络·微调·audiolm·llamafactory
星云数灵7 分钟前
大模型高级工程师考试练习题8
人工智能·机器学习·大模型·大模型考试题库·阿里云aca·阿里云acp大模型考试题库·大模型高级工程师acp
A先生的AI之旅8 分钟前
2025顶会TimeDRT快速解读
人工智能·pytorch·python·深度学习·机器学习
2301_800256119 分钟前
【人工智能引论期末复习】第3章 搜索求解2 - 对抗搜索
人工智能·算法·深度优先
温柔只给梦中人9 分钟前
深度学习:正则化
人工智能·深度学习
狮子座明仔10 分钟前
DocDancer:北大联合腾讯提出端到端训练的文档问答Agent,将DocQA形式化为信息寻求过程
人工智能·深度学习·语言模型·自然语言处理
foundbug99912 分钟前
MATLAB中实现信号迭代解卷积功能
开发语言·深度学习·matlab
AI小怪兽25 分钟前
RoLID-11K:面向小目标检测的行车记录仪路边垃圾数据集
人工智能·目标检测·计算机视觉