Masalah pemasangan model pembelajaran mesin yang berlebihan dan penyelesaiannya
Dalam bidang pembelajaran mesin, pemasangan model yang berlebihan adalah masalah biasa dan mencabar. Apabila model berprestasi baik pada set latihan tetapi berprestasi buruk pada set ujian, ini menunjukkan bahawa model itu terlalu muat. Artikel ini akan memperkenalkan punca masalah overfitting dan penyelesaiannya serta memberikan contoh kod khusus.
2.1 Data Augmentation
Data augmentation merujuk kepada melakukan satu siri transformasi pada set latihan untuk menjana lebih Banyak sampel. Contohnya, dalam tugas pengelasan imej, imej boleh diputar, diskalakan, terbalik, dsb. untuk menambah data. Melakukan perkara ini meningkatkan saiz set latihan dan membantu model membuat generalisasi dengan lebih baik.
Berikut ialah contoh kod menggunakan perpustakaan Keras untuk pengembangan data imej:
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 Regularization (Regularization)
Regularization adalah untuk menghukum kerumitan model dengan menambah istilah regularization pada fungsi kehilangan model, dengan itu Mengurangkan risiko model overfitting. Kaedah regularisasi biasa termasuk regularization L1 dan regularization L2.
Berikut ialah contoh kod untuk regularisasi L2 menggunakan perpustakaan PyTorch:
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 Keciciran
Keciciran ialah teknik regularisasi yang biasa digunakan yang mengurangkan overfitting model dengan membuang beberapa neuron secara rawak semasa proses latihan. Khususnya, dalam setiap lelaran latihan, kami secara rawak memilih beberapa neuron untuk dibuang dengan kebarangkalian tertentu p.
Berikut ialah contoh kod untuk Keluar menggunakan perpustakaan TensorFlow:
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))
Atas ialah kandungan terperinci Masalah overfitting model pembelajaran mesin. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!