学习目标:

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


学习过程:

神经网络的原始输出不是一个概率值,实质上只是输入的数值做了复杂的加权和与非线性处理之后的一个值而已,那么如何将这个输出变为概率分布?这就是Softmax层的作用。
softmax要求每个样本必须属于某个类别,且所有可能的样本均被覆盖。
softmax分类
softmax个样本分量之和为 1,当只有两个类别时,与对数几率回归完全相同。
tf.keras交叉熵
在tf.keras里,对于多分类问题我们使用categorical_crossentropy 和sparse_categorical_crossentropy来计算softmax交叉熵。


# 学习案例:

Fashion MNIST数据集。我们将使用 60000 张图像训练网络,并使用 10000 张图像评估经过学习的网络分类图像的准确率。可以从 TensorFlow 直接访问 Fashion MNIST,只需导入和加载数据即可。


代码:

标签是一列数值进行训练

 import tensorflow as tfimport pandas as pdimport numpy as npimport matplot.pyplot as plt#导入数据(train_image, train_label), (test_image, test_label)= tf.keras.datasets.fashion_mnist.load_data()train_label.shape#(60000,)train_iamge.shape#(60000, 28, 28)test_image.shape, test_label.shape#((10000, 28, 28), (10000,))plt.imshow(train_image[0])np.max(train_image[0])#255train_lable#  array([9, 0, 0, ..., 3, 0, 5], dtype=uint8)#建立模型model = tf.keras.Sequential()model.add(tf.keras.layers.Flatten(input_shape=(28,28)))  # 28*28model.add(tf.keras.layers.Dense(128, activation='relu'))model.add(tf.keras.layers.Dense(10, activation='softmax'))#模型概述model.summary()#模型编译model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['acc'])#模型训练history = model.fit(train_image, train_lable, epochs=5)#绘制图表plt.plot(history.epoch, history.history.get('acc'), label='acc')plt.plot(history.epoch, history.history.get('val_acc'), label='val_acc')plt.legend()plt.show()#模型测试model.evaluate(test_image, test_label)

便签转化成one_hot 编码重新建模训练

train_label_onehot = tf.keras.utils.to_categorical(train_label)train_label_onehot[-1]#array([0., 0., 0., 0., 0., 1., 0., 0., 0., 0.], dtype=float32)test_label_onehot = tf.keras.utils.to_categorical(test_label)test_label_onehot#array([[0., 0., 0., ..., 0., 0., 1.],[0., 0., 1., ..., 0., 0., 0.],[0., 1., 0., ..., 0., 0., 0.],...,[0., 0., 0., ..., 0., 1., 0.],[0., 1., 0., ..., 0., 0., 0.],[0., 0., 0., ..., 0., 0., 0.]], dtype=float32)#建立模型model = tf.keras.Sequential()model.add(tf.keras.layers.Flatten(input_shape=(28,28)))  # 28*28model.add(tf.keras.layers.Dense(128, activation='relu'))model.add(tf.keras.layers.Dense(10, activation='softmax'))#模型概述model.summary()#模型编译model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['acc'])#模型训练history = model.fit(train_image, train_lable, epochs=5)#绘制图表plt.plot(history.epoch, history.history.get('acc'), label='acc')plt.plot(history.epoch, history.history.get('val_acc'), label='val_acc')plt.legend()plt.show()#预测模型predict = model.predict(test_image)test_image.shape #(10000, 28, 28)predict.shape#(10000, 10)predict[0]#array([7.7417062e-05, 1.2555851e-07, 5.2015298e-06, 3.9063170e-06,6.1778355e-06, 1.3308496e-02, 5.2028918e-05, 1.2039219e-02,6.5957895e-05, 9.7444147e-01], dtype=float32)np.argmax(predict[0])#9test_label[0]#9

模型优化,增加网络的深度

 model = keras.Sequential([keras.layers.Flatten(input_shape=(28, 28)),keras.layers.Dense(128, activation='relu'),keras.layers.Dense(128, activation='relu'),keras.layers.Dense(128, activation='relu'),keras.layers.Dense(10, activation='softmax')
])

抑制过拟合,最好的办法是增加数据,也可用正则化,图像增强,下面是在网络中增加dropout层

 model = keras.Sequential([keras.layers.Flatten(input_shape=(28, 28)),keras.layers.Dense(128, activation='relu'),keras.layers.Dropout(0.5),keras.layers.Dense(128, activation='relu'),keras.layers.Dropout(0.5),keras.layers.Dense(128, activation='relu'),keras.layers.Dropout(0.5),keras.layers.Dense(10, activation='softmax')
])

总结:两种训练方式的损失函数不一样,分别用了categorical_crossentropy 和sparse_categorical_crossentropy来计算softmax交叉熵。


