Press "Enter" to skip to content

softmax多分类

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

文章

二、Fashion MNIST 数据集
三、softmax分类的简单示例

一、softmax分类

 

对数几率回归解决的是 二分类的问题 ,对于 多个选项的问题 ,我们可以 使用softmax函数 它是对数几率回归在N个可能不同的值上的推广。

 

神经网络的原始输出不是一个概率值,实质上只是输入的数值做了复杂的加权和与非线性处理之后的一个值而已,那幺如何将这个输出变为概率分布?

 

这就是 Softmax层的作用 ,将输出值转化为概率。

softmax要求每个 样本必须属于某个类别 ,且所有可能的样本均被覆盖。
softmax样本分量之和为1, 当只有两个类别时 ,与对数几率回归完全相同
在tf.keras里,对于 多分类问题 我们使用 categorical_crossentropysparse_categorical_crossentropy 来计算softmax交叉熵。

二、Fashion MNIST 数据集

Fashion MNIST 的作用是成为经典MNIST数据集的简易替换,不同于MNIST手写数据集,Fashion-MNIST数据集 包含了10个类别 的图像,分别是:t-shirt(T恤),trouser(牛仔裤),pullover(套衫),dress(裙子),coat(外套),sandal(凉鞋),shirt(衬衫),sneaker(运动鞋),bag(包),ankle boot(短靴)。MNIST数据集包含手写数字(0、1、2等)的图像,这些图像的格式与服饰图像的格式相同。
Fashion MNIST 比常规MNIST手写数据集更具挑战性。这两个数据集都相对较小,用于验证某个算法能否如期正常运行。它们都是测试和调试代码的良好起点。
我们将使用60000张图像训练网络,并使用10000张图像评估经过学习的网络分类图像的准确率。可以从TensorFlow 直接访问Fashion MNIST,只需导入和加载数据即可。

三、softmax分类的简单示例

 

代码运行平台为jupyter-notebook,文章中的代码块,也是按照jupyter-notebook中的划分顺序进行书写的,运行文章代码,直接分单元粘入到jupyter-notebook即可。

 

1.导入第三方库

 

import matplotlib.pyplot as plt
import tensorflow as tf
import pandas as pd
import numpy as np
%matplotlib inline

 

2.加载fashion_mnist数据集

 

(train_image,train_label),(test_image,test_label) = tf.keras.datasets.fashion_mnist.load_data()
# 训练集的形状(60000, 28, 28)
print("训练集的形状:",train_image.shape)
# 训练集标签形状(60000,)
print("训练集标签形状:",train_label.shape)
# 打印训练集第一张图片看看
print(train_image[0])
# 查看第一张图片的标签
print(train_label[0])
# 查看训练集第一张图片
plt.imshow(train_image[0])

 

 

3.数据处理

 

对训练集和测试集进行归一化。

 

train_image = train_image/255.
test_image = test_image/255.

 

4.搭建模型

 

model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))
model.add(tf.keras.layers.Dense(128,activation="relu"))
# 最终输出层,由于有10个类别,所以输出单元个数为10
model.add(tf.keras.layers.Dense(10,activation="softmax"))

该网络的 第一层 tf.keras.layers.Flatten将图像格式从二维数组(28 x 28像素)转换为一维数组(28 * 28 = 784像素)。可以将这一层看作是堆叠图像中的像素行并将它们排成一行。该层没有学习参数。它只会重新格式化数据。
像素展平后,网络由tf.keras.layers.Dense两层序列组成。这些是紧密连接或完全连接的神经层。第一Dense层有128个节点(或神经元)。 第二层 (也是最后一层)返回长度为10的数组。每个节点包含一个得分,该得分指示当前图像属于10个类之一。

模型中第一层是Flatten层,那幺为什幺是Flatten层呢?

 

Dense是把一个一维的数据映射到另一个一维的数据, 不能把二维的数据进行运算 ,所以我们要把fashion mnist数据先扁平成一维的, model.add(tf.keras.layers.Flatten(input_shape=(28,28))) ,了解更多详情还可以查看 官方文档Dense 的解释。

 

还有一点要注意,这是一个 多分类问题 ,所以最后一个输出层的 激活函数 ,我们使用 softmax ,将输出的类别转化为概率。

 

5.训练模型

 

可以在 官方文档 查看模型对compile方法的参数使用。

 

在tf.keras里,对于 多分类问题 我们使用 categorical_crossentropysparse_categorical_crossentropy 来计算softmax交叉熵。

 

# 定义优化器,损失函数
model.compile(
    optimizer='adam',
    loss='sparse_categorical_crossentropy',
    metrics=['acc']
)
model.fit(train_image,train_label,epochs=5)

 

 

6.模型评估

 

model.evaluate(test_image,test_label)

 

 

参考文章:

 

Tensorflow2.*教程之基本分类:对Fashion Mnist进行分类(1)

【深度学习】Fashion-MNIST数据集简介

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。