Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在TensorFlow 2.x中删除层/从特定层提取特征_Python_Python 3.x_Tensorflow_Tensorflow2.0 - Fatal编程技术网

Python 在TensorFlow 2.x中删除层/从特定层提取特征

Python 在TensorFlow 2.x中删除层/从特定层提取特征,python,python-3.x,tensorflow,tensorflow2.0,Python,Python 3.x,Tensorflow,Tensorflow2.0,我有一个训练有素的CNN模型,我用一个致密层作为顶部模型来进行预测。但是,现在我想使用倒数第二层来提取特征,但我无法删除最后一层 我试过了。爸爸,但那似乎不再有效了 我的模型如下: input_1(InputLayer)[(无、256、256、3)]0 _________________________________________________________________efficientnet-b6(功能性)(无、8、8、2304)40960136 _________________

我有一个训练有素的CNN模型,我用一个致密层作为顶部模型来进行预测。但是,现在我想使用倒数第二层来提取特征,但我无法删除最后一层

我试过了。爸爸,但那似乎不再有效了

我的模型如下:

input_1(InputLayer)[(无、256、256、3)]0
_________________________________________________________________efficientnet-b6(功能性)(无、8、8、2304)40960136
_________________________________________________________________全球平均池2D(Gl(无,2304)0
_________________________________________________________________密集型(密集型)(无,1)2305
==================================================================总参数:40962441可训练参数:0个不可训练参数: 40962441


我想去除致密部分。

您可以采取以下步骤:

  • 提取模型的层
  • 获取输入层和所需的新输出层(在您的情况下,是您所需的功能)
  • 重建模型
  • 强调这一点的一个例子是:

    import tensorflow as tf
    from tensorflow.keras import layers, models
    
    
    def simpleMLP(in_size, hidden_sizes, num_classes, dropout_prob=0.5):
        in_x = layers.Input(shape=(in_size,))
        hidden_x = models.Sequential(name="hidden_layers")
        for i, num_h in enumerate(hidden_sizes):
            hidden_x.add(layers.Dense(num_h, input_shape=(in_size,) if i == 0 else []))
            hidden_x.add(layers.Activation('relu'))
            hidden_x.add(layers.Dropout(dropout_prob))
        out_x1 = layers.Dense(num_classes, activation='softmax', name='baseline1')
        out_x2 = layers.Dense(3, activation='softmax', name='baseline2')
        return models.Model(inputs=in_x, outputs=out_x2(out_x1((hidden_x(in_x)))))
    
    baseline_mdl = simpleMLP(28*28, [500, 300], 10)
    print(baseline_mdl.summary())
    
    模型:“功能性_1” _________________________________________________________________ 图层(类型)输出形状参数#
    ================================================================= 输入_1(输入层)[(无,784)]0
    _________________________________________________________________ 隐藏层(顺序)(无,300)542800
    _________________________________________________________________ 基线1(密集)(无,10)3010
    _________________________________________________________________ 基线2(密集)(无,3)33
    ================================================================= 总参数:545843 可培训参数:545843 不可训练参数:0 _________________________________________________________________

    模型:“功能性_3” _________________________________________________________________图层(类型)输出形状参数#
    ===========================================================================================input\u 1(InputLayer)[(None,784)]0
    _________________________________________________________________隐藏层(顺序)(无,300)542800
    _________________________________________________________________基线1(密集)(无,10)3010
    ==================================================================总参数:545810可训练参数:545810不可训练参数: 0


    正如你所看到的,我去掉了最后一层,仍然能够使用经过训练的重量


    请注意,根据您的型号可能会略有不同,但这是您应该遵循和调整的一般原则。

    @Alexandros当然,很乐意提供帮助!
    baseline_in = baseline_mdl.layers[0].input
    baseline_out = baseline_mdl.layers[-2].output
    new_baseline = models.Model(inputs=baseline_in,
                                outputs=baseline_out)
    print(new_baseline.summary())