4月23日

通过数据把图像数据.append到数组中,然后通过CSV将数组中的数据下入CSV文件。

def Write_csv(Data=[[None]],csv_file_name="Train.csv"):
    """
    向CSV文件中写入数据信息,有标签的话存放在数据最后位
    :param csv_file_name: CSV文件名
    :return: None,文件夹中会显示写入的数据信息
    """
    import csv
    with open(csv_file_name,"w",newline='') as csvfile:
        writer = csv.writer(csvfile)#写出来存在逗号
        # 没有逗号的写入方式,但是在读取的时候需要更改并处理数据
        # writer=csv.writer(csvfile, delimiter=' ',quotechar='|', quoting=csv.QUOTE_MINIMAL)
        #写入多行用writerows,写入单行用writerow
        writer.writerows(Data)
    print("Write All!")
 
def Write_Data():
    import os
    import cv2
    #第一层文件夹目录
    filename="..\\imgout\\"
    Data = []
    for file_1 in os.listdir(filename):
        #第二层文件夹目录,第一层文件夹下的下一层文件夹目录
        # print(file_1)file_1为文件名
        filename_1 = os.path.join(filename, file_1)
        Data_tmp = []
        # print(file_1)
        for file_2 in os.listdir(filename_1):
            #第三层文件夹,找到对应文件的地址
            filename_2 = os.path.join(filename_1, file_2)
            Data_tmp1=[]
            # print(filename_2)
            img = cv2.imread(filename_2,0)
            w,h=img.shape[:2]
            # data=np.reshape(img,[w*h])
            for i in range(w):
                for j in range(h):
                    Data_tmp1.append(img[i,j])
            #添加标签
            Data_tmp1.append(file_1)
            Data_tmp.append(Data_tmp1)
        Data=Data+Data_tmp
 
    Write_csv(Data)

使用FATE进行图片识别的深度神经网络联邦学习 - 知乎 (zhihu.com)

本文使用MNIST数据集,MNIST是手写数字识别的数据集。从kaggle下载csv格式的数据集。

FATE训练时需要数据集有id,MNIST数据集里有6w条数据,模拟横向联邦学习,把数据集分为两个各有3w条记录的数据集。

$ awk -F'\t' -v OFS=',' '
  NR == 1 {print "id",$0; next}
  {print (NR-1),$0}' mnist_train.csv > mnist_train_with_id.csv

这句话是在第一行最前面加上id,第二行开始加序号,并用逗号作为分隔符。

$ sed -i "s/label/y/g" mnist_train_with_id.csv

将表头的label替换成y,在FATE里label的名字通常为y。

$ split -l 30001 mnist_train_with_id.csv mnist_train_3w.csv

将mnist_train_with_id.csv分割,每一个文件有30001行(一行标题和30000行数据)。会生成两个文件:mnist_train_3w.csvaa和mnist_train_3w.csvab。将两个文件重命名:

$ mv mnist_train_3w.csvaa mnist_train_3w_a.csv
$ mv mnist_train_3w.csvab mnist_train_3w_b.csv
$ sed -i "`cat -n mnist_train_3w_a.csv |head -n 1`" mnist_train_3w_b.csv

将mnist_train_3w_a.csv文件的第一行(csv的表头)插入mnist_train_3w_b.csv的最前面。这样我们就得到了两个有表头和id的数据集,各有30000条数据。

分别将两个文件拷贝到两台机器上的/data/projects/fate/confs-<partyID>/shared_dir/examples/data目录里。

Shared_dir目录是本地文件系统和docker容器中文件系统的共享目录,使容器可以访问宿主机的文件。

Dataset 类
Dataset是一个抽象类,通常将数据包装为Dataset类,然后传入DataLoader中,我们再使用DataLoader这个类来更加快捷的对数据进行操作。不难发现,无论是使用自己的数据集还是官方的数据集(MNIST、ImageNet等),在使用自己Dataset 类时,需要继承Dataset 类,并且至少需要重写以下几个方法:

  • init():构造函数,可自定义数据读取方法以及进行数据预处理;
  • len():返回数据集大小;
  • getitem():通过索引返回某一个数据。
import torch
from torch.utils.data import Dataset

class myDataset(Dataset):
    # 构造函数
    def __init__(self, X, Y):
        super().__init__()  #调用父类-Dataset类的__init__方法
        self.X = X
        self.Y = Y
    # 返回数据集大小
    def __len__(self):
        return self.X.size(0)
    # 返回索引的数据与标签
    def __getitem__(self, index):
        return self.X[index], self.Y[index]

 当有多个数据集可供选择时,可以在选择数据集时比较数据集大小,尽量选择数据集大的数据集

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值