如何使用Lambda层更改模型的输入形状

时间:2019-06-14 06:31:08

标签: python python-3.x keras deep-learning keras-layer

让我们以这种方式从keras模型中指定mobilenet:

base_model = MobileNetV2(weights='imagenet', include_top=False,  input_shape=(224, 224, 3))

# add a global spatial average pooling layer
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(x) 
predictions = Dense(12, activation='softmax')(x)

# this is the model we will train
model = Model(inputs=base_model.input, outputs=predictions)
model.compile(loss='categorical_crossentropy', optimizer = Adam(),
              metrics=['accuracy'])

但是我想通过以下方式向预输入图像添加自定义层:

def myFunc(x):
     return K.reshape(x/255,(-1,224,224,3))
new_model = Sequential()
new_model.add(Lambda(myFunc,input_shape =( 224, 224, 3),  output_shape=(224, 224, 3)))
new_model.add(model)
new_model.compile(loss='categorical_crossentropy', optimizer = Adam(),
              metrics=['accuracy'])
new_model.summary()

它工作得很好,但是现在我需要输入224 224 3而不是(None, 224, 224, 3)的形状-如何制作

1 个答案:

答案 0 :(得分:1)

为了扩大张量的尺寸,可以使用

import tensorflow.keras.backend as K  
# adds a new dimension to a tensor
K.expand_dims(tensor, 0)

但是,就像提到的@meonwongac一样,我看不出您为什么需要它。

如果您仍想使用Lambda层而不是使用skimage / OpenCV /其他库来调整图像大小/对图像进行其他操作,则使用{{1} }层如下:

Lambda