我通过设计一个简单的问题来问我的问题:
考虑到我想训练一个神经网络,我知道数据遵循 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 一样。我试图告诉网络数据的行为方式,但代码不理解。我有什么错误吗?
深度学习模型是数据驱动的模型。它们强烈依赖于训练数据。仅用两个样本训练神经网络并在更多样本上进行测试是很奇怪的。 如果你想用两个观测值来拟合二次曲线,那就更奇怪了,因为有无数条抛物线可以拟合该点。从数学角度来看,您必须至少再定义一个点。从实施的角度来看,添加的越多,就越适合。在 pytorch 中你可以做这样的事情:
data_points = torch.tensor([[2, 4], [10, 100], ... [more points] ...])