【科研】科研神器
目录
1、简介
2、工具
绘图工具
节点形式
平铺网络
三维块状
PPT手把手教高级技术路线框架图(项目申请)
高级图绘制手把手教
生物绘图手把手教
作图神器是 NetworkAnalyst
iSlide 插件用各种图标(付费)
所有高校的PPT模板
其他
中英文书籍下载
文献管理软件
1)Endnote
2)Notepress
3)Zotero
统计处理软件
1)SPSS
2)Origin
3)GraphPad Prism
学术英文词典工具合集
1)近义词辨析:https://wikidiff.com/neglect/omit
2)语言模型帮你找搭配:https://linggle.com
3)科研论文里常见哪些词组:http://www.esoda.org/
4)学术用语检索: https://www.phrasebank.manchester.ac.uk/
5)翻译网站deepl翻译
文章校对与协作
1)英文文章校对Grammarly
2)中文文章校对——秘塔写作猫
3)云盘软件坚果云
医学科研常用工具
1)基因ID转换BioMart
高效管理实验
代码运行-Tmux
代码结果记录
argparse
yaml
logging
补充argparse和yaml的配合
完整实验管理示例
3、参考
1、简介
作为一个平时就很辛苦的科研er,本着能用工具解决的问题绝对不花苦力的原则,收集了很多科研利器,现在分享给大家,相信大家看完以后科研效率都能够得到质的提升!
俗话说“工欲善其事,必先利其器”,在搞科研的过程中“升级打怪”,又怎能少的了一些利器加持呢?
2、工具
绘图工具
特别篇
特别篇
深度解析
节点形式
节点形式的神经网络图仅包含椭圆和直线箭头。其绘制方法相对简单,通过复制一定数量的椭圆和直线箭头并调整它们的位置即可绘制出节点形式的神经网络图。

平铺网络
网络图的平铺形式主要包含矩形、直线箭头以及弧形等基本元素。绘制过程相对简单,首先需要对矩形进行空间旋转(建议采用x-312.9°、y-20°、z-0°的参数组合),随后复制该矩形并通过排列工具进行位置调整。接着,在"线条-结尾箭头类型"选项中修改箭头的形状,最后调整线条的大小与位置,即可完成平铺形式神经网络图的绘制。

三维块状
三维块状形式的神经网络图仅由立方体构成单元。其绘制方法主要通过调整立方体的尺寸和形态,从而实现对立方体形状的形态进行调整,从而绘制出不同形态的三维块状图形。最后,将各个不同形态的三维块状图形进行拼接即可完成三维块状形式的神经网络图的构建。

以上就是三种神经网络图的PPT绘制方法,希望对大家有所帮助!
PPT手把手教高级技术路线框架图(项目申请)
PPT科研作图⑯:技术路线图
优先选择无衬线字体,避免选择衬线字体,例如,可以使用微软雅黑或Arial字体。
高级图绘制手把手教
该PPT科研作图教程系统地提供了(第二版)
生物绘图手把手教
科研绘图入门到精通
作图神器是 NetworkAnalyst
https://www.networkanalyst.ca/
科研小白专属作图神器,无需 R 语言基础也能制作出令人惊艳的科研图表!
iSlide 插件用各种图标(付费)
官方
官方
专业PPT设计软件下载平台:30万专业模板,快速制作功能,iSlide官方版
所有高校的PPT模板
优质免费资源:顶尖高校课件模板 - 知乎
优质免费资源:顶尖高校课件模板 - 知乎
其他
专业绘图课程:科研作图与论文组图,掌握这些技巧,轻松应对学术图表需求
购买学习生物绘图:科研绘图:这里是唯一一个免费获取的平台!
中英文书籍下载
Z-Library – the world’s largest e-book library. Your gateway to knowledge
貌似搜索不用翻墙,但是点击下载的时候需要

英文文献(期刊/书籍)的查找和获取途径汇总 - 知乎
文献管理软件
1)Endnote
Endnote无疑是最出名的文献管理软件之一。它是一款文献管理与编辑软件,能够帮助用户在论文中管理需要插入的参考文献,并统一调整文献格式。对于需要投稿特定杂志的作者来说,下载该杂志的参考文献引用格式非常方便,只需轻轻点击鼠标就能完成设置。除此之外,Endnote还支持从PubMed直接导入数据,并可通过官网查询各期刊的具体参考文献格式要求。
可谓是每一个想投SCI的小伙伴必备利器!

