【问题标题】:tf.keras.layers.pop() doesn't work, but tf.keras._layers.pop() doestf.keras.layers.pop() 不起作用,但 tf.keras._layers.pop() 起作用
【发布时间】:2019-08-01 20:27:44
【问题描述】:

我想弹出模型的最后一层。所以我用tf.keras.layers.pop(),但是不行。

base_model.summary()

base_model.layers.pop()

base_model.summary()

当我使用tf.keras._layers.pop() 时,它可以工作。

base_model.summary()

base_model._layers.pop()
base_model.summary()

我没有找到有关此用法的文档。有人可以帮忙解释一下吗?

【问题讨论】:

    标签: python tensorflow tensorflow2.0


    【解决方案1】:

    我同意这令人困惑。原因是model.layers 返回了层列表的浅表副本,所以:

    tldr 不使用model.layers.pop() 删除最后一层。相反,我们应该创建一个新模型,除了最后一层。也许是这样的:

    new_model = tf.keras.models.Sequential(base_model.layers[:-1])
    

    查看github issue了解更多详情

    【讨论】:

      【解决方案2】:

      @Stewart_R 清楚地显示了问题的解决方案:)

      让我在解决方案中放一个简单的代码。

      loaded_model = keras.models.load_model(fname)
          
      # remove the last 2 layers
      sliced_loaded_model = Sequential(loaded_model.layers[:-2])
          
      # set trainable=False for the layers from loaded_model
      for layer in sliced_loaded_model.layers:
          layer.trainable = False
          
      # add new layers
      sliced_loaded_model.add(Dense(32, activation='relu'))  # trainable=True is default
      sliced_loaded_model.add(Dense(1))
          
      # compile
      sliced_loaded_model.compile(loss='mse', optimizer='adam', metrics=[])
          
      # fit
      ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-15
        • 1970-01-01
        • 2015-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多