我正在尝试构造一个依赖于x(空间)和t(时间)即u(x,t)的函数u的神经网络逼近。为简单起见,x和t是数学术语中的一维变量。
示例损失函数是(u(x,t)-\ int u(x,t)\,dx)^ 2。这只是出于我的问题。我正在考虑的损失函数包括x而不是时间的积分项。
要执行此损失函数,理想情况下,我将得到点(x_i,t_i),i = 1:N,并且我想最小化损失\ sum_ {i = 1} ^ N(u(x_i,t_i) -\ int u(x,t_i)\,dx)^ 2。
损失函数中的积分项将通过梯形法则等数值积分来近似。
我能够在Tensorflow中成功实现此目标,但是我的点(x_i,t_i)都位于矩形网格中,这使我能够方便地通过使用针对Tensorflow设计的张量的矢量化操作同时执行数值积分。 (即(x_i,t_i)是使用numpy中的meshgrid获得的)
现在,我想对(x_i,t_i)使用非网格点,例如拉丁超立方体样本。我将这些非网格点称为(xLHS,tLHS)。假设tLHS中不太可能重复输入。在这种情况下,我将不得不引入另一组点xInt以便在任何时候以数字方式估计积分。为了具体起见,假设xInt = -5:0.1:5。 (采用Matlab表示法)
现在要计算损失,我可以修改我的原始代码,其中(x_i,t_i)位于网格中,但是现在分别计算在tLHS和xInt上执行meshgrid并使用矢量化运算将获得的积分项与张量流。但是,如果tLHS的大小为20000,xInt的大小为101,则生成的网格将可能在张量流中难以处理。
我认为的另一个选择是遍历tLHS中的每个值,并使用xInt近似积分。推荐这个吗?鉴于在张量中分配条目并不简单,我如何在tLHS中存储每个点的积分值?我也在考虑concat,但随后似乎在tensorflow中没有空张量来初始化循环。
如果有帮助,x和t在我的代码中是占位符。