PyTorch - 你应该如何规范化个别实例
PyTorch - How should you normalize individual instances
我正在使用 PyTorch 训练线性回归模型。我使用包含 200 张图画的数据集训练了这个模型,这些图画由几个有趣的特征表示。因为所有功能都在不同的规模上工作,所以我决定规范化我的训练数据以获得更好的结果。与这些图画相关的标签表明 public 对它们的评价。这一切都很顺利,我已经得到了一个非常一致的模型,因为我知道我只有 200 张图纸的训练集。我的代码下面有更多详细信息:
# Reading the data
data = pd.read_csv('dataset.csv')
drawings = paintings_frame.iloc[:n, 1:]
labels = paintings_frame.iloc[:n, 0]
# Making sure it's in the right format
drawings_numpy = drawings.values.astype(np.float32)
labels_numpy = labels.values.astype(np.float32)
labels_numpy = labels_numpy.reshape(-1,1)
# Normalizing
scaler = MinMaxScaler()
drawings_numpy = scaler.fit_transform(drawings_numpy)
# Converting to Tensor datasets
inputs = torch.tensor(drawings_numpy)
targets = torch.tensor(drawingss_numpy)
# Loading it into the model
input_size = inputs.shape[1]
output_size = 1
model = nn.Linear(input_size, output_size)
然后我的代码继续定义损失和优化器并定义训练循环。但我想这是这个问题最相关的部分。所以在训练并保存我的模型之后,我现在显然想使用这个模型来预测新给定图纸的标签。但是,如果我错了,请纠正我,在我看来,我必须规范化我现在提供给模型的任何绘图,以便像我对原始训练集所做的那样进行预测,对吗?如果是这样,我不是这种规范化究竟如何工作的专家,但我认为数据规范化的方式取决于数据的行为方式(例如,单个特征在数据集中可以具有的最小值和最大值)。如果是这种情况,我觉得我不能简单地标准化我现在想要通过简单地调用与我用于训练集的相同函数来预测的单个实例。有人能阐明这到底是如何工作的吗,或者我的推理是否有误?
你说得对。缩放将取决于数据在给定特征中的行为方式,即它的分布或在这种情况下仅 min/max 值。
由于测试实例不能很好地表示底层分布,但训练数据可以(假设并且应该是),因此您保存缩放器的参数以备将来使用。
我建议阅读 MinMaxScaler 和其他缩放器的文档 here
get_params
方法 returns 您保存的参数,然后在推理期间使用 set_params
获得相同的缩放器,而不是在测试数据上拟合新的缩放器。
我正在使用 PyTorch 训练线性回归模型。我使用包含 200 张图画的数据集训练了这个模型,这些图画由几个有趣的特征表示。因为所有功能都在不同的规模上工作,所以我决定规范化我的训练数据以获得更好的结果。与这些图画相关的标签表明 public 对它们的评价。这一切都很顺利,我已经得到了一个非常一致的模型,因为我知道我只有 200 张图纸的训练集。我的代码下面有更多详细信息:
# Reading the data
data = pd.read_csv('dataset.csv')
drawings = paintings_frame.iloc[:n, 1:]
labels = paintings_frame.iloc[:n, 0]
# Making sure it's in the right format
drawings_numpy = drawings.values.astype(np.float32)
labels_numpy = labels.values.astype(np.float32)
labels_numpy = labels_numpy.reshape(-1,1)
# Normalizing
scaler = MinMaxScaler()
drawings_numpy = scaler.fit_transform(drawings_numpy)
# Converting to Tensor datasets
inputs = torch.tensor(drawings_numpy)
targets = torch.tensor(drawingss_numpy)
# Loading it into the model
input_size = inputs.shape[1]
output_size = 1
model = nn.Linear(input_size, output_size)
然后我的代码继续定义损失和优化器并定义训练循环。但我想这是这个问题最相关的部分。所以在训练并保存我的模型之后,我现在显然想使用这个模型来预测新给定图纸的标签。但是,如果我错了,请纠正我,在我看来,我必须规范化我现在提供给模型的任何绘图,以便像我对原始训练集所做的那样进行预测,对吗?如果是这样,我不是这种规范化究竟如何工作的专家,但我认为数据规范化的方式取决于数据的行为方式(例如,单个特征在数据集中可以具有的最小值和最大值)。如果是这种情况,我觉得我不能简单地标准化我现在想要通过简单地调用与我用于训练集的相同函数来预测的单个实例。有人能阐明这到底是如何工作的吗,或者我的推理是否有误?
你说得对。缩放将取决于数据在给定特征中的行为方式,即它的分布或在这种情况下仅 min/max 值。
由于测试实例不能很好地表示底层分布,但训练数据可以(假设并且应该是),因此您保存缩放器的参数以备将来使用。
我建议阅读 MinMaxScaler 和其他缩放器的文档 here
get_params
方法 returns 您保存的参数,然后在推理期间使用 set_params
获得相同的缩放器,而不是在测试数据上拟合新的缩放器。