pytorch学习总结

1、os.path.join()函数的功能:

root_dir = "dataset/train"
label_dir = 'ants'
path = os.path.join(root_dir,label_dir)

连接两个或更多的路径名组件
如果各组件名首字母不包含’/’,则函数会自动加上
如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃
如果最后一个组件为空,则生成的路径以一个’/'分隔符结尾

2、self()

一个函数的变量不能传递给另外一个函数中的变量,self可以把self指定的一个变量给后面函数使用,相当于指定了一个类的全局变量

3、os.listdir()

用于返回指定的文件夹包含的文件或文件夹的名字的列表

4、PIL

PIL 是 Python Image Library 的简称。PIL 是第三方库,使用之前需要先安装。

pip install pillow

PIL 库中提供了诸多用来处理图片的模块,可以对图片做类似于 PS(Photoshop) 的编辑。比如:改变图像大小、旋转图像、图像格式转换,转换颜色通道,图像增强,直方图处理,插值和滤波等等。

5、from PIL import Image出错

因为少安装了pillow和image这两个包,在pycharm的终端里输入以下代码:

pip3 install pillow -image -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

pip install scikit-image -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

6、Tensorboard

Tensorboard原本是Google TensorFlow的可视化工具,可以用于记录训练数据、评估数据、网络结构、图像等,并且可以在web上展示,对于观察神经网络的过程非常有帮助。PyTorch也推出了自己的可视化工具,一个是tensorboardX包,一个是torch.utils.tensorboard,二者的使用相差不大。

具体学习参考:详解Tensorboard及使用教程_进击的南方仔的博客-CSDN博客_tensorboard使用

7、打开logs文件的使用指令

logdir:事件文件所在文件夹名

为了防止和别人冲突,指定端口:

8、从PIL到numpy,需要在add_image()中指定shape中每一个数字/维表示的含义

否则会出错:

#指定前
writer.add_image("test",img_array,1)
#指定后
writer.add_image("test",img_array,1,dataformats='HWC')

9、torchvision中的transforms:

transform:主要是对图片进行一些变换

10、路径问题

windows系统中绝对路径中的斜杠/会被当成转义符:

解决办法:

(1)用相对路径

(2)在字符串前加r,取消转义:

11、查看括号内需要什么参数

CTRL+P

12、python中_call_的用法

相当于构造方法,是把类当作函数使用的时候定义

class Person:
    def __call__(self, name):
        print("__call__" + "Hello" + name)
    def hello(self,name):
        print("hello"+name)

person = Person()
person("zuosan")
person.hello("lisi")
person.hello()

13、compose()

compose()类会将transforms列表里面的transform操作进行遍历

compose()中的参数需要是一个列表,python中,列表的表示形式为[数据1,数据2,……]

在compose中,数据需要是transforms类型,所以得到([transforms参数1,transforms参数2,……])

14、ToTensor的使用 

# ToTensor的使用
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor",img_tensor)
writer.close()

15、Normalize

 (input-x)/ x = 2*input - 1

16、不知道返回值的时候

(1)print

(2)print(type())

(3)debug

17、遇到错误:AttributeError: 'module' object has no attribute 'conv1'

原因:init方法应该是敲错了 ,打成了int

18、"max_pool2d" not implemented for 'Long'

或:RuntimeError: mean(): input dtype should be either floating point or complex dtypes. Got Long instead.

原因:最大池化无法对Long数据类型进行实现/要求是浮点数,不能是整形的Long

解决:在input里加入:dtype=torch.float32

19、inplace

#不保留原始数据
input = -1
Relu(input,inplace=True)
Input=0

#保留原始数据,防止数据丢失
input=-1
Output=Relu(input,inplace=False)
Input=-1
Output=0

20、报错:RuntimeError: mat1 and mat2 shapes cannot be multiplied (1x49152 and 196608x10)

解决:dataloader的drop_last设置为True

21、sequential的使用

import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential


class Zuosan(nn.Module):
    def __init__(self):
        super(Zuosan, self).__init__()
        self.conv1 = Conv2d(3, 32, 5, padding=2)
        self.maxpool1 = MaxPool2d(2)
        self.conv2 = Conv2d(32, 32, 5, padding=2)
        self.maxpool2 = MaxPool2d(2)
        self.conv3 = Conv2d(32, 64, 5, padding=2)
        self.maxpool3 = MaxPool2d(2)
        self.flatten = Flatten()
        self.linear1 = Linear(1024, 64)
        self.linear2 = Linear(64, 10)
        )

    def forward(self,x):
        x = self.conv1(x)
        x = self.maxpool1(x)
        x = self.conv2(x)
        x = self.maxpool2(x)
        x = self.conv3(x)
        x = self.maxpool3(x)
        x = self.flatten(x)
        x = self.linear1(x)
        x = self.linear2(x)
        return x

zuosan = Zuosan()
print(zuosan)
input = torch.ones((64,3,32,32))
output = zuosan(input)
print(output.shape)

#简洁版
import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential


class Zuosan(nn.Module):
    def __init__(self):
        super(Zuosan, self).__init__()
        self.model1 = Sequential(
            Conv2d(3, 32, 5, padding=2),
            MaxPool2d(2),
            Conv2d(32, 32, 5, padding=2),
            MaxPool2d(2),
            Conv2d(32, 64, 5, padding=2),
            MaxPool2d(2),
            Flatten(),
            Linear(1024, 64),
            Linear(64, 10)
        )

    def forward(self,x):
        x = self.model1(x)
        return x

zuosan = Zuosan()
print(zuosan)
input = torch.ones((64,3,32,32))
output = zuosan(input)
print(output.shape)

22、epoch、iteration和batchsize的区别

reference:深度学习中的batch、epoch、iteration的含义_bboysky45的博客-CSDN博客_epoch

(1)batchsize:批大小。在深度学习中,一般采用SGD(梯度下降法)训练,即每次训练在训练集中batchsize个样本训练;

(2)iteration:1个iteration等于使用batchsize个样本训练一次;

(3)epoch:1个epoch等于使用训练集中的全部样本训练一次,通俗的讲epoch的值就是整个数据集被轮几次。

23、报错:RuntimeError: unexpected EOF, expected 309663195 more bytes. The file might be corrupted.

因为使用Pytorch下载网络模型时由于网络等的原因导致模型参数下载不完整造成的,可以去到下载模型的文件夹:.cache\torch\hub\checkpoints中将其删除,然后再重新下载,找不到.cache文件可能是文件被隐藏了,CTRL+alt+H可找到被隐藏的文件。

如果下载太慢,可以将地址复制到迅雷下载

24、报错:size mismatch, m1: [64 x 1024], m2: [4096 x 64] at ..\aten\src\TH/generic/TH

问题:输入图像大小不匹配问题 size mismatch

经过检查发现是由于在全连接层时矩阵维度大小问题,将维度64*4*4写成了64*64

25、报错:TypeError: ToTensor() takes no arguments

ToTensor没加括号 

如下:

持续更新ing……………………………………

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值