我如何在神经网络中使用批量大小
How can I use batch size in neural networks
我有 1323 张图像,其标签属于 8 个不同的 classes。每张图片只有1个class.
我对变量 batch_size 有一些疑问。我知道这个变量决定了在一个时期内要传递多少张图像,通常是 32 张。
但是,如果我使用下面的代码,在 python 中,train_generator
变量不是只保留 32 个图像而不是原来的 1323 个吗?那么我怎样才能用所有图像而不是仅仅 32 张来训练神经网络呢?
train_dataGen = ImageDataGenerator(rescale=1./255)
train_generator = train_dataGen.flow_from_dataframe(
dataframe = training_set, directory="",
x_col="Images", y_col="Labels",
class_mode="categorical",
target_size=(224,224), batch_size=32)
无论批量大小如何,您在每个时期都使用了全部 1323 张图像。那就是一个epoch的定义:对训练集中的每个图像处理一次。
批量大小是您在反向传播迭代之间处理的图像数量。批量大小为 32 时,模型将对 32 张图像中的每一张进行前向 运行,对结果进行平均(平均),然后才使用该平均值执行反向传播。
批量大小为 1 意味着您要单独训练每张图像。这往往过于重视对前几张图像的训练结果所做的假设。批量大小为 1323 意味着您在进行反向传播之前对整个训练集进行训练。这往往会丢失一些重要特征的细节。
您需要对批量大小进行试验,以找到训练性能中的“最佳点”。一些框架实现针对 2 的幂进行了性能优化,因此 32 将是一个很好的起点。您可以选择与并行处理输入的处理器数量接近的大小。另一个不错的选择是接近训练集大小的平方根(32 在这方面也很好)。
我有 1323 张图像,其标签属于 8 个不同的 classes。每张图片只有1个class.
我对变量 batch_size 有一些疑问。我知道这个变量决定了在一个时期内要传递多少张图像,通常是 32 张。
但是,如果我使用下面的代码,在 python 中,train_generator
变量不是只保留 32 个图像而不是原来的 1323 个吗?那么我怎样才能用所有图像而不是仅仅 32 张来训练神经网络呢?
train_dataGen = ImageDataGenerator(rescale=1./255)
train_generator = train_dataGen.flow_from_dataframe(
dataframe = training_set, directory="",
x_col="Images", y_col="Labels",
class_mode="categorical",
target_size=(224,224), batch_size=32)
无论批量大小如何,您在每个时期都使用了全部 1323 张图像。那就是一个epoch的定义:对训练集中的每个图像处理一次。
批量大小是您在反向传播迭代之间处理的图像数量。批量大小为 32 时,模型将对 32 张图像中的每一张进行前向 运行,对结果进行平均(平均),然后才使用该平均值执行反向传播。
批量大小为 1 意味着您要单独训练每张图像。这往往过于重视对前几张图像的训练结果所做的假设。批量大小为 1323 意味着您在进行反向传播之前对整个训练集进行训练。这往往会丢失一些重要特征的细节。
您需要对批量大小进行试验,以找到训练性能中的“最佳点”。一些框架实现针对 2 的幂进行了性能优化,因此 32 将是一个很好的起点。您可以选择与并行处理输入的处理器数量接近的大小。另一个不错的选择是接近训练集大小的平方根(32 在这方面也很好)。