Тензорный поток: постройте NN-выходы 1 или 0 вектор

Я хочу построить Neural Network, основанную на Tensorflow, только с 0 или 1 выходным значением, где количество единиц вывода, которое выводит 1, является постоянным. То есть, если мы установим количество всех выходных блоков равным 5, а количество единиц, для которых выход 1 равен 2, рассчитанные NN выходы [0,1,1,0,0] или [0,0,1 , 0,1] или [1,0,0,1,0] в зависимости от входных данных. Чтобы создать такой NN, я пишу следующий код. (Коды, отличные от следующей части, похоже, не создают проблем.)

    y = tf.nn.softmax(tf.matmul(inputs, weights) + biases)
    indices_of_ranks = tf.nn.top_k(-y, k=5)[1]
    ranks_of_indices = tf.nn.top_k(-indices_of_ranks, k=5)[1]
    condition = tf.greater(ranks_of_indices, 5-2-1)
    final_output = tf.cast(condition, tf.float32)

Хотя «final_output» работает хорошо, как и ожидалось, он не работает во время обучения с сообщением об ошибке «Без градиентов для любой переменной». Поскольку этот NN использует tf.nn.top_k, градиентов не существует, что приводит к этому сообщению об ошибке.

Затем, как мне реализовать? Кто-нибудь знает умный способ? Кто-нибудь может мне помочь? Я не забочусь об использовании tf.nn.softmax или tf.nn.top_k, пока я могу построить правильно обучаемый NN, который всегда выводит два «1» и три «0» в зависимости от входных данных.

python,tensorflow,neural-network,

0

Ответов: 0

Тензорный поток: постройте NN-выходы 1 или 0 вектор

Я хочу построить Neural Network, основанную на Tensorflow, только с 0 или 1 выходным значением, где количество единиц вывода, которое выводит 1, является постоянным. То есть, если мы установим количество всех выходных блоков равным 5, а количество единиц, для которых выход 1 равен 2, рассчитанные NN выходы [0,1,1,0,0] или [0,0,1 , 0,1] или [1,0,0,1,0] в зависимости от входных данных. Чтобы создать такой NN, я пишу следующий код. (Коды, отличные от следующей части, похоже, не создают проблем.)

    y = tf.nn.softmax(tf.matmul(inputs, weights) + biases)
    indices_of_ranks = tf.nn.top_k(-y, k=5)[1]
    ranks_of_indices = tf.nn.top_k(-indices_of_ranks, k=5)[1]
    condition = tf.greater(ranks_of_indices, 5-2-1)
    final_output = tf.cast(condition, tf.float32)

Хотя «final_output» работает хорошо, как и ожидалось, он не работает во время обучения с сообщением об ошибке «Без градиентов для любой переменной». Поскольку этот NN использует tf.nn.top_k, градиентов не существует, что приводит к этому сообщению об ошибке.

Затем, как мне реализовать? Кто-нибудь знает умный способ? Кто-нибудь может мне помочь? Я не забочусь об использовании tf.nn.softmax или tf.nn.top_k, пока я могу построить правильно обучаемый NN, который всегда выводит два «1» и три «0» в зависимости от входных данных.

00питон, tensorflow, нейронная сеть,
Похожие вопросы
Яндекс.Метрика