pytorch学习笔记点点滴滴

记录下学习pytorch的各种概念。日积月累吧

1.CrossEntropyLoss

PyTorch-损失函数的损失函数。是log_softmax 和 nll_loss 方法的结合.

https://www.jianshu.com/p/e184663e2f8a

2.BatchNorm2d()

卷积层之后总会添加BatchNorm2d进行数据的归一化处理,这使得数据在进行Relu之前不会因为数据过大而导致网络性能的不稳定。很细节的看这个https://www.cnblogs.com/shuangcao/p/12795864.html

BN的本质原理:在网络的每一层输入的时候,又插入了一个归一化层,也就是先做一个归一化处理(归一化至:均值0、方差为1),然后再进入网络的下一层。不过文献归一化层,可不像我们想象的那么简单,它是一个可学习、有参数(γ、β)的网络层。

https://www.cnblogs.com/king-lps/p/8378561.html

3.append函数

append函数会在数组后加上相应的元素

4.pytorch的for循环

for i in range (a,b,1)作用

5.enumerate()

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

5.porch用opencv读取图片,打印出图片尺寸来

import cv2
image=cv2.imread("D:/shape.bmp")
print(image.shape[0])
print(image.shape[1])
print(image.shape[2])

结果

300
200
3

6.pytorch查看gpu是否可用 gpu数量

torch.cuda.is_available()   torch.cuda.device_count()

7.numpy数据读取 用for 循环

a = np.ones((20,20))
           for i in range(1,20):
               for j in range(1,20):
                 a[i][j] = img[i][j]
 print(a)

8.pytorch损失函数与激活函数的配对问题

BCEWithLogitsLoss = Sigmoid+BCELoss,当网络最后一层使用nn.Sigmoid时,就用BCELoss,当网络最后一层不使用nn.Sigmoid时,就用BCEWithLogitsLoss。

(BCELoss)BCEWithLogitsLoss用于单标签二分类或者多标签二分类,输出和目标的维度是(batch,C),batch是样本数量,C是类别数量,对于每一个batch的C个值,对每个值求sigmoid到0-1之间,所以每个batch的C个值之间是没有关系的,相互独立的,所以之和不一定为1。每个C值代表属于一类标签的概率。如果是单标签二分类,那输出和目标的维度是(batch,1)即可。

CrossEntropyLoss用于多类别分类,输出和目标的维度是(batch,C),batch是样本数量,C是类别数量,每一个C之间是互斥的,相互关联的,对于每一个batch的C个值,一起求每个C的softmax,所以每个batch的所有C个值之和是1,哪个值大,代表其属于哪一类。如果用于二分类,那输出和目标的维度是(batch,2)。

9.解决显卡内存溢出问题:RuntimeError: CUDA out of memory in pytorch

减少向显卡中放入的数据大小即可  batch_size

9.写路径存自己想要的图

source = 'data/test/'

路径 tpath=source + str(i)+'.png'

 cv2.imwrite(tpath, img_y.astype(np.uint8))

10.增加tensor维度。在最前面增加1维

z = z.unsqueeze(0)

11.替换文件名中的某些字符。

str = "this is string example....wow!!! this is really string";
print str.replace("is", "was");
运行结果:thwas was string example....wow!!! thwas was really string

注意str本身没被改变

11.for循环跳不同步长

for i in range(1, 10, 2):    等价于for (i=1;i<=10;i+=2

12.linux 下载了文件的安装包 怎么安装setup.py 文件

解压,然后运行 python setup.py build 再运行python setup.py install 就安装好了

13.在矩阵中查找符合某个条件的元素下标,

#print((true_masks == 2).nonzero())

14.在矩阵中查找符合某个条件的元素,将其修改为1,

 true_masks[true_masks > 1] = 1

15.优化函数选择  

Adam大法好,网上一堆写为啥他好。测试发现收敛速度确实远远快于SGD

16.实时查看GPU使用状态

watch -n 1 nvidia-smi  1s刷新一次

17.pytorch预训练方法

https://www.cnblogs.com/wmlj/p/9917827.html

https://blog.csdn.net/Vivianyzw/article/details/81061765

18.pytorch中的除法

 a = 3

b = 2 

a / b = 1.5;

a//b = 1

19.nn.Sequential(*layers)

类似于torch7中的Sequential,将每一个模块按照他们的顺序送入到nn.Sequential中 ,输入可以是一些列有顺序的模块

例如:

def __init__(self, in_channels, out_channels, num_layers):
        super().__init__()
        layers = [
            nn.Conv2d(in_channels, in_channels // 2, 3, padding=1),
            nn.BatchNorm2d(in_channels // 2),
            nn.ReLU(inplace=True),
        ]
        layers += [
            nn.Conv2d(in_channels // 2, in_channels // 2, 3, padding=1),
            nn.BatchNorm2d(in_channels // 2),
            nn.ReLU(inplace=True),
        ] * num_layers
        layers += [
            nn.Conv2d(in_channels // 2, out_channels, 3, padding=1),
            nn.BatchNorm2d(out_channels),
            nn.ReLU(inplace=True),
        ]
        self.encode = nn.Sequential(*layers)

    def forward(self, x):
        return self.encode(x)

20."block{}".format(i + 1)

"block{}".format(i + 1)  例如 i= 2 那么结果就是block3

21.nn.Sequential讲解

https://blog.csdn.net/dss_dssssd/article/details/82980222

22.x.view(x.size(0), -1)

将卷积结果x拉伸为一行。

23.pytorch torch.nn.AdaptiveAvgPool2d()用法

就是将输入的数据按照输出的尺寸进行一次自适应池化

具体例子:

>>> # target output size of 5x7 (square)

>>> m = nn.AdaptiveAvgPool2d((5,7))

>>> input = torch.randn(1, 64, 8, 9)

>>> output = m(input)

>>> prin(output.shape)

结果为:

>>> torch.Size([1, 64, 5, 7])

24.骨架提取

from skimage import morphology
skeleton =morphology.skeletonize(image)

 

25.pytorch RuntimeError: Error(s) in loading state_dict for DataParall ...导入模型报错解决方法

根本原因是torch版本不一致

model.load_state_dict(model_dict,False)  后面加上这个false就可以了 是高版本的训练结果放到低版本去用  torch版本不一致

 

26.nn.Conved是2D卷积层,而F.conv2d是2D卷积操作。

例子:

import torch
from torch.nn import functional as F
 
"""手动定义卷积核(weight)和偏置"""
w = torch.rand(16, 3, 5, 5)  # 16种3通道的5乘5卷积核
b = torch.rand(16)  # 和卷积核种类数保持一致(不同通道共用一个bias)
"""定义输入样本"""
x = torch.randn(1, 3, 28, 28)  # 1张3通道的28乘28的图像
 
"""2D卷积得到输出"""
out = F.conv2d(x, w, b, stride=1, padding=1)  # 步长为1,外加1圈padding,即上下左右各补了1圈的0,
print(out.shape)
out = F.conv2d(x, w, b, stride=2, padding=2)  # 步长为2,外加2圈padding
print(out.shape)
out = F.conv2d(x, w)  # 步长为1,默认不padding, 不够的舍弃,所以对于28*28的图片来说,算完之后变成了24*24
print(out.shape)

 

27.看当前机器下所有python路径

whereis python

28.修改python环境变量方法

https://www.cnblogs.com/crazymagic/p/9132309.html


 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值