Pytorch学习笔记day3——用神经网络学习一组函数

好的,我们开始吧。首先第一个问题,神经网络的本质是什么?是古典主义的人类的神经元吗?绝对不是,他只是一个优化函数
y = f θ ( x ) y = f_{\theta}(x) y=fθ(x)
这和小学学到的线性函数拟合并无本质区别。只是其中参数 θ \theta θ是大量的参数,并且函数 f θ f_{\theta} fθ本身的形式也会非常复杂。相应的参数 θ \theta θ也无法像线性拟合一样,直接列方程求解,而是依赖于优化算法。

所以今天,我们就尝试用神经网络,去学习几个函数表达式。

训练代码解读

不多说了直接贴代码

import numpy as np
import math
import matplotlib.pyplot as pltimport torch
import torch.nn as nn
import torch.optim as optimclass Net(nn.Module):def __init__(self, num_layers, input_size, hidden_size, output_size):super(Net, self).__init__()self.layers = nn.ModuleList([nn.Linear(input_size, hidden_size, bias=True)] + [nn.Linear(hidden_size, hidden_size, bias=True) for _ in range(num_layers - 2)] + [nn.Linear(hidden_size, output_size, bias=True)])def forward(self, x):for layer in self.layers:x = nn.functional.gelu(layer(x))return xif __name__=="__main__":# 被训练函数---------------------------x = np.linspace(0.1, 2.1, 100)y = [[math.exp(ele)*ele, math.exp(ele), ele*ele] for ele in x]plt.plot(x, y)plt.show()# 训练部分------------------------# 生成被训练数据------------------------x = torch.Tensor(x.reshape(-1,1))y = torch.Tensor(y)# 初始化网络net = Net(6, 1, 32, 3)# 定义损失函数和优化器loss_fn = nn.MSELoss(reduction='sum')optimizer = optim.Adam(net.parameters(), lr=0.01)# 训练模型epochs = 1000for epoch in range(epochs):y_pred = net(x)loss = loss_fn(y_pred, y)optimizer.zero_grad() #梯度清零,否则梯度会累积loss.backward()       #计算参数关于loss函数的梯度,需要做梯度会穿optimizer.step()      #利用梯度对model参数进行一次训练if epoch % 10 == 0:print('epoch: ', epoch, "    loss: ", loss.item())if epoch % 100 == 0:plt.clf()plt.plot(x, y,'b-',x, y_pred.detach().numpy(),'r-')plt.show()

这里多说一句撒,关于训练的写法,我觉得mindspore设计得是比pytorch要好的。optimizer.zero_grad()这种事情,mindspore就不需要做,不如说正常人前一次梯度都不会保留吧,默认不保留才是合理的吧。第二个是,获取梯度的grad,loss.backward应该显式的写出来,然后传进优化器的一次训练步才更加符合直觉,比如像下面这样

grad = loss.backward()       #梯度回传获取grad
optimizer.step(grad)      #利用梯度对net的参数进行一次训练
# 上述两行纯属个人yy,不能运行的哈

训练结果如下
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

可以看到300左右就已经收敛得比较好了。

神经网络的局限性与正则化的重要性

简单粗暴的将被学习的函数第一个分量减去10

    x = np.linspace(0.1, 2.1, 100)y = [[math.exp(ele)*ele - 10, math.exp(ele), ele*ele] for ele in x]

突然就不能学了
在这里插入图片描述
这其实是因为,我们使用的激活函数,为gelu函数。嗯差不多长下面这样,这种激活函数是没法表示负值的。导致整个神经网络没法表示负数。
在这里插入图片描述
所以说神经网络也不完全是魔法,而是一个优化问题。我们需要先找到能以较少参数就表示被优化函数的网络,然后再对这个网络里面的参数进行优化,才能得到合理的结果。对当前情况,我们选一个,能表示较大负数的激活函数,例如:呃?!我震惊的发现好像没有类似这样的激活函数,AI训练的问题大多数都是非负的。

好吧,所以神经网络要学习的问题,我们一定要做合适的正则化或者归一化,让我们的网络能够表示当前的问题才行。

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

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

相关文章

uniapp form表单校验

公司的一个老项目,又要重新上架,uniapp一套代码,打包生成iOS端发布到App Store,安卓端发布到腾讯应用宝、OPPO、小米、华为、vivo,安卓各大应用市场上架要求不一样,可真麻烦啊 光一个表单校验,…

云手机结合自主ADB命令接口 提升海外营销效率

现在,跨境电商直播已经成为在线零售的重要渠道,在大环境下,确保直播应用的稳定性和用户体验至关重要。 云手机支持自主ADB命令接口,为电商直播营销提供了技术支持,使得应用开发、测试、优化和运维更加高效。 什么是A…

【sklearn | 7】:scikit-learn项目实战指南

引言 在数据科学和机器学习领域,Python以其简洁的语法和强大的库支持,成为了许多开发者和研究者的首选语言。而在众多Python机器学习库中,scikit-learn以其易用性、灵活性和强大的算法集合,成为了最受欢迎的库之一。本文将深入探…

【驱动程序】霍尔编码器电机_CubeMX_HAL库