参考文献:
https://study.163.com/course/introduction/1004573006.htm

tf.keras softmax多分类相关推荐

  1. tf.keras.losses.categorical_hinge 分类铰链 损失函数 示例

    分类铰链 预测值应为 {-1, +1} or {0, 1} neg=max((1−正确值)×预测值)neg=max((1-正确值)\times 预测值)neg=max((1−正确值)×预测值) pos ...

  2. TensorFlow 2官方教程 . Keras机器学习基础知识 . 使用TF Hub进行文本分类

    写在前面 此篇博客转载自tensorflow官方教程中文翻译版: https://www.tensorflow.org/tutorials/keras/text_classification_with ...

  3. 【TensorFlow】Keras机器学习基础知识-使用TF.Hub进行文本分类

    此笔记本(notebook)使用评论文本将影评分为积极(positive)或消极(nagetive)两类.这是一个二元(binary)或者二分类问题,一种重要且应用广泛的机器学习问题. 本教程演示了使 ...

  4. TensorFlow2.0(二)--Keras构建神经网络分类模型

    Keras构建分类模型 1. tf.keras简介 2. 利用tf.keras构建神经网络分类模型 2.1 导入相应的库 2.2 数据读取与展示 2.3 数据归一化 2.4 构建模型 2.5 模型的编 ...

  5. 深度学习-Tensorflow2.2-深度学习基础和tf.keras{1}-softmax多分类-06

    softmax分类 Fashion MNIST数据集 import tensorflow as tf import pandas as pd import numpy as np import mat ...

  6. tf.keras.activations.softmax 激活函数 示例

    文章目录 softmax 将值的向量转换为概率分布 创建数组 计算公式 计算过程 tf.keras.activations.softmax实现 numpy实现 softmax 将值的向量转换为概率分布 ...

  7. tf.keras.losses.CategoricalCrossentropy 多分类 交叉熵 损失函数示例

    文章目录 计算公式 计算过程 tf.keras.losses.CategoricalCrossentropy 实现 numpy 实现 import numpy as np import tensorf ...

  8. tf.keras.activations.sigmoid 激活函数 示例

    import tensorflow as tf Sigmoid 等价于 2 元素 Softmax,其中第二个元素假定为零.sigmoid 函数始终返回一个介于 0 和 1 之间的值.‎, 用于隐层神经 ...

  9. 机器学习(七)——tf.keras搭建神经网络固定模式

    一.总纲(一般按照下面6步搭建) import--导入相关模块 train,test--指定训练集与测试集 model = tf.keras.models.Sequential--在Sequentia ...

最新文章

  1. 【读书】正则指引-3-括号
  2. BUUCTF-Reverse:xor(涉及异或脚本编写)
  3. Python小知识 | 这些技能你不会?(终章)
  4. Express 项目结构最佳实践(上)
  5. add in Web.config
  6. 语音识别之--音频编解码
  7. 曾用一个肾买的iPhone4s,现在能换两个不锈钢脸盆
  8. 微博中微服务缓存_微服务实践分享(5)缓存中心
  9. 利用阿里云邮件推送免费发邮件,每天免费200封,速度快,还高大上
  10. 《指数基金投资指南》读书笔记
  11. Vue.js:事件修饰符stop,once,prevent的使用
  12. specification java_使用JPA实现Specification规范模式 -解道Jdon
  13. Windows 2003安装和配置活动目录服务
  14. 我的U盘终于中招啦:U盘快捷方式病毒
  15. TimeUnit简析
  16. linux设置屏蔽海外ip,linux屏蔽海外流量的两种方法
  17. 微信终端跨平台组件 Mars 在移动网络的探索和实践
  18. 嵌入式存储封装技术SiP、SOC、MCP、PoP的区别
  19. APP开发之apicloud(一)
  20. ResNet-50 结构

热门文章

  1. AMD打出四大旗号 偷拍HD5970实物展机
  2. java SE 费用_Java SE 6中的垃圾回收器G1收费是虚惊一场
  3. 【文献阅读】FloodNet——洪水灾害的VQA问答数据集(M. Rahnemoonfar等人,ArXiv,2020)
  4. 魂斗罗_MD《魂斗罗》各大BOSS回顾
  5. 2011-6-13 周一 日志
  6. 长江后浪推前浪,前浪死在沙滩上。本人在沙滩上又死了一回
  7. Spring Boot实现各种参数校验,值得一看
  8. Python连接Twitter API读取用户画像及推特评论
  9. Android Activity自动重启的问题
  10. Corona渲染器最新版本_Corona 8 for 3ds Max / Cinema 4D全网最全功能解析