小编san*_*sar的帖子

Pytorch tensor.save() 为来自 MNIST 的小张量生成大文件

我正在使用来自Kaggle challange 的MNIST 数据集,并且在数据预处理方面遇到了麻烦。此外,我不知道什么是最佳实践,想知道您是否可以就此提出建议。

免责声明:我不能只使用 torchvision.datasets.mnist 因为我需要使用 Kaggle 的数据进行训练和提交。

教程中,建议创建一个从文件加载 .pt 张量的 Dataset 对象,以充分利用 GPU。为了实现这一点,我需要加载 Kaggle 提供的 csv 数据并将其保存为 .pt 文件:

import pandas as pd
import torch
import numpy as np

# import data
digits_train = pd.read_csv('data/train.csv')

train_tensor = torch.tensor(digits_train.drop(label, axis=1).to_numpy(), dtype=torch.int)
labels_tensor = torch.tensor(digits_train[label].to_numpy()) 

for i in range(train_tensor.shape[0]):
    torch.save(train_tensor[i], "data/train-" + str(i) + ".pt")

Run Code Online (Sandbox Code Playgroud)

每个train_tensor[i].shapetorch.Size([1, 784])

但是,每个此类 .pt 文件的大小约为 130MB。相同大小的张量,随机生成整数,大小为 6.6kB。为什么这些张量如此巨大,我该如何减小它们的大小?

数据集是 42 000 个样本。我什至应该打扰批处理这些数据吗?我是否应该费心将张量保存到单独的文件中,而不是将它们全部加载到 RAM 中然后分批?这里最好的方法是什么?

python data-science pytorch kaggle

6
推荐指数
1
解决办法
2590
查看次数

使用 TaskFlowAPI 在 Apache Airflow 中进行分支

我在 Airflow 的 TaskFlowAPI 中找不到分支的文档。我尝试以“Pythonic”方式进行操作,但是当运行时,DAG 没有看到task_2_execute_if_true,无论前一个任务返回的真值如何。

@dag(
    schedule_interval=None,
    start_date=pendulum.datetime(2021, 1, 1, tz="UTC"),
    catchup=False,
    tags=['test'],
)
def my_dag():
    @task()
    def task_1_returns_boolean():
        # evaluate and return boolean value
        return boolean_value
    
    @task()
    def task_2_execute_if_true():
        # do_something...

    outcome_1 = task_1_returns_boolean()
    if outcome_1:
        outcome_2 = task_2_execute_if_true() 


executed = my_dag()
Run Code Online (Sandbox Code Playgroud)

TaskFlowAPI 中正确的分支方式是什么?我应该再添加一个专门用于分支的函数吗?

python airflow airflow-taskflow

2
推荐指数
1
解决办法
1459
查看次数