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.rhkb.cn/news/331880.html

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

相关文章

浏览器下载文件被拦截删除-关闭实时保护

关键字&#xff1a; 下载、拦截、删除、杀毒、浏览器、病毒、激活、序列号、keygen、KMS、不安全、Windows Defender Win10关闭实时保护功能的方法 浏览器下载的文件被系统删除&#xff0c;下载失败 问题描述 由于系统原因&#xff0c;下载文件已被删除&#xff08;edge&…

【python】python 全国5A级景区数据采集与pyecharts可视化(源码+数据+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

vue深度选择器(:deep​)

处于 scoped 样式中的选择器如果想要做更“深度”的选择&#xff0c;也即&#xff1a;影响到子组件&#xff0c;可以使用 :deep() 这个伪类&#xff1a; <style lang"scss" scoped> .evaluation-situation-details :deep .cl-icon-arrow-right {display: none…

基于Matplotlib包实现可视化①——折线图绘制

Matplotlib 是一个用于创建静态、动画、 和交互式可视化的第三方库&#xff0c;也是我们在借助Python进行数据可视化时经常使用到的库&#xff0c;具有较强的可视化能力。 为让大家有一个更为直观的认识&#xff0c;这里我随机从其官方网页中摘取了几张图片。 按照惯例&#x…

Halcon 极坐标转换图像

一、概述 先看效果 将圆形的用极坐标转换成矩性然后再进行识别或者其他缺陷检测&#xff0c;最后在还圆到原图中 二、原理&#xff1a; halcon 圆环类缺陷检测的一种方法&#xff08;极坐标变换法&#xff09;_halcon缺口检测-CSDN博客 图像极坐标变换与反变换&#xff08;…

YOLOv8改进 | 图像去噪篇 | 单阶段盲真实图像去噪网络RIDNet辅助YOLOv8图像去噪(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是单阶段盲真实图像去噪网络RIDNet,RIDNet(Real Image Denoising with Feature Attention)是一个用于真实图像去噪的卷积神经网络(CNN),旨在解决现有去噪方法在处理真实噪声图像时性能受限的问题。通过单阶段结构和特征注意机制,…

[MySQL数据库] Java的JDBC编程(MySQL数据库基础操作完结)

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (91平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;Java …

6.Redis之String命令

1.String类型基本介绍 redis 所有的 key 都是字符串, value 的类型是存在差异的~~ 一般来说,redis 遇到乱码问题的概率更小~~ Redis 中的字符串,直接就是按照二进制数据的方式存储的. (不会做任何的编码转换【讲 mysql 的时候,知道 mysql 默认的字符集, 是拉丁文,插入中文…

VMware创建虚拟机

1.自定义 2.选择硬件兼容性 3.创建一个空白硬盘 4.选择操作系统和版本 5.设置虚拟机名称以及安装位置 6.处理器配置 7.设置虚拟机内存 8.设置网络类型 8.选择IO控制器 9.选择磁盘类型 10.创建一个新硬盘 11.设置磁盘容量以及磁盘个数 12.设置磁盘文件名称(默认) 13.点击完成创建…

IDEA快速生成类注释和方法注释的方法

1.生成类、接口、枚举、注解等文件的注释&#xff0c;不仅仅是class 2.生成方法注释的 可在方法上方空行输入/** 按enter键快速生成。生成的样式如下&#xff1a; PS:生成的返回值带一堆英文文字说明&#xff0c;感觉没必要 如果想生成比较全面的方法注释&#xff0c;如作者&…

子线程无法访问父线程中通过ThreadLocal设置的变量

一、引出结论 学习过ThreadLocal的童鞋都知道&#xff0c;在子线程中&#xff0c;是无法访问父线程通过ThreadLocal设置的变量的。 package thread;/*** author heyunlin* version 1.0*/ public class ThreadLocalExample {public static void main(String[] args) throws In…

毕设 大数据校园卡数据分析

文章目录 0 前言1 课题介绍2 数据预处理2.1 数据清洗2.2 数据规约 3 模型建立和分析3.1 不同专业、性别的学生与消费能力的关系3.2 消费时间的特征分析 4 Web系统效果展示5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设…

脑机接口习题

9-12章习题 填空题 EEG电极分为 主动电极 和 被动电极 &#xff0c;其中 被动电极 直接与放大器连接&#xff0c; 主动电极 包含一个1~10倍的前置放大。除抗混淆滤波器&#xff0c;放大系统也包含由电阻器、电容器构成的模拟滤波器&#xff0c;把信号频率内容限制在一个特定的…

【QGIS入门实战精品教程】10.7: 基于DEM的地形因子分析(坡度、坡向、粗糙度、山体阴影、耐用指数)

文章目录 一、加载dem二、山体阴影三、坡度四、坡向五、地形耐用指数六、地形位置指数七、地表粗糙度一、加载dem 二、山体阴影 方法一:符号系统 利用符号系统中的山体阴影,渲染出阴影效果。 方法二:山体阴影工具 该算法计算输入中的数字化地形模型的山体阴影。根据太阳的位…

MFC密码对话框之间数据传送实例(源码下载)

新建一个login工程项目对话框&#xff0c;主对话框IDD_LOGIN_DIALOG中一个显示按钮IDC_BUTTON1、一个密码按钮IDC_BUTTON2。添加一个密码对话框IDD_DIALOG1&#xff0c;添加类password&#xff0c;在对话框中添加一个编辑框IDC_EDIT1、一个确定按钮IDC_BUTTON1。 程序功能&…

Flask和Django的对比

文章目录 1. 简介FlaskDjango 2. 安装和创建项目FlaskDjango 3. URL路由FlaskDjango 4. 数据库支持FlaskDjango 5. 管理后台FlaskDjango 6. 总结 Flask和Django都是Python Web框架&#xff0c;它们在开发Web应用程序时都能提供强大的功能。本文将对这两个框架进行对比&#xff…

2024目前网上最火短剧机器人做法,自动搜索发剧 自动更新资源 自动分享资源

目前整个项目圈子很多的短剧机器人&#xff0c;我写的&#xff0c;自动搜索发剧&#xff0c;自动更新资源&#xff0c;自动分享资源&#xff0c;前段时间大部分做短剧的都是做的短剧分成&#xff0c;我的一个学员做的30W播放量才200块收益&#xff0c;备受启发&#xff0c;我就…

VUE3视频播放器 videojs-player/vue

简介 官网&#xff1a; https://gitcode.com/surmon-china/videojs-player/overviewhttps://github.com/surmon-china/videojs-player?tabreadme-ov-file video-player是一个基于video.js的视频播放器组件&#xff0c;它提供了丰富的功能&#xff0c;包括视频播放、暂停、快…

MySQL——优化

全文搜索最慢 EXPLAIN select * from city; 范围搜索 EXPLAIN select * from city where ID>5 and ID<20; 主键查询 EXPLAIN select * from citywhere ID5; 索引查询 EXPLAIN select * from citywhere CountryCodeNLD; 普通查询 EXPLAIN select * from city where Nam…

【yolov10】使用自己的数据集训练目标检测模型

【yolov10】使用自己的数据集训练目标检测模型 一、anaconda安装二、环境配置三、数据集制作1、labelimg的安装2、使用labelimg 四、正片1、下载yolov10源码2、数据集目录3、训练4、推理 一、anaconda安装 直接参考前一篇博客&#xff1a; https://blog.csdn.net/m0_71523511/…