常见问题解决

格式化

  • On Windows   Shift + Alt + F
  • On Mac   Shift + Option + F
  • On Ubuntu   Ctrl + Shift + I

argparse

是python自带的命令行参数解析包,可以用来方便地读取命令行参数。

 

Tqdm

是一个快速,可扩展的Python进度条,可以在 Python 长循环中添加一个进度提示信息,用户只需要封装任意的迭代器 tqdm(iterator)。

 

 

查看cpu:top

查看GPU:nvidia-smi

 

 

python 安装第三方库,超时报错--Read timed out.

https://www.cnblogs.com/xiaoduc-org/p/5958973.html

pip --default-timeout=100 install -U Pillow

pip3 install -U --timeout 1000 matplotlib

 

 

安装vscode:https://blog.csdn.net/m0_37192554/article/details/83714975

退出:exit()即可退出dos到最初

打开settings.json齿轮,设置,搜json,在json中设置,

打开cmd :win+r 

进入目录:cd\+目录    二级cd+目录

关于python中conda环境的激活问题:输入命令 conda env list

base后面即为安装的路径,首先输入 activate+你的路径 出现base说明已经进入环境,在输入conda activate base

https://blog.csdn.net/oy_1024/article/details/100413699

Anaconda下的TypeError:LoadLibrary() argument1 must be str, not None问题。

输入conda.bat activate再进行其他操作即可    会成为(base)c:。。

https://blog.csdn.net/AI414010/article/details/100011008

 

unused import statement解决方法 :

 file下有invalidate caches/restart选项,点击即可。

python数组加法:

aaa = array([20, 30, 40, 50])+(1,)

aaa=[21, 31, 41, 51]

arange

nd1 = np.arange(5)#array([0, 1, 2, 3, 4])

nd2 = np.arange(1,5)#array([1, 2, 3, 4])

nd3 = np.arange(1,5,2)#nd3 = np.arange(1,5,2)

data.ravel():扁平化

将多维数组转换为一维数组

random_split:

def randomSplit(weights: Array[Double], seed: Long = Utils.random.nextLong): Array[RDD[T]]  该函数根据weights权重,将一个RDD切分成多个RDD

 

DataLoader:

dataset(Dataset): 传入的数据集     batch_size(int, optional): 每个batch有多少个样本     shuffle(bool, optional): 在每个epoch开始的时候,对数据进行重新排序     sampler(Sampler, optional): 自定义从数据集中取样本的策略,如果指定这个参数,那么shuffle必须为False     batch_sampler(Sampler, optional): 与sampler类似,但是一次只返回一个batch的indices(索引),需要注意的是,一旦指定了这个参数,那么batch_size,shuffle,sampler,drop_last就不能再制定了(互斥——Mutually exclusive)     num_workers (int, optional): 这个参数决定了有几个进程来处理data loading。0意味着所有的数据都会被load进主进程。(默认为0)     collate_fn (callable, optional): 将一个list的sample组成一个mini-batch的函数     pin_memory (bool, optional): 如果设置为True,那么data loader将会在返回它们之前,将tensors拷贝到CUDA中的固定内存(CUDA pinned memory)中.      drop_last (bool, optional): 如果设置为True:这个是对最后的未完成的batch来说的,比如你的batch_size设置为64,而一个epoch只有100个样本,那么训练的时候后面的36个就被扔掉了…     如果为False(默认),那么会继续正常执行,只是最后的batch_size会小一点。      timeout(numeric, optional): 如果是正数,表明等待从worker进程中收集一个batch等待的时间,若超出设定的时间还没有收集到,那就不收集这个内容了。这个numeric应总是大于等于0。默认为0

for in:

循环结构(for-in)  说明:

也是循环结构的一种,经常用于遍历字符串、列表,元组,字典等  格式:

 for x in y:     循环体 执行流程:x依次表示y中的一个元素,遍历完所有元素循环结束

python类:

https://blog.csdn.net/qq_35732147/article/details/83084774

__init__()是构造方法,开头和末尾各有两个下划线,这是一种约定,用于避免默认方法与普通方法发生名称冲突。      Python调用这个__init__()方法来创建Dog实例时,将自动传入实参self。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。

继承:

