Переменные Tensorflow не создаются заранее при создании пустого слоя - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь создать новую модель кераса для Кераса. Для расчета потерь я использую градиентную ленту, как предложено в https://towardsdatascience.com/custom-loss-function-in-tensorflow-2-0-d8fa35405e4e. Однако я обнаружил, что переменные не инициализируются перед операцией вызова. Чтобы дать вам простой пример.

l = tf.keras.layers.Dense(activation=None,    
                      units = 1,
                      input_shape = (10, ))
l.variables

Там переменные пусты. Но при вызове

l = tf.keras.layers.Dense(activation=None,
                      units = 1,
                      input_shape = (10, ))
l(np.ones((10, 10)))
l.variables

Приведенный выше код предоставляет список переменных. Я просто пытался понять, является ли это ожидаемым поведением. В таких случаях я должен рассчитать потери перед добавлением переменных в список наблюдения.

1 Ответ

0 голосов
/ 03 мая 2020

В тензорном потоке / керасе веса слоев инициализируются не при их создании (вызове __init__), а при вызове их метода build() или при первом вызове метода __call__, как вы сделали с нулем тензор. Вы можете кратко прочитать об этом здесь, в документации пользовательских слоев или в официальном исходном коде .

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