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 - 博客园
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中数据的常用保存与读取方法 - 云+社区 - 腾讯云
1439

被折叠的 条评论
为什么被折叠?



