2017-02-22 32 views
1

Я хочу создать сеть с фиксированными связями между слоями. Например, Sparsely connected neural networkКак создать пользовательскую подключенную нейронную сеть с использованием тензорного потока?

Я пытался смотреть в функцию в Tensorflow, но я нашел только плотные сети с регуляризаторами, которые не функционируют, как я хочу.

Если это невозможно в тензорном потоке, пожалуйста, предложите другую библиотеку, которая может быть использована. Благодаря!

ответ

2

Вы всегда можете найти обходной путь. Скажем, слой y = xW (Wx также верен), но вы хотите, чтобы некоторые из записей в W всегда были нулями. Вы можете сделать это столбцы:

Для столбца i (или элемента i так y вектор) выхода, y_i = x * D_i * W_i. Матрица D_i является постоянной диагональной матрицей (tf.constant, tf.diag), которая контролирует, какой элемент будет нулями.

Затем вы можете использовать tf.concat, чтобы объединить все y_i с матрицей Y.

Вы можете абстрагировать это на функцию, чья подпись может выглядеть как def sparse_layer(input_layer, gates_matrix, activation_f, ...), которая возвращает выходной слой.

+1

Спасибо! Я попытаюсь реализовать это и увидеть результаты. Один вопрос, хотя, если мы вынуждаем весы идти к нулю, как это, то как обратное распространение влияет на эти веса тогда? Идеальная ситуация в моем случае заключалась бы в том, что градиенты не распространяются обратно на веса, равные нулю. – navyajapani

+0

Этот метод не работает. Таким образом, сеть все еще пытается тренировать весы на соединении, которое не должно быть там. Нам нужна сеть, где веса для связанных ребер являются единственными переменными, которые нужно обучить. Какие-либо предложения? – navyajapani

+0

@navyajapani Давайте расширим выражение и получим 'y_i = x * D_i * W_i = [.... x ....] * diag ([.... d ....]) * транспонировать ([. ... ж ....]) '. Если 'd = 0', то' y_i = [.... 0 ....] * транспонировать ([.... w ...]) = .... + 0 * w + .... '. Таким образом, элемент 'w' в' W' влияет на выход, поэтому градиент по отношению к 'w' равен 0, и поэтому' w' не обучается, даже если он может иметь начальное значение. – yuefengz