При построении модели Keras вы строите график операций, и всякий раз, когда вы вводите данные через свою модель, вы вводите данные через этот график операций. Другими словами, вы строите модель один раз, а затем можете выполнять ввод через нее столько раз, сколько захотите.
Функции не-Keras не будут частью графика включая операции типа print
или np.random.random()
. Вам нужно будет использовать эквиваленты Кераса.
Для print
используйте функцию keras.backend.print_tensor
.
Для np.random.random
используйте функцию keras.backend.random_uniform
.
Я думаю, что вы не собирались это делать, но поскольку вы используете np.random.random()
в своем пользовательском слое, эта операция будет выполняться только при построении модели. . Он не будет выполняться всякий раз, когда вы запускаете данные через вашу модель. Другими словами, слой либо только обратит входные данные, либо вернет только входные данные. Чтобы получить случайное поведение, которое, я думаю, вам нужно, вам нужно использовать функцию Keras (т. Е. keras.backend.random_uniform
). Использование этой функции Keras будет генерировать случайное число каждый раз, когда вы запускаете вашу модель.
Чтобы обозначить точку, np.random.random()
будет запущен один раз при построении модели и, по сути, во время сборки определит, что этот слой будет делать (то есть, он будет либо только изменять вход, либо он будет возвращать только вход без изменений). keras.backend.random_uniform()
, с другой стороны, не будет генерировать случайное число при построении модели, а вместо этого добавляет к модели операцию random_uniform, поэтому каждый раз, когда данные проходят через модель, случайное число будет вытягиваться из униформы распределение в этой точке.