【驱动程序】霍尔编码器电机_CubeMX_HAL库 电机型号:MG310 霍尔编码器电机 驱动模块:L298N 接线 注: L298N 12V接线柱位置可以接50V~5V当跳线帽接入时,5V接线柱为5V输出,可以给驱动板供电当跳线帽拔出时&#xff0…

内部类+图书管理系统

内部类图书管理系统 1. 实例内部类1.1 实例内部类的结构1.2 实例内部类的一些问题1.2.1 如何在main中创建实例内部类对象?1.2.2 内部类成员变量被static修饰问题?1.2.3 内部类和外部类变量重名的调用问题?1.2.4 外部类访问内部类变量的问题 2…

电商人批量下载神器阿里国际高清主图、详情图、sku及视频信息

电商领域,图片是商品静默的推销员。高质量的图片能吸引顾客目光,传达商品信息,提升购买欲望。它影响产品的第一印象,直接关联转化率和销售额。简而言之,优质图片对电商至关重要。 使用图快下载器,小编给大…

彻底解决idea的编解码问题

一、打开idea,找到Setting,点击File Encoding编解码设置,将以下标红的三个部分全部设置为UTF-8.同理如果你的项目使用的是GBK或者其他编码格式,那么也设置为统一。 二、点击Java Compiler设置补齐-encoding utf-8参数 三、如果你的项目使用到…

基于PHP+MYSQL开发制作的趣味测试网站源码

基于PHPMYSQL开发制作的趣味测试网站源码。可在后台提前设置好缘分, 自己手动在数据库里修改数据,数据库里有就会优先查询数据库的信息, 没设置的话第一次查询缘分都是非常好的 95-99,第二次查就比较差 , 所以如果要…

Redis 关于内存碎片的解决方法

今天生产机报内存爆满异常被叫过去查看问题,通过各种排除最终定位到了Redis的内存碎片的问题,这篇博客将详细介绍Redis内存碎片问题并给出最佳实践解决此问题。 Redis的内存碎片原理 先引用Redis官方的原话: 当键被删除时,Redis …

微服务:nacos

Nacos 由Alibaba推出的集成于SpringCloudAlibaba中的一款开源注册中心框架 主要功能: 注册中心 配置管理 nacos的安装和部署 nacos默认访问端口8848 docker pull nacos/nacos-server:1.2.0 docker run --env MODEstandalone --name nacos --restartalways -d -p 8848:8…

uniapp H5 如何根据接口返回form表单,跳转银联支付界面?

uniapp如何根据form表单,唤醒第三方支付? 文章目录 uniapp如何根据form表单,唤醒第三方支付?效果图实现 效果图 接口返回 form 表单数据 实现 // 例请求成功,返回数据 rechargePay({}).then(res > {// 接收接口返回数据let { result …

JavaScript 获取 url(get)参数

https://andi.cn/page/621584.html

【贪心算法】力扣1481.不同整数的最少数目

给你一个整数数组 arr 和一个整数 k 。现需要从数组中恰好移除 k 个元素,请找出移除后数组中不同整数的最少数目。 示例 1: 输入:arr [5,5,4], k 1 输出:1 解释:移除 1 个 4 ,数组中只剩下 5 一种整数。…

【BUG】已解决:zipfile.BadZipFile: File is not a zip file

已解决:zipfile.BadZipFile: File is not a zip file 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市开发…

[word] word表格跨页断开实现教程 #职场发展#媒体

word表格跨页断开实现教程 选中整个word表格 单击鼠标右键,选择“表格属性”选项 切换至“行”标签,找到“允许跨页断行”选项 勾选上“允许跨页断行”,单击“确定”按钮,完成! word表格跨页断开实现教程的下载地址&a…

经典神经网络(14)T5模型原理详解及其微调(文本摘要)

经典神经网络(14)T5模型原理详解及其微调(文本摘要) 2018 年,谷歌发布基于双向 Transformer 的大规模预训练语言模型 BERT,而后一系列基于 BERT 的研究工作如春笋般涌现,预训练模型也成为了业内解决 NLP 问题的标配。 2019年,谷歌…

关于Centos停更yum无法使用的解决方案

最近在使用Centos7.9系统时候,发现yum仓库无法进行安装软件包了,官方说2024年6月30日进行停更,停更后无法提供对应的软件服务。 我在使用yum安装包的时候发现确实不能使用官方服务了: CentOS停更的影响 CentOS停止更新之后&#…

【中项】系统集成项目管理工程师-第2章 信息技术发展-2.1信息技术及其发展-2.1.1计算机软硬件与2.1.2计算机网络

前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”&…

【技术追踪】TeethDreamer:从 5 张口腔照片实现三维牙齿重建(MICCAI-2024)

三维重建搞起来~ TeethDreamer:一种3D牙齿重建新框架,旨在恢复上下牙齿的形状和位置,引入大型扩散模型的先验知识和3D感知特征注意力机制,重建性能表现SOTA! 论文:TeethDreamer: 3D Teeth Reconstruction f…

VS2019+CMake+Vtk9.3.0+Qt5.14.2 配置

VS2019CMakeVtk9.3.0Qt5.14.2 配置环境 第一步 下载 基本配置 系统环境:windows11 x64 Qt:5.14.2 这是最后最新的LTS qt离线版本,后续版本都需要在线安装,同时使用qt5.14也避免版权问题。 Qt 5.14:大部分模块基于LG…