所有文章¶
ConcatDataset 和 StackDataset
在 PyTorch 中,ConcatDataset
和 StackDataset
是两种不同的数据集组合方式。本文介绍了它们的作用及其适用场景。
## 使用 ConcatDataset 连接数据集
concat_dataset = ConcatDataset([dataset1, dataset2])
## 遍历 ConcatDataset
for sample in concat_dataset:
print(sample)
## 使用 StackDataset 组合数据集
stack_dataset = StackDataset(dataset1, dataset2)
## 遍历 StackDataset
for sample in stack_dataset:
print(sample)
Layer Normalization
本文用一个简单的数值例子,说明了 LayerNorm 的作用。
借助 torchmetrics
的 CompositionalMetric
将越大越好的指标作为损失函数
在量化研究中,我们可以使用诸如 IC
一类的指标来衡量信号的质量。若将 IC
作为损失函数,我们自然是希望其值越大越好。但是,模型的优化过程总是朝着损失函数越小的方向进行的,因此我们需要将 IC
取反后作为损失值,使得模型朝着 IC
越大的方向优化。
本文介绍了一个便捷的方法,借助 torchmetrics
的 CompositionalMetric
将越大越好的指标作为损失函数。
pred = torch.tensor([1, 2, 3, 4]).to(torch.float32)
target = torch.tensor([2, 3, 5, 10]).to(torch.float32)
print("原始相关系数:", np.corrcoef(target, pred)[0, 1])
loss_fn = 0 - PearsonCorrCoef()
print("损失函数:", loss_fn(pred, target))
使用 papermill
运行 Jupyter Notebook
当执行两个具有前后依赖关系的 Jupyter Notebook 时,我们需要等待第一个 Notebook 运行完成,再开始运行第二个 Notebook。
一个笨拙的方法是,先预估好第一个 Notebook 运行需要的时间(例如 1 小时),然后在第二个 Notebook 的第一个 Cell 添加:
这将使第二个 Notebook 运行 1 小时后,再运行后续的 Cell。
上述方法需要事先预估第一个 Notebook 运行需要的时间,预估时间过短会导致第二个 Notebook 提前运行,预估时间过长又会导致第二个 Notebook 浪费很多时间在 time.sleep()
上。
本文介绍了如何使用 papermill
运行 Jupyter Notebook,实现控制先后运行两个 Notebook 的功能。
在 pypika
中使用 Criterion.all()
作为筛选条件占位符及其注意事项
pypika
能够通过编程方式动态生成 SQL 查询。本文介绍了 Criterion.all()
作为筛选条件占位符及其注意事项。
在 pypika
中自定义 SQL 函数
pypika
是一个在 Python 中构建 SQL 语句的工具。这篇文章提供了一个很棒的入门教程,介绍了许多 pypika
的基本用法。
本文以 ClickHouse 中的 quantileExact
函数为例,介绍如何在 pypika
中自定义函数,尤其是自定义字符串拼接方式的实现方法。
使用 np.polynomial.Polynomial
进行一元线性回归的一个注意事项
在使用 np.polynomial.Polynomial
进行一元线性回归时,未能得到预期的结果。经检查发现, Polynomial.fit()
会将数据缩放和平移到 window
参数上后,再进行回归估计。如果需要得到未缩放和平移的估计量,可以用 .convert().coef
。