趋近智
神经网络 (neural network)能有效学习之前,输入数据必须具备正确的形态和格式。原始数据集常包含尺度不一的特征、类别值或缺失条目,这些都无法直接用于网络内部的数学运算。正确的数据准备是深度学习 (deep learning)流程中的一个基本环节,它直接影响模型的收敛速度和整体表现。可以将其比作烹饪前的食材准备;没有妥善准备,最终的菜肴很难成功。
本节涵盖了使用现代框架将原始数据转换为适合训练深度神经网络的基本方法。我们将侧重于数据格式化、数值特征缩放以及数据用于训练和评估的划分。
PyTorch和TensorFlow等深度学习 (deep learning)框架主要处理名为张量的多维数组。您通常会将输入数据(特征)和目标数据(标签或目标值)表示为张量。
大多数框架都提供从NumPy数组或Python列表等常见数据结构到其原生张量格式的便捷转换。例如,在PyTorch中:
import torch
import numpy as np
# 示例:将NumPy数组转换为PyTorch张量
numpy_array = np.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
feature_tensor = torch.from_numpy(numpy_array).float() # 确保神经网络使用浮点类型
print(feature_tensor)
# 输出:
# tensor([[1., 2.],
# [3., 4.],
# [5., 6.]])
神经网络 (neural network)对输入特征的尺度很敏感。值较大的特征可能会主导学习过程,导致收敛速度变慢或阻碍网络有效学习。梯度下降 (gradient descent)法作为核心优化算法,在特征尺度相近时表现通常更佳。两种常见的缩放技术是归一化和标准化。
归一化将特征重新缩放到一个固定范围,通常是[0, 1]或[-1, 1]。缩放到[0, 1]的公式是:
其中和是特征在训练数据集中的最小值和最大值。
标准化将特征重新缩放,使其均值()为0,标准差()为1。公式是:
此处,和是从训练数据集中计算出的均值和标准差。
原始数据点与经过最小-最大归一化和标准化后的位置对比。请注意异常值(15, 30)如何压缩归一化数据,而标准化则以不同方式处理。
初学者常忽略的一点是,当您拥有独立的训练、验证和测试数据集时,如何应用缩放。
scikit-learn等库为此提供了便捷工具:
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
import numpy as np
import torch
# 示例数据(请替换为您的实际数据)
X = np.array([[10.0, 0.1], [12.0, 0.2], [15.0, 0.15], [9.0, 0.3], [11.0, 0.05], [18.0, 0.25]])
y = np.array([0, 0, 1, 0, 1, 1])
# 1. 首先划分数据
X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.4, random_state=42) # 60% 训练
X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42) # 20% 验证, 20% 测试
# 2. 仅在训练数据上初始化并拟合缩放器
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train) # 拟合并转换
# 3. 使用相同的已拟合缩放器转换验证和测试数据
X_val_scaled = scaler.transform(X_val)
X_test_scaled = scaler.transform(X_test)
# 将缩放后的数据转换为PyTorch张量(示例)
X_train_tensor = torch.from_numpy(X_train_scaled).float()
y_train_tensor = torch.from_numpy(y_train).long() # 整数标签使用long类型
print("原始训练数据样本:\n", X_train[0])
print("缩放后的训练数据样本:\n", X_train_scaled[0])
print("\n缩放后的验证数据样本:\n", X_val_scaled[0])
# 示例输出:
# 原始训练数据样本:
# [11. 0.05]
# 缩放后的训练数据样本:
# [-0.3380617 -1.34164079]
# 缩放后的验证数据样本: # (注意:使用了从训练数据学到的缩放参数)
# [ 0.16903085 -0.4472136 ]
训练之前,您必须将数据集划分为不同的子集:
为何严格区分? 如果您根据测试集表现调整超参数,您实际上是将模型选择过程隐式地拟合到该特定测试数据。那么,您的测试集表现估计将过于乐观,模型可能无法很好地泛化到真正未见的数据。常见划分包括70%训练、15%验证、15%测试,或80%训练、10%验证、10%测试,但最佳比例可能取决于数据集总大小。对于非常大的数据集,验证集和测试集有时可以是更小的百分比。
将数据划分为训练集、验证集和测试集的典型流程。测试集在最终评估前保持原样。
妥善的数据准备,包括格式化、缩放和划分,不仅仅是初步步骤,更是构建成功深度学习 (deep learning)模型不可或缺的一部分。正确执行此项工作能确保您的网络高效学习,并获得对其表现的可靠估计。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•