【Python机器学习】全连接层与非线性回归、防止过拟合方法的讲解及实战( 附源码)

news2024/9/19 10:53:45

需要全部代码请点赞关注收藏后评论区留言私信~~~

全连接层与非线性回归

基于全连接层构建的多层神经网络能够用来完成回归和分类人物,在神经网络中一般用下图所示画法来表示神经元模型,神经元由输入层和输出层组成,输入层负责接收信息,并将信息传给输出层,输出层负责求和,产生激励信息并输出

 

 下面给出一个应用多个全连接层组成的神经网络来求解非线性回归问题的示例,该示例用下图所示神经网络来拟合目标函数

采用四层神经网络,输入层节点数为1,第1隐层和第2隐层的神经元个数为5,输出层神经元个数为1.

 

部分代码如下

from mindspore.common.initializer import Normal
from mindspore import nn, Parameter
 
class NonLinearNet(nn.Cell):
    def __init__(self):
        super(NonLinearNet, self).__init__()
        self.fc1 = nn.Dense(1, 5, Normal(0.02), Normal(0.02), True)
        self.fc2 = nn.Dense(5, 5, Normal(0.02), Normal(0.02), True)
        self.fc3 = nn.Dense(5, 1, Normal(0.02), Normal(0.02), True)
        self.sigmoid = nn.Sigmoid()
        
    def construct(self, x):
        x = self.sigmoid(self.fc1(x))
        x = self.sigmoid(self.fc2(x))
        x = self.sigmoid(self.fc3(x))
        return x
import tensorflow as tf
tf_model = tf.keras.Sequential([
    tf.keras.layers.Dense(5, activation='sigmoid', input_shape=(1,), kernel_initializer='random_uniform', bias_initializer='zeros'),
    tf.keras.layers.Dense(5, activation='sigmoid', kernel_initializer='random_uniform', bias_initializer='zeros'),
    tf.keras.layers.Dense(1, activation='sigmoid', kernel_initializer='random_uniform', bias_initializer='zeros')
])
……
tf_model.compile(optimiaer='sgd', loss='mean_squared_error')
tf_model.fit(X, y1, batch_size=batch_size, epochs=tf_epoch, verbose=1)
tf_model.summary()

神经网络中的过拟合及其抑制

用全连接层神经网络来拟合多项式。该神经网络有三个隐层(层内节点数分别为5、5、1),默认输入层为1个节点。隐层和输出层都采用Sigmoid激活函数。连接系数采用随机初始化,阈值系数置为0。采用均方误差MSE作为损失函数。为方便比较,采用SGD随机梯度下降优化方法,在TensorFlow2框架下实现。共训练5000轮。

如果网络结构过于简单,会欠拟合,如果网络结构过于复杂,则会过拟合

 随着训练轮数的增加,拟合结果也从欠拟合变成过拟合

采用Sigmoid激活函数、四层(1,5,5,1)结构、训练轮数为10000,以训练轮数为横坐标、误差值为纵坐标,画出训练误差和测试误差的走向

 

减少模型规模(减少多层神经网络的层数和节点数)和增加训练样本数量是防止过拟合的重要方法

下面讨论以及过拟合的方法的应用

1:正则化方法的应用

拟合结果如下图 可知比较成功的抑制了过拟合

 

部分代码如下

model = tf.keras.Sequential([
    tf.keras.layers.Dense(5, activation='sigmoid', input_shape=(1,),
                          kernel_initializer='random_uniform', bias_initializer='zeros'),
    tf.keras.layers.Dense(5, activation='sigmoid', kernel_regularizer=regularizers.l2(0.001),
                          kernel_initializer='random_uniform', bias_initializer='zeros'),
    tf.keras.layers.Dense(1, activation='sigmoid',
                          kernel_initializer='random_uniform', bias_initializer='zeros')
]) 

 

 2:早停法的应用

过拟合是训练误差低而测试误差高的问题,所以,如果在测试误差升高或不再降低时停止训练,则可以防止模型过度训练。