定义子类时,必须在括号内指定父类的名称。      子类的方法__init__()接受创建Car实例所需的信息。      super()是一个特殊函数,帮助Python将父类和子类关联起来,让Python调用ElectricCar的父类的方法__init__(),让ElectricCar实例包含父类的所有属性。      另外,上面还为子类添加了新属性battery_size。

这里重写了父类的get_descriptive_name()方法,所以子类调用该方法时,Python将忽略Car类中的get_descriptive_name()方法。

导入单个类

from car import Car # 从car.py文件中导入Car类

从一个模块中导入多个类

from car import Car, ElectricCar    # 从car.py文件中导入Car类和ElectricCar类

导入模块中的所有类

from car import *    # 导入car.py文件中的所有类
 

默认参数函数:
def pow(x, n = 2):    

    return r

print(pow(5)) # output: 25 第二个参数默认了。

pow(5, n==3) #不默认

SDG:

要使用torch.optim,您必须构造一个optimizer对象。这个对象能保存当前的参数状态并且基于计算梯度更新参数。

要构造一个Optimizer,你必须给它一个包含参数(必须都是Variable对象)进行优化。然后,您可以指定optimizer的参数选项,比如学习率,权重衰减等。

SGD是最基础的优化方法,普通的训练方法, 需要重复不断的把整套数据放入神经网络NN中训练, 这样消耗的计算资源会很大.当我们使用SGD会把数据拆分后再分批不断放入 NN 中计算. 每次使用批数据, 虽然不能反映整体数据的情况, 不过却很大程度上加速了 NN 的训练过程, 而且也不会丢失太多准确率.

首先sgd的参数有三个,1)opfunc;2)x;3)config;4)state  1)opfunc&x:第一个参数opfunc是一个求cost function以及cost function针对于权重的导数的函数,而这个函数的参数就是sgd的第二个参数x了。

2)config:第三个参数是一些配置变量,用来优化梯度下降用的,为了防止求得的最优解是局部最优解而不是全局最优解。 

3)state:第四个变量state,个人认为最有用的就是state.evalCounter,因为它与学习速率有关,下文会有说明。

https://blog.csdn.net/qq_34690929/article/details/79932416

to.(device):

mytensor = my_tensor.to(device)  这行代码的意思是将所有最开始读取数据时的tensor变量copy一份到device所指定的GPU上去,之后的运算都在GPU上进行。

 

Tensor总结  

(1)Tensor 和 Numpy都是矩阵,区别是前者可以在GPU上运行,后者只能在CPU上;  

(2)Tensor和Numpy互相转化很方便,类型也比较兼容  

(3)Tensor可以直接通过print显示数据类型,而Numpy不可以

https://blog.csdn.net/byron123456sfsfsfa/article/details/90609758

numpy.argmin:

表示最小值在数组中所在的位置

若添加axis这个参数-----求在行或者列方向上的最小值索引  

axis=0 表示列方向上的最小值索引,axis=1表示行方向的最小值索引

numpy.mod(x1, x2):

相当于Python模运算符``x1%x2``,并且与除数x2具有相同的符号。

backward():

https://blog.csdn.net/douhaoexia/article/details/78821428

 

optimizer:

其主要起到的作用就是进行权重的更新,如下:

https://blog.csdn.net/yangdashi888/article/details/84314695

 

#BatchNorm2d

最常用于卷积网络中(防止梯度消失或爆炸),设置的参数就是卷积的输出通道数

https://blog.csdn.net/jiugedexiaodi/article/details/90812412

 

逆卷积的详细解释ConvTranspose2d(fractionally-strided convolutions)

1.首先先定义进行卷积的参数:  输入特征图为高宽一样的Hin*Hin大小的x 卷积核大小kernel_size

步长stride padding填充数(填充0)

输出特征图为Hout*Hout大小的y

计算式子为:  Hout =  floor( Hin + 2*padding - kernel_size / stride) + 1

 

m = nn.ReLU(inplace=True):

#inplace为True,将会改变输入的数据 ,否则不会改变原输入,只会产生新的输出

 

argparse模块

argparse是python用于解析命令行参数和选项的标准模块

https://blog.csdn.net/chengxuyuanyonghu/article/details/59716405

PyYaml

读取数据

os.path.join()

