keras添加正则化全连接_收藏!改善TensorFlow模型的4种方法你需要了解的关键正则化技术(2)...
上一篇文章和同学们分享了两种方法,今天我们继续分享另外两种方法。
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)...相关推荐
- keras添加正则化全连接_第16章 Keras使用Dropout正则化防止过拟合
Dropout虽然简单,但可以有效防止过拟合.本章关于如何在Keras中使用Dropout.本章包括: dropout的原理 dropout的使用 在隐层上使用dropout 我们开始吧. 16.1 ...
- 弹性理论法研究桩基受力计算公式_收藏!桩基检测的7种方法
来源:网络 版权归原作者所有,侵删 桩基检测,分为桩基施工前和施工后的检测:施工前,为设计提供依据的试验桩检测,主要确定单桩极限承载力:施工后,为验收提供提供依据的工程桩检测,主要进行单桩承载力和桩身 ...
- 对于图像分类任务,相对于全连接的DNN,CNN模型的主要优点有哪些?
对于图像分类任务,相对于全连接的DNN,CNN模型的主要优点有哪些? CNN相对于全连接的DNN(deep neural network)的优势包括一下几个方面: 第一,由于CNN的权重是高度复用的, ...
- 改善C#程序的50种方法
摘要:为什么程序已经可以正常工作了,我们还要改变它们呢?答案就是我们可以让它们变得更好.我们常常会改变所使用的工具或者语言,因为新的工具或者语言更富生产力.如果固守旧有的习惯,我们将得不到期望的结果. ...
- 《Effective C#中文版:改善C#程序的50种方法》简介
书名: Effective C#中文版:改善C#程序的50种方法 书号: 978-7-115-15888-8/TP 原书名: Effective C#: 50 Specific Ways to Imp ...
- 改善网站安全性的5种方法
Here you will know about some important website security tips. 在这里,您将了解一些重要的网站安全提示. Owning a website ...
- Keras创建ANN模型的四种方法
Keras创建ANN模型的四种方法 1.将参数传递给tf.keras.Sequential 2.用tf.keras.Sequential的`.add`方法 3.使用Keras函数式API 4.子类化t ...
- 投影仪怎么连接电脑?快来看看这3种方法!
案例:如何连接电脑和投影仪? [想看电影,但是电脑屏幕太小,我想把电脑上的内容通过投影仪投到大屏幕上.有小伙伴知道如何连接电脑和投影仪吗?谢谢大家!] 使用投影仪可以将电脑或其他设备上的内容投放到大屏 ...
- keras添加正则化全连接_TensorFlow keras卷积神经网络 添加L2正则化
model = keras.models.Sequential([ #卷积层1 keras.layers.Conv2D(32,kernel_size=5,strides=1,padding=" ...
最新文章
- 以网络安全为例的大数据可视化设计
- 推荐给c++学习者的经典
- python太慢了-python 读取大文件越来越慢
- 一次频繁Full GC的排查过程,根源居然是它...
- Error: getaddrinfo ENOTFOUND localhost
- linux下postgresql离线编译安装
- android 7.0 自启管理,一款不错的android6.0、7.0权限管理器推荐
- oracle共享内存系统全局,Oracle10g 管理系统全局区简介
- jsp和java一样具有平台独立性._web开发技术总复习题
- 第3次作业:阅读《构建之法》1-5章
- mac配置VMware Fusion虚拟机网络配置
- 微信小程序:自适应来电模拟器
- V部落博客管理平台开源啦! Vue+SpringBoot强强联合!
- win7 windows update 无法更新错误代码80072EF
- pyecharts对于经纬度_echarts 根据经纬度坐标在地图上描点
- google黑客常用搜索语句
- 《游戏学习》| 射击类小游戏 html5 打野鸭子
- 树莓派40pin管脚图
- UEStudio 9 注册码
- 富芮坤fr8008gp lvgl遇坑和解法:卡死在lvgl定时器中;SWD接口配置;
热门文章
- @vail 判断某字段在范围内_月经两三天就没了和五天以上才没有,哪个更好?怎么判断月经量...
- python办公模块_Python 办公自动化教程
- java二级下拉菜单_航菜单栏中的二级下拉菜单
- .net 下直接读分区数据,并生成ISO光盘镜像文件,含DEMO
- Groovy中的闭包
- Spark 学习文章
- 11大Java开源中文分词器的使用方法和分词效果对比
- netsh与用法--XP的各种网络命令
- JDK8:使用Optional进行变量判空、集合遍历
- 年后准备跳槽可以看看