早停法抑制过拟合就是利用回调机制在每轮训练结束时检查测试误差是否停止减少,如果停止减少则结束训练。

 

# 验证集  
x1 = np.linspace(-3, 3, 100)
y0 = myfun(x1)
y00 = y0.copy()
standard(y0, -131.0, 223.0)
 
earlyStopping=tf.keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0.000001, patience=5, verbose=1, mode='min')
 
model.fit(x, y, batch_size=20, epochs=10000, verbose=1, callbacks=[earlyStopping],
    validation_data=(x1, y0))

3:Dropout法的应用

Dropout法是将神经元随机失活,即按预先设定的概率随机选择某些神经元进行失效,不参与本次训练。该方法可以一定程度上抑制过拟合问题。

部分代码如下

model = tf.keras.Sequential([
    tf.keras.layers.Dense(5, activation='sigmoid', input_shape=(1,),
                          kernel_initializer='random_uniform', bias_initializer='zeros'),
    tf.keras.layers.Dropout(0.1),
    tf.keras.layers.Dense(5, activation='sigmoid',
                          kernel_initializer='random_uniform', bias_initializer='zeros'),
    tf.keras.layers.Dense(1, activation='sigmoid',
                          kernel_initializer='random_uniform', bias_initializer='zeros')
])

 创作不易 觉得有帮助请点赞关注收藏~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/102634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SPI协议详解

SPI协议详解前言一、SPI简介二、接口三、SPI总线个特点:(一)主从模式(二)同步传输(三)全双工串行通信(数据传输高位在前,低位在后)四、SPI总线传输的4种模式&…

