Указание определенных весов как общих / связанных в одном слое - PullRequest
0 голосов
/ 08 июля 2019

Я работаю над архитектурой нейронной сети, использующей функциональный API в керасе, в котором у меня есть пользовательский слой с четырьмя узлами, передающими в один узел, как показано на рисунке ниже. Я хочу установить первые два веса как необучаемые со значением ноль для весов, соответствующих входам x1 и x2 (я могу выполнить эту часть) и Я хочу указать пользовательское ограничение, такое, чтобы веса связанные с входами x3 и x4 одинаковы (я не могу реализовать ограничение связанных весов).

На данный момент я реализовал пользовательский слой, как было предложено в ответе: Укажите соединения в NN (в кератах)

и я вызываю слой в своем коде, указывая соединения следующим образом:

outputTensor = CustomConnected(units= 1,connections=tf.constant([0.0,0.0,1.0,1.0]),output_dim= 1,use_bias=False,name='custom_layer')(inputTensor)

Так что первые два нуля в массиве соединений гарантируют, что эти соединения разорваны. Я устанавливаю их значения на 0 перед тренировкой, чтобы убедиться, что они остаются на 0, например ::

model.layers[#].set_weights([np.array([0,0,1,1])])

Как можно реализовать ограничение, чтобы веса для x_3 и x_4 оставались одинаковыми во время обучения? Я хочу, чтобы они выучили одно и то же значение . Я попытался указать переменную self.kernel в виде массива типа «массив» (0,0, вес, вес), но это не сработало. Можно ли сделать что-то подобное в керасе или в тензорном потоке?

Я был бы рад опубликовать больше кода, если это поможет.

enter image description here

...