GAN模型代码——相关包安装及函数功能说明

相应模块

import librosa
import numpy as np
import os
import pyworld
import pyworld as pw
import glob
import argparse
import shlex, subprocess
import zipfile
from datetime import datetime
from collections import OrderedDict
# OrderedDict是有序字典,“有序”是指它可以记住向字典里添加元素的顺序。
self.layers = OrderedDict()

1. librosa——音频处理库

librosa语音信号处理
音频处理库—librosa的安装与使用
安装指令:conda install -c conda-forge librosa

>>>wav, sr = librosa.load(filename, sr=None)	# librosa 音频读取函数load( ),sr采样率参数

>>>y, index = librosa.effects.trim(wav, top_db=15)     # 移除开始和结尾的静音

1.1 librosa.util.find_files

Python音频信号处理库函数librosa介绍
在这里插入图片描述


2. os——文件/目录方法

Python OS 文件/目录方法

>>>os.path.exists(path)
>>> os.makedirs(path)

2.1 os.path.basename()

用到os.path.basename(),返回path最后的文件名。若path以/或\结尾,那么就会返回空值
eg:
path=’/a/b/c/CSDN’
os.path.basename(path)=CSDN

3. pyworld——语音合成系统WORLD

了解语音合成系统WORLD(日语)(译)

4. glob——查找文件路径

glob.glob() 函数
glob.glob() 函数接受通配模式作为输入,并返回所有匹配的文件名和路径名列表

allwavs_cnt = glob.glob(f'{dataset}/*/*.wav')

5. argparse——命令行参数解析包

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

    # ArgumentParser类生成一个parser对象
    # 通过对象的add_argument函数来增加参数,这里增加了两个参数
    # 其中'--name'表示一个参数,default参数表示我们在运行命令时若没有提供参数,程序会将此值当做参数值
    # 当'-'和'--'同时出现的时候,系统默认后者为参数名,前者不是,但是在命令行输入的时候没有这个区分
import argparse

def main():
    parser = argparse.ArgumentParser(description="Demo of argparse")
    parser.add_argument('-n','--name', default=' Li ')
    parser.add_argument('-y','--year', default='20')
    args = parser.parse_args()
    print(args)
    name = args.name
    year = args.year
    print('Hello {}  {}'.format(name,year))

if __name__ == '__main__':
    main()

# 文件名为:demo.py
# 方法一,执行命令:python demo.py   # 使用默认参数
# 方法二,执行命令:python demo.py --name Zhangsan --year 30    # 传入参数
# 执行命令:python demo.py -h 可以查看帮助信息

6. shlex,subprocess——分割字符串

Python shlex 模块
shlex 模块最常用的是 split() 函数,用来分割字符串,通常与 subprocess 结合使用

>>>train_comm = shlex.split(train_comm)    # shlex 模块最常用的是 split() 函数,用来分割字符串,通常与 subprocess 结合使用
>>>subprocess.run(train_comm)      # subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。

7. zipfile——解压/压缩文件

Python 中zipFile的用法

 """
    #解压
    zfile=zipfile.ZipFile("../test.zip","r")
    zfile.extractall()
"""
with zipfile.ZipFile(zip_filepath) as zf:
    zf.extractall(dest_dir)
print("Extraction complete!")

8. datetime——日期时间

Python 日期时间datetime

9. iter 与next,以及 yield ——迭代器与生成器

迭代器有两个基本的方法:iter() 和 next()。
https://www.runoob.com/python3/python3-iterator-generator.html

>>> list=[1,2,3,4]
>>> it = iter(list)    # 创建迭代器对象
>>> print (next(it))   # 输出迭代器的下一个元素
1
>>> print (next(it))
2
>>>

10. ast

https://blog.csdn.net/ma89481508/article/details/56017697

11. torch.view(),torch.size()

PyTorch中view的用法
torch x = x.view(x.size(0),-1)的理解
在这里插入图片描述

在这里插入图片描述

import torch

a = torch.rand(2, 3)

print(a)
print(a.size(), a.size(0), a.size(1))     # size()返回tensor中元素的数量,size(0)表示第1维, size(1)表示第2维
print(a.view(6))    # 第1维6个元素
print(a.view(1, 6))     # 把原先tensor中的数据按照行优先的顺序重新定义维数,第1维1个元素,第2维6个元素

b = a.view(a.size(0), a.size(1),1,1)    # 第1维a.size(0)个元素,第2维a.size(1)个元素,第3维和第4为分别1个元素
print(b)

