深圳网站软件网站建设,爱站网关键词长尾挖掘工具,自己做网站要服务器吗,wordpress 水煮鱼小程序输出和类别的维度一样。 一、当我们想将先线性层的输出直接视为概率#xff0c;存在一些问题#xff1a;
1.不能限制输出数字总和为1。
2.不能保证都是正数。
所以会使用softmax进行归一化。 二、交叉熵损失
交叉熵是一个衡量两个概率分布之间差异的很好的度量#xff0…输出和类别的维度一样。 一、当我们想将先线性层的输出直接视为概率存在一些问题
1.不能限制输出数字总和为1。
2.不能保证都是正数。
所以会使用softmax进行归一化。 二、交叉熵损失
交叉熵是一个衡量两个概率分布之间差异的很好的度量它测量给定模型编码数据所需的比特数。 三、
在训练softmax回归模型后给出任何样本特征我们可以预测每个输出类别的概率。
通常我们使用预测概率最高的类别作为输出类别。
如果预测与实际类别标签一致则预测是正确的。 四、手搓代码
随机初始化weight拟合线性模型把输出y进行softmax得到每一类的概率。取得最高的作为输出类别然后进行交叉损失和梯度下降。 五、
def accuracy(y_hat, y): 计算预测正确的数量 if len(y_hat.shape) 1 and y_hat.shape[1] 1: y_hat y_hat.argmax(axis1) cmp y_hat.type(y.dtype) y return float(cmp.type(y.dtype).sum()) def evaluate_accuracy(net, data_iter): 计算在指定数据集上模型的精度 if isinstance(net, torch.nn.Module): net.eval() # 将模型设置为评估模式 metric Accumulator(2) # 正确预测数、预测总数 with torch.no_grad(): for X, y in data_iter: metric.add(accuracy(net(X), y), y.numel()) return metric[0] / metric[1]
class Accumulator: #save 在n个变量上累加 def __init__(self, n): self.data [0.0] * n def add(self, *args): self.data [a float(b) for a, b in zip(self.data, args)] def reset(self): self.data [0.0] * len(self.data) def __getitem__(self, idx): return self.data[idx]