我正在尝试通过迁移学习对 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')
这是我的完整代码。
您可以使用此代码片段来定义您的迁移学习模型。
在这里,我们使用在 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 之间的导入更改造成的
根据您的张量流版本尝试以下任何一种导入方法。它应该修复错误。
from tensorflow.keras.models import Model
或
from tensorflow.keras import Model
还要确保从 Tensorflow 或 keras 导入所有内容。在同一脚本中使用从任一库导入的函数都会导致不兼容错误。
-1
将为您提供最后一个密集层,但您真正的是什么是-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()
如果使用最新版本的tensorflow,那么尝试 -
从张量流导入keras
来自 keras。api.layers 导入 Dense