1. 内容回顾

上一篇文章主要从理论方面讲述了激活函数的相关概念和一些注意事项。本篇文章将会主要介绍tensorflow2.2中如何进行激活函数的设置和模型的训练。

2. 代码实战讲解

我们仍旧以图片分类的例子进行实战,可以参看之前的《TensorFlow2 Fashion-MNIST图像分类》部分。
之前提到selu激活函数自带了很多的优势,比如自带归一化功能,训练速度比较快。所以我们将会使用该激活函数进行试验,selu激活函数的这些优势,让它被广泛使用。

模型代码部分如下:

# tf.keras.models.Sequential()model = keras.models.Sequential()
model.add(keras.layers.Flatten(input_shape=[28,28]))
# 直接通过循环的方式添加全连接层
# 修改激活函数,使用selu,该激活函数自带归一化功能,在一定程度上可以缓解梯度消失问题,索引训练曲线刚开始不会出现平滑问题
for _ in range(20):model.add(keras.layers.Dense(100, activation="selu"))model.add(keras.layers.Dense(10, activation="softmax"))model.compile(loss="sparse_categorical_crossentropy", optimizer='sgd', metrics=["accuracy"])

数据的加载和处理,参照之前的文章,此处只进行激活函数部分的讲解。

这里直接通过循环的方式构造了一个深层的神经网络,每一层使用selu激活函数。模型最后一层为分类全连接层,激活函数使用softmax。

各层的参数结构如下:

model.summary()Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
flatten (Flatten)            (None, 784)               0
_________________________________________________________________
dense (Dense)                (None, 100)               78500
_________________________________________________________________
dense_1 (Dense)              (None, 100)               10100
_________________________________________________________________
dense_2 (Dense)              (None, 100)               10100
_________________________________________________________________
dense_3 (Dense)              (None, 100)               10100
_________________________________________________________________
dense_4 (Dense)              (None, 100)               10100
_________________________________________________________________
dense_5 (Dense)              (None, 100)               10100
_________________________________________________________________
dense_6 (Dense)              (None, 100)               10100
_________________________________________________________________
dense_7 (Dense)              (None, 100)               10100
_________________________________________________________________
dense_8 (Dense)              (None, 100)               10100
_________________________________________________________________
dense_9 (Dense)              (None, 100)               10100
_________________________________________________________________
dense_10 (Dense)             (None, 100)               10100
_________________________________________________________________
dense_11 (Dense)             (None, 100)               10100
_________________________________________________________________
dense_12 (Dense)             (None, 100)               10100
_________________________________________________________________
dense_13 (Dense)             (None, 100)               10100
_________________________________________________________________
dense_14 (Dense)             (None, 100)               10100
_________________________________________________________________
dense_15 (Dense)             (None, 100)               10100
_________________________________________________________________
dense_16 (Dense)             (None, 100)               10100
_________________________________________________________________
dense_17 (Dense)             (None, 100)               10100
_________________________________________________________________
dense_18 (Dense)             (None, 100)               10100
_________________________________________________________________
dense_19 (Dense)             (None, 100)               10100
_________________________________________________________________
dense_20 (Dense)             (None, 10)                1010
=================================================================
Total params: 271,410
Trainable params: 271,410
Non-trainable params: 0

训练部分代码:

# Tensorboard, earlystopping, modelcheckpoint
logdir = './dnn-selu-callbacks'
if not os.path.exists(logdir):os.mkdir(logdir)
output_model_file = os.path.join(logdir, "fashion_mnist_model.h5")callbacks = [keras.callbacks.TensorBoard(logdir),keras.callbacks.ModelCheckpoint(output_model_file, save_best_only=True),keras.callbacks.EarlyStopping(patience=5, min_delta=1e-3),
]history = model.fit(x_train_scaled, y_train, epochs=10,validation_data=(x_valid_scaled, y_valid),callbacks=callbacks)

训练结果如下:

