【问题标题】:NameError: name 'Model is not defined'-how to resolve this?NameError: name 'Model is not defined' - 如何解决这个问题?
【发布时间】:2021-12-15 12:18:53
【问题描述】:

我正在尝试使用迁移学习对 2 个类别进行分类。预处理我的数据后,我想应用“InceptionResNetV2”。我想删除这个 Keras 应用程序的最后一层并想添加一个层。 我为此编写了以下脚本:

irv2 = tf.keras.applications.inception_resnet_v2.InceptionResNetV2()
irv2.summary()

x = irv2.layers[-1].output
x = Dropout(0.25)(x)
predictions = Dense(2, activation='softmax')(x)

model = Model(inputs=mobile.input, outputs=predictions)

然后出现错误:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-40-911de74d9eaf> in <module>()
      5 predictions = Dense(2, activation='softmax')(x)
      6 
----> 7 model = Model(inputs=mobile.input, outputs=predictions)

NameError: name 'Model' is not defined

如果有其他方法可以删除最后一层并添加新层(predictions = Dense(2, activation='softmax')),请告诉我。

这是我完整的code

【问题讨论】:

    标签: keras conv-neural-network keras-layer transfer-learning


    【解决方案1】:

    您可以使用此代码 sn-p 来定义您的迁移学习模型。

    在这里,我们使用在 imagenet 数据集上训练的权重,并忽略最后一层(用于训练 imagenet 数据集中 1000 个类的 1000 个神经元层)并添加我们的自定义层。在这个例子中,我们添加了一个 GAP 层,然后是一个用于二元分类的密集层。

     from tensorflow import keras
    
     input_layer = keras.layers.Input(shape=(224, 224, 3))
     irv2 = keras.applications.Xception(weights='imagenet',include_top=False,input_tensor = input_layer)
     global_avg = keras.layers.GlobalAveragePooling2D()(irv2.output)
     dense_1 = keras.layers.Dense(1,activation = 'sigmoid')(global_avg)
     model = keras.Model(inputs=irv2.inputs,outputs=dense_1)
    
     model.summary()
    

    您遇到的错误可能是由于 tf 1.x 和 tf 2.x 之间的导入更改

    根据您的 tensorflow 版本尝试以下任何一种导入方法。它应该可以修复错误。

    from tensorflow.keras.models import Model
    

    from tensorflow.keras import Model
    

    还要确保从 tensorflow 或 keras 导入所有内容。在同一脚本中使用从任一库中导入的函数会导致不兼容错误。

    【讨论】:

    • 非常感谢您的帮助。我用这个模型解决了这个问题并获得了 97% 的准确率 -@vamshirvk
    【解决方案2】:
    • -1 将为您提供最后一个 Dense 层,但您实际上是在 -2 之上的一层
    • 输入应该是初始模型输入层
    import tensorflow as tf
    from tensorflow.keras.layers import Dense
    from keras.models import Model
    
    irv2 = tf.keras.applications.inception_resnet_v2.InceptionResNetV2()
    predictions = Dense(2, activation='softmax')(irv2.layers[-2].output)
    model = Model(inputs=irv2.input, outputs=predictions)
    
    model.summary()
    

    【讨论】:

    • 我认为应该有一点改变,你建议@mujjiga irv2 = tf.keras.applications.inception_resnet_v2.InceptionResNetV2() x = (irv2.layers[-2].output) predictions = Dense(2, activation='softmax')(x) model = Model(inputs=irv2.input, outputs=predictions) BTW 现在我得到了解决方案,tnx 寻求你的帮助!
    • 此代码在不支持的 keras 和 tf.keras 之间混合导入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 2022-12-02
    • 1970-01-01
    • 2021-11-09
    • 2013-04-09
    • 1970-01-01
    • 2021-01-04
    相关资源
    最近更新 更多