深度学习:Pytorch最全面学习率调整策略lr_scheduler

深度学习:Pytorch最全面学习率调整策略lr_scheduler

  • lr_scheduler.LambdaLR
  • lr_scheduler.MultiplicativeLR
  • lr_scheduler.StepLR
  • lr_scheduler.MultiStepLR
  • lr_scheduler.ConstantLR
  • lr_scheduler.LinearLR
  • lr_scheduler.ExponentialLR
  • lr_scheduler.PolynomialLR
  • lr_scheduler.CosineAnnealingLR
  • lr_scheduler.SequentialLR
  • lr_scheduler.ChainedScheduler
  • lr_scheduler.CyclicLR
  • lr_scheduler.OneCycleLR
  • lr_scheduler.CosineAnnealingWarmRestarts
  • lr_scheduler.ReduceLROnPlateau

此篇博客最全面地展现了pytorch各种学习率调整策略的参数、用法以及对应的示例曲线,学习率调整的策略主要分为四大类:指定方法调整(MultiStepLR、LinearLR、CosineAnnealingLR、OneCycleLR等)、组合调整(SequentialLR和ChainedScheduler)、自定义调整(LambdaLR和MultiplicativeLR)、自适应调整(ReduceLROnPlateau)。

所有示例的参数配置:初始的学习率均为1,epoch从0开始,直到第200次结束。

lr_scheduler.LambdaLR

LambdaLR 提供了更加灵活的方式让使用者自定义衰减函数,完成特定的学习率曲线。LambdaLR通过将lambda函数的乘法因子应用到初始LR来调整学习速率。

torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=- 1, verbose=False)

参数:

  • optimizer (Optimizer) – 优化器
  • lr_lambda ( function or list ) – 一个计算乘法因子的函数,或此类函数的列表
  • last_epoch (int) – 最后一个epoch的索引,默认值:-1
  • verbose (bool) – 如果是True,则每次更新学习率会将消息打印到 stdout,默认值:False

示例:
lambda1 = lambda epoch: np.cos(epoch/max_epoch*np.pi/2)
scheduler = LambdaLR(optimizer, lr_lambda=[lambda1])
在这里插入图片描述

lr_scheduler.MultiplicativeLR

MultiplicativeLR同样可以自定义学习率的变化,与LambdaLR不同的是MultiplicativeLR通过将lambda函数的乘法因子应用到前一个epoch的LR来调整学习速率。

torch.optim.lr_scheduler.MultiplicativeLR(optimizer, lr_lambda, last_epoch=- 1, verbose=False)

参数:

  • optimizer (Optimizer) – 优化器
    lr_lambda (function or list) – A function which computes a multiplicative factor given an integer parameter epoch, or a list of such functions, one for each group in optimizer.param_groups.
  • last_epoch (int) – 最后一个epoch的索引,默认值:-1
  • verbose (bool) – 如果是True,则每次更新学习率会将消息打印到 stdout,默认值:False

示例:
lmbda = lambda epoch: 0.95
scheduler = MultiplicativeLR(optimizer, lr_lambda=lmbda)
在这里插入图片描述

lr_scheduler.StepLR

每到达一定周期(step_size),学习率乘以一个系数 gamma。

torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=- 1, verbose=False)

参数:

  • optimizer (Optimizer) – 优化器
  • step_size (int) – 学习率衰减的周期
  • gamma (float) – 学习率衰减的乘法因子,默认值:0.1
  • last_epoch (int) – 最后一个epoch的索引,默认值:-1
  • verbose (bool) – 如果是True,则每次更新学习率会将消息打印到 stdout,默认值:False

示例:scheduler = StepLR(optimizer, step_size=30, gamma=0.5)
在这里插入图片描述

lr_scheduler.MultiStepLR

StepLR 的 Step 是固定的,MultiStepLR 则可以设置每一个 step 的大小。

torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=- 1, verbose=False)

参数:
optimizer (Optimizer) – 优化器
milestones (list) – epoch索引列表,必须增加
gamma (float) – 学习率衰减的乘法因子,默认值:0.1
last_epoch (int) – 最后一个epoch的索引,默认值:-1
verbose (bool) – 如果是True,则每次更新学习率会将消息打印到 stdout,默认值:False

