Python杂谈

torch中的随机种子问题
在使用PyTorch时,通过设置随机数种子,在gpu或cpu上固定每一次的训练结果:

def setup_seed(seed):
    torch.manual_seed(seed)  # 固定CPU的随机种子?
    torch.cuda.manual_seed_all(seed)  # 固定全部GPU的随机种子?
    np.random.seed(seed)  # np.random模块的随机种子
    random.seed(seed)  # random模块的随机种子
    torch.backends.cudnn.deterministic = True  # 每次返回的卷积算法将是确定的(默认算法)

torch.backends.cudnn.enabled = True
torch.backends.cudnn.benchmark = True

大部分情况下:
设置这个 flag 可以让内置的 cuDNN 的 auto-tuner 自动寻找最适合当前配置的高效算法,来达到优化运行效率的问题。
设置 torch.backends.cudnn.benchmark=True 将会让程序在开始时花费一点额外时间,为整个网络的每个卷积层搜索最适合它的卷积实现算法,进而实现网络的加速。
一般来讲,应该遵循以下准则:
如果网络的输入数据维度或类型上变化不大,网络结构固定(不是动态变化的),网络的输入形状(包括 batch size,图片大小尺寸,输入的通道)是不变的,设置 torch.backends.cudnn.benchmark = true 可以增加运行效率;

benchmark模式会提升计算速度,但是由于计算中有随机性,每次网络前馈结果略有差异(每次计算出的卷积算法不确定)。如果想要避免这种结果波动,设置:
torch.backends.cudnn.deterministic = True保证实验的可重复性。

抽象基类与装饰器限制
import abc
class Animal(metaclass=abc.ABCMeta):  # 同一类事物:动物
    @abc.abstractmethod                  
# 上述代码子类是约定熟成的实现这个方法,加上@abc.abstractmethod装饰器后严格控制子类必
# 须实现这个方法
    def talk(self):
        # raise AttributeError('子类必须实现这个方法')
# 继承子类必须实现这个方法,否则会报错;且抽象基类只能被继承不能被实例化,也会报错
python之抽象基类abc.abstractmethod_小猿圈it学习园--加加的博客-CSDN博客

装饰器
@abc.abstractmethod   # 抽象基类,子类必须实现
@property  # 把一个方法变成属性调用的
# 和 @property 配套的装饰器是 @方法.setter,如:
@score.setter  # score方法变成属性后,允许写入

字符串前的 f'...'
python中 r'', b'', u'', f'' 的含义_Jiashilin-CSDN博客

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

torch.autograd.Variable
自动微分变量,用于构建计算图
【函数学习】torch.Variable() - 简书
『PyTorch』第三弹重置_Variable对象 - 叠加态的猫 - 博客园

torch.nn.linear  # 线性层
torch.nn.Linear(in_features, out_features, bias=True
in_features: 输入数据的大小
out_features: 输出数据的大小
bias: 是否添加一个可学习的 bias,即y=Ax+b中的 b

net.parameters()
Pytorch net.parameters() net.named_parameters()_桃汽宝的博客-CSDN博客
Pytorch(六)(模型参数的遍历)——net.parameters() & net.named_parameters() & net.state_dict()_hxxjxw的博客-CSDN博客

nn.Parameter()
将不可训练类型 Tensor 转换成可训练类型 parameter,并将其作为 nn.module 的可训练参数使用
PyTorch里面的torch.nn.Parameter() - 简书
torch.nn.Parameter理解_Stoneplay-CSDN博客

numpy.zeros((5,))中(5,)的含义 顺便复习Python中tuple的用法_爱我所享 的博客-CSDN博客

tensor 与 array
PyTorch中的Tensor可以和numpy的ndarray相互转换,唯一不同的是PyTorch可以在GPU上运行,而numpy的ndarray只能在cpu上运行。
numpy (Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
list, array, tensor, numpy格式辨别_TO-CSDN博客
pytorch的tensor与numpy数组的对比_陨星落云的博客-CSDN博客

net.train() 与 net.eval()
train模式(net.train())和eval模式(net.eval())_vectorindex的博客-CSDN博客
Pytorch中的net.train 和 net.eval使用_edward_zcl的博客-CSDN博客


.detach().cpu().numpy()的作用
.detach().cpu().numpy()的作用 - 知乎

python的模块导入问题
python 同一目录下 .py文件的调用 - 永吉芳心 - 博客园
Python之模块详细梳理(四),关于相对导入报错最优雅解决方法。_m0_47670683的博客-CSDN博客
建议的工程文件目录格式:
工程名/src/package1
                 /package2
                 ……
main直接放在工程名下,这样各包之间用绝对引用就可以调用,包下的py文件也可以单独运行
注意,package中需要包含 __init__.py 才能认为该文件夹是个包,不是这样格式的调用太容易出错,而且改起来非常烦!

axis问题
axis=1为横向,axis=0为纵向,而不是行和列,那么所有的例子就都统一了。
python中axis=0 axis=1的理解_一夜飘零-CSDN博客_axis=1

 Folium
Folium绘制Choropleth分级着色图 – 标点符
Quickstart — Folium 0.12.1 documentation

read_csv
详解pandas的read_csv方法 - 古明地盆 - 博客园
pandas.read_csv参数详解 - 李旭sam - 博客园

pandas.read_csv函数参数详解 - 知乎

numpy.flip
flip(m, (0, 1)), (0,1) 代表需要反转的轴,对于三维数组而言,前述用法代表,m[::-1, ::-1, ...]
Python numpy.flip函数方法的使用-CJavaPy
Python NumPy flip()函数示例 - 0x资讯

loc与iloc方法
Panadas 中利用DataFrame对象的.loc[,]、.iloc[,]方法抽取数据 - 简书

赋值、浅拷贝、深拷贝
赋值就是变量的别名;
5张图彻底理解Python中的浅拷贝与深拷贝 - 知乎

数据归一化/标准化问题
归一化是将数据压缩为[0-1]区间内,原数据最小值为0,原数据最大值为1,在多变量情况下,这样的好处是数据大小区间统一,能加快训练过程,防止梯度的过早消失,不会改变数据原来的分布。但弊病在于,将原数据压缩到[0,1]的区间时,如果原数据本身就是分布相当分散的数据,极端情况如:100个数据中,90个数据为7,10个数据为777,那么这样的数据归一化后,绝大多数数据都会拥挤在接近0的一端,且数值的绝对值差异很小,反而会对训练有不利影响。
注意不管是归一化还是标准化,模型输出后,在最后作图前,均应该逆归一化/逆标准化,重新恢复为原数据的物理意义。

df_scaled_center = df_raw_center.apply(lambda x: (x - np.min(x)) / (np.max(x) - np.min(x)))
max_pm25, min_pm25 = np.max(df_raw_center['PM2.5'].values[:]), np.min(df_raw_center['PM2.5'].values[:])
inv = (scaled_data[i] * (max_pm25 - min_pm25) + min_pm25)

标准化,转化为均值为零,方差为1的数据,会改变数据原来的分布。

y_sc = StandardScaler()
y = data['PM2.5'].values.reshape(-1,1)
y_stand = y_sc.fit_transform(y)
y_true = y_sc.inverse_transform(y_valid)

python中数据标准化_qian_fighting的博客-CSDN博客_python 标准化

Python中numpy数据的直接保存,多维数组保存
Python Numpy中数据的常用保存与读取方法 - 云+社区 - 腾讯云

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值