【Python初级】基本函数

一、常用概念

1.有监督学习与无监督学习:

有监督学习的训练集要求包括输入和输出,即特征和标签,包括回归、分类、支持向量机(SVM)、决策树、随机森林、人工神经网络等。无监督学习的样本数据类型未知,输入数据未被标记,在训练集中寻找规律,从而学到或建立模型,包括:聚类、主成分分析法(PCA)

2. TorchMetrics

TorchMetrics是一个开源的PyTorch原生的函数和度量模块的集合,用于简单的性能评估。目前支持超过25个指标,并不断增加更多的通用任务和特定领域的标准(目标检测,NLP等)

3.方法重写

方法的重写,不能发生在同类中,只能发生在子类中。

若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

4. 激活函数: 

① logistic:f(x)=1 / (1+e^(-x))

② softmax(Xi) = exp(Xi) / sum(exp(Xi))

     nn.Softmax(dim) 

     若输入为二维,dim = 0为使列数据和为0;dim=1为使行数据为0

③ relu(X) = max(0, X)

5.损失函数

① 二元交叉熵损失函数:nn.BCELoss()  >>使用nn.BCELoss需要在该层前面加上Sigmoid函数

from torch import nn
loss = nn.BCELoss()
l = loss(y_hat, y)    # 预测值与标签输入顺序不能颠倒

② 交叉熵损失函数: nn.CrossEntropyLoss()          ##softmax函数和交叉熵损失函数合并

③ 均方损失函数: nn.MSELoss()           (y_hat - y) ** 2 / batch_size    >>  loss.mean()

# 1
torch.nn.MSELoss(y_hat, y, reduce, size_average)
## 默认reduce = True,返回标量形式的loss
## reduce = False,返回向量形式的los
## 默认size_average = True,返回loss.mean()
## size_average = False,返回loss.sum()

# 2
import torch.nn.functional as F
loss = F.mse_loss(y_hat, target)

6.解决过拟合

        过拟合问题具体变现为:模型在train_data上训练情况良好,损失函数低,预测准确度高,而在test_data表现较差,损失函数比较大,预测精度很低。

二、函数

1. register_buffer()

register_buffer(name, tensor)
'''Adds a persistent buffer to the module''' # 向模型中加入持续缓冲区
                                             # name(string) -缓冲区的名称
self.register_buffer("matrix", torch.tensor([0.233, 0.456, 0.174]))

        我们在训练模型时,通过backward反向传播实现weight等参数的更新,但在某些情况下,我需要有些参数从训练开始到结束一直保持不变,不会被更新,则此时会用到register_buffer()。

2.  __init__()   >>带参数的初始化,初始化新创建对象的状态

    “__”开头的函数声明该函数为私有,无法在类的外部使用或访问。

3. tensor生成

① torch.normal(means, std)                       >> 从给定参数的正态分布中返回随机数

     np.random.normal(means, std, size)          >> 从正态(高斯)分布中抽取随机样本

     random.random(*size)                                >>返回一个介于左闭右开[0.0, 1.0)区间的浮点数

②  torch.ones(*size) 返回输入size的全为1的tensor;  torch.zeros(*size, dtpe = torch.float32)全为0 

      torch.zeros_like(X) 返回X.shape的全0 tensor

③  torch.range(1, 6)  >> tensor[1., 2., 3., 4., 5., 6.]  结果包含end, 新版本中将被删除

④  torch.arange(1, 6) >>tensor[1., 2., 3., 4., 5.]

⑤ torch.rand(*size)    >> 0-1的均匀分布

     torch.randn(*size)    >>标准正态分布(mean=0, std=1)

4. tensor合并 

① torch.cat((A,B), dim)    >>按照dim维度合并tensorA,B,除dim维度,其他维度数值必须一致;         dim列合并,即合并完成后只有dim数值增大

6. 数据提取

① torch.index_select(input, dim, index)    ==  input.index_select(dim, index)   

     >> input为索引查找的对象, dim为查找的维度, index为索引序列tensor(须为整型)

② torch.gather(tensor, dim, index) 

     >>沿着指定的dim从tonsor中提取索引index位置的元素,index对应dim,即dim若为行,index为行索引

② torch.where(condition, a, b)     >>满足condition则输出a,否则则输出b

③ torch.squeeze()                        >> 压缩数据维度,去掉维数为1的维度

7. 运算与处理

① torch.pow(X, y)            >> X^y

② torch.max(input, other) >>两tensor比较,返回最大值

     torch.max(input, dim)   >>返回最大值和最大值索引,若shape为[2,3],dim=0,返回shape为[3]

③ torch.mm(A, B)             >>矩阵A,B相乘,只适用于二维矩阵

    torch.matmal(A, B)        >>矩阵A,B相乘,适用于高维矩阵

    torch.mul(A, B)              >>矩阵A,B对应位置相乘,等同于 A * B

④ torch.log(x)                   >>以自然数e为底的对数函数 ln(x)

⑤ torch.sqrt(tensor)         >>逐一元素计算平方根

⑥ torch.lt(input, other)    >>元素比较 input < other 返回True   (less than)

    torch.gt(input, other)    >>元素比较 input > other 返回True   (greater than)

⑦ str.join(item)              >>用str将item中的元素连接起来

                                        >>括号内只允许有一个成员,可以为列表、元组、字典

     str.upper()                 >> 字符串中的小写字母转为大写字母

⑦ vars()                          >>对象object的属性和属性值的字典对象

⑧ sort(list)                      >>list 排序

    sorted(iterable)          >>对所有可迭代的对象进行排序操作

