Масса замораживания нейронной сети такая, что ее выход принимает определенное значение в определенной точке (тензор потока) - PullRequest
0 голосов
/ 19 октября 2018

Допустим, у меня есть нейронная сеть, которая выглядит следующим образом

def neural_net(x):
    layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])
    layer_1 = tf.nn.sigmoid(layer_1)

    layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])
    layer_2 = tf.nn.sigmoid(layer_2)

    out_layer = tf.matmul(layer_2, weights['out']) + biases['out']
    return out_layer

Есть ли способ в тензорном потоке, чтобы исправить веса таким образом, что neural_net(a) всегда возвращает b (где a,b являются действительными числами), например, f(1) = 0?

1 Ответ

0 голосов
/ 20 октября 2018

Конечно, ответ немного зависит от цели.

Самое простое решение - просто масштабировать вывод.Например, запустив результат через линейный регрессор.Хотя это дает желаемый результат, это, вероятно, не то, что вы хотите.

Однако, возможно, лучший способ - интегрировать эту дополнительную цель в функцию потерь во время тренировки.Таким образом, вы можете найти компромисс между вашим дополнительным требованием и настройкой веса вашей нейронной сетиОбщее описание того, как адаптировать потери, вы можете найти в https://www.tensorflow.org/api_guides/python/contrib.losses

images, labels = LoadData(...)
predictions = MyModelPredictions(images)

weight = MyComplicatedWeightingFunction(labels)
weight = tf.div(weight, tf.size(weight))
loss = tf.contrib.losses.mean_squared_error(predictions, depths, weight)

Вес для вашего особого случая должен быть очень высоким.Таким образом, ваша критика не является полной гарантией, но весьма вероятна.

Кроме того, вам нужно переписать механизм мини-дозирования для добавления в каждую партию вашего (x,y) = (1,0) примера

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