魔改交叉熵
在之前的这篇文章中,我们介绍了PyTorch中的交叉熵损失函数的具体使用方法(传送门),并举了大量的栗子进行解释。
在此基础上,就可以尝试对交叉熵进行魔改啦~
CrossEntropyLoss到底做了什么?
吃瓜群众:那说一下魔改的具体内容呗…
别着急,在开始魔改之前,需要花些篇幅介绍下在PyTorch中的CrossEntropyLoss内部所做的事情。这是官方给出的关于CrossEntropyLoss的维度说明。简而言之,分为两种情况:
网络的输出shape为[N,C],对应的真实类别标签维度就得是[N];
网络的输出shape为[N,C,d1,d2,...],对应的真实类别标签维度就得是[N,d1,d2,...];
对于第一种情况,我们在这篇文章(传送门)的最后已经讲过,本文将以第二种形式的数据进行举例说明。
来看一下贯穿本文的一个栗子:
假设网络的输出output的shape为[1,3,256,256],其中1代表batchsize,3代表这是个三分类问题,后面的两个256可以看作是一张256*256的图片的高(height)和宽(width),也就是说,总共有256*2 ...
那些年,我们一起实现的交叉熵
最近在做交叉熵的魔改,所以需要好好了解下交叉熵,遂有此文。
关于交叉熵的定义请自行百度,相信点进来的你对其基本概念不陌生。
本文将结合PyTorch,介绍离散形式的交叉熵在二分类以及多分类中的应用。注意,本文出现的二分类交叉熵和多分类交叉熵,本质上都是一个东西,二分类交叉熵可以看作是多分类交叉熵的一个特例,只不过在PyTorch中对应方法的实现方式不同(不同之处将在正文详细讲解)。
好了,废话少叙,正文开始~
二分类交叉熵$$L=-\frac1N \sum_{i=1}^{N}[y_ilog(p_i)+(1-y_i)log(1-p_i)]$$其中,$N$是总样本数,$y_i$是第$i$个样本的所属类别,$p_i$是第$i$个样本的预测值,一般来说,它是一个概率值。
上栗子:
.
$y_i$
$p_i$
第1个样本
1
0.8
第1个样本
0
0.2
第1个样本
0
0.4
按照上面的公式,交叉熵计算如下:$$L=\frac13[(1*log0.8+(1-1)log(1-0.8))+(0log0.2+(1-0)log(1-0.2))+(0log0.4+(1-0)*l ...
1小时快速入门PyTorch
12#二话不说,先把包导入进来~import torch
tensor初始化123#定义一个tensormy_tensor=torch.tensor([[1,2,3],[4,5,6]])print(my_tensor)
tensor([[1, 2, 3],
[4, 5, 6]])
123#指定tensor的数据类型my_tensor=torch.tensor([[1,2,3],[4,5,6]],dtype=torch.float32)print(my_tensor)
tensor([[1., 2., 3.],
[4., 5., 6.]])
123#指定devicemy_tensor=torch.tensor([[1,2,3],[4,5,6]],dtype=torch.float32,device='cuda')print(my_tensor)
tensor([[1., 2., 3.],
[4., 5., 6.]], device='cuda:0')
123#如果有gpu则使用gpu,此时d ...
含码量为零--醒醒,你的模型或许是错的
进化,进化这个社会充满了模型。
按照达尔文的进化论,从毫不起眼的微生物到如今世间万物的演变,都是在不断地优胜劣汰的追逐中自发产生的,今天的一切,都是自然选择的结果,包括你我。
走过了茹毛饮血的原始时代,熬过了奴隶社会的艰辛,在两千多年的封建社会中不断发展着,冲破了近代以来帝国列强的封锁与侵略,建立了新中国。直至今日,在马克思主义与中国实际相结合的思想的正确引领下,我国开辟了中国特色社会主义道路,并在这条道路上奋勇前行。
1如何去解释其正确性?
社会本身就是一个模型。
只是在最开始的时候,模型的权重是被随机初始化的,模型根本什么都不会。无论面对任何问题,模型只能随机的给出答案,这无疑是在碰运气。
为了进一步回答这一问题,必须回到过去。
回到过去万物伊始时,诞生了许许多多不同种类的微小生命体,这些生命体在一开始面对这个世界的时候是茫然无措的,天敌,风雨,雷电,海啸,地震,它们任凭着自然力量的摆布。但是,在经历了些许后,某些生命体从中学到了某些机理,尽管我们很难解释这些机理是如何被学习到的,但这一点突破使得这些生命体进化了,有些进化出了感光系统,从而可以帮助它们防御天敌的捕食,有些进化出了可 ...
一行代码搞定文件批量重命名
在我的rgb文件夹中,含有若干张图片,先使用os.listdir来查看一下这些图片的名字:
1234path = 'rgb'all_pics=os.listdir(path)for i in all_pics: print(i)
输出图片名字:
1234567891011121314color_0000.jpgcolor_0001.jpgcolor_0002.jpgcolor_0003.jpgcolor_0004.jpgcolor_0005.jpgcolor_0006.jpgcolor_0007.jpgcolor_0008.jpgcolor_0009.jpgcolor_0010.jpgcolor_0011.jpgcolor_0012.jpg...
现在,我希望将这些图片的名字中的color_前缀去掉,并且将0001,0013等前面多余的0给去掉,具体来说,将0001改成1,将0013改成13,其余同理进行处理。
先观察一下原始名字的结构,拿color_0001.jpg为例:
1img='color_0001.jpg'
我们可以使用Pyth ...
一阶运动模型
最近,”蚂蚁雅黑”又火了一波,在B站搜索”蚂蚁雅黑”,映入眼帘的是这样的场景
它利用某种技术,可以让一张静态图片动起来,无论是影视人物的画像,还是活在古画里的历代皇帝,甚至动漫人物,雕塑人物,只要有一份参考视频做参考,他们就统统都能动起来,而且毫无违和感。
本文分为两部分,第一部分主要介绍上面提到的某种技术,第二部分手把手教你生成这种神奇的视频。
对于理论不感冒的小伙伴,也可以直接划到动手实践部分进行阅读。
对了,按照本文操作生成的视频已经放在文末,欢迎围观,哈哈哈~
理论讲解
整个框架由两部分组成:运动估计模块(Motion Module)和图像生成模块(Generation Module)。
用一段话来描述整个框架在做的事情:
输入的数据包括原图像(Source)和驱动视频(Driving Frame),这两部分数据被输入关键点检测器(Keypoint Detector,它是一个编解码器网络),以提取关键点(Keypoint),这里的关键点包含两部分:源图像中的关键点+驱动视频中的关键点;接着,这些关键点通过仿射变换(Affine Transformations),得到一阶运动表示 ...
Python实现10大经典排序算法
大家好,我最近在重学数据结构与算法这门课,顺手整理了10大经典排序算法的Python实现,并配有动画加以理解,建议收藏起来慢慢食用~
好了,废话少说,上干货 !
1. 冒泡排序
123456def bubbleSort(arr): for i in range(1, len(arr)): for j in range(0, len(arr)-i): if arr[j] > arr[j+1]: arr[j], arr[j + 1] = arr[j + 1], arr[j] return arr
2. 选择排序
1234567891011def selectionSort(arr): for i in range(len(arr) - 1): # 记录最小数的索引 minIndex = i for j in range(i + 1, len(arr)): if arr[j] < arr[minIndex]: ...
SinGAN
飞船驶过梵高的星空
大雁掠过夕阳,留下惊鸿一瞥
乌云蔽日,草木涌动
是不是很炫酷?
其实,比这更酷的是:仅使用一张图片便可实现以上所有效果,甚至更多。
这一切的背后,都是SinGAN的功劳。
ps:不想看原理的小伙伴可以划到本文最后一部分,直接动手实现这些好玩的操作,起飞~
SinGAN介绍
SinGAN由多个不同尺度的生成器和判别器组成,如上图所示。对于每一个尺度,都会进行一次与普通GAN训练类似的训练过程。
具体地,从下往上看:
在最开始训练时,当前尺度的生成器$G_N$接受噪声$Z_N$,输出生成图像$\widetilde{x}_N$;然后将$\widetilde{x}_N$与真实图像下采样得到的$x_N$一起输入判别器$D_N$,$D_N$负责判别输入图像是真实的还是生成的;(对应图中倒数第一行)
在第二次训练时,当前尺度的生成器$G_{N-1}$接受两个东西:噪声$Z_{N-1}$和上一阶段生成的$\widetilde{x}N$的上采样结果,输出生成图像$\widetilde{x}{N-1}$;然后将$\widetilde{x}{N-1}$与真实图像下采样得到的$x{N-1} ...
街景字符编码识别
本文属于学习帖,用于记录“街景字符编码识别”问题的 baseline 解决方案。原代码链接见文末,其中有些小的错误已更正。
赛题来源自Google街景图像中的门牌号数据集(The Street View House Numbers Dataset, SVHN),并根据一定方式采样得到比赛数据集。
训练集数据包括3W张照片,验证集数据包括1W张照片,每张照片包括颜色图像和对应的编码类别和具体位置;测试集A包括4W张照片,测试集B包括4W张照片。
本赛题需要选手识别图片中所有的字符,为了降低比赛难度,我们提供了训练集、验证集和测试集中字符的位置框。
一个比较有效的方法是先对字符做检测(使用目标检测技术),但这里仅使用baseline方案。
baseline解决方案是将其转为定长字符识别问题。
具体来说,所有字符的最大长度不超过6位,因此将不足6位的字符填充到6位。因为所有字符全部取值为0到9共10个数字,所以用10作为填补的标记,字符总长度不足6位的样本用10进行填补。
导入相关库+必要设置1234567891011121314151617181920212223import numpy ...