1. pycharm 设置anaconda环境:
  1. File -> Settings->选择左侧的project xxx
  2. 再选择打开Project Interpreter页->选择add添加解释器->添加Anaconda中Python解释器(Anaconda安装目录下的python.exe) (选择existing environment ,然后选择路径(路径可以通过在终端中输入conda info -e查看各个虚拟环境的路径,找到对应虚拟环境的python.exe选择即可))
  1. python:
  1. python中对象后加括号调用实际调用的是所属类的__call__方法
  2. python 中两个*表示打散了
  3. 装饰器由近及远执行
  4. python中的构造函数:__new__,析构函数:__del__
  5. 全局变量的使用:
i=1
def f():    
    global i
    i= 2
  1. conda重置base环境:conda list --revisions(可以看到之前的版本选择回滚到某一版本),如果重置清空,则返回0版本即可:conda install --revision 0
  2. pytorch :
  1. model设置不同模式:
  1. model.eval(),不启用 BatchNormalization 和 Dropout。此时pytorch会自动把BN和DropOut固定住,不会取平均,而是用训练好的值。不然的话,一旦test的batch_size过小,很容易就会因BN层导致模型performance损失较大
  2. model.train() :启用 BatchNormalization 和 Dropout。 在模型测试阶段使用model.train() 让model变成训练模式,此时 dropout和batch normalization的操作在训练q起到防止网络过拟合的问题。
  1. model.train(),model.eval(), with torch.no_grad():
  1. model.train():
  1. 在train模式下,dropout网络层会按照设定的参数p设置保留激活单元的概率(保留概率=p);
  2.  batchnorm层会继续计算数据的mean和var等参数并更新
  1. model.eval():
  1. 在PyTorch中进行validation时,会使用model.eval()切换到测试模式
  2. model.eval()主要用于通知dropout层和batchnorm层在train和val模式间切换。
  3. 在val模式下,dropout层会让所有的激活单元都通过,而batchnorm层会停止计算和更新mean和var,直接使用在训练阶段已经学出的mean和var值
  4. 该模式不会影响各层的gradient计算行为,即gradient计算和存储与training模式一样,只是不进行反传(backprobagation)。
  1. 使用 with torch.no_grad()
  1. 主要是用于停止autograd模块的工作,以起到加速和节省显存的作用,具体行为就是停止gradient计算,从而节省了GPU算力和显存,但是并不会影响dropout和batchnorm层的行为。
  2. 如果不在意显存大小和计算时间的话,仅仅使用model.eval()已足够得到正确的validation的结果;而with torch.no_grad()则是更进一步加速和节省gpu空间(因为不用计算和存储gradient),从而可以更快计算,也可以跑更大的batch来测试。
  1. 强行改变维度的例子:
if mel_outputs.size()[1]!=tts_seqs.size()[1]:
                b_size=tts_seqs.size()
                from torchvision.transforms import Resize 
                torch_resize = Resize([b_size[1],b_size[2]]) # 定义Resize类对象,只能指定修改最后的两个维度,可以借助transpose巧妙使用
                mel_outputs = torch_resize(mel_outputs)
                mel_outputs_postnet = torch_resize(mel_outputs_postnet)