python 函数随记

model.eval()在PyTorch中用于切换模型到评价模式,关闭BatchNormalization和Dropout,确保在测试时使用预训练的统计信息。BatchNormalization用于归一化层间特征,Dropout防止过拟合。model.train()则在训练时启用这两者。此外,文章还涉及了张量的维度操作、优化器、json处理和NLP中的概念。
摘要由CSDN通过智能技术生成

model.eval()

作用:

主要是针对model 在训练时和评价时不同的 Batch Normalization 和 Dropout 方法模式。

Batch Normalization

其作用对网络中间的每层进行归一化处理,并且使用变换重构(Batch Normalization Transform)保证每层提取的特征分布不会被破坏.

Dropout

其作用克服Overfitting,在每个训练批次中,通过忽略一半的特征检测器,可以明显的减少过拟合现象。

model.eval()

不启用 BatchNormalization 和 Dropout,保证BN和dropout不发生变化,pytorch框架会自动把BN和Dropout固定住,不会取平均,而是用训练好的值,不然的话,一旦test的batch_size过小,很容易就会被BN层影响结果。

model.train()

在使用 pytorch 构建神经网络的时候,训练过程中会在程序上方添加一句model.train(),作用是 启用 batch normalization 和 dropout 。

如果模型中有BN层(Batch Normalization)和 Dropout ,需要在 训练时 添加 model.train()。

model.train() 是保证 BN 层能够用到 每一批数据 的均值和方差。对于 Dropout,model.train() 是 随机取一部分 网络连接来训练更新参数。

model.parameters():

model.parameters(): 保存的是weights 和 bias,例如nn.linear(), 保存的是weights和bias。

利用梯度优化权重

Batch Normalization:

批标准化,将分散的数据统一的一种做法,优化神经网络的一种做法。

enumerate():

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

unsqueeze()

unsqueeze()函数起升维的作用,参数表示在哪个地方加一个维度.

squeeze()

将维度值为1的维度去掉,例如x.shape(1,2,3), 第一个值为1,使用squeeze()会使这个维度去掉,变成(2,3)。

# 0(-2)-行扩展

# 1(-1)-列扩展

# 正向:我们在0,1位置上扩展

# 逆向:我们在-2,-1位置上扩展

# 维度扩展:1维->2维,2维->3维,...,n维->n+1维

# 维度降低:n维->n-1维,n-1维->n-2维,...,2维->1维

# 以 1维->2维 为例,

# 从【正向】的角度思考:

# torch.Size([4])

# 最初的 tensor([1., 2., 3., 4.]) 是 1维,我们想让它扩展成 2维,那么,可以有两种扩展方式:

# 一种是:扩展成 1行4列 ,即 tensor([[1., 2., 3., 4.]])

# 针对第一种,扩展成 [1, 4]的形式,那么,在 dim=0 的位置上添加 1

# 另一种是:扩展成 4行1列,即

# tensor([[1.],

# [2.],

# [3.],

# [4.]])

# 针对第二种,扩展成 [4, 1]的形式,那么,在dim=1的位置上添加 1

# 从【逆向】的角度思考:

# 原则:一般情况下, "-1" 是代表的是【最后一个元素】

# 在上述的原则下,

# 扩展成[1, 4]的形式,就变成了,在 dim=-2 的的位置上添加 1

# 扩展成[4, 1]的形式,就变成了,在 dim=-1 的的位置上添加 1

BatchNorm

step1: initialize the running_mean and runnint_var to zeros.

step2: 对输入x计算 mean, var , axis = 0

step3: iteration running_mean and running_var:

tensor.detach()

切断一些分支的反向传播,返回一个新的tensor,从当前计算图中分离下来的,但是仍指向原变量的存放位置,不同之处只是requires_grad为false,得到的这个tensor永远不需要计算其梯度,不具有grad。

即使之后重新将它的requires_grad置为true,它也不会具有梯度grad

这样我们就会继续使用这个新的tensor进行计算,后面当我们进行反向传播时,到该调用detach()的tensor就会停止,不能再继续向前进行传播。

torch.no_grad()

一个上下文管理器,disable梯度计算。disable梯度计算对于推理是有用的,当你确认不会调用Tensor.backward()的时候。这可以减少计算所用内存消耗。这个模式下,每个计算结果的requires_grad=False,尽管输入的requires_grad=True。

