7.softmax多分类

目录

1  概念

2  代码实现

2.1  导入库

2.2  加载数据

2.3  归一化

2.4  建立模型

2.5  编译模型

2.6  训练模型

2.7  评估模型

2.8  预测模型

3  使用独热编码完成fashion_mnist训练

3.1  导入库

3.2  读数据

3.3  转换独热编码

3.4  归一化

3.5  构建模型并编译

3.6  训练模型

3.7  评估模型

3.8  预测模型


1  概念

上一章我们做的是softmax二分类,这次我们做softmax多分类

  • softmax多分类公式

上面这是两个损失函数,当我们使用0,1,2,3这种数字做标签时,我们使用sparse_categorical_crossentropy,如果label使用独热编码我们使用categorical_crossentropy

下面这种编码方式就是独热编码

我们下面代码中用的是Fashion_MNIST,这个是包含衣服,鞋子,包这种图像的数据集

这个数据集包含了7w张图片,共有10个类别,大概是下面这个样子的

2  代码实现

2.1  导入库

2.2  加载数据

fashion_mnist是tensorflow中自带的数据集,它分为四个部分,分别为train_image(训练图像),train_label(训练标签),test_image(测试图像),test_label(测试标签)

第一次运行代码时会自动下载数据集,再一次使用则会直接使用

它自动下载会下载到这里,我当前的路径是这个,根据用户名不同会有所改变

C:\Users\MSI.keras\datasets

里面有四个压缩包,前两个是测试的图片与标签,后两个是训练的图片与标签

我们看一下train_image,train_label,test_image,test_label的shape

我们现在看一下train_image的第0张图片

我们在看一下第0张图片的数值情况

这个我就截取其中的一部分,发现它的取值范围为[0,255]

我们再看一下第0张图像对应的标签

发现显示出一个9,fashion_mnist中使用整形数据表示标签,我们这里的9代表鞋子,我们的label的取值范围为[0,9]一共十分类

2.3  归一化

我们讲train_image与test_image除255,这样我们的取值范围就为[0,1]

2.4  建立模型

我们依然使用顺序模型

我们之前使用的层只有dense层,那个是处理一维数据的,现在我们的输入是(28,28),这个是个二维数据,所以我们第一层要使用Flatten(扁平层),这一层的目的是将其变成28*28的向量,这样我们这一层的结果就变为了1维数据,后面就能使用dense了

128是我们自定的神经元个数,这个没有一个最佳值,太小会欠拟合,太大会过拟合

这一层是输出层,由于我们是10分类所以我们在这里写10,如果是6分类就写6,后面的激活函数是softmax,只要是分类问题(不管是10分类还是6分类)就一定要用softmax,上一章我们提到了二分类,二分类用sigmod(当然2分类用softmax也不会报错,就是效果不好)

我们看一下整体的模型

我们可以看到Flatten这层是没有参数的,在这里只对数据进行转换 784 = 28 * 28 ,下一层dense层 100480 = 784 * 128 + 128

2.5  编译模型

优化器使用adam,loss值使用sparse_categorical_crossentropy(标签是数字),我们在训练过程中检测其正确率

2.6  训练模型

2.7  评估模型

我们使用测试集对训练好的模型进行评估

2.8  预测模型

我们最后进行预测一下,然后与原本的标签进行比对

这个是未经过处理的预测结果,结果中会包含10个值,这个值可以理解为每个分类的可能性,一般来讲,我们会选取10个值中的最大值然后获取其索引从而得到最终的结果

可以使用np.argmax()取出最大值的索引,我在这里就人工取最大值了[9,2,1,1,6,1,4,6,5]

我们可以用上面的结果和下面的实际值进行比对,发现正确率还是可以的(前9个都是正确的)

3  使用独热编码完成fashion_mnist训练

上面我们使用的是数字编码作为label,使用的loss为sparse_categorical_crossentropy,现在我们使用独热编码作为label,使用loss为categorical_crossentropy再做一遍

3.1  导入库

3.2  读数据

3.3  转换独热编码

我们使用utils.to_categorical()将数字编码转换为独热编码

我们显示出来看一下

测试数据也应改为独热编码,后面进行评估时要用到

我们看刚刚那个鞋的标签

我们发现在第9位(从0数)的值置为1,我们没转变独热编码之前的label是9

3.4  归一化

3.5  构建模型并编译

与上面相同,只是更换了loss

  • 我刚刚发现pycharm中model.summary()不用print就可以显示,我们以后就不加print了

3.6  训练模型

这里我们要换掉label

3.7  评估模型

3.8  预测模型

我们在这使用np.argmax直接取出最大值索引

之后再对比一下,发现预测结果与实际结果相似

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suyuoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值