Pytorch深度学习实践笔记6(b站刘二大人)

🎬个人简介:一个全栈工程师的升级之路!
📋个人专栏:pytorch深度学习
🎀CSDN主页 发狂的小花
🌄人生秘诀:学习的本质就是极致重复!

《PyTorch深度学习实践》完结合集_哔哩哔哩_bilibili​

目录

1 Logistic Regression

2 整体流程

3 Softmax 多分类

4 交叉熵crossEntropy

5 Logistic Regression 代码


1 Logistic Regression


区别于Linear Regression,加入了激活函数,引入非线性。


一个二分类问题:
给定学习时长x,y为考试是否可以通过,通过为1,不通过为0


使用二分类激活函数sigmod,softmax多分类在只有两个分类时,也可以变成sigmoid


2 整体流程

  1. 数据准备:

  • 模型建立:

  • Loss建立



 

  • mini-Batch Loss for Binary Classification


3 Softmax 多分类

一文彻底搞懂 Softmax 函数,数学原理分析和 PyTorch 验证​



softmax就是将一些大的数字拉伸到0~1之间,而且使得大的数所占的比例更大,小的数所占的比例更小,这样如果每一个原始的数据代表score的话,将其总分控制在0~1之间,可以进一步使用交叉熵函数来计算loss。
这里Softmax会带来一些数据上溢和下溢问题,上溢问题可以减去max(y),下溢问题可以使用log(y)等手段来解决。


一个简单的softmax的例子:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <math.h>#define SIZE (4)void softMax(double *src,double *dst,const int N)
{double exp_score[N];double sum = 0.f;for (int i = 0;i < N;i++){exp_score[i] = exp(src[i]);sum += exp_score[i];}for (int i = 0;i < N;i++){dst[i] = exp_score[i] / sum; }}int main(int argc, char *argv[])
{double score[SIZE] = {2.1,2.0,0.1,3.7};double probability[SIZE] = {0.f};softMax(score,probability,SIZE);printf("Probability:[");for (int i = 0;i < SIZE;i++){printf(" %f ",probability[i]);}printf(" ]\n");return 0;
}


4 交叉熵crossEntropy


计算两个概率分布之间的差异的,由于Softmax和Sigmod都将score转化为了概率分布,因此可以将交叉熵作为损失函数来计算y_true和y_pred之间的差异。
 

softmax分类器和交叉熵损失函数




一个多分类的交叉熵例子:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <math.h>#define M (3)
#define N (4)double crossEntropy(double *y_true,double *y_pred,int m,int n)
{// 防止log(0)的情况,对预测概率分布进行微小的修正for (int i = 0;i < m;i++){for (int j = 0;j < n;j++){y_pred[i*n+j] = y_pred[i*n+j] <= 0 ? (1e-7) : (y_pred[i*n+j] > 1 ? (1) : y_pred[i*n+j]);}}double sum = 0.f;for (int i = 0;i < m;i++){for (int j = 0;j < n;j++){sum += -y_true[i*n+j] * log2(y_pred[i*n+j]);}}return (sum / (double)m);
}int main(int argc, char *argv[])
{// one-hot 编码 代表标签分类 例如: 猫 狗 鸟 猪// 真实概率分布double probability[M][N] = {{1,0,0,0},{0,1,0,0},{0,0,1,0}};// double y_pred[M][N] = {{0.7,0.2,0.05,0.05},{0,1,0,0},{0.1,0.1,0.8,0}};double y_pred[M][N] = {{0.98,0.02,0,0},{0,1,0,0},{0,0,1,0}};double loss = crossEntropy(&probability[0][0],&y_pred[0][0],M,N);printf("loss: % .6lf \n",loss);return 0;
}



5 Logistic Regression 代码

pytorch nn.BCELoss()详解​

torch.empty()和torch.Tensor.random_()的使用举例-CSDN博客​