[附源码]计算机毕业设计Python贵港高铁站志愿者服务平台(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

分词并显示词性jieba.posseg.cut()

【小白从小学Python、C、Java】【计算机等级考试500强双证书】 【Python-数据分析】 分词并显示词性 jieba.posseg.cut() [太阳]选择题 以下python代码结果错误的一项是? import jieba.posseg as pseg words pseg.cut("我爱北京天安门") for word, flag in words: …

【docker】Comopse安装

Compose安装 1、下载 2、授权 Compose初体验 地址:Try Docker Compose | Docker Documentation 1、应用app.py 2、DockerFile 应用打包为镜像 3、Docker-compose yaml文件(定义整个服务,需要的环境,web、redis)完…

从输入URL到渲染的完整过程

浏览器有一个重要的安全策略,称之为「同源策略」 其中,源协议主机端口,**两个源相同,称之为同源,两个源不同,称之为跨源或跨域 同源策略是指,若页面的源和页面运行过程中加载的源不一致时&…

[附源码]Nodejs计算机毕业设计江西婺源旅游文化推广系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

Spring面试基础

目录1. 你认为Spring的核心是什么2. 如何理解约定优于配置3. spring boot starter有什么用4. Spring用到了哪些设计模式5. Springboot的启动流程6. Spring Boot自动装配的过程7. Spring Boot注解7.1. SpringBootApplication注解7.2 Import注解7.3 Conditional注解8. Spring的核…

栈和队列面试题讲解(有效的括号、用队列实现栈、用栈实现队列、设计循环队列)

今天,我将带来栈和队列的面试题讲解。 目录有效的括号:[链接](https://leetcode.cn/problems/valid-parentheses/)用队列实现栈:[链接](https://leetcode.cn/problems/implement-stack-using-queues/)用栈实现队列:[链接](https:/…

电脑重装系统之后风扇一直很响如何优化

​在电脑温度升高时,风扇就会开始转动散热,但是如果电脑根本没有运行什么程序,风扇也一直转,那可能就是设置问题了,下面小编教大家Win11笔记本风扇一直转的解决方法。 工具/原料: 系统版本:wi…

传统制造业数字化转型6大关键

在当今的数字时代,“云移动”深刻影响着每个人的生活方式和每个企业的运营模式。随着互联网的日益普及,计算和存储能力的快速发展,物联网和传感器技术的广泛应用,以及工业软件的不断演进,数据采集、存储、传输、显示、…

CentOS 9 环境编译部署 MySQL 8.0.30

文章目录[toc]环境情况一些小问题记录源码包怎么下载二进制文件怎么下载CentOS 9 运行二进制文件会报错编译 mysql安装编译所需环境安装 libtirpc-devel没有安装 openssl-devel 的报错没有安装 libtirpc-devel 的报错没有安装 rpcgen 的报错cmake 编译MySQL cmake 一些常用的参…

设计模式概述之原型模式(六)

常说的设计模式是23种设计模式,分为3大类: 创建型模式5种:工厂方法、抽象工厂、单例、建造者、原型结构型模式7种:适配器、代理、桥接、装饰者、外观、享元、组合行为型模式11种:模板方法、解释器、策略、观察者、迭代…

【Python】关于PyHook3.HookManager的几个坑

疫情当下,群羊乱舞,请做好个人防护谨慎外出 接下来进入正题。 1、建议先把PyHook3.HookManager的一个小bug修好 这是类对象的析构bug,被析构(del)时触发:AttributeError: HookManager object has no attribute keyboard_hook …

【服务器数据恢复】xfs文件系统误操作导致分区丢失不可用的数据恢复案例

服务器数据恢复环境: 某公司一组服务器:磁盘柜raid卡,raid5磁盘阵列; linux操作系统XFS文件系统,共3个分区。 服务器故障: 服务器重装操作系统,完成操作后用户发现服务器的磁盘分区出现问题&am…

大三上算法习题

难度&#xff1a;1 1 二分查找返回关键值key在长度为len的数组arr[]中的位置&#xff0c;没有key则返回-1 int bi_search( int key, int arr[], int len ) //1 二分查找返回关键值key在长度为len的数组arr[]中的位置&#xff0c;没有key则返回-1#include <iostream> u…

如何制作一张标准地图样式的地图(附数据)

概述 大家有没有想过这样一个问题&#xff0c;我们在标准地图网站上看到的标准地图的样式&#xff08;形状&#xff09;和我们平时用到的地图不一样&#xff0c;那么是什么原因导致的呢&#xff0c;我们能够制作这样样式&#xff08;形状&#xff09;的标准地图吗&#xff0c;…

Tableau可视化设计案例-04标靶图、甘特图、瀑布图

文章目录Tableau可视化设计案例04标靶图、甘特图、瀑布图1.标靶图1.1二月份电量销售额完成情况1.2参考线与参考区间2.甘特图2.1甘特图的概念与用途2.2交货延期情况的甘特图2.3不同的日期类型选择3.创建超市不同子类别产品的盈亏瀑布图Tableau可视化设计案例 本文是Tableau的案…

手把手转行|你真的要转行吗?

首先&#xff0c;我不鼓励盲目转行。 但凡你还有选择的机会&#xff0c;转行&#xff0c;都不是你的第一选择。 如果你是为了逃避而转行&#xff0c;那多半会以失败告终。 原因是&#xff0c;你现在想要逃避的问题&#xff0c;当前不解决&#xff0c;换一家公司&#xff0c;也要…

现在学编程,只要开始行动都不晚

我要告诉大家的是&#xff0c;学习编程&#xff0c;任何时候都不晚。 咱们首先说工资&#xff0c;我一直认为&#xff0c;不看工资的岗位纯属耍流氓。如果你关注每年的薪资排行榜&#xff0c;金融和 IT 行业连续多年稳居前二&#xff0c;而比较有意思的是&#xff0c;哪怕薪资…

C++ Primer 第二章 变量和基本类型

C Primer 第二章 变量和基本类型2.1. Primitive Built-in Types2.1.1. Arithmetic Types2.1.3. Literals2.2 Variables2.2.1. Variable DefinitionsInitializersList InitializationDefault Initialization2.2.2. Variable Declarations and Definitions2.2.3. Identifiers2.3.…