如何在Keras中设置训练模型的输入形状?

时间:2017-12-22 10:35:18

标签: tensorflow keras

我是TensorFlow和Keras的新手,我有一个训练有素的模型,结构如下:

_________________________________________________________________ 
Layer (type)                 Output Shape              Param #   
================================================================= 
input_1 (InputLayer)         (None, 128, 128, 3)       0         
_________________________________________________________________ 
conv1 (Conv2D)               (None, 64, 64, 8)         216       
_________________________________________________________________
...

出于某种原因(将模型转换为其他CNN框架)我必须将批次编号从None修复为1以使其正常工作,以便输入形状为:(1,128,128,3) )。所需的结构将是:

_________________________________________________________________ 
Layer (type)                 Output Shape              Param #   
================================================================= 
input_1 (InputLayer)         (1, 128, 128, 3)       0         
_________________________________________________________________ 
conv1 (Conv2D)               (1, 64, 64, 8)         216       
_________________________________________________________________ 
...

我试图替换或插入新的输入图层,但它没有用。任何提示或提示将不胜感激!

1 个答案:

答案 0 :(得分:2)

您可以使用显式batch_shape创建新输入并将其传递给模型。然后创建另一个模型。

我不知道其他框架是否会处理这个问题:

from keras.layers import Input
from keras.models import Model

newInput = Input(batch_shape=(1,128,128,3))
newOutputs = oldModel(newInput)
newModel = Model(newInput,newOutputs)

这将在Keras上创建您想要的模型。但是其他框架的行为可能没有问题。

如果这没有给你带来好结果,那么你可能想再次编写整个模型,只改变输入形状:

  • 如果Sequential:第一层应该有batch_input_shape=(1,128,128,3)
  • 如果Model:输入张量应如上所述:Input(batch_shape=(1,128,128,3))

创建t)后,新模型使用与旧模型完全相同的代码,传递权重:

newModel.set_weights(oldModel.get_weights())