2)Notepress
EndNote这款软件在管理国际英文期刊文献方面较为便捷,但在处理国内部分中文期刊文献时则显得有些不足。NoteExpress是一款国产文献检索与管理系统,由北京爱琴海软件公司开发,属于专业级别的知识管理软件,其核心功能涵盖了知识采集、管理、应用和挖掘的全过程。NoteExpress不仅具备对英文期刊文献的管理能力,而且在中文使用环境方面也表现得较为适用。与其它适用中文的软件相比,NoteExpress显著的优势在于其支持的数据库范围更为广泛,不仅包括CNKI,还支持万方等国内外其他数据库。

3)Zotero
Zotero是一款开源的文献管理软件,能够辅助我们高效地收集、管理及引用研究资源,涵盖期刊、书籍、网页、图片等多种文献类型。它的发展起源于英文环境,但其开放性与良好的生态系统使其社区能够开发出许多实用的插件,从而使得在中文环境下使用同样得心应手。Zotero的学习难点主要在于环境配置,这使得在中文环境下使用时需要特别注意设置和优化。
Zotero是一个完全免费的文献管理工具,相较于EndNotes,Zotero最显著的优势在于其无限层级的目录分类系统,每个目录都可以进一步划分为多个子目录,这使得操作更加便捷。此外,Zotero还提供标签功能,能够自动为每篇文献分配标签,从而让文献管理变得更加高效。

统计处理软件
1)SPSS
对于那些缺乏编程经验的用户而言,SPSS是一个非常友好的工具。它只需要基本的统计学知识就可以轻松上手。其显著优势在于能够快速应用预设模板进行分析,而无需复杂的编程操作。在非统计学专业领域,SPSS以其快速上手和强大功能著称。它不仅能够处理数据的编辑和处理,还能完成从数据分析到结果报告的全过程,包括生成专业的统计图表和表格。无论是基础统计分析还是高级建模,SPSS都能提供全面的支持。

2)Origin
Origin是由OriginLab开发的科学绘图与数据分析软件,它支持包括Excel、ASCII、NetCDF、SPC、DIADem等多种数据导入格式。软件能够将生成的图形以EPS、JPEG、TIFF、GIF等多种格式导出。对于新手用户而言,该软件具有强大的功能、简便的操作界面以及广泛的应用领域,特别适合用于科学论文、学术论文等图形绘制与数据可视化任务。可以说,它是每一位科研工作者不可或缺的常用数据绘图软件之一,内置了丰富的数据分析功能,包括统计分析、峰值测定和曲线拟合等,能够生成二维和三维图形。

3)GraphPad Prism
GraphPad Prism这款软件非常有趣,同时也非常实用。它能够生成色彩斑斓的图表,并且允许用户进行颜色搭配调整。它是一款专业的数据处理与图形软件。在软件中输入数据,选择合适的统计分析方法,即可生成所需的结果图表,如K-M曲线和柱状图等,并且可以对图片进行高度可定制的修改。特别适合医学生使用,其界面友好,操作简便。

学术英文词典工具合集
1)近义词辨析:https://wikidiff.com/neglect/omit
2)语言模型帮你找搭配:https://linggle.com
该网站提供词组固定搭配查询功能,例如,如果需要查询与这个词相关的固定搭配,但若忘记搭配方式,可以直接在该网站查询。网站会列出每一种组合及其适用的语境,这样可以方便用户快速找到所需搭配。


3)科研论文里常见哪些词组:http://www.esoda.org/

4)学术用语检索: https://www.phrasebank.manchester.ac.uk/
5)翻译网站deepl翻译
号称以卓越的机器翻译能力著称的DeepL公司,其神经网络能够捕捉到任何细微的差别,这正是与其他服务的主要区别。为了评估我们的机器翻译模型的质量,我们定期进行专业级的双语测试。在双语测试中,专业译员在不知原文出处的情况下选择了最符合原文意思的翻译版本。测试结果显示,DeepL的机器翻译性能以3:1的优势显著优于其主要竞争对手。

文章校对与协作
1)英文文章校对Grammarly
Grammarly是一款在线语法校对和校对工具,涵盖Windows、Mac、iOS和Android等多个平台。它能够校对单词拼写、调整标点符号、修正语法错误、优化语气以及提供风格建议等;在学术写作中,Grammarly还能够辅助查重。

2)中文文章校对——秘塔写作猫
写作猫是与Grammarly类似的中文材料校对软件。
3)云盘软件坚果云
具有搭配Zotero使用的能力。Zotero与坚果云之间存在关联,这种关联能够辅助实现云存储资源的扩展。坚果云的作用不仅局限于此,它还能够支持多人协作,具体应用场景包括三四名研究人员共同撰写综述、材料等内容,从而促进科研团队的协作。
医学科研常用工具
1)基因ID转换BioMart

高效管理实验
代码运行-Tmux
Tmux作为一款科研工具,显著提升了实验管理效率。该种方式具有显著的效果。
1. 概念解释
基础组件是session(会话)。
每个会话可以支持多个window(窗口)的创建。
每个window(窗口)可以支持多个pane(窗格)的划分。
2. 常用命令解释
- tmux的退出 :
ctrl + d 或者 exit命令 - tmux前缀键:Ctrl+b+x
- x=? 的时候是帮助信息(按q退出)
- x=d 分离当前session
- x=s 列出所有session
- x=$ 重命名session
- x=n 切换到下一个窗口
$ tmux at -t <session_name>
- 上下:tmux split-window 或者 ctrl+b+"
- 左右:tmux split-window -h 或者 ctrl+b+%
- 选择pane:
- 向上:tmux select-pane -U 或者 ctrl+b+↑
- 向下:tmux select-pane -D 或者 ctrl+b+↓
- 向左:tmux select-pane -L 或者 ctrl+b+←
- 向右:tmux select-pane -R 或者 ctrl+b+→
3. tmux工作流程说明
新建会话
新建会话
3 退出tmux session
tmux detach:放在后台运行 快捷键:ctrl+b+d
ctrl + d: 直接删除session4 重新进入tmux session
查看目前的tmux session:
tmux ls
tmux attach -t <session_name>或者tmux a -t <session_name>
代码结果记录
深入理解并高效管理深度学习实验的过程
笔者此前已了解到诸多实验管理的方法及库的模块化设计,但这些方法均处于闲置状态,无处发挥其作用。随着本次比赛的结束,便着手对代码进行重构优化,致力于完善实验管理方法,并总结以往的经验教训,为未来提供参考。同时,也参考了交流群里蒋神、雪神等顶尖专家的宝贵建议,最终归纳出以下几点经验。
项目管理-复杂版
先推荐一个模板,是L1aoXingyu@Github分享的模板项目,链接如下:
https://github.com/L1aoXingyu/Deep-Learning-Project-Template
如果长期维护一个深度学习项目,代码的组织就比较重要了。如何设计一个简单而可扩展的结构是非常重要的。这就需要用到软件工程中的OOP设计

