NumPy记录

作者: yumiii_ | 来源:发表于2019-02-08 13:20 被阅读37次

    1.对数据进行shuffle

    直接shuffle数组:
    1⃣️np.random.permutation

    data = [1, 4, 9, 12, 15]
    after_shuffle = np.random.permutation(data)
    print(after_shuffle)
    

    2⃣️np.random.shuffle

    data = [1, 4, 9, 12, 15]
    np.random.shuffle(data)
    print(data)
    

    并且由此可见两个方法的区别:shuffle直接在原来的数组上进行操作,改变原来数组的顺序,无返回值。而permutation不直接在原来的数组上进行操作,而是返回一个新的打乱顺序的数组,并不改变原来的数组。

    通过索引来shuffle:
    3⃣️这个是我比较常用的方法,因为这样label的值不会跟着打乱,不然的话本菜鸡就只能想到把train_x和train_lable的值zip了一块shuffle,后面再unzip....
    可以将index值的数组进行shuffle,也可以产生一组随机数,用这组随机数进行索引。我用过的产生随机数的方法:

    • random_idx = random.sample(range(0,new_length),new_length)随机地从指定列表中提取出N个不同的元素.
    • np.random.choice
      使用np.random.choice时,需要将replace设置为False,表示不放回取样!!
    index = [0,1,2,3]
    rand_index = np.random.choice(len(index),4,replace=False)
    print(rand_index)
    

    手动shuffle训练集的方法
    首先,我们设置一个batch_size,一个epoch需要走几个iteration,用 num_batch = int((data_len - 1)/batch_size) + 1来计算

    def batch_iter(x, y, batch_size = 2):
        data_len = len(x)
        num_batch = int((data_len - 1)/batch_size) + 1
        indices = np.random.permutation(np.arange(data_len))
       
        x_shuff = np.array(x)[indices]
        y_shuff = np.array(y)[indices]
        for i in range(num_batch):
            start_id = i * batch_size
            end_id = min((i+1) * batch_size, data_len)
            yield x_shuff[start_id:end_id], y_shuff[start_id:end_id]
    x = [[1,2,3,4],[2,3,4,5],[32,2,2,2],[1,1,1,1],[2,2,2,2],[3,3,3,3]]
    y = [1,0,0,1,0,1]
    # print(batch_iter(x,y))
    data = batch_iter(x,y)
    for x,y in data:
        print(x)
        print(y)
    

    使用dataloader shuffle训练集的方法

    x_tensor = torch.tensor(x)
    y_tensor = torch.tensor(y)
    def get_batch(batch,x,y):
        torch_dataset = Data.TensorDataset(x, y)
        loader = Data.DataLoader(dataset=torch_dataset,batch_size=batch,shuffle=True)
        return loader
    data = get_batch(2,x_tensor,y_tensor)
    for train_x,train_y in data:
        print(train_x)
        print(train_y)
    

    然而我发现这两个都必须shuffle padding完的数组呀。。还是不晓得针对每个Batch进行padding的应该怎么送到网络中。

    相关文章

      网友评论

        本文标题:NumPy记录

        本文链接:https://www.haomeiwen.com/subject/lwnnsqtx.html