pytorch入门第一天

今天作为入门pytorch的第一天。打算记录每天学习pytorch的一些理解和笔记,以用来后面回顾。当然如果能帮到和我一样的初学者,那也是不胜荣幸。作为一名初学者,难免有些地方会现错误,欢迎各位大佬指出

预备知识

这里主要介绍pytorch的矩阵一些相关知识。矩阵总所周知是神经网络里重要内容,信号传递等都需要用到矩阵的一些知识。
这里的矩阵和numpy库中基本相似。使用基本运算符+-*/和另一个矩阵相乘都是对应元素进行运算。如果需要矩阵间的乘法(主要使用的运算)这需要使用方法a.mm(b)这里就是矩阵a和矩阵b使用矩阵乘法

torch和numpy里矩阵的一些区别

首先在numpy里矩阵一般都是直接作为数字计算,不会纠结变量类型,但是在torch中有矩阵元素类型。如果两个矩阵类型不相同进行运算操作(例如矩阵乘法)可能会导致报错。在初始化时可以直接定义类型

import torch
a=torch.tensor([1,2],dtype=float)#定义时声明类型为float

其次在torch中tensor在较高版本的torch中和自动微风变量合并了。如果需要声明此变量是自动微分变量(自动微分变量通俗理解就是可以自动求导,方便更新参数),需要在定义时声明requires_grad参数为True

a=torch.tensor([1,2],requires_grad=True,dtype=float)

自动微分变量可以用来更新神经网络权重等。例如以下代码

x = torch.linspace(0, 100,100).type(torch.FloatTensor)
rand =torch.randn(100)* 10
y = x + rand
x_train = x[: -10]
x_test = x[-10 :]
y_train = y[: -10]
y_test = y[-10 :]
learning_rate = 0.0001
for i in range(1000):# 计算在当前a、b条件下的模型预测值predictions = a.expand_as(x_train) * x_train +b.expand_as(x_train)loss = torch.mean((predictions - y_train) ** 2) #损失loss.backward() # 对损失函数进行梯度反传a.data.add_(- learning_rate * a.grad.data)   b.data.add_(- learning_rate * b.grad.data)  a.grad.data.zero_() # 清空a的梯度数值   b.grad.data.zero_() # 清空b的梯度数值

上述代码可以实现对一个一元函数更新。
这里另一个需要注意的点时一个变量被声明为自动微分变量后将损失传递后会有梯度信息,这个信息如果再次更新是通过相加更新的,也就是说如果用完梯度信息后如果不对梯度进行清空会导致梯度累加,影响模型的训练

激活函数

目前我所学的激活函数有三种,分别是:

  • sigmoid()函数,也就是logist函数,图像是
    在这里插入图片描述
  • softmax()函数,此函数就是使得结果相加等于1。目的是为了使结果为1。通常用于分类问题,使得所有输出节点值相加等于1.
  • relu()函数,这也是通常用于分类问题。图像特点是
  • 在这里插入图片描述

上述三个函数各有特点,目前学的就是在隐藏层用sigmoid激活函数,在输出层使用下面两个函数

编码处理

这里的编码处理是指神经网络输出结果的编码。对于问题通过有两种类型

  • 对数字大小不敏感,数字只是作为一个结果或者现象的表示。例如天气,1代表天气,2代表下雨。此时大小无意义
  • 对数字大小敏感,数字大小是结果的。例如重量

此时对这两种问题有两种不同措施:

  • 对于第一种问题,通常采用一种名为独热编码的方式。就是将输出层设置多个节点,一个节点代表一个类型(例如表示天气,一个节点表示晴天一个表示雨天)结果有几个类型就有几个输出节点。输出节点中值最大的就是最终答案。

  • 对于第二种问题,无需多少就是常规的方法,一个输出。但是这里通常需要使用归一化,这样可以加快训练速度。

torch自带的容器

torch自带神经网络容器(我也不知道是不是叫容器)。使用该容器可以快速构建一个神经网络。

import torch.nn as nn
model = nn.Sequential(   nn.Linear(len(diction), 10),nn.ReLU(),    nn.Linear(10, 2),  nn.LogSoftmax(dim=1),)

