Why does get_weights return an empty list?

后端 未结 2 1191
半阙折子戏
半阙折子戏 2021-02-15 14:15

I am teaching myself data science and something peculiar has caught my eyes. In a sample DNN tutorial I was working on, I found that the Keras layer.get_weights() f

相关标签:
2条回答
  • 2021-02-15 14:58

    It might also be, that you are trying to get weights from layers, which don't have any weights. Let's say, that you've defined below model:

    input = Input(shape=(4,))
    hidden_layer_0 = Dense(4, activation='tanh')(input)
    hidden_layer_1 = Dense(4, activation='tanh')(hidden_layer_0)
    output = Lambda(lambda t: l2_normalize(100000*t, axis=1))(hidden_layer_1)
    
    model = Model(input, output)
    

    and want to print weights of each layer (after building/training it previously). You can do this as follows:

    for layer in model.layers:
        print("===== LAYER: ", layer.name, " =====")
        if layer.get_weights() != []:
            weights = layer.get_weights()[0]
            biases = layer.get_weights()[1]
            print("weights:")
            print(weights)
            print("biases:")
            print(biases)
        else:
            print("weights: ", [])
    

    If you run this code, you will get something like this:

    ===== LAYER:  input_1  =====
    weights:  []
    ===== LAYER:  dense  =====
    weights:
    [[-6.86365739e-02  2.24897027e-01  ...  1.90570995e-01]]
    biases:
    [-0.02512692  -0.00486927  ...  0.04254978]
    ===== LAYER:  dense_1  =====
    weights:
    [[-6.86365739e-02  2.24897027e-01  ...  1.90570995e-01]]
    biases:
    [-0.02512692  0.00933884 ...  0.04254978]
    ===== LAYER:  lambda  =====
    weights:  []
    

    As you can see, first (Input) and the last (Lambda) layers don't have any weights.

    0 讨论(0)
  • 2021-02-15 15:01

    Maybe you are asking for weights before they are created.

    Weights are created when the Model is first called on inputs or build() is called with an input_shape.

    For example, if you load weights from checkpoint but you don't give an input_shape to the model, then get_weights() will return an empty list.

    0 讨论(0)
提交回复
热议问题