场景1:代码太慢
1:写出基础代码
- 使用少量数据集来实践你的思路,代码可以不用很优化,优先写出来即可。写完后建议封装为函数,方便调用。
2:优化代码逻辑
- 代码本身足够高效吗?
- 代码是否利用了所有的CPU/GPU?
- 常用优化过程
下标循环
df1 = df
for i in range(len(df)):
if df.iloc[i]['test'] != 1:
df1.iloc[i]['test'] = 0
Iterrows循环
i = 0
for ind, row in df.iterrows():
if row['test'] != 1:
df1.iloc[i]['test'] = 0
i += 1
Apply循环
df1['test'] = df['test'].apply(lambda x: x if x == 1 else 0)
内置函数
res = df.sum()
Numpy函数
df_values = df.values
res = np.sum(df_values)
3:提高资源利用率
- 当逐步对Pandas和Numpy的熟悉过程中,会发现自己的代码也运行的越来越快。如果最终代码都是用内置函数实现,基本上已经很好了。
- 但也可以进一步优化,因为Pandas很多操作都是串行单线程执行,所以可以手动开多线程进一步加速数据的计算过程,把所有CPU用上,或使用cuDF利用GPU加速。
场景2:新领域无从下手
- 阅读目标领域内近3-5年顶会论文,特别是综述论文。
- 收集公开赛事或榜单上学习Top名次的解决方案,包含思路和代码。
场景3:复现别人的论文
1:找到有开源代码的论文
- 在Github上找到历史的有代码的论文,这些论文项目虽然比较旧,但参考价值很大。
2:整理好数据集的加载
- 搞清楚数据集怎么制作怎么加载怎么输入怎么计算怎么输出,数据集如何处理,如何编码。
3:搭建论文模型
- 基于论文思路整理好模型结构,有多少层,每层的细节,每层的维度,一步一步搭建。保证模型可以正常训练和预测。
4:确定训练细节
- 根据论文实验部分的细节,确定具体的batch、epoch、学习率和优化器,确定训练的流程没有问题。