跳转至

Python

从零开始搭建卷积神经网络组件

本文是深度学习课程的一次练习,使用 Numpy 实现了 CNN 中卷积层、池化层的前向传播与反向传播。

以下是一个典型卷积层的计算过程:

  • 输入张量:\(X \in \mathbb{R}^{M \times N \times D}\)。例:\(D=1\) 时,输入的是 \(M \times N\) 维的灰度图像; \(D=3\) 时,输入的是 \(M \times N\) 维的彩色图像。
  • 卷积核:\(W \in \mathbb{R}^{U \times V \times D \times P}\),其中每个切片矩阵 \(W^{d, p} \in \mathbb{R}^{U \times V}\), \(1 \leq d \leq D, 1 \leq p \leq P\)
  • 输出张量: \(Y \times \mathbb{R}^{M^{\prime} \times N^{\prime} \times P}\)

conv_single_step

基于 ChatGPT 的在线问答机器人

本文介绍了如何基于 OpenAI ChatGPT 接口和 feffery components 构建在线问答机器人,并基于 render 实现自动化持续部署。

它支持:

  1. 开启多轮对话模式,它将记住你之前的问题。
  2. 导出当前对话记录为 Markdown 文件,你可以将其保存到本地。
  3. 一键清空当前对话记录。

使用它!

image-20230305114453764

VS Code 代码片段

许多常用的代码片段是重复、通用的,将它们记录并整理起来,在需要时可以方便地调用,可以大幅提高编码效率。

VS Code 代码片段功能是一个非常好用的功能,在保存代码片段后,只需输入几个前缀,即可自动生成代码片段。

利用 snippet-generator 这个工具自动生成代码片段,可以让整理代码片段的过程更高效!

vscode-snippets

LightGBM 的用法

LightGBM 是一种基于决策树的梯度提升机(GBM)算法,它是一种快速、准确的机器学习算法,可以用于分类和回归问题。

本文介绍了 LightGBM 的使用方法和代码示例,并记录了自定义损失函数、打印训练过程、迭代次数参数等问题的解决方法。

LightGBM_logo_black_text

使用 pdb 调试代码

pdb 是 Python 内置的一个调试库,为 Python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。

常用的 pdb 命令

image-20230208010600684

Python 自动合并 PDF 文件

问题与需求

合并 PDF 文件是常用的操作,如果手动合并的话可以使用 Adobe Acrobat 这类专业软件,只要点点鼠标即可完成合并。

如果经常需要合并同样的文件(例如经常更新的中英文简历),可以使用 PyPDF2 包,几行代码即可实现自动合并 PDF 的功能。

代码实现

Python 中的赋值与深浅拷贝

Python 中的赋值只是引用了对象,当原变量发生改变时,新变量也会随之发生改变。

.copy()方法可以进行浅拷贝,它可以深拷贝父对象(一级目录),但子对象(二级目录)仍然只是引用。

.deepcopy()方法可以进行深拷贝,它可以深拷贝父对象(一级目录)和子对象(二级目录),当原变量改变时,深拷贝得到的变量不会发生任何改变。

Black 格式化 Python 代码

用 Black 自动格式化 Python 代码,编写规范、美观的 Python 代码,让阅读代码变成一种享受。

本文记录了在 VS Code 中安装 Black 时遇到的问题和解决方案。

python-formatter-black

Python 实现多列滚动计算——以“更优波动率”为例

对单列数据进行滚动计算,可以使用常规的.rolling()

如果需要对多列数据进行滚动计算,可以考虑下面两种方法:

  1. 引入外部包numpy_ext,使用其中的rollling_apply()方法。
  2. .rolling()中加入参数method='table'

本文以方正金工发表的一篇研报中提出的计算“更优波动率”为例,实现了对多列数据进行滚动计算,并对上述两种方法总结如下:

  1. numpy_ext.rollling_apply()需要引入外部包numpy_ext,该方法接受需要进行滚动计算的多个 Series,并返回计算出的一个数组。
  2. .rolling(method='table')是 Pandas 内置的函数(需要升级到较新的版本),指定method='table'后,就可以对数据框中的多列进行滚动计算,并返回一个数据框。若返回的多列结果相同,我们只需要取出其中一列即可。
  3. .rolling(method='table')使用了engine='numba',计算速度更快。