Python Keras 2.2:can';t使用图像净重加载预先制作的模型
我有一段代码过去在旧版本的Keras中使用,但在Keras 2.2中,我在将没有足够层的模型加载到更大的模型中时出错:Python Keras 2.2:can';t使用图像净重加载预先制作的模型,python,tensorflow,keras,Python,Tensorflow,Keras,我有一段代码过去在旧版本的Keras中使用,但在Keras 2.2中,我在将没有足够层的模型加载到更大的模型中时出错: import keras from keras.layers import MaxPooling2D, AveragePooling2D, Conv2D from keras.applications import Xception from keras.layers.normalization import BatchNormalization from keras.lay
import keras
from keras.layers import MaxPooling2D, AveragePooling2D, Conv2D
from keras.applications import Xception
from keras.layers.normalization import BatchNormalization
from keras.layers import Input, Concatenate, Add
from keras.layers.advanced_activations import LeakyReLU
kernel_size = (3, 3)
pool_size = (2, 2)
nfilters = 3
inputs = Input(shape=(331, 331, 1))
x = inputs
x = Conv2D(nfilters, kernel_size, strides=(1,1), padding='same', use_bias=False)(x)
x = BatchNormalization()(x)
x = LeakyReLU(alpha=0.1)(x)
x = MaxPooling2D(pool_size=pool_size)(x)
x = Add()([x,AveragePooling2D(pool_size=pool_size)(inputs)]) # residual skip connection on shrunk image
base_model = Xception(weights='imagenet', include_top=False, input_tensor=x)
我得到的错误与异常有关:
ValueError:您试图将包含80层的权重文件加载到包含82层的模型中。
这里有一个链接到一个
问题发生在加载图像净重方面;如果我将权重设置为None
,则没有问题
在load\u model()
调用中,可以通过传递by\u name=True
来避免这种错误,但是像Exception这样的预制模型不允许使用by\u name
关键字
有人能解释一下如何让我的代码在Keras2.2下重新工作吗
我想我可以定义两次异常,一次是使用imagenet权重,另一次是在我的完整模型中使用weights=None,然后将权重从前者复制到后者……但如果可能的话,我宁愿不这样做
(“为什么要将这些层放在Exception之前?”这是因为我正在将较大的图像缩小到Exception为其imagnet权重所需的大小,并将灰度图像转换为3通道图像。)不确定如何解释错误,但可以将Exception模型视为一个层,在以前的层上调用它,并在模型实例中包装整个堆栈。我在你的colab笔记本中验证了以下内容
import keras
from keras.layers import MaxPooling2D, AveragePooling2D, Conv2D
from keras.applications import Xception
from keras.layers.normalization import BatchNormalization
from keras.layers import Input, Concatenate, Add
from keras.layers.advanced_activations import LeakyReLU
kernel_size = (3, 3)
pool_size = (2, 2)
nfilters = 3
inputs = Input(shape=(331, 331, 1))
x = inputs
x = Conv2D(nfilters, kernel_size, strides=(1,1), padding='same', use_bias=False)(x)
x = BatchNormalization()(x)
x = LeakyReLU(alpha=0.1)(x)
x = MaxPooling2D(pool_size=pool_size)(x)
x = Add()([x,AveragePooling2D(pool_size=pool_size)(inputs)]) # residual skip connection on shrunk image
# Xception architecture is just another layer
base_model = Xception(weights='imagenet', include_top=False)
output = base_model(x)
# Wrap everything into a model
combined_model = keras.models.Model(inputs=inputs, outputs=output)
这将为您提供一个如下所示的模型:
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_2 (InputLayer) (None, 331, 331, 1) 0
__________________________________________________________________________________________________
conv2d_6 (Conv2D) (None, 331, 331, 3) 27 input_2[0][0]
__________________________________________________________________________________________________
batch_normalization_6 (BatchNor (None, 331, 331, 3) 12 conv2d_6[0][0]
__________________________________________________________________________________________________
leaky_re_lu_2 (LeakyReLU) (None, 331, 331, 3) 0 batch_normalization_6[0][0]
__________________________________________________________________________________________________
max_pooling2d_2 (MaxPooling2D) (None, 165, 165, 3) 0 leaky_re_lu_2[0][0]
__________________________________________________________________________________________________
average_pooling2d_2 (AveragePoo (None, 165, 165, 1) 0 input_2[0][0]
__________________________________________________________________________________________________
add_14 (Add) (None, 165, 165, 3) 0 max_pooling2d_2[0][0]
average_pooling2d_2[0][0]
__________________________________________________________________________________________________
xception (Model) multiple 20861480 add_14[0][0]
==================================================================================================
Total params: 20,861,519
Trainable params: 20,806,985
Non-trainable params: 54,534
__________________________________________________________________________________________________
不完全确定如何解释错误,但可以将异常模型视为一个层,在以前的层上调用它,并将整个堆栈包装到模型实例中,从而使其工作。我在你的colab笔记本中验证了以下内容
import keras
from keras.layers import MaxPooling2D, AveragePooling2D, Conv2D
from keras.applications import Xception
from keras.layers.normalization import BatchNormalization
from keras.layers import Input, Concatenate, Add
from keras.layers.advanced_activations import LeakyReLU
kernel_size = (3, 3)
pool_size = (2, 2)
nfilters = 3
inputs = Input(shape=(331, 331, 1))
x = inputs
x = Conv2D(nfilters, kernel_size, strides=(1,1), padding='same', use_bias=False)(x)
x = BatchNormalization()(x)
x = LeakyReLU(alpha=0.1)(x)
x = MaxPooling2D(pool_size=pool_size)(x)
x = Add()([x,AveragePooling2D(pool_size=pool_size)(inputs)]) # residual skip connection on shrunk image
# Xception architecture is just another layer
base_model = Xception(weights='imagenet', include_top=False)
output = base_model(x)
# Wrap everything into a model
combined_model = keras.models.Model(inputs=inputs, outputs=output)
这将为您提供一个如下所示的模型:
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_2 (InputLayer) (None, 331, 331, 1) 0
__________________________________________________________________________________________________
conv2d_6 (Conv2D) (None, 331, 331, 3) 27 input_2[0][0]
__________________________________________________________________________________________________
batch_normalization_6 (BatchNor (None, 331, 331, 3) 12 conv2d_6[0][0]
__________________________________________________________________________________________________
leaky_re_lu_2 (LeakyReLU) (None, 331, 331, 3) 0 batch_normalization_6[0][0]
__________________________________________________________________________________________________
max_pooling2d_2 (MaxPooling2D) (None, 165, 165, 3) 0 leaky_re_lu_2[0][0]
__________________________________________________________________________________________________
average_pooling2d_2 (AveragePoo (None, 165, 165, 1) 0 input_2[0][0]
__________________________________________________________________________________________________
add_14 (Add) (None, 165, 165, 3) 0 max_pooling2d_2[0][0]
average_pooling2d_2[0][0]
__________________________________________________________________________________________________
xception (Model) multiple 20861480 add_14[0][0]
==================================================================================================
Total params: 20,861,519
Trainable params: 20,806,985
Non-trainable params: 54,534
__________________________________________________________________________________________________
我无法重现你的错误(我得到了不同的错误)。你能把myXshape的值包括进去吗?@sdcbr当然可以。我添加了维度、导入和指向复制我错误的Colab笔记本的链接。我无法复制你的错误(我得到了不同的错误)。你能把myXshape的值包括进去吗?@sdcbr当然可以。我添加了尺寸和导入,以及一个复制我错误的Colab笔记本的链接。太棒了!你解决了我的问题!非常感谢你!杰出的你解决了我的问题!非常感谢你!