Tensorflow2.0 softmax多分类问题

现实生活中,二分类的问题毕竟还是少数,多分类的问题才是我们大部分时间会遇到的问题,下面我就以fashion_mnist为数据集,来看看多分类的问题。

import tensorflow as tf
from tensorflow import keras

#先下载数据集
(train_image , train_label),(test_image , test_label) = tf.keras.datasets.fashion_mnist.load_data()

#查看一下数据集的分类状况
print(train_label)

在这里插入图片描述

这里就可以看出来这是一个十分类的问题,所以我们接下来建立我们的model

#首先先将数据集归一化
train_image = train_image/255
test_image = test_image/255
#创建model
model = tf.keras.Sequential()
#添加隐含层
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))
model.add(tf.keras.layers.Dense(128,activation = 'relu'))
model.add(tf.keras.layers.Dense(10,activation = 'softmax'))

#编译model
model.compile(optimizer = 'adam' , loss = 'sparse_categorical_crossentropy',metrics = ['acc'])

#训练model
model.fit(train_image , train_label,epochs = 5)
#进行model的预测
model.predict(test_image , test_label)

首先说明一下归一化的必要性,归一化可以使得隐藏层的输入数据分布大抵相同,可以更好的进行拟合,加速model的调参。
因为这边的数据集都是RGB的图像,范围都是[0,255],所以让他们都除以255,就可以完成归一化的操作。
接着可以看到,在隐藏层里面,我是先增加了一个Flatten层,他的作用是把2828的一个二维的像素点,压缩为一个2828的一维向量,把这个数据输送给全连接层(全连接层只能处理一维数据)。
在进行深度学习的时候,model的损失函数是一个重要的参数,一般来说,在进项回归问题和分类问题上,使用的损失函数是不一样的。一般来说,回归问题上,损失函数都是mse,而二分类的问题上,一般我们都选取binary_crossentropy的交叉熵损失函数,在softmax问题上,一般会有sparse_categorical_crossentropy和categorical_crossentropy来计算交叉熵,如果是一般的数据是顺序编码的时候,我们会使用sparse_categorical_crossentropy,如果是one-hot编码的时候,我们会使用categorical_crossentropy来计算softmax的交叉熵。
Tensorflow2.0 softmax多分类问题_第1张图片
这是训练的正确率,大约可以到89%
在这里插入图片描述
最后测试的数据集,正确率也差不多可以到达9成左右,如果训练的epochs更多的话,这个正确率还是可以提高的。

你可能感兴趣的:(tensorflow)