Softmax在Tensorflow 2.0 中有两个可以调用的分类方法,一个是sparse_categorical_crossentropy,一个是categorical_crossentropy。前者基于顺序编码,后者是onehot编码。下面将通过一个例子进行介绍。
和上篇博客相同的部分,将不做介绍,链接地址: Tensorflow2.0实战——逻辑回归
本实例中使用的数据集是fashion_mnist数据集,提取码:gkjb
import tensorflow as tf import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline在进行数据读取之前,可以将上述已经下载好的数据集放在自己的 .keras/datasets目录下,以便直接读取使用,而不用从国外网站下载。(没有datasets的,可以新建文件夹,将数据集放在datasets目录下)。
(train_image, train_label), (test_image, test_label) = tf.keras.datasets.fashion_mnist.load_data()#内置数据集加载 train_image.shape #查看训练数据集 test_image.shape, test_label.shape #查看测试数据集 plt.imshow(train_image[0]) #查看第一张图片28*28这里,我们可以查看一下第一张图片的具体数值内容:
train_image[0]这里可以看到,有很多0,是因为,在这张图片中有很多的空白。下面,我们来看一下,训练的标签:
train_label输出结果是一个顺序的0-9的数字,每个数字表明了它属于哪一个类。 为了更好的训练,这里先进行归一化处理。
#顺序编码 train_image = train_image/255 test_image = test_image/255 #进行归一化处理 #模型 model = tf.keras.Sequential() model.add(tf.keras.layers.Flatten(input_shape=(28,28))) #28*28向量 model.add(tf.keras.layers.Dense(128, activation='relu')) model.add(tf.keras.layers.Dense(10, activation='softmax')) #模型编译 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['acc'] )#基于顺序编码 #训练模型 model.fit(train_image, train_label, epochs=5) #模型评价 model.evaluate(test_image, test_label) ################################################################### #第二种softmax分类方法 #onehot编码 train_label_onehot = tf.keras.utils.to_categorical(train_label) #独热编码,隶属于自己类别为1,其他为0 train_label_onehot[0] #查看格式 test_label_onehot = tf.keras.utils.to_categorical(test_label) #建立模型 model = tf.keras.Sequential() model.add(tf.keras.layers.Flatten(input_shape=(28,28))) #28*28向量 model.add(tf.keras.layers.Dense(128, activation='relu')) model.add(tf.keras.layers.Dense(10, activation='softmax')) model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'] )#独热编码 #模型训练 model.fit(train_image, train_label_onehot, epochs=5) #模型预测 predict=model.predict(test_image) predict.shape np.argmax(predict[0])