我想基于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”即可。