示例:MultiStepLR(optimizer, milestones=[30,80,150], gamma=0.5)
在这里插入图片描述

lr_scheduler.ConstantLR

在total_iters轮内将optimizer里面指定的学习率乘以factor,total_iters轮外恢复原学习率。

torch.optim.lr_scheduler.ConstantLR(optimizer, factor=0.3333333333333333, total_iters=5, last_epoch=- 1, verbose=False)

参数:

  • optimizer (Optimizer) – 优化器
  • factor (float) – 学习率衰减的常数因子,默认值:1./3.
  • total_iters (int) – 学习率衰减直到设定的epoch值,默认值:5.
  • last_epoch (int) – 最后一个epoch的索引,默认值:-1
  • verbose (bool) – 如果是True,则每次更新学习率会将消息打印到 stdout,默认值:False

示例:scheduler = ConstantLR(optimizer, factor=0.5, total_iters=50)
在这里插入图片描述

lr_scheduler.LinearLR

线性改变每个参数组的学习率,直到 epoch 达到预定义的值(total_iters)。

torch.optim.lr_scheduler.LinearLR(optimizer, start_factor=0.3333333333333333, end_factor=1.0, total_iters=5, last_epoch=- 1, verbose=False)

参数:

  • optimizer (Optimizer) – 优化器
  • start_factor (float) – 在开始时,学习率的值。默认值:1./3
  • end_factor (float) – 在结束时,学习率的值。默认值:1.0
  • total_iters (int) – 学习率衰减率变为1时的epoch值,默认值:5.
  • last_epoch (int) – 最后一个epoch的索引,默认值:-1
  • verbose (bool) – 如果是True,则每次更新学习率会将消息打印到 stdout,默认值:False

示例: scheduler = LinearLR(optimizer, start_factor=1, end_factor=1/2, total_iters=200)
在这里插入图片描述

lr_scheduler.ExponentialLR

每个时期将每个参数组的学习率衰减 gamma。

torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma, last_epoch=- 1, verbose=False)

参数:

  • optimizer (Optimizer) – 优化器
  • gamma (float) – 学习率衰减的乘法因子
  • last_epoch (int) – 最后一个epoch的索引,默认值:-1
  • verbose (bool) – 如果是True,则每次更新学习率会将消息打印到 stdout,默认值:False

示例:scheduler = ExponentialLR(optimizer, gamma=0.9)
在这里插入图片描述

lr_scheduler.PolynomialLR

多项式函数衰减学习率。

torch.optim.lr_scheduler.PolynomialLR(optimizer, total_iters=5, power=1.0, last_epoch=- 1, verbose=False)

参数:

  • optimizer (Optimizer) – 优化器
  • total_iters (int) – 衰减学习率的步数,默认值:5
  • power (int) – The power of the polynomial. Default: 1.0.
  • last_epoch (int) – 多项式的幂,默认值:1.0
  • verbose (bool) – 如果是True,则每次更新学习率会将消息打印到 stdout,默认值:False

示例:
scheduler = PolynomialLR(optimizer, total_iters=100, power=2)
在这里插入图片描述

lr_scheduler.CosineAnnealingLR

余弦学习率衰减方法相对于线性学习率衰减方法来说,可以更快地达到最佳效果,更好地保持模型的稳定性,同时也可以改善模型的泛化性能。余弦学习率衰减前期衰减慢,中期衰减快,后期衰减慢,和模型的学习有相似之处。

torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0, last_epoch=- 1, verbose=False)

参数:

  • optimizer (Optimizer) – 优化器
  • T_max (int) – 最大迭代次数
  • eta_min (float) – 最小的学习率值. Default: 0.
  • last_epoch (int) – 最后一个epoch的索引,默认值:-1
  • verbose (bool) – 如果是True,则每次更新学习率会将消息打印到 stdout,默认值:False

示例:scheduler = CosineAnnealingLR(optimizer, T_max=200, eta_min=0.5)
在这里插入图片描述

lr_scheduler.SequentialLR

可以将多种衰减方式以串联的方式进行组合。

torch.optim.lr_scheduler.SequentialLR(optimizer, schedulers, milestones, last_epoch=- 1, verbose=False)

