做网站挣钱快又多,网站底部备案号悬挂,软件工程职业生涯规划书,哪里有好看的网站文章目录 CostTensorflow稀疏类别交叉熵或类别交叉熵祝贺 在这个实验室里#xff0c;我们将探索softmax函数。当解决多类分类问题时#xff0c;该函数用于Softmax回归和神经网络。 import numpy as np
import matplotlib.pyplot as plt
plt.style.use(./deeplearning.mplstyl… 文章目录 CostTensorflow稀疏类别交叉熵或类别交叉熵祝贺 在这个实验室里我们将探索softmax函数。当解决多类分类问题时该函数用于Softmax回归和神经网络。 import numpy as np
import matplotlib.pyplot as plt
plt.style.use(./deeplearning.mplstyle)
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from IPython.display import display, Markdown, Latex
from sklearn.datasets import make_blobs
%matplotlib widget
from matplotlib.widgets import Slider
from lab_utils_common import dlc
from lab_utils_softmax import plt_softmax
import logging
logging.getLogger(tensorflow).setLevel(logging.ERROR)
tf.autograph.set_verbosity(0)注通常在本课程中笔记本使用以0开始计数以N-1结束计数的约定∑−1.0 而讲座以1开始以N结束∑1. 这是因为代码通常会以0开始迭代而在讲座中从1到N计数会产生更干净、更简洁的方程。这本笔记本的方程式比实验室的典型方程式多因此将打破惯例从1到N计数。 Softmax函数 在具有Softmax输出的Softmax回归和神经网络中生成N个输出并选择一个输出作为预测类别。在这两种情况下矢量由应用于softmax函数的线性函数生成。softmax功能转换 转换成如下所述的概率分布。在应用softmax之后每个输出将在0和1之间并且输出将加1使得它们可以被解释为概率。较大的输入将对应于较大的输出概率。 这表明输出是一个概率向量。第一个条目是输入是给定输入的第一个类别的概率 和参数和.让我们创建一个NumPy实现
def my_softmax(z):ez np.exp(z) #element-wise exponenialsm ez/np.sum(ez)return(sm)下面使用滑块更改z输入的值。
plt.close(all)
plt_softmax(my_softmax)图1当您改变上述z的值时需要注意以下几点
softmax分子中的指数放大了数值中的微小差异输出值总和为1softmax跨越所有输出。例如z0的变化将改变a0-a3的值。将其与具有单个输入和单个输出的ReLu或Sigmoid等其他激活进行比较。
Cost 与Softmax相关的损失函数即交叉熵损失为
其中y是本例的目标类别是softmax函数的输出。特别是中的值是总和为1的概率。 回想一下在本课程中损失是一个例子而成本涵盖了所有例子。 注意在上面的3中只有与目标相对应的线对损失有贡献其他线为零。为了编写成本方程我们需要一个“指标函数”当指数与目标匹配时该函数为1否则为零。
Tensorflow
本实验室将讨论两种实现softmax的方法Tensorflow中的交叉熵损失“明显”方法和“首选”方法。前者是最直接的而后者在数值上更稳定。 让我们首先创建一个数据集来训练多类分类模型。
# make dataset for example
centers [[-5, 2], [-2, -2], [1, 2], [5, -2]]
X_train, y_train make_blobs(n_samples2000, centerscenters, cluster_std1.0,random_state30)显而易见的组织 下面的模型是用softmax作为最终致密层中的激活来实现的。loss函数在compile指令中单独指定。 损失函数稀疏类别交叉熵。上述3中所述的损失。在这个模型中softmax发生在最后一层。损失函数采用softmax输出softmax输出是概率的向量。
model Sequential([ Dense(25, activation relu),Dense(15, activation relu),Dense(4, activation softmax) # softmax activation here]
)
model.compile(losstf.keras.losses.SparseCategoricalCrossentropy(),optimizertf.keras.optimizers.Adam(0.001),
)model.fit(X_train,y_train,epochs10
) 因为softmax被集成到输出层中所以输出是概率的向量
p_nonpreferred model.predict(X_train)
print(p_nonpreferred [:2])
print(largest value, np.max(p_nonpreferred), smallest value, np.min(p_nonpreferred))63/63 [] - 0s 1ms/step
[[3.74e-03 2.83e-03 9.64e-01 2.92e-02][9.96e-01 4.21e-03 1.13e-05 7.58e-05]]
largest value 0.9999949 smallest value 1.9021733e-09Preferred 回想一下讲座如果在训练中结合softmax和loss可以获得更稳定、更准确的结果。这是由此处显示的“首选”组织启用的。 在优选的组织中最后一层具有线性激活。由于历史原因这种形式的输出被称为logits。loss函数还有一个额外的参数from_logitsTrue。这会通知损失函数softmax操作应包含在损失计算中。这允许优化实现。
preferred_model Sequential([ Dense(25, activation relu),Dense(15, activation relu),Dense(4, activation linear) #-- Note]
)
preferred_model.compile(losstf.keras.losses.SparseCategoricalCrossentropy(from_logitsTrue), #-- Noteoptimizertf.keras.optimizers.Adam(0.001),
)preferred_model.fit(X_train,y_train,epochs10
) 输出处理 注意在首选模型中输出不是概率而是从大负数到大正数的范围。当执行预期概率的预测时必须通过softmax发送输出。让我们来看看首选的模型输出
p_preferred preferred_model.predict(X_train)
print(ftwo example output vectors:\n {p_preferred[:2]})
print(largest value, np.max(p_preferred), smallest value, np.min(p_preferred))63/63 [] - 0s 1ms/step
two example output vectors:[[-0.26 -1.67 3.39 -0.25][ 6.5 1.12 -2.74 -2.4 ]]
largest value 12.235959 smallest value -9.061906输出预测不是概率如果期望的输出是概率则该输出应通过softmax进行处理。
sm_preferred tf.nn.softmax(p_preferred).numpy()
print(ftwo example output vectors:\n {sm_preferred[:2]})
print(largest value, np.max(sm_preferred), smallest value, np.min(sm_preferred))two example output vectors:[[2.47e-02 6.04e-03 9.44e-01 2.48e-02][9.95e-01 4.61e-03 9.66e-05 1.35e-04]]
largest value 0.999998 smallest value 5.6292937e-10要选择最可能的类别不需要softmax。可以使用np.argmax找到最大输出的索引。
for i in range(5):print( f{p_preferred[i]}, category: {np.argmax(p_preferred[i])})[-0.26 -1.67 3.39 -0.25], category: 2
[ 6.5 1.12 -2.74 -2.4 ], category: 0
[ 4.89 1.43 -1.95 -1.89], category: 0
[-0.4 5.31 -0.04 -0.4 ], category: 1
[ 1.22 -1.58 6.53 -1.76], category: 2稀疏类别交叉熵或类别交叉熵
Tensorflow有两种潜在的目标值格式损失的选择定义了预期值。 SparseCategorialCrossentropy期望目标是与索引相对应的整数。例如如果有10个潜在的目标值y将在0和9之间。 类别交叉熵期望示例的目标值是一个热编码的值其中目标索引处的值为1而其他N-1个条目为零。一个具有10个潜在目标值的示例其中目标为2为[0,0,1,0,0,0,0]。
祝贺
在这个实验室里你
越来越熟悉softmax函数及其在softmax回归和神经网络中的softmax激活中的应用。在Tensorflow中学习了首选的模型构建 最后一层没有激活与线性激活相同稀疏类别交叉熵损失函数use from_logitsTrue 认识到与ReLu和Sigmoid不同softmax跨越多个输出。