import torch# prepare dataset
# 0 1 为分类标签
# x_data 输入 学习的时间
# y_data 输出 考试通过与否(0 or 1)
x_data = torch.Tensor([[1.0], [2.0], [3.0],[1.1],[2.1],[1.5],[2.3],[4.1]])
y_data = torch.Tensor([[0], [0], [1],[0],[0],[0],[0],[1]])class LogisticRegressionModel(torch.nn.Module):def __init__(self):super(LogisticRegressionModel, self).__init__()self.linear = torch.nn.Linear(1,1)def forward(self, x):y_pred = torch.sigmoid(self.linear(x))return y_pred
model = LogisticRegressionModel()# construct loss and optimizer
criterion = torch.nn.BCELoss(size_average = True) 
optimizer = torch.optim.Adam(model.parameters(), lr = 0.05)# training cycle forward, backward, update
for epoch in range(10000):y_pred = model(x_data)loss = criterion(y_pred, y_data)print(epoch, loss.item())optimizer.zero_grad()loss.backward()optimizer.step()if (loss < 1e-7):breakprint('w = ', model.linear.weight.item())
print('b = ', model.linear.bias.item())# test dataset
x_test = torch.Tensor([[4.0],[5.0],[1.5],[2.5],[2.9],[3.0]])
y_test = model(x_test)
print('y_pred = ', y_test.data)

🌈我的分享也就到此结束啦🌈
如果我的分享也能对你有帮助,那就太好了!
若有不足,还请大家多多指正,我们一起学习交流!
📢未来的富豪们:点赞👍→收藏⭐→关注🔍,如果能评论下就太惊喜了!
感谢大家的观看和支持!最后,☺祝愿大家每天有钱赚!!!欢迎关注、关注!

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

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

相关文章

C#记录日志

1、方法 private void Log(string LogStr) { //Trace.WriteLine(LogStr); StreamWriter sw null; try { LogStr DateTime.Now.ToLocalTime().ToString() "\n" LogStr; sw new StreamWriter("C:\\Text" DateTime.No…

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十)- JUC(6)

目录 wait , notify wait vs sleep 正确使用方法 同步保护性暂停 join的源码 Future 异步生产者/消费者模型 定义 Park & Unpark 原理 wait , notify 小故事小南需要烟才能工作&#xff0c;但它又要占这锁让别人无法进来。那么这个时候开一个waitSet相当于就是休…

一文讲解——Java多态

目录 一、什么是多态&#xff1f;二、转型向上转型向下转型 三、方法覆盖与方法重载四、绑定动态绑定静态绑定 五、理解多态 一、什么是多态&#xff1f; 多态的词组字面意思是&#xff1a; 某种事物多种形态。 但是对于我们学习Java 的程序原来说&#xff0c;就不不能简单这样…

springboot中线程池的使用

一、概念 线程池就是将多个线程对象放入一个池子里面&#xff0c;例如一个池塘&#xff0c;线程池就是这个池塘&#xff0c;池塘里面的鱼就是线程池中的多个线程对象。1. 每一个线程&#xff0c;在一段时间内只能执行一个任务。2. 线程池中的各个线程是可以重复使用的。 二、创…

2024年内外贸一体化融合发展(长沙)交易会 ​办公文具、礼品工艺品展

2024年内外贸一体化融合发展&#xff08;长沙&#xff09;交易会 办公文具、礼品工艺品展 时间&#xff1a;2024年7月12-14日 地点&#xff1a;湖南国际会展中心&#xff08;芒果馆&#xff09; 湖南省商厅 关于邀请参加2024内外贸一体化融合发展&#xff08;长沙&#xf…

Weblogic XML反序列化漏洞 [CVE-2017-10271]

漏洞环境搭建请参考 http://t.csdnimg.cn/i11e2 漏洞原理 Weblogic的wls security组件对外提供webservice服务&#xff0c;wls security组件使用了xmldecoder来解析用户传入的xml数据&#xff0c;如果用户进行xml恶意数据的构造&#xff0c;即可触发反序列化漏洞 漏洞版本 O…

簡述vue的實現原理

Vue.js 的实现原理可以概括为以下几个方面&#xff1a; 响应式系统&#xff1a; Vue 的核心是其响应式系统。当 Vue 实例被创建时&#xff0c;它会遍历 data 对象中的所有属性&#xff0c;并使用 Object.defineProperty 方法将其转换为 getter 和 setter。当 data 中的属性发生…

python:如何创建简单的流媒体服务器来播放.flv文件

要在Python中创建一个简单的流媒体服务器来播放FLV&#xff08;Flash Video&#xff09;文件&#xff0c;你通常需要一个HTTP服务器&#xff0c;该服务器能够处理对FLV文件的范围请求&#xff08;Range Requests&#xff09;&#xff0c;因为流媒体通常不是一次性下载整个文件&…