参数:

  • optimizer (Optimizer) – 优化器
  • schedulers (list) – 学习率调整策略(scheduler)的列表
  • milestones (list) – 策略变化的epoch转折点,整数列表
  • last_epoch (int) – 最后一个epoch的索引,默认值:-1
  • verbose (bool) – 如果是True,则每次更新学习率会将消息打印到 stdout,默认值:False

示例:
scheduler1 = LinearLR(optimizer, start_factor=1, end_factor=1/2, total_iters=100)
scheduler2 = CosineAnnealingLR(optimizer, T_max=100, eta_min=0.5)
schedulers = [scheduler1, scheduler2]
milestones = [100]
scheduler = SequentialLR(optimizer, schedulers, milestones)
在这里插入图片描述

lr_scheduler.ChainedScheduler

ChainedScheduler和SequentialLR类似,也是按照顺序调用多个串联起来的学习率调整策略,不同的是ChainedScheduler里面的学习率变化是连续的。

torch.optim.lr_scheduler.ChainedScheduler(schedulers)

参数:
schedulers (list) – 学习率调整策略(scheduler)的列表

示例:
scheduler1 = ConstantLR(optimizer, factor=0.1, total_iters=10)
scheduler2 = ExponentialLR(optimizer, gamma=0.9)
scheduler = ChainedScheduler([scheduler1,scheduler2])
在这里插入图片描述

lr_scheduler.CyclicLR

CyclicLR循环地调整学习率。

torch.optim.lr_scheduler.CyclicLR(optimizer, base_lr, max_lr, step_size_up=2000, step_size_down=None, mode='triangular', gamma=1.0, scale_fn=None, scale_mode='cycle', cycle_momentum=True, base_momentum=0.8, max_momentum=0.9, last_epoch=- 1, verbose=False)

参数:

  • optimizer (Optimizer) – 优化器
  • base_lr (float or list) – 初始学习率,它是每个循环中学习率的下限值
  • max_lr (float or list) – 每个循环中学习率的上限
  • step_size_up (int) – 递增周期中的训练迭代次数,默认值:2000
  • step_size_down (int) – 递减少周期中的训练迭代次数,如果step_size_down为None,则设置为step_size_up。默认值:无
  • mode (str) – {triangular, triangular2, exp_range}其中之一,学习率递增递减变化策略,如果scale_fn不是None,则忽略此参数。默认值:“triangular”
  • gamma (float) – ‘exp_range’ 缩放函数中的常量,默认值:1.0
  • scale_fn (function) – 由 lambda 函数定义的自定义衰减策略,其中 0 <= scale_fn(x) <= 1 对于所有 x >= 0。如果指定,则忽略 ‘mode’。默认值:无
  • scale_mode (str) – {‘cycle’, ‘iterations’}. 定义是否根据cycle或iterations(自循环开始以来的训练迭代)评估scale_fn。默认值:‘cycle’
  • cycle_momentum (bool) – 如果True,动量在 ‘base_momentum’ 和 ‘max_momentum’ 之间以与学习率相反的方向循环。默认值:True
  • base_momentum (float or list) – 每次循环中的动量下限,请注意,动量的循环与学习率成反比;在一个周期的峰值,动量为“base_momentum”,学习率为“max_lr”。默认值:0.8
  • max_momentum (float or list) – 每次循环中的动量上限,请注意,动量的循环与学习率成反比;在一个周期开始时,动量为“max_momentum”,学习率为“base_lr”,默认值:0.9
  • last_epoch (int) – 最后一个epoch的索引,该参数在恢复训练时使用,由于应在每个batch之后而不是每个epoch之后调用step() ,因此该数字表示计算的batch总数,而不是计算的epoch总数。当last_epoch=-1时,调度从头开始。默认值:-1
  • verbose (bool) – 如果是True,则每次更新学习率会将消息打印到 stdout,默认值:False

示例
scheduler = CyclicLR(optimizer, base_lr=0.1, max_lr=1, step_size_up=50)
在这里插入图片描述

lr_scheduler.OneCycleLR

OneCycleLR是CyclicLR的一周期版本。

torch.optim.lr_scheduler.OneCycleLR(optimizer, max_lr, total_steps=None, epochs=None, steps_per_epoch=None, pct_start=0.3, anneal_strategy='cos', cycle_momentum=True, base_momentum=0.85, max_momentum=0.95, div_factor=25.0, final_div_factor=10000.0, three_phase=False, last_epoch=- 1, verbose=False)

