pytorch
python 和 pytorch基础知识
仙女修炼史
从入门到了解、到熟悉、到深入、到掌握,一步一个脚步,踏踏实实,不断进阶!
展开
-
cv2.imread默认情况下读取的是彩色图片
imread(filename, flags=None)flags是ImreadModes的类型的, 默认情况下是1enum ImreadModes{IMREAD_UNCHANGED = -1,IMREAD_GRAYSCALE = 0,IMREAD_COLOR = 1,IMREAD_ANYDEPTH = 2,IMREAD_ANYCOLOR = 4,IMREAD_LOAD_GDAL原创 2022-04-15 15:35:25 · 1800 阅读 · 0 评论 -
终于知道 pytorch怎么取数据了
1、经常使用pytorch的都知道,下面是pytorch加载自己数据的流程代码from torch.utils.data import Datasetfrom torch.utils.data import DataLoaderclass MyDataset(Dataset): def __init__(self) def __len__(self) def __getitem__(self, index)dataset = MyDataset()loader =原创 2022-02-25 17:27:38 · 1905 阅读 · 0 评论 -
softmax 和 cross_entropy之间的关系
一、理论计算softmax公式:Sj=eaj∑k=1Neak S_j = \frac{e^{a_j}}{\sum_{k=1}^Ne^{a_k}}Sj=∑k=1Neakeajcross_entropy的公式:H=−∑k=1NPKlog(Sk)H = -\sum_{k=1}^NP_Klog(S_k)H=−k=1∑NPKlog(Sk)在网络中,softmax+cross_entropy计算loss的过程如下:二、pytorch中的cross_entropypytroch 中的cross原创 2022-02-25 11:09:47 · 604 阅读 · 0 评论 -
python中repeat、tile、broadcast区别与联系
1、numpy.repeat(a, repeats, axis=None)重复数组中的元素,参数:a:输入序列repeats:每个元素重复的次数axis:要沿其重复值的轴。默认情况下,使用展开的输入数组,并返回展开的输出数组。例1:输入序列3,repeat 4倍,axis使用默认值np.repeat(3, 4)array([3, 3, 3, 3])例1:输入序列[[1,2],[3,4]],维度为2x2,因为axis使用默认值,因此将输入序列铺平,变为[1,2,3,4],维度为4x1,然后r原创 2022-01-27 10:47:57 · 679 阅读 · 0 评论 -
代码中的点点记录(积累的力量)
1、assert 使用实例assert True # 条件为 true 正常执行assert False # 条件为 false 触发异常assert 1==2, '1 不等于 2'AssertionError: 1 不等于 22、os.path.existsos.path.exists(path) 路径存在则返回True,路径损坏返回Falseos.path.lexists 路径存在则返回True,路径损坏也返回True3、format{} {}".format("原创 2022-01-21 11:00:50 · 621 阅读 · 0 评论 -
python中 list *0 原来是清空,而非所有元素变零
本来我是想生成一个长度为3的列表,然后里面的元素都置0,后来发现,列表中list*0这个操作是将list 清空。a = list(range(0, 3))print (a)[0, 1, 2]b = a * 0print (b)[]那么生成一个元素都是零的列表,应该怎么生成呢?c = 3d =[0]*cprint (d)[0, 0, 0]d =[0]*0print (d)[]python的操作还真是。。。...原创 2022-01-09 20:54:12 · 982 阅读 · 0 评论 -
numpy 中 reshape 和 repeat结合使用
a = np.array([[324, 277], [415, 282], [478, 132]])print (a)print (a.shape)[[324 277] [415 282] [478 132]](3, 2) A = a.shape[0]b = a.reshape(A, 1, 2)print (b)[[[324 277]] [[415 282]] [[478 132]]]B=5c = b.repeat(B, axis=1)print (c)[[[324原创 2021-12-22 14:34:25 · 524 阅读 · 0 评论 -
彻底理解Python中的yield
阅读别人的python源码时碰到了这个yield这个关键字,各种搜索终于搞懂了,在此做一下总结:1、通常的for…in…循环中,in后面是一个数组,这个数组就是一个可迭代对象,类似的还有链表,字符串,文件。它可以是mylist= [1, 2, 3],也可以是mylist = [x*x for x in range(3)]。 它的缺陷是所有数据都在内存中,如果有海量数据的话将会非常耗内存。2、生成器是可以迭代的,但只可以读取它一次。因为用的时候才生成。比如 mygenerator = (x*x for转载 2021-09-26 22:52:21 · 9543 阅读 · 0 评论 -
Runtime error: expected scalar type Float but found Double
Runtime error: expected scalar type Float but found Double使用pytorch 训练网络的时候,遇到了这个错误,我也是一脸蒙逼,后来把输入到网络里面的数据流给打印出来,发现我的输入是:<class ‘torch.Tensor’> torch.Size([128, 4]) torch.float64<class ‘torch.Tensor’> torch.Size([128]) torch.int64明明是float64原创 2021-08-27 17:30:23 · 6319 阅读 · 0 评论 -
torch.optim 之如何使用优化器optimizer
torch.optim模块包含了不同的优化器,支持大多数常用的优化算法,接口很通用。torch.optim创建一个优化器实体,保存当前model的状态,并且通过计算的梯度更新参数。创建时需要传给torch.optim一个包含model参数的迭代器,然后给该优化器指定learning rate、weight decaly等参数。(需要注意的:如果使用GPU,optimizers的创建需要model.cuda()之后)1、SGD优化器函数原型这里params可以是字典类型的,或是模型参数迭代器函数原型d原创 2021-01-08 11:29:04 · 2422 阅读 · 6 评论 -
pytorch repeat的用法
Tensor.repeat(sizes) → Tensor在具体的维度上重复tentor,废话不多说,直接上例子输入tentorx = torch.tensor([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])print (x)print (x.shape)tensor([[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12]])torch.Size([3, 4])原创 2021-08-07 11:30:46 · 639 阅读 · 0 评论 -
torch.nn.module之self._modules,module()以及children()的区别与联系
一、区别1、children() → Iterator[torch.nn.modules.module.Module],是nn.Module类的成员函数,返回当前children模块的迭代器; modules() → Iterator[torch.nn.modules.module.Module],是nn.Module类的成员函数,返回所有模块的迭代器; self.modules是nn.Module类的成员变量,字典类型,用来保存网络中所有的children模块,以该children的name为k原创 2021-01-08 17:58:28 · 4456 阅读 · 0 评论 -
pytorch中的广播机制(来自官方文档)
如果PyTorch操作支持广播,则其Tensor参数可以自动扩展为相等大小(无需复制数据)如果满足以下规则,则两个张量是“可广播的”:1、每个张量具有至少一个维度。2、从尾随尺寸开始迭代尺寸时,尺寸要么相等,要么其中之一为1,或者不存在其中之一。...原创 2020-09-03 12:22:49 · 1534 阅读 · 0 评论 -
pytorch repeat、expand、None
一、expand()返回当前张量在某维扩展更大后的张量。扩展(expand)张量不会分配新的内存,只是在存在的张量上创建一个新的视图(view),一个大小(size)等于1的维度扩展到更大的尺寸。x = torch.tensor([1, 2, 3])>> x.expand(2, 3)tensor([[1, 2, 3], [1, 2, 3]])二、repeat()沿着特定的维度重复这个张量,和expand()不同的是,这个函数拷贝张量的数据。import torch原创 2020-09-02 11:03:17 · 365 阅读 · 0 评论 -
F.smooth_l1_loss, F.cross_entropy ,F.binary_cross_entropy 计算细节的探究
def smooth_l1_loss(a, b): loss_part1 = torch.abs(a - b) loss_part2 = loss_part1 ** 2 loss_part2 = loss_part2 * 0.50 loss2 = torch.where(loss_part1 >= 1, loss_part1 - 0.5, loss_part2...原创 2020-03-27 16:22:05 · 4222 阅读 · 0 评论 -
torch.optim 之如何调整学习率lr_scheduler
torch.optim.lr_scheduler模块提供了一些根据epoch训练次数来调整学习率(learning rate)的方法。学习率的调整应该是在优化器更新之后。常见的学习率调整策略有几种:1、LambdaLR将每个参数组的学习率设置为初始lr与更定函数的乘积#函数原型torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1, verbose=False)#使用方法lambda1 = lambda epoc原创 2021-01-08 15:12:58 · 7470 阅读 · 0 评论 -
torchvision.models之实现一个通用接口调用各种classifier
使用pytorch的童鞋们应该对torchvision很熟悉了,其中的torchvision.models支持的大部分的分类器,主要是alexnet、resnet、vgg 、inception、densenet、googlenet、mobilenet、shufflenetv2,但是在使用时,需要根据自己的类别数,修改最后一层的输出个数,由于这些网络的最后一层的实现有些不同,因此不能直接使用model.fc,model.classifer等来修改,因此我写了一个简单的通用接口,不管是哪种网络,只要传入名字和原创 2021-01-11 18:28:55 · 1204 阅读 · 0 评论 -
numpy中concatenate、stack、hstack、vstack、dstack区别与联系
1、numpy.concatenate((a1, a2, …), axis=0, out=None, dtype=None, casting=“same_kind”)Join a sequence of arrays along an existing axis.沿某个存在的轴方向连接序列参数:a1、a2:需要连接的序列,两个序列除了axis的方向,其他尺寸要相同axis:默认是0例1:a的size是2x2,b的szie是1x2,在axis=0的轴上连接序列(这个时候,axis=1原创 2021-07-30 21:15:05 · 1366 阅读 · 1 评论 -
np.random.choice 来自官方文档
np.random.choice(a, size=None, replace=True, p=None)从给定的一维阵列生成随机样本例1:从np.arange(5)中生成3个均匀的随机样本np.random.choice(5, 3)array([0, 3, 4]) # random#This is equivalent to np.random.randint(0,5,3)例2:从np.arange(5)中生成3个非均匀的随机样本np.random.choice(5, 3, p=[0.1,原创 2021-07-29 13:45:11 · 136 阅读 · 0 评论 -
python splitext()函数 作用是分离文件名与扩展名,返回一个元组
import osprint(os.path.splitext('a_3.py'))('a_3', '.py')原创 2020-08-17 10:31:32 · 426 阅读 · 0 评论 -
python numpy.clip限制数组最大值和最小值
pytorch和python有很多接口不是很熟悉,直接影响了阅读代码的速度,因此这里把一些遇到的接口的用法记录下来,方便下次直接快速的查找。文章目录1、numpy.clip(a, a_min, a_max, out=None) 限制数组最大值和最小值1、numpy.clip(a, a_min, a_max, out=None) 限制数组最大值和最小值a = np.arange(10)print (a) [0 1 2 3 4 5 6 7 8 9]b = np.clip(a, 1, 8)pr原创 2020-07-10 10:49:11 · 5724 阅读 · 0 评论 -
python中的*和**的作用
python中的 * 和 ** ,能够让函数支持任意数量的参数,它们在函数定义和调用中,有着不同的目的。一、 打包参数* 的作用:在函数定义中,收集所有位置参数到一个新的元组,并将整个元组赋值给变量argsdef f(*tup1): # * 在函数定义中使用 print(tup1)f() 结果:()f(1) 结果:(1,)f(1, 2, 3, 4) 结果:(1, 2, 3, 4)** 的作用:在函数定义中,收集关键字参数到一个新的字典,并将整个字典赋值给变量kwargs原创 2021-01-13 16:38:32 · 830 阅读 · 0 评论 -
np.random.permutation 来自官方文档
random.permutation(x):随机排列序列如果x是整数,则随机置换np.arange(x),如果x是一个多维数组,它只会沿着它的第一个索引洗牌。例1:对0到10 的数据进行随机排序np.random.permutation(10)array([1, 7, 4, 3, 0, 9, 2, 5, 8, 6]) # random例2:对一维数组进行随机排序np.random.permutation([1, 4, 9, 12, 15])array([15, 1, 9, 4, 12]原创 2021-07-29 13:31:51 · 367 阅读 · 0 评论