TensorFlow实战|TensorFlow实战之softmax多分类

【TensorFlow实战|TensorFlow实战之softmax多分类】
文章目录

  • 前言
  • 一、Keras的mnist数据集
  • 二、建立sequential顺序model
    • 2.绘图结果和测试结果
  • 三、网络容量和优化
  • 总结

前言 Keras是TensorFlow2.X的一个实现库,很多模型基于Keras搭建
一、Keras的mnist数据集 mnist数据集是KerasAPI公开的数据集,是(28,28)的图像数据集
二、建立sequential顺序model 对于分类问题必须使用softmax作为输出层的激活函数;如果每一个实例的每个类都有一个目标概率,即使用one—hot编码,在loss的设置时使用categorical_crossentropy;而下面的代码是基于稀疏标签(每个类只有一个目标类索引),并且类间互斥,则设置loss="sparse_categorical_crossentropy"
import numpy as np import tensorflow as tf from tensorflow import keras import pandas as pd import matplotlib.pyplot as plt print(tf.__version__) print(keras.__version__)# 加载数据集 fashion_mnist = keras.datasets.fashion_mnist (X_train_full, y_train_full), (X_test, Y_test)=fashion_mnist.load_data() # 查看训练集的形状和数据类型 print(X_train_full.shape, X_train_full.dtype) # 比例缩放和像素强度降低到0-1,创建一个验证集 X_valid, X_train = X_train_full[:5000]/255.0, X_train_full[5000:]/255.0 Y_valid, Y_train = y_train_full[:5000], y_train_full[5000:] # 设置类名列表 class_names=["T_shirt/top", "Trouser", "Pullover", "Dress", "Coat", "Sandal", "shirt","Sneaker" , "Bag", "Anlle boot"] # 查看第一幅图 print(class_names[Y_train[0]])# 搭建网络模型 model = tf.keras.models.Sequential() model.add(keras.layers.Flatten(input_shape=[28, 28])) model.add(keras.layers.Dense(300, activation="relu")) model.add(keras.layers.Dense(100, activation="relu")) model.add(keras.layers.Dense(10, activation="softmax"))# 输出十个概率分布,看属于哪一个 model.compile(loss="sparse_categorical_crossentropy", optimizer="sgd", metrics=["accuracy"]) history=model.fit(X_train, Y_train, epochs=5, validation_data=https://www.it610.com/article/(X_valid,Y_valid)) #print(history)# 绘制history曲线 pd.DataFrame(history.history).plot(figsize=(8,5)) plt.grid(True) plt.gca().set_ylim(0,1) plt.show()# 在测试集上测试 print(model.evaluate(X_test, Y_test)) #仅使用测试集的前三个例子 X_new=X_test[:3] Y_proba= model.predict(X_new) print(Y_proba.round(2)) y_pre=model.predict(X_new) print(y_pre)

2.绘图结果和测试结果 绘制准确率和验证集上的准确率
TensorFlow实战|TensorFlow实战之softmax多分类
文章图片

测试集的准确率和前三个例子的测试结果(输出的是10个类别的所属概率)
TensorFlow实战|TensorFlow实战之softmax多分类
文章图片

如果使用独热编码作为数据的输入,loss应该设置为如下参数,并且对于优化器的选择,可以选择Keras自带的优化器Adam,lr是学习速率,可以人工设置的超参数,但是如果不设置则默认为0,01。
TensorFlow实战|TensorFlow实战之softmax多分类
文章图片

三、网络容量和优化 TensorFlow实战|TensorFlow实战之softmax多分类
文章图片

增加层会比增加神经元更能提高网络拟合能力。
TensorFlow实战|TensorFlow实战之softmax多分类
文章图片

使用dropout解决过拟合,类似取平均的作用
TensorFlow实战|TensorFlow实战之softmax多分类
文章图片

TensorFlow实战|TensorFlow实战之softmax多分类
文章图片

TensorFlow实战|TensorFlow实战之softmax多分类
文章图片

再调节超参数。
构建网络的原则
TensorFlow实战|TensorFlow实战之softmax多分类
文章图片

总结 重新搭建TensorFlow的gpu环境,从Keras开始学习神经网络,欢迎指正。

    推荐阅读