"""
tensor([[0.7983, 0.6932, 0.8069],
        [0.6720, 0.2980, 0.9417]])
torch.Size([2, 3]) 2 3
tensor([0.7983, 0.6932, 0.8069, 0.6720, 0.2980, 0.9417])
tensor([[0.7983, 0.6932, 0.8069, 0.6720, 0.2980, 0.9417]])
tensor([[[[0.7983]],

         [[0.6932]],

         [[0.8069]]],


        [[[0.6720]],

         [[0.2980]],

         [[0.9417]]]])
"""

12. torch.cat

Pytorch的torch.cat实例

通过 help((torch.cat)) 可以查看 cat 的用法
cat(seq,dim,out=None)
 
其中 seq表示要连接的两个序列,以元组的形式给出,例如:seq=(a,b),  a,b 为两个可以连接的序列
dim 表示以哪个维度连接,dim=0, 横向连接
                      dim=1,纵向连接
 
import torch

x0_data = torch.randn((2, 2))
print("x0_data:")
print(x0_data)

print("-----------------------------------------------------")
x1_data = torch.randn((2, 2))
print("x1_data:")
print(x1_data)

print("-----------------------------------------------------")
# dim=1
y1_data = torch.cat((x0_data, x1_data), dim=1)
print("x_data:")
print(y1_data)
print('x_data的形状:', y1_data.shape)

print("-----------------------------------------------------")
# dim=0
y1_data = torch.cat((x0_data, x1_data), dim=0)
print("x_data:")
print(y1_data)
print('x_data的形状:', y1_data.shape)

在这里插入图片描述

13. matplotlib

matplotlib subplots 调整子图间矩:

plt.subplots_adjust(left=None, bottom=None, right=None, top=None,
                wspace=None, hspace=None)
  • 参数说明:
    top、bottom、left、right:整个图距离上下左右边框的距离
    wspace、hspace:这个才是调整各个子图之间的间距
    wspace:调整子图之间的横向间距
    hspace:调整子图之间纵向间距

14. config.yaml

# config file:
---
 
blog:
  name: csdn
  id: fengbingchun
  url: https://blog.csdn.net/fengbingchun
 
commands:
  version:
  - g++ --version
  - cmake --version
 
value1: true
value2: false
 
number1: 123
number2: !!str 123

github: 
  - https://github.com/fengbingchun
  - Repositories NN_Test Face_Test
    Messy_Test CUDA_Test
 
data1: |
  There once
  was a
     short man
 
data2: >
  There once
  was a
     short man
 
date1: 2019-03-03
 
step: &id001   # defines anchor label &id001
  instrument:  Lasik 2000
  pulseEnergy: 5.4
 
step2: *id001   # refers to the first step (with anchor &id001)
 
...
  • python测试代码:
import sys
import yaml
 
def main():
	print("#### test start ####")
	f = open("config.yml")
	content = yaml.load(f)
	print(content)
	print("#### test end ####")
 
if __name__ == "__main__":
	main()
 

输出:

{'blog': {'name': 'csdn', 'id': 'fengbingchun', 'url': 'https://blog.csdn.net/fengbingchun'}, 'commands': {'version': ['g++ --version', 'cmake --version']}, 'value1': True, 'value2': False, 'number1': 123, 'number2': '123', 'github': ['https://github.com/fengbingchun', 'Repositories NN_Test Face_Test Messy_Test CUDA_Test'], 'data1': 'There once\nwas a\n   short man\n', 'data2': 'There once was a\n   short man\n', 'date1': datetime.date(2019, 3, 3), 'step': {'instrument': 'Lasik 2000', 'pulseEnergy': 5.4}, 'step2': {'instrument': 'Lasik 2000', 'pulseEnergy': 5.4}}

15. repeat()

15.1 numpy.repeat

numpy.**repeat**(a, repeats, axis=None)

功能: 将矩阵A按照给定的axis将每个元素重复repeats次数
参数: a:输入矩阵, repeats:每个元素重复的次数, axis:需要重复的维度
返回值: 输出矩阵

>>> np.repeat(3, 4)
array([3, 3, 3, 3])  #每个元素重复4次
>>> x = np.array([[1,2],[3,4]])
>>> np.repeat(x, 2)
array([1, 1, 2, 2, 3, 3, 4, 4]) #每个元素重复两次
>>> np.repeat(x, 3, axis=1)
array([[1, 1, 1, 2, 2, 2],
       [3, 3, 3, 4, 4, 4]])   #每个元素按照列重复3次