参数:

  • optimizer (Optimizer) – 优化器
  • max_lr (float or list) – 最大学习率
  • total_steps (int) – 总的迭代次数,请注意,如果此处未提供值,则必须通过提供 epochs 和 steps_per_epoch 的值来推断,所以必须为total_steps 提供一个值,或者为epochs 和steps_per_epoch 提供一个值。,默认值:无
  • epochs (int) – 训练的 epoch 数,默认值:无
  • steps_per_epoch (int) – 每个epoch训练的步数,默认值:无
  • pct_start (float) – 学习率上升部分所占比例,默认值:0.3
  • anneal_strategy (str) – {‘cos’, ‘linear’} 指定退火策略:“cos”表示余弦退火,“linear”表示线性退火。默认值:‘cos’
  • cycle_momentum (bool) – 如果True,动量在 ‘base_momentum’ 和 ‘max_momentum’ 之间以与学习率相反的方向循环。默认值:True
  • base_momentum (float or list) – 每次循环中的动量下限,请注意,动量的循环与学习率成反比;在一个周期的峰值,动量为“base_momentum”,学习率为“max_lr”。默认值:0.85
  • max_momentum (float or list) – 每次循环中的动量上限,请注意,动量的循环与学习率成反比;在一个周期开始时,动量为“max_momentum”,学习率为“base_lr”,默认值:0.95
  • div_factor (float) – 通过initial_lr = max_lr/div_factor 确定初始学习率,默认值:25
  • final_div_factor (float) – 通过 min_lr = initial_lr/final_div_factor 确定最小学习率 默认值:1e4
  • three_phase (bool) – 如果True,则使用计划的第三阶段根据 ‘final_div_factor’ 消除学习率,而不是修改第二阶段(前两个阶段将关于 ‘pct_start’ 指示的步骤对称)。默认值:False
  • last_epoch (int) – 最后一个epoch的索引,该参数在恢复训练时使用,由于应在每个batch之后而不是每个epoch之后调用step() ,因此该数字表示计算的batch总数,而不是计算的epoch总数。当last_epoch=-1时,调度从头开始。默认值:-1
  • verbose (bool) – 如果是True,则每次更新学习率会将消息打印到 stdout,默认值:False

示例:
scheduler = OneCycleLR(optimizer, max_lr=1, steps_per_epoch=10, epochs=20)

在这里插入图片描述

lr_scheduler.CosineAnnealingWarmRestarts

CosineAnnealingWarmRestartsLR类似于CosineAnnealingLR,但它可以循环从初始LR重新开始LR的衰减。

torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0, T_mult=1, eta_min=0, last_epoch=- 1, verbose=False)

参数:

  • optimizer (Optimizer) – 优化器
  • T_0 (int) – 重新开始衰减的epoch次数
  • T_mult (int, optional) – T_0的递增变化值,默认值:1
  • eta_min (float, optional) – 学习率下限,默认值:0
  • last_epoch (int) – 最后一个epoch的索引,默认值:-1
  • verbose (bool) – 如果是True,则每次更新学习率会将消息打印到 stdout,默认值:False

示例:
scheduler = CosineAnnealingWarmRestarts(optimizer, T_0=30, T_mult=2)
在这里插入图片描述

lr_scheduler.ReduceLROnPlateau

当指度量指标(例如:loss、precision等)停止改进时,ReduceLROnPlateau会降低学习率。其功能是自适应调节学习率,它在step的时候会观察验证集上的loss或者准确率情况,loss当然是越低越好,准确率则是越高越好,所以使用loss作为step的参数时,mode为min,使用准确率作为参数时,mode为max。

torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10, threshold=0.0001, threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-08, verbose=False)

