神经网络解决回归问题(更新ing)

神经网络应用于回归问题

神经网络是处理回归问题的强大工具,它们能够学习输入数据和输出之间的复杂关系。

神经网络提供了一种灵活且强大的框架,用于建模和预测回归问题。通过 适当的 网络结构训练策略正则化技术,可以有效地从数据中学习并做出准确的预测。

在实际应用中,选择合适的网络架构参数对于构建一个高效的回归模型至关重要

所以说,虽然神经网络是处理回归问题的强大工具,但是也存在很多问题,需要我们掌握很多方法技巧才能建立一个高效准确的回归模型:

  • 正则化(Regularization): 为了防止过拟合,可以在损失函数中添加正则化项,如L1或L2正则化。
  • Dropout: 这是一种技术,可以在训练过程中随机地丢弃一些神经元的激活,以减少模型对特定神经元的依赖。
  • 批量归一化(Batch Normalization): 通过对每一层的输入进行归一化处理,可以加速训练过程并提高模型的稳定性。
  • 早停(Early Stopping): 当验证集上的性能不再提升时,停止训练以避免过拟合。
  • 超参数调整(Hyperparameter Tuning): 通过调整网络结构(如层数每层的神经元数量)和学习率等超参数,可以优化模型的性能。

生成数据集:

输入数据:
X 1 = 100 × N ( 1 , 1 ) X_{1} = 100 \times \mathcal{N}(1, 1) X1=100×N(1,1)
X 2 = N ( 1 , 1 ) 10 X_{2} = \frac{\mathcal{N}(1, 1) }{10} X2=10N(1,1)
X 3 = 10000 × N ( 1 , 1 ) X_{3} = 10000 \times \mathcal{N}(1, 1) X3=10000×N(1,1)
输出数据 Y Y Y Y 1 Y_1 Y1:
Y = 6 X 1 − 3 X 2 + X 3 2 + ϵ Y = 6X_{1} - 3X_2 + X_3^2 + \epsilon Y=6X13X2+X32+ϵ

Y 1 = X 1 ⋅ X 2 − X 1 X 3 + X 3 X 2 + ϵ 1 Y_1 = X_1 \cdot X_2 - \frac{X_1}{X_3} + \frac{X_3}{X_2} + \epsilon_1 Y1=X1X2X3X1+X2X3+ϵ1
其中, ϵ 1 \epsilon_1 ϵ1 是均值为0,方差为0.1的正态分布噪声。

请注意,这里的 N ( μ , σ 2 ) {N}(\mu, \sigma^2) N(μ,σ2) 表示均值为 μ \mu μ ,方差为 σ 2 \sigma^2 σ2的正态分布。

下面是生成数据集的代码:

# 生成测试数据
import numpy as np
import pandas as pd
# 训练集和验证集样本总个数
sample = 2000
train_data_path = 'train.csv'
validate_data_path = 'validate.csv'
predict_data_path = 'test.csv'# 构造生成数据的模型
X1 = np.zeros((sample, 1))
X1[:, 0] = np.random.normal(1, 1, sample) * 100
X2 = np.zeros((sample, 1))
X2[:, 0] = np.random.normal(2, 1, sample) / 10
X3 = np.zeros((sample, 1))
X3[:, 0] = np.random.normal(3, 1, sample) * 10000# 模型
Y = 6 * X1 - 3 * X2 + X3 * X3 + np.random.normal(0, 0.1, [sample, 1])
Y1 = X1 * X2 - X1 / X3 + X3 / X2 + np.random.normal(0, 0.1, [sample, 1])# 将所有生成的数据放到data里面
data = np.zeros((sample, 5))
data[:, 0] = X1[:, 0]
data[:, 1] = X2[:, 0]
data[:, 2] = X3[:, 0]
data[:, 3] = Y[:, 0]
data[:, 4] = Y1[:, 0]# 将data分成测试集和训练集
num_traindata = int(0.8*sample)# 将训练数据保存
traindata = pd.DataFrame(data[0:num_traindata, :], columns=['x1', 'x2', 'x3', 'y', 'y1'])
traindata.to_csv(train_data_path, index=False)
print('训练数据保存在: ', train_data_path)# 将验证数据保存
validate_data = pd.DataFrame(data[num_traindata:, :], columns=['x1', 'x2', 'x3', 'y', 'y1'])
validate_data.to_csv(validate_data_path, index=False)
print('验证数据保存在: ', validate_data_path)# 将预测数据保存
predict_data = pd.DataFrame(data[num_traindata:, 0:-2], columns=['x1', 'x2', 'x3'])
predict_data.to_csv(predict_data_path, index=False)
print('预测数据保存在: ', predict_data_path)

通用神经网络拟合函数

要根据生成的数据集建立回归模型应该如何实现呢?对于这样包含非线性的方程,直接应用通用的神经网络模型可能效果并不好,就像这样:

import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
import pandas as pdclass FNN(nn.Module):def __init__(self,Arc,func,device):super(FNN, self).__init__()  # 调用父类的构造函数self.func = func # 定义激活函数self.Arc = Arc # 定义网络架构self.device = deviceself.model = self.create_model().to(self.device)# print(self.model)def create_model(self):layers = []for ii in range(len(self.Arc) - 2):  # 遍历除最后一层外的所有层layers.append(nn.Linear(self.Arc[ii], self.Arc[ii + 1], bias=True))layers.append(self.func)  # 添加激活函数if ii < len(self.Arc) - 3:  # 如果不是倒数第二层,添加 Dropout 层layers.append(nn.Dropout(p=0.1))layers.append(nn.Linear(self.Arc[-2], self.Arc[-1], bias=True))  # 添加最后一层return nn.Sequential(*layers)def forward(self,x):out = self.model(x)return outif __name__ == "__main__":# 定义网络架构和激活函数Arc = [3, 10, 20, 20, 20, 10, 2]func = nn.ReLU()  # 选择ReLU激活函数device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')  # 根据是否有GPU来选择设备# 创建FNN模型实例model = FNN(Arc, func, device)# 定义损失函数和优化器criterion = nn.MSELoss()  # 均方误差损失函数optimizer = optim.Adam(model.parameters(), lr=0.001)  # 使用Adam优化器# 训练数据train_data_path = 'train.csv'train_data = pd.read_csv(train_data_path)features = np.array(train_data.iloc[:, :-2])labels = np.array(train_data.iloc[:, -2:])#转换成张量inputs_tensor = torch.from_numpy(features).float().to(device)  # 转换为浮点张量labels_tensor = torch.from_numpy(labels).float().to(device)  # 如果标签是数值型数loss_history = []# 训练模型for epoch in range(20000):optimizer.zero_grad()  # 清空之前的梯度outputs = model(inputs_tensor)  # 前向传播loss = criterion(outputs, labels_tensor)  # 计算损失loss_history.append(loss.item())  # 将损失值保存在列表中loss.backward()  # 反向传播optimizer.step()  # 更新权重if epoch % 1000 == 0:print('epoch is', epoch, 'loss is', loss.item(), )import matplotlib.pyplot as pltloss_history = np.array(loss_history)plt.plot(loss_history)plt.xlabel = ('epoch')plt.ylabel = ('loss')plt.show()torch.save(model, 'model\entire_model.pth')

应用这个代码得到的损失随迭代次数变化曲线如图:
在这里插入图片描述
这损失值也太大了!!!
那么应该如何修改神经网络模型使其损失函数降低呢?

————————————————

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

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

相关文章

大模型笔记:Prompt tuning

1 NLP模型的几个阶段 1.1 第一阶段&#xff08;在深度学习出现之前&#xff09; 通常聚焦于特征工程&#xff08;feature engineering&#xff09;利用领域知识从数据中提取好的特征 1.2 第二阶段&#xff08;在深度学习出现之后&#xff09; 特征可以从数据中习得——>…

大数据相关组件安装及使用

自学大数据相关组件 持续更新中。。。 一、linux安装docker 1、更新yum sudo yum update2、卸载docker旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine3、…

大话设计模式——18.策略模式(Strategy Pattern)

简介 是一系列算法的封装&#xff0c;即做的事情相同&#xff08;方法名称相同&#xff09;但是实现的方式不同&#xff0c;以相同方式调用所有的算法&#xff0c;减少算法与使用算法的耦合。直接调用方法。 UML图 应用场景 Java AWT中的LayoutManager&#xff08;布局管理器&…

ARCHE-2024第三届上海国际智慧档案展览会暨高峰论坛即将开幕

一、ARCHE-2024精彩即将开幕 为进一步推动档案行业新科技创新应用与档案信息化再上台阶&#xff0c;加强档案行业交流互动&#xff0c;强化档案行业创新意识&#xff0c;实现相互促进、共同发展&#xff0c;作为6.9国际档案日系列活动的重要延伸——“2024第三届上海国际智慧档…

echarts 如何设置(dataZoom)多个图形的数据区域一起联动缩放响应

数据区域联动缩放需要用到 dataZoom 的专属事件 dispatchAction 实现多个数据区域联动缩放功能 <div style"width:100%;height:320px;" id"test01"></div> <div style"width:100%;height:320px;" id"test02"></…

MAC(M1芯片)编译Java项目慢且发热严重问题解决方案

目录 一、背景二、排查三、解决四、效果以及结果展示五、总结 一、背景 使用idea编译项目等操作&#xff0c;经常性发热严重&#xff0c;并且时间慢。直到昨天编译一个项目用时30分钟&#xff0c;电脑温度很高&#xff0c;并且有烧灼的味道&#xff0c;于是有了此篇文章。 二、…

C++(六个默认成员函数)

目录 六个默认成员函数构造函数析构函数拷贝构造函数 总结 六个默认成员函数 默认成员函数的概念&#xff1a;如果用户不显式写&#xff0c;编译器会自动生成的函数&#xff0c;就是默认成员函数 构造函数 构造函数是六个默认成员函数之一&#xff0c;构造函数的功能类似于init…