>>> np.repeat(x, [1, 2], axis=0)  
array([[1, 2],
       [3, 4],
       [3, 4]])  #第1行元素重复1次,第2行元素重复2次
15.2 numpy.repeat

PyTorch:repeat方法的使用

import torch

x0_data = torch.randn((2, 2))
print("x0_data:")
print(x0_data)
print("-----------------------------------------------------")

c_tmp = x0_data.repeat(1, 2)
print("c_tmp:")
print(c_tmp)
print(c_tmp.size())
print("-----------------------------------------------------")

c_tmp = x0_data.repeat(2, 1)
print("c_tmp:")
print(c_tmp)
print(c_tmp.size())
print("-----------------------------------------------------")

在这里插入图片描述

17. 模型训练时损失出现Nan,解决方案

  • 损失出现问题:
  • 在这里插入图片描述
  • 损失为nan的原因
  1. 学习率过大,导致
    其他原因,参考:警惕!损失Loss为Nan或者超级大的原因

  2. 解决方式
    降低学习率

18. torch.unsqueeze,unsqueeze_

参考链接

  1. torch.unsqueeze 详解
    torch.unsqueeze(input, dim, out=None)
  • **作用:**扩展维度
    返回一个新的张量,对输入的既定位置插入维度 1
import torch

print("输出:x")
x = torch.linspace(-1, 1, 5)
print(x)
print(x.dim())

print("------unsqueeze(), dim=1 ------, x → x1")
print("输出:x1")
x1 = torch.unsqueeze(x, dim=1)
print(x1)
print(x1.dim())

print("------unsqueeze(), dim=0 ------, x → x2")
print("输出:x2")
x2 = torch.unsqueeze(x, dim=0)
print(x2)
print(x2.dim())

print("------squeeze(), dim=0 ------, x2 → x3")
print("输出:x3")
x3 = torch.squeeze(x2, dim=0)
print(x3)
print(x3.dim())

print("------squeeze(), dim=1 ------, x1 → x3")
print("输出:x4")
x4 = torch.squeeze(x1, dim=1)
print(x4)
print(x4.dim())

在这里插入图片描述

  1. unsqueeze_和 unsqueeze 的区别
    unsqueeze_ 和 unsqueeze 实现一样的功能,区别在于 unsqueeze_ 是 in_place 操作,即 unsqueeze 不会对使用 unsqueeze 的 tensor 进行改变,想要获取 unsqueeze 后的值必须赋予个新值,unsqueeze_ 则会对自己改变。

19. Python中函数 eval 和 ast.literal_eval 的区别详解

一、eval 函数
Python中,如果要将字符串型的 list,tuple,dict 转变成原有的类型呢 ?

这个时候你自然会想到eval
eval函数在 Python 中做数据类型的转换还是很有用的。
它的作用就是把数据还原成它本身或者是能够转化成的数据类型。

https://blog.csdn.net/nanhuaibeian/article/details/102143356?
在这里插入图片描述


20. LabelBinarizer 标签二值化,one-hot标签,LabelBinarizer().fit(),LabelBinarizer().fit_transform()

from sklearn.preprocessing import LabelBinarizer 

speakers = ['SF1', 'SF2', 'TM1', 'TM2']
x = LabelBinarizer()
Y = LabelBinarizer().fit(speakers)
Z = LabelBinarizer().fit_transform(speakers)

对于标称型数据来说,preprocessing.LabelBinarizer是一个很好用的工具。比如可以把yes和no转化为0和1,或是把incident和normal转化为0和1。当然,对于两类以上的标签也是适用的。这里举一个简单的例子,说明将标签二值化以及其逆过程。

示例1:

from sklearn.preprocessing import LabelBinarizer
import random

# help(preprocessing.LabelBinarizer)#取消注释可以查看详细用法

# 标签矩阵
speakers = ['SF1', 'SF2', 'TM1', 'TM2']

# 将标签矩阵二值化
lb = LabelBinarizer()
# 返回标签矩阵
dummY = lb.fit_transform(speakers)
print(dummY)

# qiu-11-5: 返回一个实例对象
spk_enc = LabelBinarizer().fit(speakers)
print(spk_enc)