Epoch 1/10
1719/1719 [==============================] - 12s 7ms/step - loss: 0.5535 - accuracy: 0.7996 - val_loss: 0.4365 - val_accuracy: 0.8408
Epoch 2/10
1719/1719 [==============================] - 11s 7ms/step - loss: 0.4072 - accuracy: 0.8507 - val_loss: 0.4379 - val_accuracy: 0.8402
Epoch 3/10
1719/1719 [==============================] - 12s 7ms/step - loss: 0.3645 - accuracy: 0.8663 - val_loss: 0.3726 - val_accuracy: 0.8618
Epoch 4/10
1719/1719 [==============================] - 12s 7ms/step - loss: 0.3357 - accuracy: 0.8748 - val_loss: 0.3553 - val_accuracy: 0.8760
Epoch 5/10
1719/1719 [==============================] - 11s 7ms/step - loss: 0.3139 - accuracy: 0.8838 - val_loss: 0.3295 - val_accuracy: 0.8844
Epoch 6/10
1719/1719 [==============================] - 11s 7ms/step - loss: 0.2977 - accuracy: 0.8881 - val_loss: 0.3457 - val_accuracy: 0.8798
Epoch 7/10
1719/1719 [==============================] - 11s 7ms/step - loss: 0.2843 - accuracy: 0.8952 - val_loss: 0.3292 - val_accuracy: 0.8838
Epoch 8/10
1719/1719 [==============================] - 11s 7ms/step - loss: 0.2735 - accuracy: 0.8972 - val_loss: 0.3182 - val_accuracy: 0.8840
Epoch 9/10
1719/1719 [==============================] - 11s 7ms/step - loss: 0.2596 - accuracy: 0.9029 - val_loss: 0.3302 - val_accuracy: 0.8760
Epoch 10/10
1719/1719 [==============================] - 11s 6ms/step - loss: 0.2517 - accuracy: 0.9051 - val_loss: 0.3313 - val_accuracy: 0.8812

接下来我们再添加dropout层,进行对比,直接上代码:

# tf.keras.models.Sequential()model = keras.models.Sequential()
model.add(keras.layers.Flatten(input_shape=[28,28]))
# 直接通过循环的方式添加全连接层
# 修改激活函数,使用selu,该激活函数自带归一化功能,在一定程度上可以缓解梯度消失问题,索引训练曲线刚开始不会出现平滑问题
for _ in range(20):model.add(keras.layers.Dense(100, activation="selu"))
model.add(keras.layers.AlphaDropout(rate=0.5))
model.add(keras.layers.Dense(10, activation="softmax"))model.compile(loss="sparse_categorical_crossentropy", optimizer='sgd', metrics=["accuracy"])

与之前的唯一区别就是添加了dropout层,并且对于selu激活函数,tensorflow2中dropout要使用AlphaDropout。
模型训练结果如下:

Epoch 1/10
1719/1719 [==============================] - 12s 7ms/step - loss: 0.6936 - accuracy: 0.7647 - val_loss: 0.6364 - val_accuracy: 0.8528
Epoch 2/10
1719/1719 [==============================] - 12s 7ms/step - loss: 0.4541 - accuracy: 0.8436 - val_loss: 0.6049 - val_accuracy: 0.8614
Epoch 3/10
1719/1719 [==============================] - 12s 7ms/step - loss: 0.4017 - accuracy: 0.8594 - val_loss: 0.5722 - val_accuracy: 0.8702
Epoch 4/10
1719/1719 [==============================] - 12s 7ms/step - loss: 0.3731 - accuracy: 0.8692 - val_loss: 0.5503 - val_accuracy: 0.8586
Epoch 5/10
1719/1719 [==============================] - 12s 7ms/step - loss: 0.3514 - accuracy: 0.8767 - val_loss: 0.5628 - val_accuracy: 0.8684
Epoch 6/10
1719/1719 [==============================] - 12s 7ms/step - loss: 0.3318 - accuracy: 0.8812 - val_loss: 0.7251 - val_accuracy: 0.8326
Epoch 7/10
1719/1719 [==============================] - 12s 7ms/step - loss: 0.3156 - accuracy: 0.8875 - val_loss: 0.5052 - val_accuracy: 0.8822
Epoch 8/10
1719/1719 [==============================] - 12s 7ms/step - loss: 0.3056 - accuracy: 0.8891 - val_loss: 0.5531 - val_accuracy: 0.8782
Epoch 9/10
1719/1719 [==============================] - 12s 7ms/step - loss: 0.2919 - accuracy: 0.8951 - val_loss: 0.5647 - val_accuracy: 0.8806
Epoch 10/10
1719/1719 [==============================] - 12s 7ms/step - loss: 0.2871 - accuracy: 0.8963 - val_loss: 0.4928 - val_accuracy: 0.8886

添加dropout与否对于该图像分类数据影响不大,说明模型并没有过拟合。
完整代码关注公众号:【瞧不死的AI】回复‘激活函数’获取。

