赞
踩
不知道大家有时候会不会有一个很好的idea,但是就是写不出来具体的代码,或者写的代码不够高效。
其实这种情况所有人都会遇到:
场景1
:比赛期间有一个新特征的方法,但是用pandas实现太慢,时间复杂度太高。
场景2
:科研或工作遇到一个新问题,进入一个新领域,不知道如何开始。
场景3
:复现别人的深度学习论文,但就是没法成功。
现在不管是比赛还是常见的数据处理,都会遇到大规模的文件。此时如果你代码写的不够高效,代码肯定会运行的很慢很慢,基本上没法满足要求。
使用少量数据集来实践你的思路,代码可以不用很优化,优先写出来即可。写完后建议封装为函数,方便调用。
在不断增加数据量的过程中,你会发现代码越来越慢,逐渐达到你的预期上限。此时你应该尝试去优化你的代码了。
优化代码有一些基础的逻辑:
代码本身足够高效吗?
代码是否利用了所有的CPU/GPU?
例如在使用Pandas时,如果不了解具体的语法,很容易将代码写成for
循环,可以参考以下优化过程。
下标循环
- 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)
当你逐步对Pandas和Numpy的熟悉过程中,你会发现自己的代码也运行的越来越快。如果最终代码都是用内置函数实现,基本上已经很好了。
但也可以进一步优化,因为Pandas很多操作都是串行单线程执行,所以可以手动开多线程进一步加速数据的计算过程,把所有CPU用上,或使用cuDF利用GPU加速。
阅读已有新工作的必经之路,所以努力要站在巨人的肩膀上。
阅读目标领域内近3-5年顶会论文,特别是综述论文。
收集公开赛事或榜单上学习Top名次的解决方案,包含思路和代码。
无他唯孰能尔,多收集多整理,理解领域思路和套路。
科研并不是从0到1,一定要多去了解已有的工作,以及已有的论文代码。在阅读完论文代码后,可以按照如下步骤逐步复现:
在Github上找到历史的有代码的论文,这些论文项目虽然比较旧,但参考价值很大。
搞清楚数据集怎么制作怎么加载怎么输入怎么计算怎么输出,数据集如何处理,如何编码。
基于论文思路整理好模型结构,有多少层,每层的细节,每层的维度,一步一步搭建。保证模型可以正常训练和预测。
根据论文实验部分的细节,确定具体的batch、epoch、学习率和优化器,确定训练的流程没有问题。
- 往期精彩回顾
-
-
-
-
- 适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载中国大学慕课《机器学习》(黄海广主讲)机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑机器学习交流qq群955171419,加入微信群请扫码
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。