0

我正在尝试使用 ResNet50() 模型的卷积部分,如下所示:

#generate batches
def get_batches(dirname, gen=image.ImageDataGenerator(), shuffle=True, batch_size=4, class_mode='categorical',
                target_size=(224,224)):
    return gen.flow_from_directory(dirname, target_size=target_size,
            class_mode=class_mode, shuffle=shuffle, batch_size=batch_size)

trn_batches = get_batches("path_to_dirctory", shuffle=False,batch_size=4)

#create model
rn_mean = np.array([123.68, 116.779, 103.939], dtype=np.float32).reshape((1,1,3))
inp_resnet = Input((224,224,3))
preproc = Lambda(lambda x: (x - rn_mean)[:, :, :, ::-1])(inp_resnet)
resnet_model = ResNet50(include_top=False, input_tensor=preproc)
res5b_branch2a = resnet_model.get_layer('res5b_branch2a')
last_conv_layer = resnet_model.layers[resnet_model.layers.index(res5b_branch2a)-1].output
resnet_model_conv = Model(inp_resnet, Flatten()(AveragePooling2D((7,7))(last_conv_layer)))

#feed batches to model
trn_conv_features_resnet = resnet_model_conv.predict_generator(trn_batches, trn_batches.samples)

模型摘要很长,但最后一部分显示输出的形状应为 (None, 2048)。

在此处输入图像描述

所以我假设如果我在这个模型中加入 200 张图像,我应该有一个形状为 (200, 2048) 的输出。我对么?

但事实上,有 200 张图像,我得到了形状为 (800, 2048) 的输出。我想知道为什么会这样。

我检查了另一个主题,但这里似乎是一个不同的问题。请帮助!顺便说一句,这是在 Keras 2 中完成的。

更新:

我意识到,如果我设置batch_size=4,我得到 (800, 2048) 输出和 200 张图像输入,如果我改变batch_size=2,我得到 (400, 2018) 输出和相同的 200 张图像输入。这是batch_size设置的工作原理吗?我应该使用batch_size=1吗?我以为 batch_size 是一次输入模型的图片数量,不管是什么batch_size,图片总数应该是 200,对吧?例如,如果为 4,则将 50 个批次输入模型,如果为 2,则将 100 个批次输入模型。

4

0 回答 0