无人驾驶6个等级划分
美国汽车工程师学会 (SAE) 定义了6个无人驾驶等级 — 从 0 级(完全手动)到 5 级(完全自动)。这些无人驾驶等级准则已经被美国交通部采纳。
0 级(无自动驾驶)在当今的道路上行驶的大多数汽车都是 0 级:手动控制。由人来完成”动态驾驶任务”,尽管可能有相应的系统来辅助驾驶员,例如紧急制动系统,但从技术方面来讲,该辅助系统并未主动”驱动”车辆,所以算不上自动化驾驶。
1 级(驾驶员辅助)这是自动化的最低级别。车辆具有单独的自动化驾驶员辅助系统,例如转向或加速(巡航控制)。自适应巡航控制系统可以让车辆与前车保持安全距离,驾驶员负责监控驾驶的其他方面(例如转向和制动),因此符合 1 级标准。
2 级(部分自动驾驶)这指的是高级驾驶员辅助系统或 ADAS。车辆能够控制转向以及加速或减速。因为有驾驶员坐在汽车座位上,并且可以随时控制汽车,所以这一阶段的自动驾驶还算不上无人驾驶。特斯拉的 Autopilot 和凯迪拉克的(通用汽车)Super Cruise 系统都符合 2 级标准。
3 级(受条件制约的自动驾驶)从技术角度来看,从 2 级到 3 级实现了重大飞跃,但从驾驶人员 ...
PyTorch 模型保存和加载
在训练深度学习模型时,需要定时保存最优模型;当模型训练时间过长,中断训练判断是否继续训练时,需要保存模型;当训练好的模型拿给别人推断时,需要保存模型,等等。模型的保存和加载在深度学习模型的研究和推理时经常使用。本文介绍如何在 PyTorch 中保存和加载模型。
基本方法torch.save()将序列化对象保存到磁盘。此函数使用 Python 的 pickle 实用程序进行序列化。使用此功能可以保存各种对象的模型、张量和字典。
1torch.save(obj, f, pickle_module=<module 'pickle' from '/usr/local/miniconda/lib/python3.8/pickle.py'>, pickle_protocol=2)
1234obj – 保存对象f - 类文件对象 (返回文件描述符)或一个保存文件名的字符串,一般保存文件的扩展名为 .pth 或者 .ptpickle_module – 用于 pickling 元数据和对象的模块pickle_protocol – 指定 pickl ...
PyTorch 中的 nn 和 nn.functional
PyTorch 中有两个模块 torch.nn 和 torch.nn.functional 都可以用来构造深度学习神经网络模型,实现相同的功能,然而它们之间有着重要的差别。
大体上来说,torch.nn 更抽象,是对 torch.nn.functional 更高一层的实现,有点 keras vs. tensorflow(1.x) 的感觉。torch.nn 中的,如 ReLU、Conv2d等,是类,而 torch.nn.functional 中的,如 relu、conv2d 等,是函数。
torch.nntorch.nn 里面的类是 torch.nn.functional 中函数的封装,两者都继承于 torch.nn.Module,因此 torch.nn 除了具有 torch.nn.functional 的功能外,还附带了 torch.nn.Module 相关的属性和方法,如 train(), eval(), load_state_dict, state_dict 等。
torch.nn 需要先实例化,然后对实例化对象传入数据:
1234567import torchinputs ...
清理 Linux 系统内存 Cache
每个 Linux 系统都有三个选项可以在不中断任何进程或服务的情况下清除缓存。本篇代码以 root 身份在 Ubuntu 18.04演示。
仅清除页面缓存(Clear PageCache only)1sync; echo 1 > /proc/sys/vm/drop_caches
清除目录项和inode(Clear dentries and inodes)1sync; echo 2 > /proc/sys/vm/drop_caches
清理三者(Clear PageCache, dentries and inodes)1sync; echo 3 > /proc/sys/vm/drop_caches
同步 (sync) 将刷新文件系统缓冲区。命令以 “;” 分隔依次运行。在执行序列中的下一个命令之前,shell 等待每个命令终止。正如内核文档中提到的,写入 drop_cache 将清除缓存而不杀死任何应用程序/服务,命令 echo 正在执行写入文件的工作。
如果您必须清除磁盘缓存,第一个命令在企业和生产中是最安全的“…echo 1 > …”。只会 ...
深度学习中的欠拟合和过拟合
人类专家在完成某项任务的准确性可以作为深度学习完成同样任务合理目标的参考。由于人类专家人类专家也有犯错的概率,因此,利用他们准备的数据集训练模型,不能期望100%的准确率。在深度学习模型训练中常遇到欠拟合和过拟合,我认为这主要是因为数据量和模型不匹配导致的。当模型简单时,如线性模型、参数量少等,训练数据量需求相对较少;当模型复杂时,如指数、参数量多等,训练数据量需求就会相对较多。
欠拟合当模型的训练误差明显大于理想模型的预期误差时,说明发生了欠拟合。在深度学习中,当模型在训练集上表现不佳时,称模型具有高偏差(bias)。
解决欠拟合处理欠拟合模型的最佳方法是尝试更大的神经网络(添加新层或增加现有层中的神经元数量)或对模型进行更长时间的训练。
更大的神经网络
这是因为欠拟合的神经网络可能不足以捕捉训练数据集中的模式。在这种情况下,添加更多层或增加神经元数量可能有助于解决问题。
更长时间的训练
欠拟合的模型是尚未找到参数最佳值,增加训练时间可能会有帮助。
过拟合当模型在训练集上表现良好,但在使用验证集或测试数据集时无法达到良好的准确性时,就会发生过拟合。这类问题称为高方差(va ...
Python 逻辑运算
Python 的逻辑运算符包括 and, or, not,但位运算符 & (按位与运算符), | (按位或运算符) 有时也可以达到 and, or 的效果,有时,只有位运算符才能完成,如 pandas 中。下面进行总结,主要介绍 and, or 和 &, |.
基本介绍离散数学中,假设 p 和 q 都是命题,那么
p 且 q: 当 p 和 q 都取值为真时结果才为真;
p 或 q: 当 p 和 q 都取值为假时结果才为假;
Python 逻辑运算命题为逻辑变量时当命题为逻辑变量时,即取值为 True, False 布尔值时,and, or 和 &, | 相对应的运算符用法基本一致,除了在pandas中。
也就是说,以下的表达式结果都为 True
123456789(True & True) == (True and True)(True & False) == (True and False)(False & True) == (False and True)(False & False) == (False and F ...
Mac 电脑重设密码
当某天突然 Mac 电脑无法通过输入密码正常进入系统,但密码正确无误,不知什么原因,可通过如下方式重设密码。
关机按住开机键3秒,电脑强制关机
进入恢复模式按住 command + r 键保持住,然后按开机键开机,进入恢复模式
通过终端命令重设密码在左上角菜单栏找到 实用程序,选择 Terminal,输入 resetpassword 回车
此时会弹出一个界面,请同时设定所有用户的密码,可以重设管理员密码。
重设确认后,重启电脑即可。
其他重设密码方法如果能够正常进入 Mac 系统,可以使用如下方法重设密码
打开 系统便好设置 找到 用户和群组 打开小锁, 点击更改密码
如果勾选了运行用户使用Apple ID重设密码,那么开无法登陆系统时可尝试 Apple ID 找回密码。
参考链接1.mac系统登录密码对的但无法登录
如何查看服务器上的 GPU 信息
服务器上安装好了 GPU,同时也安装好了 nvidia drivers、cuda-toolkit、cudnn,那么如何查看 GPU 是否可以正常运行,已经如何读懂各参数信息呢?下面以 Ubuntu 18.04 来说明。
nvcccuda 编译器驱动程序 nvcc 的目的是向开发人员隐藏 cuda 编译的复杂细节。详细介绍请参考英伟达官网
这里主要是使用该程序查看 cuda 编译器工具的版本
123456789101112131415# 查看 nvcc 路径$ whereis nvccnvcc: /usr/local/cuda-10.0/bin/nvcc.profile /usr/local/cuda-10.0/bin/nvcc /usr/share/man/man1/nvcc.1# 查看 cuda 编译器工具的版本信息$ nvcc -Vnvcc: NVIDIA (R) Cuda compiler driverCopyright (c) 2005-2018 NVIDIA CorporationBuilt on Sat_Aug_25_21:08:01_CDT_2018Cuda comp ...
把 jupyter notebook 导出为 pdf
在 Jupyter Notebook 中书写代码非常方便,同时可以书写 Markdown 说明文档,使得其展示、交流非常高效。但是,常常需要我们把 Jupyter Notebook 导出为 PDF 才更容易交流,这样接收者只需要能打开 PDF 即可,不需要专门安装打开 .ipynb 的工具。但是,从Jupyter Notebook 导出 PDF 需要安装一些包,这里以 Debian 平台为例。
12sudo apt updatesudo apt install texlive texlive-latex-extra pandoc texlive-xetex
在 Python 中调用 Shell 命令
使用 Python 调用 Shell 命令能够非常方便的使用原生 Shell 命令,扩大 Python 的使用作用范围。进一步说明了 Python 作为胶水语义的特性。
Python 中使用 shell 命令使用 !号仅在 Jupyter Notebook 中可以使用。对于一些简单命令,如ls, pwd等其实不使用!也是可以的, 但是稍微复杂的 shell 命令是不行的,建议都使用 ! 作为 shell 命令的开头在 Jupyter Notebook 中使用。
1234567891011121314151617!ls>...username = !whoamiusername> 'jinzhongxu'username[0]> 'jinzhongxu'type(username)> IPython.utils.text.SList!ls /home/{username[0]}> Desktop examples.desktop Music Videos Documents ...
Canny 图像边缘检测算法
图像边缘检测(Edge Detection)作为图像处理和计算机数据的基本问题,其目的是识别数字图像中亮度变化明显的点。图像中这些显著变化的部分反映了重要事件或其他变化,包括深度上的不连续,表面方向的不连续,物质属性的改变和场景照明的变化等。图像边缘检测能够剔除认为不相关的信息,大幅度地减少数据量,同时保留图像重要的结构属性。有两类边缘检测方法,一类是基于查找(一阶),一类是基于零穿越(二阶)。(根本上基于数学分析中方法,查找方法是寻求梯度最大的点,零穿越是寻求拐点,即二阶导数为 0 的点)基于查找的方法通过寻找图像一阶导数中的最大和最小值来检测边界,通常是将边界定位在梯度最大的方向。基于零穿越的方法通过寻找图像二阶导数零穿越来寻找边界,通常是 Laplacian 过零点或者非线性差分表示的过零点。
常用的边缘检测算子有:
一阶:Roberts Cross 算子, Prewitt 算子, Sobel 算子, Canny 算子,罗盘算子
二阶:Marr-Hildreth, 在梯度方向的二阶导数过零点。
Canny算子是最常用的边缘检测方法,图像边缘检测效果相对较优。
本篇主要介绍 ...