神经网络中损失函数的物理约束

问题描述 投票:0回答:1

我通过设计一个简单的问题来问我的问题:

考虑到我想训练一个神经网络,我知道数据遵循 y=x^2 方程。

现在,我想向神经网络提供两个数据点(例如,[2,4] 和 [10, 100])

有了这个数据集,如果我运行神经网络,它绝对不知道数据的确切行为来预测其他数据。 (数据有限)

正如我所做的研究(Link),通过在损失函数内添加约束,代码应该学习输入数据的行为。因此,我在损失函数中添加了

torch.mean((y_pred - x_real**2)**2)
约束。所以新的损失函数是:

loss =  criterion(y_pred, y_real) + torch.mean((y_pred - x_real**2)**2)

但是,即使在数据范围内,代码仍然无法适应并遵循 y=x^2 行为。

我尝试仅通过删除

criterion(y_pred, y_real)
来运行代码,但代码不收敛。

我想知道为什么这不起作用,因为它就像 PINN 一样。我试图告诉网络数据的行为方式,但代码不理解。我有什么错误吗?

deep-learning pytorch neural-network
1个回答
0
投票

深度学习模型是数据驱动的模型。它们强烈依赖于训练数据。仅用两个样本训练神经网络并在更多样本上进行测试是很奇怪的。 如果你想用两个观测值来拟合二次曲线,那就更奇怪了,因为有无数条抛物线可以拟合该点。从数学角度来看,您必须至少再定义一个点。从实施的角度来看,添加的越多,就越适合。在 pytorch 中你可以做这样的事情:

data_points = torch.tensor([[2, 4], [10, 100], ... [more points] ...])
© www.soinside.com 2019 - 2024. All rights reserved.