Linear(a,b)函数是创建一个线性层,输入a个节点,输出节点数是b
这里有四个参数。分别是输入层到达隐藏层的权重、隐藏层的激活函数、隐藏层到达输出层的权重、输出层的激活函数。
使用该网络时直接将输入传入就会返回一个输出结果

output=model(input)

数据集的划分

一般的一个数据集通常划分为三个部分。分别是训练集、校验集、测试集。
其中训练集用来训练。
校验集用来验证是否出现过拟合等现象,这样可以及时调整超参数(学习率等)。如果出现过拟合现象通常是校验集的损失曲线上升等。
验证集用来验证最终训练结果的正确率。
通常上述三个集合比例是8:1:1。
很明显只要训练集的参数用来训练调整参数,校验集和验证集都不能用来训练调整参数,否则就失去了意义。

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

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

相关文章

Redis -- 安装客户端redis-plus-plus

目录 访问reids客户端github链接 安装git 如何安装? 下载/编译、安装客户端 安装过程中可能遇到的问题 访问reids客户端github链接 GitHub - sewenew/redis-plus-plus: Redis client written in CRedis client written in C. Contribute to sewenew/redis-p…

【精选】java初识多态 子类继承父类

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏…

计算机毕业设计Python+django医院后勤服务系统flask

结合目前流行的 B/S架构,将医疗后勤服务管理的各个方面都集中到数据库中,以便于用户的需要。该平台在确保平台稳定的前提下,能够实现多功能模块的设计和应用。该平台由管理员功能模块,工作人员模块,患者模块,患者家属模…

Vue 条件渲染 双向绑定

https://www.dedao.cn/ebook/reader?id5lZOKpMGr9mgdOvYa6Ej75XRo1NML3jx810k8ZVzb2nqPpDxBeJlK4AyQ8RPQv2z v-if实现条件渲染的功能。v-model实现双向数据传输。 v-model用来进行双向绑定,当输入框中的文字变化时,其会将变化同步到绑定的变量上&#…

每期100000元,第二期Agent赛题发布!

Datawhale赛事 奖金:10万元,大赛:Agent主题 百度智能云千帆杯AI原生应用开发挑战赛第二期赛题正式发布,专属于新年的贺岁文案主题,2月8日-2月21日,冠军队伍100,000元奖金。 对我这个“I”人来说&#xff0…

vue3 之 商城项目—二级分类

二级分类功能描述 配置二级路由 准备组件模版 <script setup></script><template><div class"container "><!-- 面包屑 --><div class"bread-container"><el-breadcrumb separator">"><el-bre…

交通 | 共乘出行(下):基于图结构的动态多时空供需网络的均衡度量方法

博客&#xff1a;Alex Chin, & Tony Qin. (2023.02.25). Quantifying Efficiency in Ridesharing Marketplaces. Link: https://eng.lyft.com/quantifying-efficiency-in-ridesharing-marketplaces-affd53043db2 论文&#xff1a;Chin, Alex, and Zhiwei Qin. “A Unified…

(十八)springboot实战——spring securtity注解方式的授权流程源码解析

前言 在上一节内容中&#xff0c;我们介绍了如何在FilterSecurityInterceptor过滤器中处理用户的授权流程&#xff0c;并分析了其源码&#xff0c;spring security还提供了方法级别的授权方式&#xff0c;通过EnableMethodSecurity注解启用权限认证流程&#xff0c;只需要在方…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Stepper组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Stepper组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Stepper组件 鸿蒙&#xff08;HarmonyOS&#xff09;仅能包含子组件StepperIte…

k8s 部署java应用 基于ingress+jar包

k8 集群ingress的访问模式 先部署一个namespace 命名空间 vim namespace.yaml kind: Namespace apiVersion: v1 metadata:name: ingress-testlabels:env: ingress-test 在部署deployment deployment是pod层一层封装。可以实现多节点部署 资源分配 回滚部署等方式。 部署的…

【每日一题】LeetCode——反转链表

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Span组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Span组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Span组件 鸿蒙&#xff08;HarmonyOS&#xff09;作为Text组件的子组件&#xff0…