上一篇文章和同学们分享了两种方法,今天我们继续分享另外两种方法。

Batch Normalization

批处理规范化背后的主要思想是,在我们的案例中,我们通过使用几种技术(sklearn.preprocessing.StandardScaler)来规范化输入层,从而提高了模型性能,因此,如果输入层受益于规范化,为什么不规范化隐藏层,这将进一步改善并加快学习速度。

要将其添加到TensorFlow模型中,只需在层后添加  tf.keras.layers.BatchNormalization()

让我们看一下代码。

model9 = Sequential([    Dense(512, activation='tanh', input_shape = X_train[0].shape),    Dense(512//2, activation='tanh'),    tf.keras.layers.BatchNormalization(),    Dense(512//4, activation='tanh'),    Dense(512//8, activation='tanh'),    Dense(32, activation='relu'),    Dense(3, activation='softmax')])model9.compile(optimizer='sgd',loss='categorical_crossentropy', metrics=['acc', 'mse'])hist9 = model9.fit(X_train, y_train, epochs=350,  validation_data=(X_test,y_test), verbose=2)

在这里,如果您注意到我已经删除了batch_size的选项。这是因为仅在将tf.keras.BatchNormalization()  用作正则化时添加了batch_size参数  ,这会导致模型的性能非常差。我试图在互联网上找到原因,但找不到。如果您确实想在训练时使用batch_size,也可以将优化器从sgd 更改  为  rmsprop 或  adam 

训练后,让我们评估模型。

loss9, acc9, mse9 = model9.evaluate(X_test, y_test)print(f"Loss is {loss9},\nAccuracy is {acc9 * 100},\nMSE is {mse9}")

1个批处理归一化验证集的准确性不如其他技术。让我们来绘制损失和acc以获得更好的直觉。

在这里,我们可以看到我们的模型在验证集和测试集上的表现不佳。让我们向所有层添加归一化以查看结果。

model11 = Sequential([    Dense(512, activation='tanh', input_shape = X_train[0].shape),    tf.keras.layers.BatchNormalization(),    Dense(512//2, activation='tanh'),    tf.keras.layers.BatchNormalization(),    Dense(512//4, activation='tanh'),    tf.keras.layers.BatchNormalization(),    Dense(512//8, activation='tanh'),    tf.keras.layers.BatchNormalization(),    Dense(32, activation='relu'),    tf.keras.layers.BatchNormalization(),    Dense(3, activation='softmax')])model11.compile(optimizer='sgd',loss='categorical_crossentropy', metrics=['acc', 'mse'])hist11 = model11.fit(X_train, y_train, epochs=350,  validation_data=(X_test,y_test), verbose=2)

让我们评估它。

loss11, acc11, mse11 = model11.evaluate(X_test, y_test)print(f"Loss is {loss11},\nAccuracy is {acc11 * 100},\nMSEis {mse11}")

通过在每层中添加批处理规范化,我们获得了良好的准确性。让我们绘制Loss和准确率。

通过绘制准确度和损失,我们可以看到我们的模型在训练集上的表现仍优于验证集,但是在性能上却有所提高。

Dropout

避免正则化的另一种常见方法是使用Dropout技术。使用dropout背后的主要思想是,我们基于某种概率随机关闭层中的某些神经元。

让我们在Tensorflow中对其进行编码。

以前所有的导入都是相同的,我们只是在这里添加一个额外的导入。

为了实现DropOut,我们要做的就是从tf.keras.layers中添加一个  Dropout 层   并在其中设置一个dropout速率。

import tensorflow as tfmodel7 = Sequential([    Dense(512, activation='tanh', input_shape = X_train[0].shape),    tf.keras.layers.Dropout(0.5), #dropout with 50% rate    Dense(512//2, activation='tanh'),    Dense(512//4, activation='tanh'),    Dense(512//8, activation='tanh'),    Dense(32, activation='relu'),    Dense(3, activation='softmax')])model7.compile(optimizer='sgd',loss='categorical_crossentropy', metrics=['acc', 'mse'])hist7 = model7.fit(X_train, y_train, epochs=350, batch_size=128, validation_data=(X_test,y_test), verbose=2)

训练后,让我们在测试集中对其进行评估。

loss7, acc7, mse7 = model7.evaluate(X_test, y_test)print(f"Loss is {loss7},\nAccuracy is {acc7 * 100},\nMSE is {mse7}")

哇,我们的结果非常有前途,我们的测试集执行了97%。让我们画出Loss和准确率,以获得更好的直觉。

plt.figure(figsize =(15,8))plt.plot(hist7.history ['loss'],label ='loss')plt.plot(hist7.history ['val_loss'],label ='val loss' )plt.title(“ Loss vs Val_Loss”)plt.xlabel(“ Epochs ”)plt.ylabel(“ Loss”)plt.legend()plt.show()

在这里,我们可以看到,与训练数据相比,我们的模型在验证数据上的表现更好,这是个好消息。

现在让我们绘制准确率。

我们可以看到该模型也很好,并且不会过度拟合数据集。

最后:

本文简要介绍了如何在Tensorflow中使用不同的技术。如果您缺乏理论,我建议您在Coursera的“深度学习专业化”课程2和3中学习有关正则化的更多信息。

您还必须学习何时使用哪种技术,以及何时以及如何结合使用不同的技术,才能获得真正卓有成效的结果。

希望您现在对如何在Tensorflow 2中实现不同的正则化技术有所了解。

keras添加正则化全连接_收藏!改善TensorFlow模型的4种方法你需要了解的关键正则化技术(2)...相关推荐

  1. keras添加正则化全连接_第16章 Keras使用Dropout正则化防止过拟合

    Dropout虽然简单,但可以有效防止过拟合.本章关于如何在Keras中使用Dropout.本章包括: dropout的原理 dropout的使用 在隐层上使用dropout 我们开始吧. 16.1 ...

  2. 弹性理论法研究桩基受力计算公式_收藏!桩基检测的7种方法

    来源:网络 版权归原作者所有,侵删 桩基检测,分为桩基施工前和施工后的检测:施工前,为设计提供依据的试验桩检测,主要确定单桩极限承载力:施工后,为验收提供提供依据的工程桩检测,主要进行单桩承载力和桩身 ...

  3. 对于图像分类任务,相对于全连接的DNN,CNN模型的主要优点有哪些?

    对于图像分类任务,相对于全连接的DNN,CNN模型的主要优点有哪些? CNN相对于全连接的DNN(deep neural network)的优势包括一下几个方面: 第一,由于CNN的权重是高度复用的, ...

  4. 改善C#程序的50种方法

    摘要:为什么程序已经可以正常工作了,我们还要改变它们呢?答案就是我们可以让它们变得更好.我们常常会改变所使用的工具或者语言,因为新的工具或者语言更富生产力.如果固守旧有的习惯,我们将得不到期望的结果. ...

  5. 《Effective C#中文版:改善C#程序的50种方法》简介

    书名: Effective C#中文版:改善C#程序的50种方法 书号: 978-7-115-15888-8/TP 原书名: Effective C#: 50 Specific Ways to Imp ...

  6. 改善网站安全性的5种方法

    Here you will know about some important website security tips. 在这里,您将了解一些重要的网站安全提示. Owning a website ...

  7. Keras创建ANN模型的四种方法

    Keras创建ANN模型的四种方法 1.将参数传递给tf.keras.Sequential 2.用tf.keras.Sequential的`.add`方法 3.使用Keras函数式API 4.子类化t ...

  8. 投影仪怎么连接电脑?快来看看这3种方法!

    案例:如何连接电脑和投影仪? [想看电影,但是电脑屏幕太小,我想把电脑上的内容通过投影仪投到大屏幕上.有小伙伴知道如何连接电脑和投影仪吗?谢谢大家!] 使用投影仪可以将电脑或其他设备上的内容投放到大屏 ...

  9. keras添加正则化全连接_TensorFlow keras卷积神经网络 添加L2正则化

    model = keras.models.Sequential([ #卷积层1 keras.layers.Conv2D(32,kernel_size=5,strides=1,padding=" ...

最新文章

  1. 以网络安全为例的大数据可视化设计
  2. 推荐给c++学习者的经典
  3. python太慢了-python 读取大文件越来越慢
  4. 一次频繁Full GC的排查过程,根源居然是它...
  5. Error: getaddrinfo ENOTFOUND localhost
  6. linux下postgresql离线编译安装
  7. android 7.0 自启管理,一款不错的android6.0、7.0权限管理器推荐
  8. oracle共享内存系统全局,Oracle10g 管理系统全局区简介
  9. jsp和java一样具有平台独立性._web开发技术总复习题
  10. 第3次作业:阅读《构建之法》1-5章
  11. mac配置VMware Fusion虚拟机网络配置
  12. 微信小程序:自适应来电模拟器
  13. V部落博客管理平台开源啦! Vue+SpringBoot强强联合!
  14. win7 windows update 无法更新错误代码80072EF
  15. pyecharts对于经纬度_echarts 根据经纬度坐标在地图上描点
  16. google黑客常用搜索语句
  17. 《游戏学习》| 射击类小游戏 html5 打野鸭子
  18. 树莓派40pin管脚图
  19. UEStudio 9 注册码
  20. 富芮坤fr8008gp lvgl遇坑和解法:卡死在lvgl定时器中;SWD接口配置;

热门文章

  1. @vail 判断某字段在范围内_月经两三天就没了和五天以上才没有,哪个更好?怎么判断月经量...
  2. python办公模块_Python 办公自动化教程
  3. java二级下拉菜单_航菜单栏中的二级下拉菜单
  4. .net 下直接读分区数据,并生成ISO光盘镜像文件,含DEMO
  5. Groovy中的闭包
  6. Spark 学习文章
  7. 11大Java开源中文分词器的使用方法和分词效果对比
  8. netsh与用法--XP的各种网络命令
  9. JDK8:使用Optional进行变量判空、集合遍历
  10. 年后准备跳槽可以看看