首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:其等级未定义,但图层需要已定义的等级

错误:其等级未定义,但图层需要已定义的等级
EN

Stack Overflow用户
提问于 2020-08-17 04:37:36
回答 1查看 1.7K关注 0票数 0

我让我的tf.keras模型从tf.data.Dataset.from_generator特征大小(224, 224, 1)和标签大小(1, 265)馈送,就像我有265 CLASSES一样。我的批量大小为64,返回的要素大小为(64, 244, 244, 1),标注大小为(64, 265)

下面是我的训练模型:IM_SIZE = (224, 224, 1),而DO_FINE_TUNING设置为TrueFINE_TUNE_AT = 40

代码语言:javascript
复制
def model_defenition(model_type='ResNet50'):
    if model_type == 'ResNet50':
        base_model = tf.keras.applications.ResNet50(
            include_top = False,
            weights='imagenet'
        )
        print(f'num layers in base model: {len(base_model.layers)}')
        base_model.trainable = DO_FINE_TUNING

        for layer in base_model.layers[:FINE_TUNE_AT]:
            layer.trainable = False

        model = tf.keras.Sequential([
            tf.keras.layers.InputLayer(input_shape=IM_SIZE),
            tf.keras.layers.Conv2D(filters=3, kernel_size=(3, 3), padding='same'),
            base_model,
            tf.keras.layers.GlobalAveragePooling2D(),
            tf.keras.layers.Dense(units = len(CLASSES), activation=tf.nn.softmax)
        ])
        return model
model = model_defenition(model_type='ResNet50')
model.compile(optimizer=OPTIMIZER, loss=LOSS_FN, metrics=METRICS_LIST)
model.summary()

当我按照下面的方法调用model.fit函数时

代码语言:javascript
复制
model.fit(
    train_ds,
    epochs=EPOCHS,
    steps_per_epoch=len(df_train)//BATCH_SIZE,
    validation_data=valid_ds,
    batch_size=BATCH_SIZE,
    verbose=1,
    callbacks=CALLBACKS,
    workers=1,
    use_multiprocessing=True
)

我得到了下面的错误

代码语言:javascript
复制
ValueError: Input 0 of layer sequential is incompatible with the layer: its rank is undefined, but the layer requires a defined rank.

我使用的是tensorflow 2.2.0版。任何关于这方面的帮助都将受到高度的感谢。请随时要求代码的任何其他部分,以重现该问题。

EN

回答 1

Stack Overflow用户

发布于 2020-08-17 05:21:32

所以这里的问题是Resnet模型也包含Input_layer

如果您对Resnet模型进行总结,您可以看到这一点。

base_model.summary()

代码语言:javascript
复制
Model: "resnet50"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_10 (InputLayer)           [(None, None, None,  0                                            
__________________________________________________________________________________________________
conv1_pad (ZeroPadding2D)       (None, None, None, 3 0           input_10[0][0]                   
__________________________________________________________________________________________________

因此,我建议先使用base_model,然后使用您自己的层,然后再使用base_model

另外,顺便说一句,一定要检查resenet模型的文档。它说如果你使用include_top = False,那么你还必须指定input_shape。这也可能是问题所在。一定要检查documentation接口。

我没有完整的代码,所以我不能从这里尝试一切。但我将通过上面的指针来说明。

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

https://stackoverflow.com/questions/63441712

复制
相关文章

相似问题

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