NameError: name 'Model is not defined' - 如何解决这个问题?

Posted

技术标签:

【中文标题】NameError: name \'Model is not defined\' - 如何解决这个问题?【英文标题】: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。

【问题讨论】:

【参考方案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 之间混合导入。

以上是关于NameError: name 'Model is not defined' - 如何解决这个问题?的主要内容,如果未能解决你的问题,请参考以下文章

input() 错误 - NameError: name '...' is not defined

NameError: name “ ” is not defined

NameError: name “ ” is not defined

iPython 调试器引发`NameError: name ... is not defined`

NameError:name ‘xrange’ is not defined

jupyter notebook: NameError: name 'c' is not defined