有了主机如何做网站,苏州广告公司排名前20,小蘑菇网站建设软件,郑州网站建设平台多类分类#xff1a;
多类是分类算法中的一种#xff0c;它区别于我们的0#xff0c;1这样子的二进制分类#xff0c;它会有多个分类的标签#xff0c;让我们去取其中的一个。
softmax函数#xff1a;
softmax回归算法是我们的sigmoid回归的推广。
上图就是softmax运…多类分类
多类是分类算法中的一种它区别于我们的01这样子的二进制分类它会有多个分类的标签让我们去取其中的一个。
softmax函数
softmax回归算法是我们的sigmoid回归的推广。
上图就是softmax运行的规范。 左边就是我们的softmax回归函数而我们的右边则是我们sigmoid回归函数。根据之前的规范了解我们知道了softmax回归算法的各个标签的概率之和为1.
这就是我们逻辑回归与我们的softmax回归的成本函数的不同很明显的特点就是我们的softmax函数a的数量会远远大于我们的逻辑回归函数。
在神经网络中使用softmax算法
在我们使用代码表现这个神经网络时我们的损失函数要用到
SparseCategoricalCrossentropy()
from tensorflow.keras.losses import SparseCategoricalCrossentropy
model.compile(lossSparseCategoricalCrossentropy())
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.losses import SparseCategoricalCrossentropymodel Sequential([Dense(units25, activationrelu),Dense(units15, activationrelu),Dense(units1, activationsoftmax)
])model.compile(lossSparseCategoricalCrossentropy())model.fit(X,y,epochs100) 这样我们就可以按照以前的方法训练我们的神经网络了。但实际上在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 SparseCategoricalCrossentropymodel Sequential([Dense(units25, activationrelu),Dense(units15, activationrelu),Dense(units1, activationlinear)
])model.compile(lossSparseCategoricalCrossentropy(from_logitsTrue))
我们在最后的输出层不再使用我们的soft Max算法而是直接用我们的线性激活函数代替它而在我们的损失算法中加入返回我们的输出值这样一来我们从原来的到其中的概率转变为了的到其中的值。但是我们在后面需要得到我们的概率所以在后面我们需要重新加入一个softmax函数。
model.fit(X,Y,epochs100)
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 Adammodel Sequential([Dense(units25, activationrelu),Dense(units15, activationrelu),Dense(units1, activationlinear)
])model.compile(optimizerAdam(learning_rate1e-3), lossSparseCategoricalCrossentropy(from_logitsTrue))
我们在这里多加了一个优化器也就是我们的Adam
model.compile(optimizerAdam(learning_rate1e-3), lossSparseCategoricalCrossentropy(from_logitsTrue))
它是写在我们的损失函数中的learn_rate指的就是我们的学习率它是从次。
卷积层(Convolution Layer):
卷积层指的是我们把一个数据分为多个不同的部分。 这里的卷积层就是我们的输入层是我们的卷积层而我们的隐藏层中的神经元会每个分别扫描不同的部分而不是全部的卷积层这也会带来一些优点第一就是它的运行速度会更快第二就是所需要的训练的数据更少。 这就是一个典型的卷积层神经网络我们可以看到我们第一个隐藏层就是一个卷积层它把我们输入层分为了10个部分而我们的第二个隐藏层也是一个卷积层它把我们的第一个隐藏层分为了三个部分而最后的输出1层则用了我们的sigmoid函数。
在我们使用不同的类型的层也会为我们的神经网络的多样化与多种不同的用处。