【问题标题】:Adding layers to RESNET50 in order to build a JOIN CNN Model向 RESNET50 添加层以构建 JOIN CNN 模型
【发布时间】:2020-04-17 10:03:24
【问题描述】:

这是我的代码,用于将 resnet50 模型与此模型(我想在我的数据集上训练)连接起来。我想在代码中冻结 resnet50 模型的层(参见 Trainable=false)。 这里我导入的是 resnet 50 模型

`` 
import tensorflow.keras
import tensorflow as tf
from tensorflow.keras.applications.resnet50 import ResNet50
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.resnet50 import preprocess_input, decode_predictions
resnet50_imagnet_model = tensorflow.keras.applications.resnet.ResNet50(weights = "imagenet", 
                           include_top=False, 
                           input_shape = (150, 150, 3),
                           pooling='max')
  ``

在这里我创建我的模型

 ```
# freeze feature layers and rebuild model
for l in resnet50_imagnet_model.layers:
    l.trainable = False

#construction du model
model5 = [
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(12, activation='softmax')
]

#Jointure des deux modeles
model_using_pre_trained_resnet50 = tf.keras.Sequential(resnet50_imagnet_model.layers + model5 )
 ```

最后一行不起作用,我有这个错误: conv2_block1_3_conv 层的输入 0 与层不兼容:输入形状的轴 -1 的预期值为 64,但接收到的输入形状为 [None, 38, 38, 256

感谢您的帮助。

【问题讨论】:

    标签: python tensorflow keras deep-learning resnet


    【解决方案1】:

    您也可以使用 keras 的functional API,如下所示

        from tensorflow.keras.applications.resnet50 import ResNet50
        import tensorflow as tf
    
        resnet50_imagenet_model = ResNet50(include_top=False, weights='imagenet', input_shape=(150, 150, 3))
    
        #Flatten output layer of Resnet
        flattened = tf.keras.layers.Flatten()(resnet50_imagenet_model.output)
    
        #Fully connected layer 1
        fc1 = tf.keras.layers.Dense(128, activation='relu', name="AddedDense1")(flattened)
    
        #Fully connected layer, output layer
        fc2 = tf.keras.layers.Dense(12, activation='softmax', name="AddedDense2")(fc1)
    
        model = tf.keras.models.Model(inputs=resnet50_imagenet_model.input, outputs=fc2)
    

    另请参阅this question

    【讨论】:

    • 这是正确答案,因为 ResNet不是顺序模型,它有并行层,所以必须使用 Functional API 来实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    相关资源
    最近更新 更多