- 博客(37)
- 收藏
- 关注
原创 scipy.sparse.csgraph.dijkstra踩坑经验
因为上边构造出来的矩阵无论是边长度为0还是无连接都是设置为0,scipy默认邻接矩阵中权值为0的点对为无连接点对,那么结果就会变大,因此如果边集中存在长度为0时,如果是浮点数则最好设置为1e-6或者更低,反正不应该是0;如果是整数矩阵的话则根据情况进行设置了。但是有个比较细的问题就是如果用下边这个构造方法的话,当边集存在长度为0的边时,那么计算结果将会是错误的。这个函数时会根据边集构造的邻接矩阵返回最小距离矩阵,这看起来时没问题的。
2023-08-22 18:05:05
335
原创 cifar-10数据集+ResNet50
对于CIFAR-10数据集而言,图片的大小为(3,32,32),若是采用ResNet的话也不必要重新插值生成(224,224)尺寸的图像, 目前觉得好像(32,32)会更好点,而且模型体量更小点。训练轮数只有5-10轮,提交上去后有百分之73的准确率,对于一个较为少层的神经网络来说效果还是不错的,轻量级,同时如果训练轮数在多点应该也可以到达较高的准确率。可能是设置的参数与第一次设置的不同,从20-50轮次的训练中,CNN的效果也并没有什么起色,应该是已经达到了该网络的上限。对于该模型而言,训练其50轮。
2023-04-19 16:59:10
1839
2
原创 ResNet残差网络
多层Bottleneck的第一层的in_channel为上一个模块的out_channel,中间的in_channel则为多层Bottleneck的上一层out_channel,每个Bottleneck的plane为其in_channel的1/2。这里有一个涉及到梯度是否能计算的问题,如果在bn3之后又进行了一次relu操作,然后再自加等,由于relu操作是限定为原地进行的,这就会导致在反向推导时无法计算出梯度,Resnet网络是为了解决深度网络中的退化问题,即网络层数越深时,在数据集上表现的性能却越差。
2023-04-19 16:11:40
563
2
原创 深度学习神经网络常用模板
在模型定义之前,我们需要先提前导入合适的库,同时设置随机数种子(设置42比较具有深刻的含义,但我偏向一个大质数998244353)这里设置一个超参数类来保存所需要的参数,其中包含这次训练用的超小型数据集和测试集。
2023-02-02 01:11:42
563
1
原创 机器学习、深度学习中常用损失函数
上文介绍的几种损失函数都是适用于回归问题损失函数,对于分类问题,最常用的损失函数是交叉熵损失函数 Cross Entropy Loss。损失实际上是分位数损失的一个特例 — 中位数回归(这也可以解释为什么。模型假设服从高斯分布,与极大似然估计本质一致,梯度下降较。(低估) 两种情况分开来,并分别给予不同的系数。时,高估的损失比低估的损失大;时,低估的损失要比高估的损失更大,反过来当。对中位数的影响比对期望值的影响小)。这个损失函数是一个分段的函数 ,将。时,分位数损失退化为。损失,从这里可以看出。
2023-02-02 01:11:16
262
原创 Python多进程与多线程
使用安全队列Queue进行多个进程间的通信。其中由于读进程无限循环,需要手动终止。Queue的参数可以是各种类型。调用进程池类 Pool,设置进程池大小,join方法使得子进程优先结算。采用Process类创建子进程,通过join方法实现进程同步。采用生成Thread类的方式创建线程。继承Thread类,构造新类创建线程。
2023-02-02 01:11:07
93
原创 牛客练习赛96 C.小y的序列
单调栈+线段树链接:C-小y的序列_牛客练习赛96 (nowcoder.com)题意:给定序列 a ,求序列 a 的 (n+1)∗n2\frac{(n+1)*n}{2}2(n+1)∗n 个区间中有多少个区间满足区间最大值和区间最小值的差为 k 。题解:先特殊处理 k 为 0 的情况。然后从左到右枚举所有区间左端点,那么对于一个固定的左端点而言,其左端点越往左,那么区间最大值会越大,区间最小值也会越小。可以用单调栈来表达这一过程。维护两个单调栈,当加入一个新点时,也就是 r 往右移了一位,这时对于最小
2022-02-28 16:14:20
494
原创 Codeforces Round #675 (Div. 2)F. Boring Queries
区间 lcm(区间更新,单点查询可持久化线段树)链接:Problem - F - Codeforces题意:给定序列 a,求多次询问区间 [l,r][l,r][l,r] 的 lcmlcmlcm,强制在线。题解:考虑非强制在线的做法,将所有询问排序,对于区间右端点为 r 的点,处理其所有左端点 lil_{i}li,可以用线段树来维护区间乘积,然后查询各个区间的乘积即可。考虑 lcmlcmlcm 本质上是求出所有质因子的最大次幂的乘积,由于左端点越靠前区间越长,则所有质因子的次方只会只增不减,答案会越大
2022-02-22 14:41:42
199
原创 [HNOI2010]弹飞绵羊
序列建树链接:[P3203 HNOI2010]弹飞绵羊 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)题意:给定序列 a ,从 0 开始到 n-1,每次从 i 出发可以调到 i+a[i] ,多次询问和修改,询问求跳几次可以跳到大于等于 n 的位置,修改将 a[x] 改成 y 。题解:将整条序列用 LCT 建树,将所有位置后移一位,根节点为 n+1 。每次修改断边加边即可。询问时记得先把 n+1 重新置为深度最小的根节点,因为之前连边或短边时根发生了改变。然后再将 x 放到 splay
2022-02-03 21:36:11
319
原创 [CQOI2015]任务查询系统
区间包含点前k大问题链接:[P3168 CQOI2015]任务查询系统 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)题意:给定多个区间,每个区间有权值 qiq_{i}qi。多次询问经过点 x 的所有区间前 k 小权值的和。题解:把区间当作两个括号(左括号,右括号),假设题目所求的是区间经过从 x 到结束的前 k 小权值和,那么其实维护右括号即可,按序列长度为时间轴建主席树,按右括号位置插入对应前缀,每次继承上一个时间点或当前时间点建树。查大于等于 x 的点只需要最后一棵树减去第
2022-02-01 18:38:35
553
原创 前 k 大异或值问题
多区间第 k 大异或值(k较小)链接:[P5283 十二省联考 2019] 异或粽子 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)题意:给定序列 a,求 n2n^2n2 个子区间中前 k 大子区间异或和的和。题解:首先区间异或和可以用前缀异或和 O(1)O(1)O(1) 查询,那么题目转化为求前 k 大的点对异或的和。用堆来维护最大值,遍历序列求出所有固定右端点的第 1 大异或值,丢进堆里。每次取最大值,假设当前为 第5位的第 t 大值,则往堆内放入第 5 第 t+1 位最大值。注
2022-01-29 20:30:40
880
原创 [JSOI2015]字符串树
可持久化 trie链接:[P6088 JSOI2015]字符串树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)题意:给定一棵树,边权为字符串,多次询问路径 u 到 v 经过的所有边的所有字符串有多少个前缀是 w。题解:可持久化字典树维护,每次求 $u,v $ 的 lcalcalca,然后分两段查询相加即可。//#pragma GCC optimize("O3")//#pragma GCC optimize("unroll-loops")#include<iostream
2022-01-27 17:18:32
647
原创 Educational Codeforces Round 117 (Rated for Div. 2)E. Messages
题目链接题意题目主要是说有个导师想给 nnn 个学生发消息,他可以给所有学生同时发送 mmm 条消息,然后每个人有导师想发给他看的 mim_{i}mi 信息和 kik_{i}ki 次查看消息的次数,如果教授发的消息数小于 kik_{i}ki 的话,且这 mmm 条信息里有这位学生要看到的 mim_{i}mi 条消息,那么看到消息的人数就加一(因为一定看得到这条消息)。若是所发的消息数大于 kik_{i}ki ,且里面有这位学生需要看的消息时,他会随机在 mmm 条消息中选出一个 kik_{i}
2021-11-23 21:11:23
1499
1
原创 牛客挑战赛48 E 速度即转发(树套树)
链接:E-速度即转发_牛客挑战赛48 (nowcoder.com)题意:给定长度为 nnn 的序列 aaa ,共进行 mmm 次操作,有两种操作:1.给定 l,r,kl,r,kl,r,k,查询区间内满足 S(x)>=kS(x)>=kS(x)>=k 的最大 x(x∈[0,105])x(x \in [0,10^5])x(x∈[0,105]) ,S函数定义为 S(x)=∑i=lrmax(ai−x,0)S(x)=\sum_{i=l}^{r} \max(a_{i}-x,0)S(x)=∑i=lr
2021-11-09 02:23:41
209
1
原创 牛客挑战赛53:C.奇奇怪怪的魔法阵
链接:奇奇怪怪的魔法阵 (nowcoder.com)题意:给定 nnn 个点和 mmm 条边,求出所有集合的独立子集的个数,即 ∑S⊂T[S为独立集]\sum_{S \subset T}[S为独立集]∑S⊂T[S为独立集],然后将所有集合独立集的个数以哈希方式求最终答案,即 ans=∑T⊂N233∑i⊂T2i∗∑S⊂T[S为独立集]ans=\sum_{T \subset N} 233^{\sum_{i \subset T} 2^i}*\sum_{S \subset T}[S为独立集]ans=∑T⊂N2
2021-11-08 12:57:39
298
1
原创 洛谷 P4513 小白逛公园
题意对于一条序列支持两种操作,一种是单点修改,另一种是查询某个区间内的最大子段和。算法分析单一的最大子段和的复杂度是 O(n)O(n)O(n) 级别的,但是如果是多次询问下,用原来 O(n)O(n)O(n) 方法求m次那复杂度 O(nm)O(nm)O(nm) 妥妥爆炸。这时可以考虑用线段树来维护某个区间的最大子段和。具体做法对于每个树节点,需要有区间和 www,区间最大子段和 vvv,以序列左端点和右端点为开头的 lwlwlw 和 rwrwrw。前面两个很好理解,但后面两个为什么一定要以左端点或
2021-07-16 13:49:32
107
原创 洛谷 P4145 上帝造题的七分钟 2 / 花神游历各国
线段树解法本题对区间求根号,因为不存在sqrt(∑i=1nai)=∑i=1nsqrt(ai)sqrt(\sum_{i=1}^{n}a_{i})=\sum_{i=1}^{n}sqrt(a_{i})sqrt(∑i=1nai)=∑i=1nsqrt(ai) 的优秀性质,所以每一次的区间修改都要递归到叶子节点,也无法打出懒标记。因为父亲节点的值需要子节点的值来确定,无法一次性算出。可行性解释那这种递归到叶节点的修改方式复杂度岂不是爆炸?还不如不建树呢?其实不是这样的,对于一个 intintint 范围内
2021-07-16 10:42:21
134
原创 CF676C Vasya and String
思路类似朴素的尺取法,分别将序列以a,b来算。以选a来说,我们对每个b赋值1代表需要1的代价去获得1的价值,对a则代价为0,这样问题转化为一道朴素简单的尺取法。然后对b进行同样操作,取两次操作的最大值即是答案。代码#include<iostream>#include<algorithm>using namespace std;const int maxn=1e5+5;int a[maxn];int main(){ ios::sync_with_stdio(
2021-06-17 14:40:16
126
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人