speaker = ['SF1', 'SF2', 'TM1', 'TM2']
target = random.choice([x for x in speakers if x != speaker])
print(target)
label_t = spk_enc.transform([target])[0]    # 调用实例对象中对应的标签
label_t2 = spk_enc.transform([target])    # 调用实例对象中对应的标签
print(label_t)
print(label_t2)

结果1:

[[1 0 0 0]
 [0 1 0 0]
 [0 0 1 0]
 [0 0 0 1]]
LabelBinarizer()
TM1
[0 0 1 0]
[[0 0 1 0]]

示例2:

# -*- coding: UTF-8 -*-
from sklearn import preprocessing
from sklearn import tree

# help(preprocessing.LabelBinarizer)#取消注释可以查看详细用法

# 特征矩阵
featureList=[[1,0],[1,1],[0,0],[0,1]]
# 标签矩阵
labelList=['yes', 'no', 'no', 'yes']
# 将标签矩阵二值化
lb = preprocessing.LabelBinarizer()
dummY=lb.fit_transform(labelList)
# print(dummY)
"""
[[1]
 [0]
 [0]
 [1]]
"""
# 模型建立和训练
clf = tree.DecisionTreeClassifier()
clf = clf.fit(featureList, dummY)
p=clf.predict([[0,1]])
print(p)	# [1]

# 逆过程
yesORno=lb.inverse_transform(p)
print(yesORno)	# ['yes']

21. pytorch中的numel函数

获取tensor中一共包含多少个元素

import torch
x = torch.randn(3,3)
print("number elements of x is ",x.numel())
y = torch.randn(3,10,5)
print("number elements of y is ",y.numel())

输出:

number elements of x is  9
number elements of y is  150

22. pytorch中优化器optimizer.param_groups[0]是什么意思

optimizer.param_groups:是长度为2的list,其中的元素是2个字典;
optimizer.param_groups[0]:长度为6的字典,包括[‘amsgrad’, ‘params’, ‘lr’, ‘betas’, ‘weight_decay’, ‘eps’]这6个参数
optimizer.param_groups[1]:好像是表示优化器的状态的一个字典

pytorch 入门 修改学习率
知识点1、访问optimizer的参数,并修改
知识点2、多个模型下修改参数
知识点3、修改指定epoch下的参数

import numpy as np
import torch
from torch import nn
import torch.nn.functional as F
from torch.autograd import Variable
from torchvision.datasets import CIFAR10
from jc_utils import resnet
from torchvision import transforms as tfs
from datetime import datetime

知识点1
optimizer.param_groups[0][‘lr’] 如果把模型分为好几块,【0】就代表第一块,一般只有一块,[‘lr’]这里是字典 通过这种方式可以访问到optimizer内部的参数,从而做到更改

net = resnet(3, 10)
optimizer = torch.optim.SGD(net.parameters(), lr=0.01, weight_decay=1e-4)
print('learning rate:{}'.format(optimizer.param_groups[0]['lr']))
print('weight decay:{}'.format(optimizer.param_groups[0]['weight_decay']))
optimizer.param_groups[0]['lr'] = 1e-5
print('learning rate:{}'.format(optimizer.param_groups[0]['lr']))

知识点2
如果有多层,可以for一下,全部修改

for param_group in optimizer.param_groups:
    param_group['lr'] = 1e-1

知识点3
修改指定epoch的学习率pytorch 入门 修改学习率


23. numpy.asarray

NumPy 从已有的数组创建数组
在这里插入图片描述
在这里插入图片描述


24. torch.randperm()

torch.randperm(n):将0~n-1(包括0和n-1)随机打乱后获得的数字序列,函数名是random permutation缩写

实例:

import torch

label = torch.randperm(10)
print(label)		# tensor([0, 9, 4, 5, 1, 3, 6, 8, 2, 7])

25. torch关于获取损失值,loss,loss.data,loss.datach(),loss.item()

import torch
from torch.autograd import Variable

loss_f = torch.nn.MSELoss()

x = Variable(torch.randn(100, 100), requires_grad=True)
y = Variable(torch.randn(100, 100), requires_grad=True)

loss = loss_f(x, y)
loss.backward()
print("loss: ", loss)
print("loss.data: ", loss.data)
print("loss.detach(): ", loss.detach())
print("loss.item(): ", loss.item())

结果:

loss:  tensor(2.0196, grad_fn=<MeanBackward0>)
loss.data:  tensor(2.0196)
loss.detach():  tensor(2.0196)
loss.item():  2.0196409225463867
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值