参数:

  • optimizer (Optimizer) – 优化器
  • mode (str) – min、max之一。在min模式下,当监测的数量停止减少时,lr将减少;在max模式下,当监控的数量停止增加时,lr将减少。默认值:“min”
  • factor (float) – 每次学习率下降的比例, new_lr = lr * factor. 默认值:0.1
  • patience (int) – patience是能够容忍的次数,当patience次后,网络性能仍未提升,则会降低学习率,默认值:10
  • threshold (float) – 测量最佳值的阈值,一般只关注相对大的性能提升,默认值:1e-4
  • threshold_mode (str) – 选择判断指标是否达最优的模式,有两种模式, rel 和 abs。
    当 threshold_mode == rel,并且 mode == max 时, dynamic_threshold = best * ( 1 +threshold );
    当 threshold_mode == rel,并且 mode == min 时, dynamic_threshold = best * ( 1 -threshold );
    当 threshold_mode == abs,并且 mode== max 时, dynamic_threshold = best + threshold ;
    当 threshold_mode == rel,并且 mode == max 时, dynamic_threshold = best - threshold;
  • cooldown (int) – 冷却时间,当调整学习率之后,让学习率调整策略保持不变,让模型再训练一定epoch后再重启监测模式。默认值:0
  • min_lr (float or list) – 最小学习率,默认值:0
  • eps (float) – lr 的最小衰减。如果新旧lr之差小于eps,则忽略更新,默认值:1e-8
  • verbose (bool) – 如果是True,则每次更新学习率会将消息打印到 stdout,默认值:False

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【六大锁策略-各种锁的对比-Java中的Synchronized锁和ReentrantLock锁的特点分析-以及加锁的合适时机】

系列文章目录 文章目录 系列文章目录前言一、六大"有锁策略"1. 乐观锁——悲观锁2. 轻量级锁——重量级锁3. 自旋锁——挂起等待锁4. 互斥锁——读写锁5. 可重入锁——不可重入锁6. 公平锁——非公平锁 二、Synchronized——ReentrantLockSynchronized的特点&#xf…

【C语言数据结构】模拟·顺序表·总项目实现

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

leetcode 376. 摆动序列

2023.7.28 本题思路是定义一个 direct变量记录上一次摆动是上坡还是下坡 。 然后在一个for循环中循环判断当前摆动和上一次摆动是否一致&#xff0c;如果不一致则视为一次摆动。 如果前后元素值相等得话&#xff0c;直接continue进入下一次循环。 下面看代码&#xff1a; clas…

leaftjs实现全国温度降水气压风速等值面风场洋流效果

实现内容 数据爬取、地图marker聚合、鼠标移动显示pop&#xff0c;风场&#xff0c;洋流&#xff0c;温度等值面、降水等值面、气压等值面、风速等值面&#xff0c;洋流方向、洋流流速展示、风场方向、风场风速展示&#xff0c;后期扩展小时预报&#xff0c;分钟预报、7天预报…

Matplotlib_概述_绘制图象

⛳绘制基础 在使用 Matplotlib 绘制图形时&#xff0c;其中有两个最为常用的场景。一个是画点&#xff0c;一个是画线。 pyplot 基本方法的使用如下表所示 方法名说明title()设置图表的名称xlabel()设置 x 轴名称ylabel()设置 y 轴名称xticks(x, ticks, rotation)设置 x 轴的…

(el-radio)操作:Element-plus 中 Radio 单选框改成垂直排列的样式操作与使用

Ⅰ、Element-plus 提供的Radio单选框组件与想要目标情况的对比&#xff1a; 1、Element-plus 提供 Radio 组件情况&#xff1a; 其一、Element-ui 自提供的Radio代码情况为(示例的代码)&#xff1a; // Element-plus 自提供的代码&#xff1a; // 此时是使用了 ts 语言环境&a…

4.操作元素属性

4.1操作元素常用属性 ●通过 JS 设置/修改 标签元素属性&#xff0c;比如通过src更换图片 ●最常见的属性比如&#xff1a;href、 title、 src 等 ●语法: 对象.属性 值【示例】 // 1.获取元素 const pic document.querySelector( img ) // 2.操作元素 pic.src ./images/b…

商品库存管理系统设计与实现(Vue+SpringBoot+MySQL)

一、项目背景 当今&#xff0c;我国科技发展日新月异&#xff0c;各类企业迅速崛起&#xff0c;商品类型日益繁多&#xff0c;产品数量急剧增加&#xff0c;企业经营模式越来越多样&#xff0c;信息处理量不断加大&#xff0c;对库存管理提出了更高的要求。通过本系统&#xff…

LayUi 树形组件tree 实现懒加载模式,展开父节点时异步加载子节点数据