torch.argmax(x, dim=0)

按列返回数组x的最大值的index

import torch

x = torch.randn(2, 4)

print(x)

'''

tensor([[ 1.2864, -0.5955, 1.5042, 0.5398],

[-1.2048, 0.5106, -2.0288, 1.4782]])

'''

y0表示矩阵dim=0维度上(每一列)张量最大值的索引

y0 = torch.argmax(x, dim=0)

print(y0)

'''

tensor([0, 1, 0, 1])

'''

@property

1、装饰器, 保护类的封装特性,2、让开发者可以使用"对象.属性"的方式操作类属性的功能。

继承:

class (object):

继承object对象,拥有了类中的高级特性,在python3中已经默认加载了object。

矩阵写入txt

matrix = np.random.random((1000, vec_dim))

np.savetxt("matrix", matrix, fmt = '%f', delimiter = ',')

nn.functional.normalize: 标准化, x的每个值除以范数,dim = -1意思为对行(最后一个维度)进行标准化

torch.nn.functional.normalize(x, dim=-1)

import numpy as np import torch.nn as nn import torch x = torch.FloatTensor(np.array([1,2,3])) y = torch.FloatTensor(np.array([3,2,1])) x = torch.nn.functional.normalize(x,dim=-1) print(x) a = np.array([1,2,3]) fanshu = sum(a**2) print(fanshu) fanshu = np.sqrt(fanshu) print(a/fanshu)

.gt

x = torch.FloatTensor(np.array([1,2,3]))

print(x.gt(1))

tensor([False, True, True])

optimizer.zero_grad() # 将模型的参数梯度初始化为0

outputs=model(inputs) # 前向传播计算预测值

loss = cost(outputs, y_train) # 计算当前损失

loss.backward() # 反向传播计算梯度

optimizer.step() # 更新所有参数

f.truncate(0)

删除文件内容, 括号里面的0必须要有

torch.mul

对两个张量进行逐个元素相乘

gensim

gensim 是一个通过衡量词组(或更高级结构,如整句或文档)模式来挖掘文档语义结构的工具,三大核心概念:文集(语料)–>向量–>模型。

keepdims主要用于保持矩阵的二维特性

import numpy as np

a = np.array([[1,2],[3,4]])

按行相加,并且保持其二维特性

print(np.sum(a, axis=1, keepdims=True))

按行相加,不保持其二维特性

print(np.sum(a, axis=1))

NER:name entity generic

json.dump()和json.dumps()的区别

  • json.dumps() 是把python对象转换成json对象的一个过程,生成的是字符串。
  • json.dump() 是把python对象转换成json对象生成一个fp的文件流,和文件相关。

json.load() 和json.loads() 的区别

json.loads函数的使用,将字符串转化为字典

json.load()函数的使用,将读取json信息

示例:

json_info = '{"age": "12"}'

dict1 = json.loads(json_info)

file = open('1.json','r',encoding='utf-8')

info = json.load(file)

assert: 断言 用于判断一个表达式,在表达式条件为False的时候触发异常。

关于dim取值范围

A.关于dim 取值范围:假设有一个n维的tensor,那么它的dim可以取值的范围是[-n,n-1]。举个例子:a=torch.randn(2,3,4),很明显,a是一个3维张量,那么它的dim可以取的值有-3,-2,-1,0,1,2。

B.关于不同dim取值代表的含义:还是上面的例子,对于a来说,dim=0意思就是对a的第1个维度进行操作(也就是2所在的那个维度);dim=1意思就是对a的第2个维度进行操作(也就是3所在的那个维度);dim=2意思就是对a的第3个维度进行操作(也就是4所在的那个维度)。

那么对于dim为负数时,代表的意思又是什么呢?对于dim=-1,代表的是张量最里面的那个维度,对于上面例子的a来说,就是代表了第3个维度(也就是4所在的那个维度);对于dim=-2,代表的是a的第2个维度(也就是3所在的那个维度);对于dim=-3,代表的是a的第1个维度(也就是2所在的那个维度)。

masked_fill, masked_fill_

加下划线就直接在原tensor上进行修改, 没有加下划线的是新创建一个变量,原变量保持不变

masked_fill(mask, 2)

import torch a = torch.rand(3,3,4) print(a) mask = (a>0.5) print(mask) b = a.masked_fill(mask, 2) print(b)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值