Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当神经网络无法映射数据之间的关系时,原因是什么?_Python_Machine Learning_Neural Network_Deep Learning_Data Science - Fatal编程技术网

Python 当神经网络无法映射数据之间的关系时,原因是什么?

Python 当神经网络无法映射数据之间的关系时,原因是什么?,python,machine-learning,neural-network,deep-learning,data-science,Python,Machine Learning,Neural Network,Deep Learning,Data Science,我有一个回归问题,我应该预测方向(方位角)和与数据集中其他特征(例如加速度、速度、经度、纬度等)的距离。这对于神经网络来说应该是一项简单的任务,但是我的神经网络模型不能适应数据。它从一个大的损失值开始,然后缓慢下降,直到达到6000,这是一个不可接受的损失值,它停留在那里,就像被卡住了一样。首先,我想这可能是因为我预测的是两个输出,而不是一个,所以我尝试通过创建两个独立的神经网络来分割任务,一个负责预测距离,另一个负责预测方位,但这也没有帮助,我注意到网络不知何故陷入了高损耗值。我的意思是,他们

我有一个回归问题,我应该预测方向(方位角)和与数据集中其他特征(例如加速度、速度、经度、纬度等)的距离。这对于神经网络来说应该是一项简单的任务,但是我的神经网络模型不能适应数据。它从一个大的损失值开始,然后缓慢下降,直到达到6000,这是一个不可接受的损失值,它停留在那里,就像被卡住了一样。首先,我想这可能是因为我预测的是两个输出,而不是一个,所以我尝试通过创建两个独立的神经网络来分割任务,一个负责预测距离,另一个负责预测方位,但这也没有帮助,我注意到网络不知何故陷入了高损耗值。我的意思是,他们开始学习,在最初的5到10个阶段已经做得很好,但后来他们坚持下来,不再进步。现在我不是这个领域的初学者,我尝试通过添加层、神经元等来改变优化器、网络的复杂性,对输入进行规范化或标准化,但这些都没有帮助。我开始认为数据可能有问题,毕竟这是一个回归问题,而不是一个分类问题,我认为数据中的异常值或诸如此类的东西会严重影响分类问题。不幸的是,我在数据科学或如何处理数据方面没有很好的知识。。我读过关于日志转换之类的东西,但我没有正确理解。所以我的问题是,这是我的神经网络无法学习的原因吗?我正在寻求一个建议,我应该或者可以如何预处理我的数据,以及如何确定它是否是一个数据问题

我的数据是一个csv文件,我用熊猫加载它,在特征选择之后,我只有6个特征和1个输出,所以我的输入形状是(40000,6),输出是(40000,1)。我还使用这个函数来规范化我的输入(正如您所看到的,我正在尝试z_分数和minmax规范化,但这没有帮助):

这是我与pytorch的神经网络模型声明:

class BearingNetwork(nn.Module):
    def __init__(self, n_features=X.shape[1], n_out=1):
        super().__init__()
        self.model = nn.Sequential(

            nn.Linear(n_features, 140), 
            nn.ReLU(),
            nn.Linear(140, 64),
            nn.ReLU(),
            nn.Linear(64, n_out),
        )

    def forward(self, x):
        out = self.model(x)
        return out
然后我使用skorch API,因为它实现了pytorch模型的自动交叉验证(skorch只是pytorch的一个scikit学习包装器,但我也使用了pytorch并获得了相同的结果):

我读了很多博客,了解如何对数据进行预处理,但不知何故很难理解。例如,我尝试使用seaborn绘制一对地块,结果如下:


我如何解释这些数据?这个曲线图是否显示我的数据不好?我找到的大多数教程都显示了简单的数据集,这些数据集具有线性关系和正相关或负相关,但在我的例子中,没有线性关系,正如我从图表中看到的那样。我希望有人能在这方面指导我。我已经挣扎了三个星期了,我什么都试过了。我最后的希望是为我的数据集找到一些转换,以便网络能够更好地学习数据,因为我确信我的模型实现没有问题,因为我使用了pytorch、skorch和keras,并且我总是得到相同的结果

你的人际网络是什么样的?如果您想检测网络是否有故障,或者您的数据是否无法解决问题,您可以尝试其他机器学习算法,例如梯度增强,然后检查损失,看看它是否成功学习。@Osbark输入的形状为(40000,7),输出(40000,1)它有多少层,它们的尺寸是多少?@Osbark我已经解释过,我尝试过许多架构。我尝试了1到10层,3到10000个神经元。这个错误与我的神经网络结构无关,这就是为什么我要提出这个问题。我认为数据有问题,或者数据需要转换。你有没有尝试过不同的机器学习算法,比如梯度增强?如果它无法学习,这很可能意味着数据中没有足够的信息。你的网络是什么形状的?如果您想检测网络是否有故障,或者您的数据是否无法解决问题,您可以尝试其他机器学习算法,例如梯度增强,然后检查损失,看看它是否成功学习。@Osbark输入的形状为(40000,7),输出(40000,1)它有多少层,它们的尺寸是多少?@Osbark我已经解释过,我尝试过许多架构。我尝试了1到10层,3到10000个神经元。这个错误与我的神经网络结构无关,这就是为什么我要提出这个问题。我认为数据有问题,或者数据需要转换。你有没有尝试过不同的机器学习算法,比如梯度增强?如果它无法学习,这很可能意味着数据中没有足够的信息。
class BearingNetwork(nn.Module):
    def __init__(self, n_features=X.shape[1], n_out=1):
        super().__init__()
        self.model = nn.Sequential(

            nn.Linear(n_features, 140), 
            nn.ReLU(),
            nn.Linear(140, 64),
            nn.ReLU(),
            nn.Linear(64, n_out),
        )

    def forward(self, x):
        out = self.model(x)
        return out
bearing_nn = NeuralNetRegressor(

    BearingNetwork,
    criterion=nn.MSELoss,
    optimizer=optim.Adam,  # I also tried other optimizers
    max_epochs=100,
    batch_size=128,
    lr=5e-2,  # also tried many other learning rates
    iterator_train__shuffle=True,
    iterator_train__num_workers=4,
    iterator_train_pin_memory=True,
    callbacks=[R2, rmse, Checkpoint(), EarlyStopping(patience=100)],
    device=device

)