【发布时间】:2021-08-22 14:58:22
【问题描述】:
我正在训练一个包含 9100 张图像(每张尺寸为 256 x 64)的 VAE 模型。我使用 Nvidia RTX 3080 训练模型。首先,我将所有图像加载到大小为 9100 x 256 x 64 的 numpy 数组中,称为traindata。然后,为了形成一个训练数据集,我使用
train_dataset = (tf.data.Dataset.from_tensor_slices(traindata).shuffle(len(traindata)).batch(batch_size))
这里我用了一个batch_size 65。关于我在训练中看到的东西,我主要有2个问题:
问题一:
根据docs,整个数据集在每个时期都被重新洗牌。但是,以这种方式训练非常慢(每个 epoch 大约 50 秒)。我在创建数据集时不调用.shuffle(len(traindata)),与没有随机播放的训练进行了比较,训练速度要快得多(大约 20s/epoch)。我想知道为什么.shuffle() 操作如此缓慢,是否有任何方法可以使其更快?根据this StatsSE thread 的说法,洗牌对于训练非常重要,这就是我加入洗牌操作的原因。
问题2:
当我在创建数据集时调用.shuffle() 时,Tensorflow 总是给出以下消息
I tensorflow/core/platform/windows/subprocess.cc:308] SubProcess ended with return code: 4294967295
我尝试在网上搜索,但仍然无法理解这背后的含义。这是否意味着存在一些错误,或者这只是一个我可以忽略的警告?
【问题讨论】:
标签: python tensorflow machine-learning tensorflow-datasets