【发布时间】:2019-10-12 17:10:28
【问题描述】:
我正在针对图像分类问题训练 2 个不同的 CNN(自定义和迁移学习)。 我对两种模型都使用相同的生成器。 数据集包含 5 个类别的 5000 个样本,但不平衡。
这是我正在使用的自定义模型。
def __init__(self, transfer_learning = False, lambda_reg = 0.001, drop_out_rate = 0.1):
if(transfer_learning == False):
self.model = Sequential();
self.model.add(Conv2D(32, (3,3), input_shape = (224,224,3), activation = "relu"))
self.model.add(MaxPooling2D(pool_size = (2,2)))
self.model.add(Conv2D(64, (1,1), activation = "relu"))
self.model.add(MaxPooling2D(pool_size = (2,2)))
self.model.add(Conv2D(128, (3,3), activation = "relu"))
self.model.add(MaxPooling2D(pool_size = (2,2)))
self.model.add(Conv2D(128, (1,1), activation = "relu"))
self.model.add(MaxPooling2D(pool_size = (2,2)))
self.model.add(Flatten())
self.model.add(Dense(512))
self.model.add(Dropout(drop_out_rate))
self.model.add(Dense(256))
self.model.add(Dropout(drop_out_rate))
self.model.add(Dense(5, activation = "softmax"))
所以我无法理解steps_per_epoch 和batch_size 之间的关系。
batch_size 是生成器发送的样本数。
但是steps_per_epoch 是完成一个训练epoch 的batch_size 的数量吗?
如果是这样,那么它应该是:steps_per_epoch = total_samples/batch_size ?
无论我尝试什么值,我总是遇到相同的问题(在两种型号上),val_acc 似乎达到了局部最优。
【问题讨论】:
-
局部最优通常是由非最优学习率引起的。你试过增加它吗?
-
不,它不会改变任何东西。
-
仅通过查看您的 iamge 生成器来告诉您如何优化您的神经网络有点困难。
-
添加了模型的代码
-
steps_per_epoch应该对batch_size没有限制,其中batch_size控制您将同时训练多少数据 - 通常越大越好,但它会占用 GPU 内存。每个时期的步数限制了模型收敛之前的最大步数。即,一旦您的模型达到阈值或超过steps_per_epoch,时代就会停止。而且一个 epoch 不一定会用完所有数据。
标签: python tensorflow machine-learning keras conv-neural-network