tensorflow2图像分类实战激活函数selu相关推荐

  1. 随机森林图像分类实战:随机森林分类聚类(Kmeans)降维后的数据、随机森林分类聚类(Kmeans)降维后的合成(append)数据

    随机森林图像分类实战:随机森林分类聚类(Kmeans)降维后的数据.随机森林分类聚类(Kmeans)降维后的合成(append)数据 目录

  2. 【图像分类】 基于Pytorch的细粒度图像分类实战

    欢迎大家来到<图像分类>专栏,今天讲述基于pytorch的细粒度图像分类实战! 作者&编辑 | 郭冰洋 1 简介 针对传统的多类别图像分类任务,经典的CNN网络已经取得了非常优异的 ...

  3. 【图像分类】 基于Pytorch的多类别图像分类实战

    欢迎大家来到图像分类专栏,本篇基于Pytorch完成一个多类别图像分类实战. 作者 | 郭冰洋 编辑 | 言有三 1 简介 实现一个完整的图像分类任务,大致需要分为五个步骤: 1.选择开源框架 目前常 ...

  4. 【图像分类】基于Pascal VOC2012增强数据的多标签图像分类实战

    接着上一次的多标签分类综述,本文主要以Pascal VOC2012增强数据集进行多标签图像分类训练,详细介绍增强数据集制作.训练以及指标计算过程,并通过代码进行详细阐述,希望能为大家提供一定的帮助! ...

  5. python不同曲线设置标签_【图像分类】基于Pascal VOC2012增强数据的多标签图像分类实战...

    接着上一次的多标签分类综述,本文主要以Pascal VOC2012增强数据集进行多标签图像分类训练,详细介绍增强数据集制作.训练以及指标计算过程,并通过代码进行详细阐述,希望能为大家提供一定的帮助! ...

  6. 【项目实战课】基于Pytorch的InceptionNet花卉图像分类实战

    欢迎大家来到我们的项目实战课,本期内容是<基于Pytorch的InceptionNet花卉图像分类实战>.所谓项目课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题,进行 ...

  7. 【项目实战课】人人免费可学,基于Pytorch的BCNN鸟类细粒度图像分类实战

    欢迎大家来到我们的项目实战课,本期内容是<基于Pytorch的BCNN鸟类细粒度图像分类实战>.所谓项目课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题,进行代码级的实 ...

  8. 【项目实战课】基于Pytorch的的SENet人种图像分类实战

    欢迎大家来到我们的项目实战课,本期内容是<基于Pytorch的的SENet人种图像分类实战>.所谓项目课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题,进行代码级的实战 ...

  9. Tensorflow2 图像分类-Flowers数据深度学习模型保存、读取、参数查看和图像预测

    目录 1.原文完整代码 1.1 模型运行参数总结 1.2模型训练效果 ​编辑2.模型的保存 3.读取模型model 4.使用模型进行图片预测 5.补充 如何查看保存模型参数 5.1 model_wei ...

最新文章

  1. 【Prometheus】Exporter详解
  2. 脑电分析系列[MNE-Python-2]| MNE中数据结构Raw及其用法简介(更新)
  3. 「CTSC2018」假面
  4. java流与文件——正则表达式
  5. 前端学习(2227):react之状态二
  6. css修改layui的下拉框样式 js_layui的安装以及简单操作
  7. android系统开机画面_Android开机画面
  8. C语言及程序设计初步例程-42 将数据输出到文本文件
  9. 屏幕坐标转换世界坐标
  10. 认清有毒的矿物质元素 预防中毒
  11. What is CRA?
  12. 简单输出斐波那契数列
  13. CentOs 7.3 —— 使用rescue找回被删除的系统文件
  14. AWS服务器,如何设置成密码登录
  15. Springboot工程配置htpps证书
  16. 游戏任务剧情布局系统分析
  17. Win10玩游戏时输入法引起的闪退解决办法
  18. 服务器基本搭建(Linux系统阿里云服务器为例)-购买云服务器
  19. MECE的五中分类法则
  20. jqgrid序号列宽度调整-已入坑

热门文章

  1. openlayers总结
  2. 帆软单点登录_帆软单点登陆
  3. 帆软:排序问题(通过设置或者sql)
  4. 西门子伺服简单计算及长度单位LU
  5. 逆袭之路——python学习笔记【day11】
  6. python抓取微信公众号文章及评论(附过程)
  7. 三大核心驱动,老子云:让企业拥抱 “元宇宙” 更简单
  8. mysql怎么对列求和
  9. OTA升级详解(一)
  10. 发Gmail的邀请函,希望和大家在Gtalk上交流