Разница между layer.weights и layer.get_weights в керасе - PullRequest
0 голосов
/ 26 марта 2019

У меня есть модель Keras.Если я получу один слой своей модели, а затем позвоню sess.run(layer.weights[0]) и layer.get_weights()[0], я получу разные результаты.

>>> layer.get_weights()[0]
array([[ 0.05829928, -0.01113867,  0.07874133, ..., -0.0832592 ,
        -0.02382897,  0.02150916],
       [-0.06571103,  0.06946308,  0.01161512, ..., -0.01296931,
        -0.01047098,  0.08497558],
       [-0.06404617,  0.01107556,  0.07584237, ..., -0.04085402,
        -0.00671811, -0.04153195],
       ...,
       [-0.0100356 , -0.05815255,  0.05809011, ...,  0.0594966 ,
        -0.0635704 , -0.04289378],
       [-0.01073305, -0.0400929 , -0.01252703, ..., -0.00287437,
         0.08347356,  0.04667132],
       [-0.03608105,  0.05812681, -0.0146297 , ..., -0.0673831 ,
        -0.00531388, -0.02482456]], dtype=float32)

>>> sess.run(layer.weights[0])
array([[-0.03271605,  0.02013551,  0.05350242, ...,  0.06657993,
         0.08541366, -0.01483627],
       [-0.02411069, -0.03852968,  0.02710939, ..., -0.00030499,
         0.07864482,  0.04452118],
       [-0.00293329, -0.01251988, -0.01190369, ...,  0.06554652,
        -0.01539454,  0.08236458],
       ...,
       [ 0.04456077, -0.00256501,  0.01785846, ..., -0.03573522,
         0.00770979, -0.05544731],
       [-0.00415177, -0.01014608, -0.0684113 , ..., -0.05186068,
         0.04402267,  0.03113024],
       [-0.05103095, -0.06083905, -0.0098877 , ..., -0.00747809,
        -0.035869  , -0.03331041]], dtype=float32)

Почему?Я нашел этот другой вопрос в Stackoverflow, но я не совсем понимаю данный ответ.

1 Ответ

0 голосов
/ 26 марта 2019

layer.weights - тензорная переменная, поэтому она должна оцениваться в сеансе.Если вы используете сеанс из keras.backend, вы должны получить те же значения.

from keras import backend as K 
K.get_session().run(layer.weights[0])

, что, по сути, и делает Керас в методе get_weights ().

https://github.com/keras-team/keras/blob/ad578c4c19444af9d1f0e0d51a8283eb0db1a264/keras/engine/base_layer.py#L1061

https://github.com/keras-team/keras/blob/ad578c4c19444af9d1f0e0d51a8283eb0db1a264/keras/backend/tensorflow_backend.py#L2652

В другом связанном вопросепользователь получил разные результаты, потому что был создан новый сеанс и все переменные инициализированы с помощью init_op.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...