Модификация соединений нейронной сети TensorFlow - PullRequest
1 голос
/ 16 января 2020

Я использую Python 3.X вместе с TensorFlow 2.0 для создания игрушечной модели нейронной сети, которая выглядит следующим образом:

model = Sequential()                                                                                                         

model.add(
    Dense(
        units = 2, activation = 'relu',
        kernel_initializer = tf.keras.initializers.GlorotNormal(),
        input_shape = (2,)
        )
    )

model.add(
    Dense(
        units = 2, activation = 'relu',
        kernel_initializer = tf.keras.initializers.GlorotNormal()
        )
    )

model.add(
    Dense(
        units = 1, activation = 'sigmoid'
        )
    )

Теперь я хочу изменить веса / смещения модели в послойная манера. Код, который я придумал для изменения соединений случайно инициализированных весов / смещений модели, состоит в том, что соединения, имеющие величину менее 0,5, должны стать нулевыми, в то время как остальные должны остаться такими же:

for layer in model.trainable_weights:
    layer = tf.where(tf.less(layer, 0.5), 0, layer)

Тем не менее, этот код не меняет соединения, как я хочу. Что мне делать?

Спасибо!

1 Ответ

1 голос
/ 16 января 2020

Ваш код просто создает новые тензоры с желаемыми значениями и помещает их в переменную Python layer, но не меняет переменные Tensorflow так, как вы хотите к. Вам необходимо использовать метод assign класса Variable:

for layer in model.trainable_weights:
    layer.assign(tf.where(tf.less(layer, 0.5), 0, layer))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...