我正在研究基于Keras/TensorFlow的神经网络。我想做点不同的事。在
通常,网络的输出层产生一个输出张量(即数字列表)。然后使用损失函数(如均方误差)将这些数字直接与训练数据的目标列表(标签)进行比较。在
但是,我希望网络的输出层是作为函数参数的一系列数字。函数对这些参数进行操作以生成新的数字列表。然后,损失函数变成函数输出和标签之间的MSE(而不是通常情况下,输出层和标签之间的MSE)。在
我知道我需要编写一个Keras自定义丢失函数,它从输出层值计算目标函数的值,然后计算并返回目标函数输出和标签之间的MSE。我还意识到所有这些都需要在张量流图中完成,并且目标函数需要是可微的,这样才能计算梯度。我相信我对这一切都很了解。在
这是我无法理解的。假设在输出层有四个神经元-分别称为a,b,c,d,每个神经元都是目标函数F(a,b,c,d)的独立参数。假设我迭代F(a,b,c,d)20次,得到一组20个值。也就是说,F(a,b,c,d,1);F(a,b,c,d,2);等等,那么我只想取这20个值和对应标签张量中的20个值之间的MSE。这就是损失函数。在
我只是不太了解Keras/Tensorflow后端,不知道如何获得输出张量的各个元素。如何处理这个张量中的第零个、第一个、第二个等元素,以便我可以用它们来计算函数值?我知道如何对整个张量执行操作,但不知道如何处理单个张量元素。在
我希望我已经把这个问题解释清楚了。在
谢谢你的帮助!在
由于预测结果和标签的形状必须相同,我们应该创建一个完整的模型,包含您想要的函数(而不是将函数留给loss函数)。在
稍后我们可以获取前一层的输出,这将是所需的参数。在
所以,假设你已经准备好了模型到输出参数的层(很可能是一个
Dense(4)
,它将为每个输入样本输出4个参数)。在让我们在它后面添加两个lambda层。在
a*sin(bx + c) + d
所以:
其中:
^{pr2}$现在你可以训练这个模型通过标签。在
当您要检索四个参数时,需要另一个模型,该模型在前面结束:
结果的形状将类似(20,4),但所有20行都将重复。在
相关问题 更多 >
编程相关推荐