CentOS 7.9 邮箱部署——Postfix+Dovecot详细

PostfixDovecot 文章目录 PostfixDovecot资源列表基础环境一、部署DNS二、部署postfix和dovecot2.1、配置postfix2.2、配置dovecot2.3、创建邮件用户 三、发送邮件测试3.1、windows安装poxmail3.2、登录邮箱3.3、发送接收邮件 四、搭建SSL认证加密4.1、生成私钥4.2、生成公钥4.…

正则工具类

目录 1、 * 正则工具类 1.1、 * 提供验证邮箱、手机号、电话号码、身份证号码、数字等方法 1.1.1、 * 验证固定电话号码 1.1.2、 * 验证整数(正整数和负整数) 1.1.3、 * 验证整数和浮点数(正负整数和正负浮点数)

贪心算法4(c++)

过河的最短时间 题目描述 输入 在漆黑的夜里&#xff0c;N位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话&#xff0c;大家是无论如何也不敢过桥去的。不幸的是&#xff0c;N个人一共只带了一只手电筒&#xff0c;而桥窄得只够让两个人同时过&#xff0c;如果…

YOLOv8_pose预测流程-原理解析[关键点检测理论篇]

YOLOv8_seg的网络结构图在博客YOLOv8网络结构介绍_CSDN博客已经更新了,由网络结构图可以看到相对于目标检测网络,实例分割网络只是在Head层不相同,如下图所示,在每个特征层中增加了KeyPoint分支(浅绿色),通过两个卷积组和一个Conv卷积得到得到通道数为51的特征图,51表示…

window环境下QT5开发环境的搭建

1、安装visual Stusio 15 生成工具2012 2、安装Visual studio Enterprise 2017 3、Visual studio Enterprise 2017安装完成之后&#xff0c; 修改&#xff1a;选择桌面调试&#xff0c;如下&#xff1a; 4、打开QTcreator&#xff0c;选项中&#xff0c;配置编译器&#xff…

摸鱼大数据——Hive基础理论知识——Hive环境准备

Hive环境准备 1、shell脚本执行方式 方式1: sh 脚本 注意: 需要进入脚本所在目录,但脚本有没有执行权限不影响执行 方式2: ./脚本 注意: 需要进入脚本所在目录,且脚本必须有执行权限 方式3: /绝对路径/脚本 注意: 不需要进入脚本所在目录,但必须有执行…

线程池,日志

所要用到的知识点&#xff1a; 多线程的创建 生产消费模型&#xff0c; 线程锁 条件变量 代码&#xff1a; 线程池日志

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的数码管显示与单片机连接的按键的按键值的功能

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的数码管显示与单片机连接的按键的按键值应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍TM1638键盘数码…

C++面向对象程序设计 - 输入和输出

程序的输入指的是文件将数据传送给程序&#xff0c;程序的输出指的是从程序将数据传送输出文件。 C的输入和和输出包括以下三个方面&#xff1a; 对系统指定的标准设备的输入和输出&#xff0c;即从键盘输入数据&#xff0c;输出到显示器屏幕。以外存磁盘&#xff08;或光盘、…

初探 Spring Boot Starter Security:构建更安全的Spring Boot应用

引言 Spring Boot 作为 Java 生态系统下的热门框架&#xff0c;以其简洁和易上手著称。而在构建 Web 应用程序时&#xff0c;安全性始终是开发者必须重视的一个方面。Spring Boot Starter Security 为开发者提供了一个简单但功能强大的安全框架&#xff0c;使得实现身份验证和…

从动态代理角度简单理解Spring AOP

1. 概述 动态代理 是指在运行时&#xff0c;动态地创建目标类的代理对象&#xff0c;并对其中特定的方法进行拦截或增强的技术。这种技术主要用于在不修改目标类代码的情况下&#xff0c;增强目标类的功能。 在Java中&#xff0c;动态代理主要基于Java的反射机制和接口来实现…

gdc2024:Raytracing in Snowdrop技术实现与性能优化策略

在今年的GDC&#xff08;游戏开发者大会&#xff09;的Advanced Graphics Summit上&#xff0c;关于Snowdrop引擎中光线追踪技术的讨论引起了广泛关注。 一、光线追踪全局照明的实现细节 屏幕空间追踪&#xff1a; 屏幕空间追踪从相机出发&#xff0c;对屏幕上的每个像素点生成…