我正在尝试使用 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 个批次输入模型。