分布式機器學習常用數據集-編程思維

今天開始跑分布式機器學習論文實驗了,這裡介紹一下論文的常用數據集(因為我的研究領域是分布式機器學習,所以下面列出的數據集可能偏向這方面,做其他方向的童鞋參考下就好)。

1. CV數據集

(1)FEMINIST

任務:手寫字符識别
參數說明: 62種不同的字符類别 (10種數字, 26種小寫, 26種大寫)的像素圖片, 圖片全為28乘28像素大小 (可以選擇将其轉為128×128), 樣本數805263。
介紹: FEMNIST數據集全名Federated-MNIST, 屬于專門給聯邦學習用的基準數據集leaf的成員之一。
官網https://leaf.cmu.edu/
引用方式:S Caldas, LEAF: A Benchmark for Federated Settings, 2018.
獲取方式:采用腳本獲取

wget https://s3.amazonaws.com/nist-srd/SD19/by_class.zip
wget https://s3.amazonaws.com/nist-srd/SD19/by_write.zip

(2)EMINIST

任務:手寫字符識别
參數說明: 按照byclass方式split的話是62種不同的字符類别(各類别數量不均衡) (10種數字, 26種小寫, 26種大寫)的像素圖片, 圖片全為28乘28像素大小, 樣本數814255。
介紹: EMNIST數據集全名extension of MNIST,是MINIST數據集的擴展版。
官網https://www.nist.gov/itl/products-and-services/emnist-dataset
引用方式:Cohen G, EMNIST: an extension of MNIST to handwritten letters, 2017
獲取方式:可以采用腳本獲取

wget https://www.itl.nist.gov/iaui/vip/cs_links/EMNIST/gzip.zip

也可以直接從torchvision中開箱即用

from torchvision.datasets import EMNIST
from torchvision.transforms import Compose, ToTensor, Normalize
RAW_DATA_PATH = './rawdata'
transform = Compose(
        [ToTensor(),
         Normalize((0.1307,), (0.3081,))
         ]
    )
dataset = EMNIST(
        root=RAW_DATA_PATH,
        split="byclass",
        download=True,
        train=True,
        transform=transform
    )

(3)CIFAR10

任務:圖像分類
參數說明: 10種32x32的彩色圖片(包括人、動物、花、昆蟲等), 每種類别都有6000張圖片. 50000張訓練圖片10000張測試圖片.
介紹: CIFAR-10 是所謂的8千萬張微型圖片數據集的有标簽子集。
官網https://www.cs.toronto.edu/~kriz/cifar.html
引用方式:Alex Krizhevsky, Learning Multiple Layers of Features from Tiny Images, 2009.
獲取方式
直接從torchvision中開箱即用

from torchvision.datasets import CIFAR10
from torchvision.transforms import Compose, ToTensor, Normalize
RAW_DATA_PATH = './rawdata'
transform = Compose([
    ToTensor(),
    Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010))
])
dataset = CIFAR10(
        root=RAW_DATA_PATH,
        download=True,
        train=True,
        transform=transform
    )

(3)CIFAR100

任務:圖像分類
參數說明: 100種32x32的彩色圖片(包括人、動物、花、昆蟲等), 每種類别都有600張圖片. 500張訓練圖片100張測試圖片.
介紹: CIFAR-10的兄弟,也是所謂的8千萬張微型圖片數據集的有标簽子集。
官網https://www.cs.toronto.edu/~kriz/cifar.html
引用方式:Alex Krizhevsky, Learning Multiple Layers of Features from Tiny Images, 2009.
獲取方式
直接從torchvision中開箱即用

from torchvision.datasets import CIFAR100
from torchvision.transforms import Compose, ToTensor, Normalize
RAW_DATA_PATH = './rawdata'
transform = Compose([
    ToTensor(),
    Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010))
])
dataset = CIFAR100(
        root=RAW_DATA_PATH,
        download=True,
        train=True,
        transform=transform
    )

2. NLP數據集

(1)Shakespeare

任務:下一個字符預測
參數說明:總共4,226,15條樣本
介紹: 和FEMNST一樣,屬于專門給聯邦學習用的基準數據集leaf的成員之一。
官網https://leaf.cmu.edu/
引用方式:LEAF: A Benchmark for Federated Settings
獲取方式
用腳本獲取

wget http://www.gutenberg.org/files/100/old/1994-01-100.zip

3.普通回歸/分類

(1)Synthetic

任務:二分類
參數說明:用戶能夠自定義分布式節點數量, 類别數量以及維度

介紹: 這個數據集提供了一個生成人工的、但是有挑戰性的聯邦學習數據集方法, 我們要求的目标是分布式節點上的模型能夠盡量有獨立性。論文中詳細地給出了數據集的生成過程。和FEMNST一樣,屬于專門給聯邦學習用的基準數據集leaf的成員之一。
官網https://leaf.cmu.edu/
引用方式:LEAF: A Benchmark for Federated Settings
獲取方式
需按照下列python代碼對數據集進行人工生成

