Python 如何在Tensorflow 2中实现小批量梯度下降?

Python 如何在Tensorflow 2中实现小批量梯度下降?,python,numpy,tensorflow,keras,tensorflow-datasets,Python,Numpy,Tensorflow,Keras,Tensorflow Datasets,我对机器学习和Tensorflow比较陌生,我想尝试在MNIST数据集上实现小批量梯度下降。然而,我不确定我应该如何实施它 (旁注:训练图像(28px x 28px)和标签存储在Numpy阵列中) 目前,我可以看到两种不同的实现方法: 我的训练图像是[60000,28,28]的Numpy数组。将其重塑为[25(num batches)、2400(num images in batch)、28,28],然后使用for循环调用每个批并将model.compile()方法传递给它。使用这种方法,我唯一

我对机器学习和Tensorflow比较陌生,我想尝试在MNIST数据集上实现小批量梯度下降。然而,我不确定我应该如何实施它

(旁注:训练图像(28px x 28px)和标签存储在Numpy阵列中)

目前,我可以看到两种不同的实现方法:

  • 我的训练图像是[60000,28,28]的Numpy数组。将其重塑为[25(num batches)、2400(num images in batch)、28,28],然后使用for循环调用每个批并将model.compile()方法传递给它。使用这种方法,我唯一担心的是for循环本身就很慢,矢量化实现会快得多

  • 将图像和标签组合到tensorflow数据集对象中,然后调用dataset.batch()方法和dataset.prefetch()方法,然后将数据传递给model.compile()方法。唯一的问题是,我的数据没有保留为Numpy数组,我觉得它比tensorflow数据集对象更灵活


  • 这两种方法中哪一种最适合实现,或者有第三种方法是我不知道的最佳方法?

    Keras在其model.fit方法中有一个内置的batch_size参数(因为您用Keras标记了这个问题,我假设您正在使用它)。我相信这可能是实现您所追求目标的最佳优化方法。

    谢谢您的回答!是的,我正在使用Keras。如果我希望最小批量大小为25,那么传递给model.fit方法的numpy数组的维数是多少。只需将要训练网络的所有数据传递到fit函数中,并指定batch_size=25即可。然后,这将以大小为25的小批量对网络进行所有数据的培训。您可能需要在编辑数据之前对其进行一点编辑,以使其成为正确的形状和类型。有关如何执行这些操作的详细信息,请参见:谢谢。我成功了