⑨ lambda   param : expression   >> param参数执行expression表达式

8. 绘图

plt.scatter(x, y, c, marker, s)         >>散点图绘制: c为颜色, marker为标记的样式, s为点的大小

plt.plot(x, y, label=' ',"格式控制字符串")    >>绘制点图和线图, xy可传入set,list,array,dataframe

plt.legend()                                   >> 显示label内容

9. 读取数据集

import torch.utils.data as Data

dataset = Data.TensorDataset(features, labels)  # 合并特征值和标签

Data.DataLoader(dataset, batch_size, shuffle=)

10. 优化器

(1) torch.optim.SGD(parameters(), lr= , momentum= )    # 参数,学习率,权重衰减

optimizer = torch.optim.SGD(function.paramaters, lr)   # 定义优化器

# 训练模型
optimizer.zero_grad()
l.backward()
optimizer.step()

11.模块与包

(1)torchvision

import torchvision
import torchvision.transforms

torch.transforms.ToTensor() #把PIL.Image或ndarray从(H x W x C)形状转换为(C x H x W)的tensor

# torchvision.datasets: 一些加载数据的函数及常用的数据集接口;

# torchvision.models:包含常用的模型结构(含预训练模型), 例如AlexNet、VGG、ResNet等;

# torchvision.transforms: 常用的图片变换,例如裁剪、旋转等;

① transforms.ToTensor()函数的作用是将【原始的PILImage格式或者numpy.array格式的数据】格式化为【可被pytorch快速处理的张量类型】

##(𝐶 × 𝐻 × 𝑊)   C:chennel通道数;H:图像高度; W:图像宽度

② transforms.Compose():将transforms组合在一起;而每一个transforms都有自己的功能。

③ transforms.Resize(size)::对载入的图片数据按照需要进行缩放,传递给这个类的size可以是一个整型数据,也可以是一个类似于 (h,w) 的序列。

④ transforms.normalize(mean, std):数据标准化,逐channel的对图像进行标准化(均值变为mean,标准差变为std),可以加快模型的收敛。

(2) torch.nn

① nn.Sequential()   

     >>一个有序容器, 用于搭建模型,神经网络模块将按照传入构造器的顺序被添加到计算图中执行,模型前向传播时调用forward()方法

② nn.Linear(input_num, output_num, bias)

    >> (输入的神经元个数, 输出神经元个数, [bias=True]是否包含偏置)

③  nn.Flatten(start_dim = 1 **default**, end_dim)

   >>将连续的维度范围展平为张量,用于Sequential;将输入"压平",;一般写在某个神经网络模型之后,用于对神经网络模型的输出进行处理,得到tensor类型的数据

  >> 128张图片(1* 28 * 28)   输入shape为[128, 1, 28, 28],展平每张图片后得到[128, 728]

(3) random

① random.shuffle(list)  >>将列表中元素顺序打乱,不会生成新的列表

(4) numpy

 range(0, 5, 1)                   >> 生成整数序列, (start, end, step) 各个参数为整数

     numpy.arange(0.1, 0.5, 0.1)   >>生成小数序列

② numpy.e                                  >> 数e

    numpy.inf                                >> 正无穷大

 numpy.exp(X) == X.exp()       >> e^X

④ numpy.sum(X, axis, keepdim = True) 

     >> keepdim决定保持结果dim与原array维度一致;

     >>keepdim = False, axis = 0时, (2,3,4)==> (3, 4)

     >>keepdim = True, axis = 0时, (2,3,4)==> (1, 3, 4)

⑤ numpy.argmax(array, axis)  

     若array 的维度为(2, 3, 4),

     当axis = 0时,返回shape(3,4);axis = 1时,返回shape(2,4)

⑥ numpy.linespace(start, end, num=num_points)    >>生成等差序列,num为序列点数

 (5) os及os.path

 ① os.path.join()

连接两个或更多的路径名组件:

      1.如果各组件名首字母不包含’/’,则函数会自动加上

      2.如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃

      3.如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾

② os.listdir(path)    >>返回指定的文件夹包含的文件或文件夹的名字的列表

③ os.path.isdir()    >>判断某一路径(绝对路径)是否为目录

     os.path.isfile()   >>用于判断某一对象(绝对路径)是否为文件

④ os.path.exists()  >>返回路径是否存在的布尔值

⑤ os.sep             >>文件路径分隔符  "\"  或  "/"

(6)Image模块(from PIL import Image)

①  Image.open(path)    >> 默认彩色图像读取通道的顺序为RGB,得到的img数据类型呢是Image对象,不是普通的数组

②Image.convert()       >>实现不同图像格式的转换,接受一个 mode 参数,用以指定一种色彩模式,其中PIL的九种不同模式:1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。

12. 初始化

① nn.init.normal_(tensor, mean, std)    >>给定均值和标准差的正态分布

② nn.init.constant_(tensor, val)             >>常量

13. return与yield区别

    return为函数返回值,执行return后续代码不再执行;

    yield创造迭代器,可用来for循环,不输出,不返回

14. exit()函数

无论exit(num)函数出现在程序中的何处,只要程序在执行过程中调用到exit()函数,程序立即终止运行。exit()函数常用在程序错误时退出结束或调试代码,num控制exit code,若异常处理时exit()括号内不设置,则程序终止时显示: Process finished with exit code 0,而0表示程序的正常运行完成终止

try:
    1/0
except:
    traceback.print_exc()
    exit(-1)

输出:

Process finished with exit code -1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值