我是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
_________________________________________________________________
...
我试图替换或插入新的输入图层,但它没有用。任何提示或提示将不胜感激!
答案 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())