冻结神经网络的权重,使其输出在特定点(张量流)取特定值

时间:2018-10-19 19:27:27

标签: python tensorflow machine-learning neural-network

假设我有一个看起来像这样的神经网络

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 :(得分:1)

当然,答案在一定程度上取决于目的。

最简单的解决方案是仅缩放输出。例如,通过线性回归器运行结果。虽然这可以达到预期的结果,但可能不是您想要的。

但是,可能更好的方法是在训练过程中将此附加目标集成到损失函数中。这样,您可以在其他需求与拟合神经网络权重之间进行权衡。关于如何适应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)示例中的每个批次注入