Das Problem der Überanpassung von Modellen für maschinelles Lernen und seine Lösung
Im Bereich des maschinellen Lernens ist die Überanpassung von Modellen ein häufiges und herausforderndes Problem. Wenn ein Modell im Trainingssatz gut, im Testsatz jedoch schlecht abschneidet, deutet dies auf eine Überanpassung des Modells hin. In diesem Artikel werden die Ursachen von Überanpassungsproblemen und ihre Lösungen vorgestellt und spezifische Codebeispiele bereitgestellt.
2.1 Datenerweiterung
Datenerweiterung bezieht sich auf die Durchführung einer Reihe von Transformationen am Trainingssatz, um mehr Many zu generieren Proben. Beispielsweise können bei Bildklassifizierungsaufgaben Bilder gedreht, skaliert, gespiegelt usw. werden, um die Daten zu erweitern. Dadurch wird der Trainingssatz vergrößert und das Modell lässt sich besser verallgemeinern.
Das Folgende ist ein Beispielcode, der die Keras-Bibliothek zur Bilddatenerweiterung verwendet:
from keras.preprocessing.image import ImageDataGenerator # 定义数据扩充器 datagen = ImageDataGenerator( rotation_range=20, # 随机旋转角度范围 width_shift_range=0.1, # 水平平移范围 height_shift_range=0.1, # 垂直平移范围 shear_range=0.2, # 剪切变换范围 zoom_range=0.2, # 缩放范围 horizontal_flip=True, # 随机水平翻转 fill_mode='nearest' # 填充模式 ) # 加载图像数据集 train_data = datagen.flow_from_directory("train/", target_size=(224, 224), batch_size=32, class_mode='binary') test_data = datagen.flow_from_directory("test/", target_size=(224, 224), batch_size=32, class_mode='binary') # 训练模型 model.fit_generator(train_data, steps_per_epoch=len(train_data), epochs=10, validation_data=test_data, validation_steps=len(test_data))
2.2 Regularisierung (Regularisierung)
Regularisierung besteht darin, die Komplexität des Modells zu bestrafen, indem der Verlustfunktion des Modells ein Regularisierungsterm hinzugefügt und dadurch reduziert wird das Risiko einer Modellüberanpassung. Zu den gängigen Regularisierungsmethoden gehören die L1-Regularisierung und die L2-Regularisierung.
Das Folgende ist ein Beispielcode für die L2-Regularisierung mithilfe der PyTorch-Bibliothek:
import torch import torch.nn as nn # 定义模型 class MyModel(nn.Module): def __init__(self): super(MyModel, self).__init__() self.fc1 = nn.Linear(10, 10) self.fc2 = nn.Linear(10, 1) def forward(self, x): x = self.fc1(x) x = nn.ReLU()(x) x = self.fc2(x) return x model = MyModel() # 定义损失函数 criterion = nn.MSELoss() # 定义优化器 optimizer = torch.optim.SGD(model.parameters(), lr=0.01, weight_decay=0.001) # 注意weight_decay参数即为正则化项的系数 # 训练模型 for epoch in range(100): optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step()
2.3 Dropout
Dropout ist eine häufig verwendete Regularisierungstechnik, die eine Überanpassung des Modells durch zufälliges Verwerfen einiger Neuronen während des Trainingsprozesses reduziert. Insbesondere wählen wir in jeder Trainingsiteration zufällig einige Neuronen aus, die mit einer bestimmten Wahrscheinlichkeit p verworfen werden sollen.
Hier ist ein Beispielcode für Dropout unter Verwendung der TensorFlow-Bibliothek:
import tensorflow as tf # 定义模型 model = tf.keras.models.Sequential([ tf.keras.layers.Dense(10, activation=tf.nn.relu, input_shape=(10,)), tf.keras.layers.Dropout(0.5), # dropout率为0.5 tf.keras.layers.Dense(1) ]) # 编译模型 model.compile(optimizer='adam', loss=tf.keras.losses.BinaryCrossentropy(from_logits=True)) # 训练模型 model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test))
Das obige ist der detaillierte Inhalt vonÜberanpassungsproblem von Modellen für maschinelles Lernen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!