首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加载预训练的Keras模型时意外层数

加载预训练的Keras模型时意外层数
EN

Stack Overflow用户
提问于 2022-02-28 21:25:48
回答 2查看 426关注 0票数 1

我的代码片段在下面-

代码语言:javascript
复制
from tensorflow.keras.applications import InceptionResNetV2
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Conv2D, MaxPool2D, Dense, Flatten, Dropout, Input, Resizing

inputs = Input(shape=x_train.shape[1:])
x = Conv2D(filters=3, kernel_size=(1,1), activation='relu')(inputs)
x = Resizing(height=75, width=75)(x)

base_model = InceptionResNetV2(input_shape=(75, 75, 3), include_top=False, input_tensor=x, weights='imagenet')

我得到的补偿是-

代码语言:javascript
复制
ValueError                                Traceback (most recent call last)
/var/folders/26/0fbl62dn7zsd3x5t5f3zh1mr0000gn/T/ipykernel_90240/1249320150.py in <module>
      7 # x = Resizing(height=75, width=75)(x)
      8 
----> 9 base_model = InceptionResNetV2(input_shape=(75, 75, 3), include_top=False, input_tensor=x, weights='imagenet')
     10 base_model.trainable = False
     11 

/opt/homebrew/Caskroom/miniforge/base/envs/pattern-recognition/lib/python3.9/site-packages/keras/applications/inception_resnet_v2.py in InceptionResNetV2(include_top, weights, input_tensor, input_shape, pooling, classes, classifier_activation, **kwargs)
    246           cache_subdir='models',
    247           file_hash='d19885ff4a710c122648d3b5c3b684e4')
--> 248     model.load_weights(weights_path)
    249   elif weights is not None:
    250     model.load_weights(weights)

/opt/homebrew/Caskroom/miniforge/base/envs/pattern-recognition/lib/python3.9/site-packages/keras/utils/traceback_utils.py in error_handler(*args, **kwargs)
     65     except Exception as e:  # pylint: disable=broad-except
     66       filtered_tb = _process_traceback_frames(e.__traceback__)
---> 67       raise e.with_traceback(filtered_tb) from None
     68     finally:
     69       del filtered_tb

/opt/homebrew/Caskroom/miniforge/base/envs/pattern-recognition/lib/python3.9/site-packages/keras/saving/hdf5_format.py in load_weights_from_hdf5_group(f, model)
    717   layer_names = filtered_layer_names
    718   if len(layer_names) != len(filtered_layers):
--> 719     raise ValueError(
    720         f'Layer count mismatch when loading weights from file. '
    721         f'Model expected {len(filtered_layers)} layers, found '

ValueError: Layer count mismatch when loading weights from file. Model expected 449 layers, found 448 saved layers.

我在找到这里的多个模型中尝试过这一点,但是,它们都失败了,但都有相同的错误,即:保存的层比预期的少一个。如果有解决办法,请告诉我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-01 06:59:06

有趣的是,错误来自于缺少Input层。例如,这样做是可行的:

代码语言:javascript
复制
import tensorflow as tf

x_train = tf.random.normal((100, 128, 128, 3))
inputs = tf.keras.layers.Input(shape=x_train.shape[1:])

base_model = tf.keras.applications.InceptionResNetV2(include_top=False, input_tensor=inputs, weights='imagenet')
model = tf.keras.Model(inputs, base_model.output)

所以不妨试试这样的方法:

代码语言:javascript
复制
import tensorflow as tf

x_train = tf.random.normal((100, 128, 128, 3))
inputs = tf.keras.layers.Input(shape=x_train.shape[1:])
x = tf.keras.layers.Conv2D(filters=3, kernel_size=(1,1), activation='relu')(inputs)
x = tf.keras.layers.Resizing(height=75, width=75)(x)

base_model = tf.keras.applications.InceptionResNetV2(input_shape=(75, 75, 3), include_top=False, weights='imagenet')
outputs = base_model(x)
model = tf.keras.Model(inputs, outputs)

而且,使用参数input_shapeinput_tensor没有多大意义。

票数 1
EN

Stack Overflow用户

发布于 2022-03-01 07:07:35

我想你是在做图像分类,你的标签是绝对的。那就试试这个

代码语言:javascript
复制
img_shape= (128,128,3) # specify the image shape you have
inputs =tf.keras.Input(shape=img_shape)
x = Conv2D(filters=3, kernel_size=(1,1), activation='relu')(inputs)
x =tf.keras.layers.Resizing(height=75, width=75)(x)   
x=base_model=tf.keras.applications.InceptionResNetV2(include_top=False, 
            weights="imagenet", pooling='max') (x)
# with pooling ='max base_model ouput is a vector you can use as input to a dense layer
num_of_classes = 10  # set this to the number of classes in the data set
output=Dense(num_of_classes, activation='softmax') (x)
model=Model(inputs=inputs, outputs=output)
optimizer=tf.keras.optimizers.Adam(  learning_rate=0.001)
loss=tf.keras.losses.CategoricalCrossentropy ()
model.compile(optimizer, loss=loss, metrics=['accuracy'])
print (model.summary())

为什么包括第一个Conv2D层?似乎没有这一层的基本模型是非常有能力的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71301220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档