简单介绍一下:
- 实验配置的管理(实验配置就是深度学习实验中的各种参数)
- 使用yacs管理配置。
- 配置文件一般分默认配置(default)和新增配置(argparse)
- 模型的管理
- 使用工厂模式,根据传入参数得到对应模型。
> 1. ├── config
>
> 2. │ └── defaults.py - here's the default config file.
>
> 3. │
>
> 4. │
>
> 5. ├── configs
>
> 6. │ └── train_mnist_softmax.yml - here's the specific config file for specific model or dataset.
>
> 7. │
>
> 8. │
>
> 9. ├── data
>
> 10. │ └── datasets - here's the datasets folder that is responsible for all data handling.
>
> 11. │ └── transforms - here's the data preprocess folder that is responsible for all data augmentation.
>
> 12. │ └── build.py - here's the file to make dataloader.
>
> 13. │ └── collate_batch.py - here's the file that is responsible for merges a list of samples to form a mini-batch.
>
> 14. │
>
> 15. │
>
> 16. ├── engine
>
> 17. │ ├── trainer.py - this file contains the train loops.
>
> 18. │ └── inference.py - this file contains the inference process.
>
> 19. │
>
> 20. │
>
> 21. ├── layers - this folder contains any customed layers of your project.
>
> 22. │ └── conv_layer.py
>
> 23. │
>
> 24. │
>
> 25. ├── modeling - this folder contains any model of your project.
>
> 26. │ └── example_model.py
>
> 27. │
>
> 28. │
>
> 29. ├── solver - this folder contains optimizer of your project.
>
> 30. │ └── build.py
>
> 31. │ └── lr_scheduler.py
>
> 32. │
>
> 33. │
>
> 34. ├── tools - here's the train/test model of your project.
>
> 35. │ └── train_net.py - here's an example of train model that is responsible for the whole pipeline.
>
> 36. │
>
> 37. │
>
> 38. └── utils
>
> 39. │ ├── logger.py
>
> 40. │ └── any_other_utils_you_need
>
> 41. │
>
> 42. │
>
> 43. └── tests - this foler contains unit test of your project.
>
> 44. ├── test_data_sampler.py
>
>
>
>
> AI助手
此外,推荐使用一个高度完善的封装库,即deep-person-reid,其官方GitHub链接为:https://github.com/KaiyangZhou/deep-person-reid。在本次总结中,有一部分代码内容参考自该模型库的实现。
与上边推荐的模板库不相同,个人认为,简化处理是一个可行的选择,主要涉及的Python工具包括:
- argparse
- yaml
- logging
前两个用于管理配置,最后一个用于管理日志。
argparse
argparse是命令行解析工具,分为四个步骤:
- 导入argparse库。
- 初始化解析器。
- 添加一个参数项。
- 解析命令行参数。
第2步创建了一个对象,第3步为这个对象添加参数。
parser.add_argument('--batch_size', type=int, default=2048,
help='batch size') # 8192
parser.add_argument('--save_dir', type=str,
help="save exp floder name", default="exp1_sandwich")
AI助手
--batch_size将被用作参数的键,其对应的value是由解析命令行(或默认设置)得出的。type可以选择int或str。
parser.add_argument('--finetune', action='store_true',
help='finetune model with distill')
AI助手
action可通过指定参数来处理方式,其默认设置为“store”,表示存储功能。若要设置为true,需满足条件,否则参数默认为false。
第4步,解析parser对象,可以得到一个通过参数访问的对象。例如,可以访问args.finetune中的参数值。
yaml
yaml是可读的数据序列化语言,常用于配置文件。
支持类型有:
- 标量(字符串、证书、浮点)
- 列表
- 关联数组 字典
语法特点:
- 大小写敏感
- 缩进表示层级关系
- 列表通过 "-" 表示,字典通过 ":"表示
- 注释使用 "#"
安装用命令:
pip install pyyaml
AI助手
举个例子:
name: tosan
age: 22
skill:
name1: coding
time: 2years
job:
- name2: JD
pay: 2k
- name3: HW
pay: 4k
AI助手
注意:关键字不能重复;不能使用tab,必须使用空格。
处理的脚本:
import yaml
f = open("configs/test.yml", "r")
y = yaml.load(f)
print(y)
AI助手
输出结果:
YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
y = yaml.load(f)
{'name': 'tosan', 'age': 22, 'skill': {'name1': 'coding', 'time': '2years'}, 'job': [{'name2': 'JD', 'pay': '2k'}, {'name3': 'HW', 'pay': '4k'}]}
AI助手
这个警告取消方法是:添加默认loader
import yaml
f = open("configs/test.yml", "r")
y = yaml.load(f, Loader=yaml.FullLoader)
print(y)
AI助手
保存:
content_dict = {
'name':"ch",
}
f = open("./config.yml","w")
print(yaml.dump(content_dict, f))
AI助手
支持的类型:
# 支持数字,整形、float
pi: 3.14
# 支持布尔变量
islist: true
isdict: false
# 支持None
cash: ~
# 时间日期采用ISO8601
time1: 2021-6-9 21:59:43.10-05:00
#强制转化类型
int_to_str: !!str 123
bool_to_str: !!str true
# 支持list
- 1
- 2
- 3
# 复合list和dict
test2:
- name: xxx
attr1: sunny
attr2: rainy
attr3: cloudy
AI助手
logging
日志排查工作对程序执行情况具有重要意义。借助日志记录,能够快速定位出现的问题。本文将简单介绍使用logging记录程序执行情况的方法。
logging模块介绍
logging是python自带的包,一共有五个level:
- debug: 该调试信息有助于了解程序运行状态,是调试过程中不可或缺的工具。
- info: 提供程序执行是否符合预期的明确指示,帮助判断程序运行状态。
- warn: 该警告信息提醒用户可能存在的潜在问题,但不会直接影响程序运行。
- error: 程序运行中出现的错误信息,可能导致功能异常,需及时处理。
- critical: 该严重错误可能导致系统崩溃,必须及时处理以确保系统稳定性。
logging用法
import logging
logging.basicConfig(format='%(asctime)s - %(message)s', datefmt='%d-%b-%y %H:%M:%S')
logging.info("program start")
AI助手
format参数设置了时间,规定了输出的格式。
import logging
#先声明一个 Logger 对象
logger = logging.getLogger(__name__)
logger.setLevel(level=logging.INFO)
#然后指定其对应的 Handler 为 FileHandler 对象
handler = logging.FileHandler('Alibaba.log')
#然后 Handler 对象单独指定了 Formatter 对象单独配置输出格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
AI助手
Filehandler负责将日志写入文件,例如,该系统会将所有记录写入到Alibaba.log文件夹中。
补充argparse和yaml的配合
# process argparse & yaml
if args.config:
opt = vars(args)
args = yaml.load(open(args.config), Loader=yaml.FullLoader)
opt.update(args)
args = opt
else: # yaml priority is higher than args
opt = yaml.load(open(args.config), Loader=yaml.FullLoader)
opt.update(vars(args))
args = argparse.Namespace(**opt)
AI助手
完整实验管理示例
参考文献:
https://github.com/L1aoXingyu/Deep-Learning-Project-Template
https://sungwookyoo.github.io/tips/ArgParser/
https://github.com/KaiyangZhou/deep-person-reid
https://www.cnblogs.com/pprp/p/10624655.html
实验的完整记录需要以下几方面内容:
- 日志文件:追踪运行全过程的详细日志信息。
- 权重文件:在运行过程中保存的中间检查点。
- 可视化文件:在TensorBoard中显示的文件。
- 配置文件:详细记录当前运行的配置参数(调参时不可或缺)。
- 文件备份:用于保存当前代码版本的文件,便于回滚操作。
那么按照以下方式进行组织:
exp
- 实验名+日期
- runs: tensorboard保存的文件
- weights: 权重文件
- config.yml: 配置文件
- scripts: 核心文件备份
- train.py
- xxxxx.py
AI助手
代码实现:
import logging
import argparse
import yaml
parser = argparse.ArgumentParser("ResNet20-cifar100")
parser.add_argument('--batch_size', type=int, default=2048,
help='batch size') # 8192
parser.add_argument('--learning_rate', type=float,
default=0.1, help='init learning rate') parser.add_argument('--config', help="configuration file",
type=str, default="configs/meta.yml")
parser.add_argument('--save_dir', type=str,
help="save exp floder name", default="exp1")
args = parser.parse_args()
# process argparse & yaml
if args.config:
opt = vars(args)
args = yaml.load(open(args.config), Loader=yaml.FullLoader)
opt.update(args)
args = opt
else: # yaml priority is higher than args
opt = yaml.load(open(args.config), Loader=yaml.FullLoader)
opt.update(vars(args))
args = argparse.Namespace(**opt)
args.exp_name = args.save_dir + "_" + datetime.datetime.now().strftime("%mM_%dD_%HH") + "_" + \
"{:04d}".format(random.randint(0, 1000))
# 文件处理
if not os.path.exists(os.path.join("exp", args.exp_name)):
os.makedirs(os.path.join("exp", args.exp_name))
# 日志文件
log_format = "%(asctime)s %(message)s"
logging.basicConfig(stream=sys.stdout, level=logging.INFO,
format=log_format, datefmt="%m/%d %I:%M:%S %p")
fh = logging.FileHandler(os.path.join("exp", args.exp_name, 'log.txt'))
fh.setFormatter(logging.Formatter(log_format))
logging.getLogger().addHandler(fh)
logging.info(args)
# 配置文件
with open(os.path.join("exp", args.exp_name, "config.yml"), "w") as f:
yaml.dump(args, f)
# Tensorboard文件
writer = SummaryWriter("exp/%s/runs/%s-%05d" %
(args.exp_name, time.strftime("%m-%d", time.localtime()), random.randint(0, 100)))
# 文件备份
create_exp_dir(os.path.join("exp", args.exp_name),
scripts_to_save=glob.glob('*.py'))
def create_exp_dir(path, scripts_to_save=None):
if not os.path.exists(path):
os.mkdir(path)
print('Experiment dir : {}'.format(path))
if scripts_to_save is not None:
if not os.path.exists(os.path.join(path, 'scripts')):
os.mkdir(os.path.join(path, 'scripts'))
for script in scripts_to_save:
dst_file = os.path.join(path, 'scripts', os.path.basename(script))
shutil.copyfile(script, dst_file)
AI助手
结果

3、参考
知乎上,一位发了6篇SCI的师兄分享了科研工具的心得与精选清单,为科研人提供了实用的工具包。
