Transformer
Transformer 是一种 Seq2seq 模型,即 input a sequence, output a sequence. 应用包括语音识别(输入语音,输出文本)、机器翻译(输入一种语言文本,输出另一种语言文本)、语言翻译(输入一种语言的语音,输出是另一种语言的文本,如字幕)、语音合成(输入一种语言文本,输出另一种语言的语音)、聊天机器人(对话)等,这些都可以看作 QA(Question & Answering)问题,都可以使用 Seq2seq 模型解决。
Seq2seq一般的 Seq2seq 模型的一般框架
1input sequence -> Encoder -> Decoder -> output sequence
如 Transformer 就是该模型的一种。李宏毅老师的课件:Transformer
Self-attentionself-attention 中文是自注意力,它对于输入的向量输出相同数量的向量。
如上图所示,$a^i, i = 1, 2, 3, 4$ 为输入向量(如词嵌入向量),$q^i, i = 1, ...
在 Ubuntu 上删除软件和清理配置文件
在 Ubuntu(或其他 Debian 类系统)上安装卸载软件常常都是通过包管理器 apt (或 apt-get) 来实现的。通过 apt remove packagename 和 apt purge packagename 都可以卸载软件,那么它们都有什么区别呢,它们都做了什么呢?本篇进行简单介绍。
remove使用命令
1apt remove packagename
确实能够卸载软件,但是,它会保留软件的配置文件信息。当下次再次安装该软件时,将会检索到保留的配置文件,安装时将会跳过软件的配置环节。
dpkg使用命令 dpkg --list packagename 可以查看软件的信息,如
1234567$ dpkg --list pythonDesired=Unknown/Install/Remove/Purge/Hold| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend|/ Err?=(none)/Reinst-required (Status,Err: upperc ...
Python 定时任务
利用计算机能够帮助我们执行定时定点或者间隔时间段的任务,特别是对于容易遗忘、重复操作、准点执行等任务非常方便。除了在 Linux 上使用 corntab 等完成之外,在 Python 中也可以编程实现定时定点等任务的执行。本篇介绍 time, threading.Timer, schedule, apscheduler 等四个模块。
Time定时 3 秒后,依次执行相同任务 5 次
1234567891011from datetime import datetimeimport timedef showTime(count): time.sleep(count) print(datetime.now().strftime("%Y/%m/%d %H:%M:%S"))# 使用 while 可永久执行for i in range(5): showTime(3)
Threading.Timer定时 3 秒后,同时执行相同任务 5 次
123456789101112from datetime import datetimefrom threading ...
命令行运行 Python 代码时传参数
Python 代码能够以多种形式运行,如在 JupyterLab 中交互式方式、在 PyCharm 中以工程代码形式运行。有时,我们还需要在终端或CMD 以命令行的形式运行。这些运行方式都能够实现 Python 代码的运行。对于需要自定义参数的代码,在 JupyterLab 中我们可以把参数写入单元格内,在 PyCharm 中我们可以将参数写入配置文件内,那么在终端或CMD运行 Python 代码时,如何传入参数呢,下面介绍两种方法。
利用 sys 包编写名为 shellSysArgv.py 的模块
12345678910111213import sys# 测试命令行运行 python 代码时传参数def main(x, y): print(f"x={x}, y={y}") print("done!") if __name__=="__main__": x = sys.argv[1] y = sys.argv[2] main(x, y)
...
数学中集合在 Python 中的操作
在数学中,集合(Set)是一个基本概念,指具有某种特定性质的事物的总体,集合里的事物称作元素。元素 $x$ 和集合 $A$ 之间有属于($x \in A$)和不属于($x \notin A$)关系,集合有势(#$A$, $Card(A)$, $|A|$)的概念,集合有子集和包含关系($B \subset A$),两集合 $A, B$ 间有并($A\cup B$)、交($A \cap B$)、差($A - B$)、对称差($A \triangle B$)运算。在 Python 中,对于该数学概念进行了定义,下面我们进行介绍。
集合定义123456789101112A = set('abc')B = set(['c', 'd', 'e'])C = {'c', 'm', 'n'}A{'a', 'b', 'c'}B{'c', ...
利用 git 把本地代码保存到远程仓库
现如今大多数开发者都会将本地开发的代码托管到远程仓库,那如何将本地新创建的工程代码保存到远程服务器的新仓库呢?下面给出实现过程。
创建远程仓库以 github 为例。
登录账户,在界面右上交点击加号,选择 New repository,输入仓库名称,如 test,其他都不选。点击 Create repository
本地代码托管在本地,将代码首先初始化 git,然后添加远程仓库地址,上传即可。
1234567cd hello-testgit initgit remote add origin git@github.com:xujinzh/hello-test.gitgit add .git commit -m "release 1.0.0"git branch -M maingit push -u origin main
JupyterLab 中单元格同时能够输出多行的方法
在 JupyterLab 中书写 Python 代码非常的方便,交互性强,并且能够书写 Markdown 文档等。但是,使用其进行多行打印输出时,要么使用 print 函数,要么把需要输出的参数都写在最后一行,这大大降低了其交互性。下面给出一种解决方法。
解决方案 1每次在 JupyterLab 的第一行添加如下代码
123from IPython.core.interactiveshell import InteractiveShellInteractiveShell.ast_node_interactivity = "all"
解决方案2在配置文件中修改,这样不用每次在 JupyterLab 首行都添加代码
终端输入如下命令,创建 ipython_config.py 文件
1vim ~/.ipython/profile_default/ipython_config.py
在文件中写入如下内容
12c = get_config()c.InteractiveShell.ast_node_interactivity = "all"
...
JupyterLab 中 Pandas 打印行列省略问题
在 JupyterLab 中书写 Python 代码非常的方便,交互性强,并且能够书写 Markdown 文档等。但是,使用其处理 Pandas 的 DataFrame 对象时,当表格数据行或列太大时,打印时总是显示不全,在中间出现一些省略号,这使得想要查看所有内容时不是太方便,下面给出一种方法,能够显示所有的行和列。
解决方案在 JupyterLab 的第一个单元格内,添加如下内容:
12345678import pandas as pd# 显示所有列pd.set_option('display.max_columns', None)# 显示所有行pd.set_option('display.max_rows', None)# 设置 value 的显示长度为 100,默认为 50pd.set_option('max_colwidth',100)
在 JupyterLab 中使用如下命令,可以查看所有可自定义参数
1pd.set_option?
参考链接
pandas中关于DataFrame行,列显示不完全(省略) ...
PyTorch 中 Dataset 和 DataLoader 类的使用方法
近年来,在学术界和工业界基于 PyTorch 进行深度学习算法研究及模型部署越来越流行,甚至超过了 TensorFlow. 除了其基于动态图的特性外,最主要的是其语法更贴近 Python,容易开发实现和调试。本篇介绍 PyTorch 中为目标跟踪等视觉领域提供的两个基础类 Dataset 和 DataLoader,给出它们的使用方法。
利用 PyTorch 进行深度学习训练的一般流程
首先创建自定义的 Dataset 类 和 Sampler 类(数据采用策略);
创建自定义的 DataLoader 类;
DataLoader 依据 Dataset 和 Sampler 迭代产生训练数据提供给模型进行训练。
总的来说,DataLoader 负责批次调度数据,Sampler 负责数据调度的采样策略生成索引(默认整数),Dataset 负责通过索引提取数据。
Dataset 封装数据集,通过索引获取元素, Sampler 提供索引次序,DataLoader 是一个调度器,迭代 DataLoaderIter 的过程中,迭代Sampler 获得下一索引,并通过该索引使用 Fetcher(Fe ...
手动更新 oh-my-zsh
我比较喜欢使用 zsh,特别是搭配 Oh My ZSH,它有很多方便的功能以及各种主题。但它不会自动更新,特别是 Mac 上很少关闭 Terminal 导致oh-my-zsh 不是最新的。下面介绍一种手动更新 oh-my-zsh 的方法。
手动更新使用如下命令
1omz update
或者
12cd ~/.oh-my-zsh/toolszsh upgrade.sh
其他设置解译 *,默认情况下,zsh 会自动解译 *,直接使用 * 会出现 no matches find,如 grep -nr --include=*.{py,sh} args ./codes,一种解决方法是在 * 左右增加上双引号或单引号,最好的解决方法是下面:
1234567vim ~/.zshrc# 增加如下内容setopt no_nomatch# 设置当前终端生效source ~/.zshrc
设置成功后,之后就可以直接使用 *,而不用增加双引号或单引号了。
参考链接
Manually update oh-my-zsh
How to Manually Update Oh-My-ZSH
...
利用 OpenCV(Python) 读取网上的图片和视频
在进行目标跟踪研究中,有时候需要直接读取网上的图片和视频,这时候利用 OpenCV 再加上 urllib、pafy、numpy 等就可以直接获取互联网上的各种图片和视频资源.
从网上读取图片12345678910111213141516171819202122232425262728293031323334353637import cv2import numpy as npimport urllibimport matplotlib.pyplot as plt# 读取网上图片url_img = 'https://c-ssl.dtstatic.com/uploads/blog/202105/27/20210527174258_991e1.thumb.1000_0.jpg'res = urllib.request.urlopen(url_img)i = np.asarray(bytearray(res.read()), dtype="uint8")img = cv2.imdecode(i, cv2.IMREAD_COLOR)# 或者如下(先读取 ...