函数用于路径拼接文件路径。

SummaryWriter

用自动生成的文件名创建writer3 object

 Augmentations

通过平移, 翻转, 加噪声等方法从已有数据中创造出一批"新"的数据.也就是Data Augmentation

 

BrokenPipeError: [Errno 32] Broken pipe

错误是由于:写了多线程读取,

trainloader = t.utils.data.DataLoader(

    trainset,

    batch_size=4,

    shuffle=False,

    num_workers=2)

是这样的,你刚刚应该是直接按f5运行的

但是vscode虽然强大,也不太支持多线程情况下的调试,而num_workers的意义是数据读取是使用多线程

2就是双线程

如果你直接运行而不调试(比如shift+F5,或者命令行运行这个python文件等等),多线程是完全没问题的

 

Normalize

transforms.Normalize()

给定均值:(R,G,B) 方差:(R,G,B),将会把Tensor正则化。即:Normalized_image=(image-mean)/std

transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))

t.utils.data.DataLoader

 

trainloader = t.utils.data.DataLoader(

    trainset,

    batch_size=4,

    shuffle=False,

    num_workers=0)

dataset:包含所有数据的数据集  batch_size :每一小组所包含数据的数量  Shuffle : 是否打乱数据位置,当为Ture时打乱数据,全部抛出数据后再次dataloader时重新打乱。  sampler : 自定义从数据集中采样的策略,如果制定了采样策略,shuffle则必须为False.  Batch_sampler:和sampler一样,但是每次返回一组的索引,和batch_size, shuffle, sampler, drop_last 互斥。  num_workers : 使用线程的数量,当为0时数据直接加载到主程序,默认为0。  collate_fn:不太了解  pin_memory:s 是一个布尔类型,为T时将会把数据在返回前先复制到CUDA的固定内存中  drop_last:布尔类型,为T时将会把最后不足batch_size的数据丢掉,为F将会把剩余的数据作为最后一小组。  timeout:默认为0。当为正数的时候,这个数值为时间上限,每次取一个batch超过这个值的时候会报错。此参数必须为正数。  worker_init_fn:和进程有关系,暂时用不到

next(iterator[, default])     iterator -- 可迭代对象 default -- 可选,

dataiter = iter(trainloader)

images, labels = dataiter.next()

make_grid

的作用是将若干幅图像拼成一幅图像。其中padding的作用就是子图像与子图像之间的pad有多宽

show = ToPILImage()

img1=show(tv.utils.make_grid((images+1)/2)).resize((400,100))

img1.show()

super() 函数是用于调用父类(超类)的一个方法。

super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。

super(Student,self).__init__() 这是对继承自父类的属性进行初始化。而且是用父类的初始化方法来初始化继承的属性。 也就是说,子类继承了父类的所有属性和方法,父类属性自然会用父类方法来进行初始化。 当然,如果初始化的逻辑与父类的不同,不使用父类的方法,自己重新初始化也是可以的。

 torch.nn.Linear(in_features,out_features,bias = True )[来源]  

对传入数据应用线性变换:y = A x+ b    

参数:  in_features - 每个输入样本的大小  

out_features - 每个输出样本的大小

 bias - 如果设置为False,则图层不会学习附加偏差。

默认值:True

nn.Conv2d(self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True))
参数:
  in_channel: 输入数据的通道数,例RGB图片通道数为3;
  out_channel: 输出数据的通道数,这个根据模型调整;
  kennel_size: 卷积核大小,可以是int,或tuple;kennel_size=2,意味着卷积大小2, kennel_size=(2,3),意味着卷积在第一维度大小为2,在第二维度大小为3;
  stride:步长,默认为1,与kennel_size类似,stride=2,意味在所有维度步长为2, stride=(2,3),意味着在第一维度步长为2,意味着在第二维度步长为3;
  padding: 零填充


pytorch中nn.ReLU和F.ReLU的区别


实际计算结果一致。不同的是nn.ReLU作为一个层结构,必须添加到nn.Module容器中才能使用,而F.ReLU则作为一个函数调用。

F.ReLU激活函数

https://www.cnblogs.com/guoyaohua/p/8727509.html?foxhandler=RssReadRenderProcessHandler

x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))  卷积-》激活-》池化

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值