python - “连接”对象没有属性“扁平化”
问题描述
我正在尝试从预训练模型中提取特征并在我自己的模型上使用。我可以成功实例化 Inveption V3 模型并将输出保存为我的模型的输入,但是当我尝试使用它时出现错误。我试图删除 Flatten 层,但看起来问题不是这个。我认为问题是关于 last_output 但不知道如何解决它。编码:
#%% Imports.
import tensorflow as tf
from tensorflow.keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPooling2D
from tensorflow.keras.optimizers import RMSprop
from tensorflow.keras import layers, Model
from tensorflow.keras.applications.inception_v3 import InceptionV3
import os, signal
import numpy as np
#%% Instatiate an Inception V3 model
url = "https://storage.googleapis.com/mledu-datasets/inception_v3_weights_tf_dim_ordering_tf_kernels_notop.h5" # Get the weights from the pretrained model
local_weights_file = tf.keras.utils.get_file("inception_v3_weights_tf_dim_ordering_tf_kernels_notop.h5", origin = url, extract = True)
pre_trained_model = InceptionV3(input_shape=(150, 150, 3), include_top=False, weights=None) # include_top=False argument, we load a network that doesn't include
pre_trained_model.load_weights(local_weights_file) # the classification layers at the top—ideal for feature extraction.
# Make the model non-trainable, since we will only use it for feature extraction; we won't update the weights of the pretrained model during training.
for layers in pre_trained_model.layers:
layers.trainable = False
# The layer we will use for feature extraction in Inception v3 is called mixed7. It is not the bottleneck of the network, but we are using it to keep a
# sufficiently large feature map (7x7 in this case). (Using the bottleneck layer would have resulting in a 3x3 feature map, which is a bit small.)
last_layer = pre_trained_model.get_layer('mixed7')
print('last layer output shape:', last_layer.output_shape)
last_output = last_layer.output
print(last_output)
# %% Stick a fully connected classifier on top of last_output
# Flatten the output layer to 1 dimension
x = layers.Flatten()(last_output)
# Add a fully connected layer with 1,024 hidden units and ReLU activation
x = layers.Dense(1024, activation='relu')(x)
# Add a dropout rate of 0.2
x = layers.Dropout(0.2)(x)
# Add a final sigmoid layer for classification
x = layers.Dense(1, activation='sigmoid')(x)
# Configure and compile the model
model = Model(pre_trained_model.input, x)
model.compile(loss='binary_crossentropy',
optimizer=RMSprop(lr=0.0001),
metrics=['acc'])
错误:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
c:\Users\jpaul\Code\Google_ML_Crash_Course\02_Practica\02_Image_Classification\image_classification_part3.py in
39 # Flatten the output layer to 1 dimension
----> 40 x = layers.Flatten()(last_output)
41
42 # Add a fully connected layer with 1,024 hidden units and ReLU activation
43 x = layers.Dense(1024, activation='relu')(x)
AttributeError: 'Concatenate' object has no attribute 'Flatten'
解决方案
在您的for
循环中,您覆盖layers
了 import 语句中的标识符
from tensorflow.keras import layers
因此,当您尝试创建新Flatten()
层时,标识符layers
包含一个Concatenate
对象,而不是您期望的 Keraslayers
模块。
更改for
循环中的变量名称,您应该会很好。
推荐阅读
- hyperledger-fabric - Hyperledger Fabric 中的真实外部 CA
- python - 当我试图在我的 cmd 中安装 pandas 时,我得到了他的错误
- r - 如何在 R 中向 POSIXct 对象添加天数
- blazor - Blazor Webassembly - 标头中的 JWT(在我的应用程序之前)
- android - Android PagedList 滚动到底部
- php - 重新索引多维数组
- python-3.x - 要求:安装 iRedMail 时 Centos 7 上的 python(abi) = 3.6
- google-app-engine - 在部署到 appengine 时在云构建中设置 goproxy
- python - 找不到静态文件 Django
- git - ci工作流文件出错时如何拒绝git push?