如题。 效果图&#xff1a; //lazy属性为true&#xff0c;点开时才加载 引用代码&#xff1a; <link href"~/Content/layui-new/css/layui.css" rel"stylesheet" /><form id"form" class"layui-form" style"margin-to…

数据库索引优化与查询优化——醍醐灌顶

索引优化与查询优化 哪些维度可以进行数据库调优 索引失效、没有充分利用到索引-一索引建立关联查询太多JOIN (设计缺陷或不得已的需求) --SQL优化服务器调优及各个参数设置 (缓冲、线程数等)–调整my.cnf数据过多–分库分表 关于数据库调优的知识点非常分散。不同的 DBMS&a…

YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)

YOLOv5&#xff1a;使用7.0版本训练自己的实例分割模型&#xff08;车辆、行人、路标、车道线等实例分割&#xff09; 前言前提条件相关介绍使用YOLOv5-7.0版本训练自己的实例分割模型YOLOv5项目官方源地址下载yolov5-7.0版源码解压目录结构 准备实例分割数据集在./data目录下&…

Rust vs Go:常用语法对比(七)

题图来自 Go vs Rust: Which will be the top pick in programming?[1] 121. UDP listen and read Listen UDP traffic on port p and read 1024 bytes into buffer b. 听端口p上的UDP流量&#xff0c;并将1024字节读入缓冲区b。 import ( "fmt" "net&qu…

vue+leaflet笔记之地图聚合

vueleaflet笔记之地图聚合 文章目录 vueleaflet笔记之地图聚合开发环境代码简介插件简介与安装使用简介 详细源码(Vue3) 本文介绍了Web端使用Leaflet开发库进行地图聚合查询的一种方法 (底图来源:中科星图)&#xff0c;结合Leaflet.markercluster插件能够快速的实现地图聚合查询…

数据库数据恢复-Syabse数据库存储页底层数据杂乱的数据恢复案例

数据库恢复环境&#xff1a; Sybase版本&#xff1a;SQL Anywhere 8.0。 数据库故障&#xff1a; 数据库所在的设备意外断电后&#xff0c;数据库无法启动。 错误提示&#xff1a; 使用Sybase Central连接后报错&#xff1a; 数据库故障分析&#xff1a; 经过北亚企安数据恢复…

内存函数讲解

&#x1f495;"痛苦难以避免&#xff0c;而磨难可以选择。"-->村上春树&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;数据在内存中的存储 内存函数就是管理内存数据的函数&#xff0c;包含于头文件<string.h>中 1.memcpy函数-->内存…

机器学习——异常检测

异常点检测(Outlier detection)&#xff0c;⼜称为离群点检测&#xff0c;是找出与预期对象的⾏为差异较⼤的对象的⼀个检测过程。这些被检测出的对象被称为异常点或者离群点。异常点&#xff08;outlier&#xff09;是⼀个数据对象&#xff0c;它明显不同于其他的数据对象。异…

soft ip与hard ip

ip分soft和hard两种&#xff0c;soft就是纯代码&#xff0c;买过来要自己综合自己pr。hard ip如mem和analog与工艺有关。 mem的lib和lef是memory compiler产生的&#xff0c;基于bitcell&#xff0c;是foundry给的。 我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起…

pyspark 笔记 cast 转换列的类型

1 不借助 pyspark.sql.types from pyspark.sql.functions import coldata [("Alice", "28"), ("Bob", "22"), ("Charlie", "30")] columns ["name", "age_str"] df spark.createDataFram…

第一章 计算机网络概述

第一章 计算机网络概述 1.1 计算机网络在信息时代的作用 1.2 因特网概述 网络分类&#xff1a; 网络&#xff1a;许多计算机连接在一起的的局域网&#xff1b; 互联网&#xff1a;internet许多网络连接在一起&#xff1b; 因特网&#xff1a;Internet 全球最大的互联网&…

15.Netty源码之EventLoop

highlight: arduino-light Netty配置主从Reactor模式 通过将NioServerSocketChannel绑定到了bossGroup。 将NioServerSocketChannel接收到请求创建的SocketChannel放入workerGroup。 将2个不同的SocketChannel绑定到2个不同的Group完成了主从 Reactor 模式。 分配NIOEventLoop的…