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()
【讨论】:
我认为应该有一点改变,你建议@mujjigairv2 = 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`