from scipy.special import softmax
NUM_DIM = 10
class SyntheticDataset:

    def __init__(
            self,
            num_classes=2,
            seed=931231,
            num_dim=NUM_DIM,
            prob_clusters=[0.5, 0.5]):

        np.random.seed(seed)

        self.num_classes = num_classes
        self.num_dim = num_dim
        self.num_clusters = len(prob_clusters)
        self.prob_clusters = prob_clusters

        self.side_info_dim = self.num_clusters

        self.Q = np.random.normal(
            loc=0.0, scale=1.0, size=(self.num_dim + 1, self.num_classes, self.side_info_dim))

        self.Sigma = np.zeros((self.num_dim, self.num_dim))
        for i in range(self.num_dim):
            self.Sigma[i, i] = (i + 1)**(-1.2)

        self.means = self._generate_clusters()

    def get_task(self, num_samples):
        cluster_idx = np.random.choice(
            range(self.num_clusters), size=None, replace=True, p=self.prob_clusters)
        new_task = self._generate_task(self.means[cluster_idx], cluster_idx, num_samples)
        return new_task

    def _generate_clusters(self):
        means = []
        for i in range(self.num_clusters):
            loc = np.random.normal(loc=0, scale=1., size=None)
            mu = np.random.normal(loc=loc, scale=1., size=self.side_info_dim)
            means.append(mu)
        return means

    def _generate_x(self, num_samples):
        B = np.random.normal(loc=0.0, scale=1.0, size=None)
        loc = np.random.normal(loc=B, scale=1.0, size=self.num_dim)

        samples = np.ones((num_samples, self.num_dim + 1))
        samples[:, 1:] = np.random.multivariate_normal(
            mean=loc, cov=self.Sigma, size=num_samples)

        return samples

    def _generate_y(self, x, cluster_mean):
        model_info = np.random.normal(loc=cluster_mean, scale=0.1, size=cluster_mean.shape)
        w = np.matmul(self.Q, model_info)
        
        num_samples = x.shape[0]
        prob = softmax(np.matmul(x, w) + np.random.normal(loc=0., scale=0.1, size=(num_samples, self.num_classes)), axis=1)
                
        y = np.argmax(prob, axis=1)
        return y, w, model_info

    def _generate_task(self, cluster_mean, cluster_id, num_samples):
        x = self._generate_x(num_samples)
        y, w, model_info = self._generate_y(x, cluster_mean)

        # now that we have y, we can remove the bias coeff
        x = x[:, 1:]

        return {'x': x, 'y': y, 'w': w, 'model_info': model_info, 'cluster': cluster_id}

機器學習--決策樹算法(CART)-編程思維

CART分類樹算法 特征選擇 ​ 我們知道,在ID3算法中我們使用了信息增益來選擇特征,信息增益大的優先選擇。在C4.5算法中,采用了信息增益比來選擇特征,以減少信息增益容易選擇特征值多的特征的問題。但是無論是ID3還是C4.5,都是基于信息論的熵模型的,這裡面會涉及大量的對數運算。能不能簡化模型同時也不至于完全丢

三分鐘玩轉微軟AI量化投資開源庫QLib-編程思維

更多精彩内容,歡迎關注公衆号:數量技術宅,也可添加技術宅個人微信号:sljsz01,與我交流。 微軟QLib簡介 微軟亞洲研究院發布了 AI 量化投資開源平台“微礦 Qlib”。Qlib 涵蓋了量化投資的全過程,為用戶的 AI 算法提供了高性能的底層基礎架構,從框架設計上讓用戶可以更容易地應用 AI 算法來輔助解決量化

多任務學習中的數據分布問題(一)-編程思維

今天這個專題源于我在做分布式多任務學習實驗時在選取數據集的時候的疑惑,以下我們讨論多任務學習中(尤其是在分布式的環境下)如何選擇數據集和定義任務。 多任務學習最初的定義是:"多任務學習是一種歸納遷移機制,基本目标是提高泛化性能。多任務學習通過相關任務訓練信号中的領域特定信息來提高泛化能力,利用共享表示采用并行訓練的方法

K-Means聚類算法-編程思維

K-Means聚類算法實現 代碼: import pandas as pd import random as rd import matplotlib.pyplot as plt from matplotlib.pylab import style iris_data = pd.read_csv("iris.csv"

高通量計算框架HTCondor(六)——拾遺-編程思維

目錄1. 正文1.1. 一些問題1.2. 使用建議2. 相關 1. 正文 1.1. 一些問題 如果真正要将HTCondor高通量計算産品化還需要很多工作要做,HTCondor并沒有GUI界面,更多更全面的功能在Linux系統下的命令窗口下更方便。 拆分任務也是使用者值得考慮的問題,很多的密集運算其實不太方便拆分,拆分後

高通量計算框架HTCondor(二)——環境配置-編程思維

目錄1. 概述2. 安裝3. 結果4. 相關 1. 概述 HTCondor是開源跨平台的分布式計算框架,在其官網上直接提供了源代碼和Windows、Linux以及MacOS的安裝包。因為平台限制的原因,在Windows下的功能是有所限制的,但其使用也是最直觀方便的。為了更加便于了解使用情況,這裡我還是采用Windows

分布式機器學習常用數據集-編程思維

今天開始跑分布式機器學習論文實驗了,這裡介紹一下論文的常用數據集(因為我的研究領域是分布式機器學習,所以下面列出的數據集可能偏向這方面,做其他方向的童鞋參考下就好)。 1. CV數據集 (1)FEMINIST 任務:手寫字符識别參數說明: 62種不同的字符類别 (10種數字, 26種小寫, 26種大寫)的像素圖片,

分布式多任務學習論文閱讀(五):論文閱讀總結-編程思維

分布式多任務學習論文閱讀(五):論文閱讀總結 做為最後一篇分布式多任務學習的論文閱讀記錄,我決定對我目前為止粗讀和精讀的論文進行一次總結,然後陳述一些個人對該研究領域的見解和想法。 1. 論文總結歸納 目前已經有許多論文對多任務學習提出了分布式并行方案。在分布式多任務學習中,傳統的處理方式[1][2][3]仍然是基于主