在 pytorch 中,Dataloader 可以对 Dataset 进行进一步的封装,从而使得对数据的操作更加简化。如果要实现每个 epoch 的 dataloader 不同需要如何实现呢?
由于 Dataloader 是基于 Dataset 的,所以可以直接在 Dataset 中进行修改,从而使得对应的 loader 也发生变化。比如,在 Dataset 中,我们通过一个列表来存储数据的信息,那么可以编写一个函数,它能够改变 Dataset 中存储数据的列表。改变列表就是改变 Dataset 本身,那么与之对应的 loader 也会改变。
对于一些简单的情况,比如函数调用,参数传递可能采用形参传递,即函数内部重新新建一个变量,变量以实参值进行初始化。但是对于一些稍微复杂的情况,这种方式非常占用空间,所以通常的传递都是类似指针的传递,即传递的是变量的地址。这样的话,在函数内部和外部的参数对应于同一块内存空间。Dataset 作为参数传入 Dataloader 就是类似地址的传递。改变 Dataset,那么 Dataloader 本身也会改变。