懒人必备!4个PS抠图技巧,让你轻松处理复杂背景!

今天带给大家的又是一个绝对重要的知识&#xff0c;那就是“抠图”&#xff01; 在我们的设计中&#xff0c;抠图可以说是最常见的运用啦&#xff0c;简单的PS抠图我们都会&#xff0c;但是最令我们头痛的人物或者动物的毛发的抠图了&#xff0c;很多人都抠不好&#xff0c;我…

合并单元格的excel文件转换成json数据格式

github地址: https://github.com/CodeWang-Ay/DataProcess 类型1 需求1: 类似于数据格式: https://blog.csdn.net/qq_44072222/article/details/120884158 目标json格式 {"位置": 1, "名称": "nba球员", "国家": "美国"…

华为机试题

目录 第一章、HJ1计算字符串最后一个单词的长度&#xff0c;单词以空格隔开。1.1&#xff09;描述1.2&#xff09;解题第二章、算法题HJ2 计算某字符出现次数1.1&#xff09;题目描述1.2&#xff09;解题思路与答案第三章、算法题HJ3 明明的随机数1.1&#xff09;题目描述1.2&a…

eBPF专题一 | 手把手教你用eBPF诊断MySQL(含源码)

DBdoctor 是一款数据库内核级性能诊断工具&#xff0c;利用eBPF技术深入数据库内核&#xff0c;致力于解决数据库的一切性能问题。 被称之为“革命性”内核技术的eBPF一直以来都备受关注&#xff0c;而DBdoctor作为一款数据库性能诊断工具&#xff0c;首次将eBPF技术深入应用…

FPGA实现Canny算法(Verilog)

在边缘检测算法里面Sobel是比较简单的一个算法&#xff0c;但是其检测出来的边缘往往是比较粗的&#xff0c;效果不是很好&#xff0c;因为我们最理想的边缘肯定就是一个宽度为1的细线。 Canny算法在此基础上进行了改进&#xff0c;通过使用边缘的梯度信息进行非最大值抑制(NM…

【随笔】Git 高级篇 -- 最近标签距离查询 git describe(二十一)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

【计算机毕业设计】企业仓储管理系统——后附源码

&#x1f389;**欢迎来到我的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 一名来自世界500强的资深程序媛&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于…

python-pytorch实现CBOW 0.5.000

python-pytorch实现CBOW 0.5.000 数据加载、切词准备训练数据准备模型和参数训练保存模型加载模型简单预测获取词向量降维显示图使用词向量计算相似度参考 数据加载、切词 按照链接https://blog.csdn.net/m0_60688978/article/details/137538274操作后&#xff0c;可以获得的数…

由近期 RAGFlow 的火爆看 RAG 的现状与未来

4 月 1 日&#xff0c;InfiniFlow &#xff08;英飞流&#xff09;的端到端 RAG 解决方案 RAGFlow 正式开源&#xff0c;首日即获得了 github 千星&#xff0c;目前已接近 3000 star。在这之前&#xff0c;InfiniFlow 还开源了专门用于 RAG 场景的 AI 原生数据库 Infinity&…

用 ElementPlus 的日历组件 Calendar 自定义渲染

文章目录 需求分析1. 英文改为中文2. 修改样式3. 自定义头部4. 增删改功能接入需求 使用 ElementPlus中的 Calendar 组件完成自定义渲染 分析 1. 英文改为中文 转为中文的方式:用 ElementPlus的日历组件如何改为中文 2. 修改样式 附源码<template><el-calendar&…

linux查看硬盘空间使用情况

df &#xff08;1&#xff09;查看磁盘空间的占用情况 -h是给大小带上单位 df -h 总空间不一定等于已用未用&#xff0c;系统可能留出来一点空间另做他用 &#xff08;2&#xff09;查看INode的使用情况 df -idu du命令比df命令复杂一点&#xff0c;是查看文件和目录占用的…

部署GlusterFS群集

目录 一、部署GlusterFS群集 1. 服务器节点分配 2. 服务器环境&#xff08;所有node节点上操作&#xff09; 2.1 关闭防火墙 2.2 磁盘分区&#xff0c;并挂载 2.3 修改主机名&#xff0c;配置/etc/hosts文件 3. 安装、启动GlusterFS&#xff08;所有node节点上操作&…

51单片机入门_江协科技_25~26_OB记录的笔记_蜂鸣器教程

25. 蜂鸣器 25.1. 蜂鸣器介绍 •蜂鸣器是一种将电信号转换为声音信号的器件&#xff0c;常用来产生设备的按键音、报警音等提示信号 •蜂鸣器按驱动方式可分为有源蜂鸣器和无源蜂鸣器&#xff08;开发板上用的无源蜂鸣器&#xff09; •有源蜂鸣器&#xff1a;内部自带振荡源&a…