繁体   English   中英

从 EfficientNet Tensorflow 中提取特征

[英]Extracting features from EfficientNet Tensorflow

我有一个使用 EfficientNetB6 训练的 CNN model。 我的任务是通过移除最后一个密集层,然后使用这些权重来训练一个提升 model,来提取这个经过训练的 model 的特征。 我之前使用 Pytorch 做到了这一点,并且能够从我感兴趣的层中提取权重,并在我的验证集上进行预测,然后进行提升。

我现在在 tensorflow 中这样做,但目前卡住了。 下面是我的 model 结构,我尝试使用网站上的代码,但没有任何运气。 在此处输入图像描述

我想删除最后一个密集层并使用剩余层预测验证集。

我尝试使用:

layer_name = 'efficientnet-b6' intermediate_layer_model = tf.keras.Model(输入 = model.input,输出 = model)。

但我收到错误“ValueError: Graph disconnected: cannot get value for tensor Tensor("input_1:0", shape=(None, 760, 760, 3), dtype=float32) at layer "input_1". 以下之前的图层访问没有问题:[]”

有什么办法可以解决这个问题?

对不起这是我的错。 我只是在高效网络层之后添加了一个 GlobalAveragePooling2D 层,我能够提取权重并继续:)

仅供参考:

def build_model(dim=CFG['net_size'], ef=0):
    inp = tf.keras.layers.Input(shape=(dim,dim,3))
    base = EFNS[ef](input_shape=(dim,dim,3),weights='imagenet',include_top=False)
    x = base(inp)
    x = tf.keras.layers.GlobalAveragePooling2D()(x)
    x = tf.keras.layers.Dense(1,activation='sigmoid')(x)
    model = tf.keras.Model(inputs=inp,outputs=x)
    opt = tf.keras.optimizers.Adam(learning_rate=0.001)
    loss = tf.keras.losses.BinaryCrossentropy(label_smoothing=0.05) 
    model.compile(optimizer=CFG['optimizer'],loss=loss,metrics=[tf.keras.metrics.AUC(name='auc')])
    print(model.summary())
    return model

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM