【问题标题】:Set weights of stack of layers in Keras model?在 Keras 模型中设置层堆栈的权重?
【发布时间】:2021-05-07 20:08:37
【问题描述】:

我使用了 Keras 模型类,并且有一堆连续的层,我想知道如何访问堆栈中的层来设置它们的权重。

class sho_Model(tf.keras.Model):
    def __init__(self):
        super(sho_Model, self).__init__()
        self.hidden_x1 = keras.models.Sequential(layers=[
            Conv1D(filters=8, kernel_size=7, activation=selu, input_shape=(1, 80, 2)),
            Conv1D(filters=6, kernel_size=7, activation=selu),
            Conv1D(filters=4, kernel_size=5, activation=selu)                              
        ])

        self.hidden_xfc = keras.models.Sequential(layers=[
            Dense(20, activation=selu),
            Dense(20, activation=selu)
        ])
        self.hidden_x2 = keras.models.Sequential(layers=[
            MaxPool1D(pool_size=2),
            Conv1D(filters=4, kernel_size=5, activation=selu),
            Conv1D(filters=4, kernel_size=5, activation=selu),
            Conv1D(filters=4, kernel_size=5, activation=selu),
            Conv1D(filters=4, kernel_size=5, activation=selu),
            Conv1D(filters=4, kernel_size=5, activation=selu),
            Conv1D(filters=4, kernel_size=5, activation=selu),
            AveragePooling1D(pool_size=2),
            Conv1D(filters=2, kernel_size=3, activation=selu),
            AveragePooling1D(pool_size=2),
            Conv1D(filters=2, kernel_size=3, activation=selu),
            AveragePooling1D(pool_size=2)
        ])

        self.hidden_encoded = Flatten()

        self.hidden_embedding = keras.models.Sequential(layers=[ 
            Dense(16, activation=selu),
            Dense(8, activation=selu),
            Dense(4) 
        ])


    def call(self, inputs, n=-1):
        x = K.permute_dimensions(inputs, (2, 1))
        x = self.hidden_x1(x)
        xfc = K.reshape(x, (n, 256))
        xfc = self.hidden_xfc(xfc)
        x = K.reshape(x, (n, 2, 128))
        x = self.hidden_x2(x)
        encoded = self.hidden_encoded(x)
        encoded = K.concatenate((encoded, xfc), 1)
        embedding = self.hidden_embedding(encoded)
        return embedding

我有类似的东西

curr_layer = 0
for layer in keras_model.layers:
    layer.set_weights(...)
    curr_layer+=1

但这只是访问顺序容器(正确的术语?)而不是单个层。

【问题讨论】:

  • 您可以使用 layer.layers 从顺序模型中访问单个层
  • 成功了,谢谢!

标签: tensorflow machine-learning keras keras-layer


【解决方案1】:

由于您已将这些顺序“容器”定义为单独的层,因此您可以使用多级 for 循环遍历各个层:

curr_layer = 0
for container in keras_model.layers:
    if container.name.startswith('flatten'):
        # Skip the flatten layer
        continue
    for layer in container.layers:
        layer.set_weights(...)
        curr_layer += 1

如果您想保存和恢复之前训练的模型的权重,更简单的方法是使用savesave_weights 方法来保存和恢复它们,使用load_weights 方法或tf.keras.models.load_model 方法。

【讨论】:

    猜你喜欢
    • 2017-03-22
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 2019-10-30
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多