python - 冻结神经网络的权重,使其输出在特定点取特定值(张量流)
问题描述
假设我有一个看起来像这样的神经网络
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
?
解决方案
但是,当然,答案在某种程度上取决于目的。
最简单的解决方案是仅缩放输出。例如,通过线性回归器运行结果。虽然这给出了预期的结果,但它可能不是您想要的。
然而,可能更好的方法是在训练期间将这个额外的目标集成到损失函数中。通过这种方式,您可以在额外要求和拟合神经网络的权重之间进行权衡。您可以在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)
示例
推荐阅读
- c++ - 测试(2922,0x10f07ce00)malloc:*** 对象 0x7fb438c05a70 错误:未分配指针被释放
- rest - Rest API 仅在特定设备上失败
- javascript - setInterval 基于 ajax 结果或承诺状态
- haproxy - haproxy 无法释放 tcp 连接
- python - ZenDesk - 任何人都知道如何在 ZenDesk Api 中进行身份验证
- angular - jsPlumb 函数失败:TypeError:无法读取未定义的属性(正在读取“resetBounds”)
- python - 使用 Deeplabv3+ keras 进行二元语义分割(专为多类语义分割而设计)
- python - 给定一个数组,什么是创建数组数组的有效方法,其中每个子数组的索引与给定数组中的值相等
- python - 检查熊猫数据框行的值
- laravel - laravel 测试可邮寄附件已发送