Rumah > Peranti teknologi > AI > Masalah overfitting model pembelajaran mesin

Masalah overfitting model pembelajaran mesin

王林
Lepaskan: 2023-10-08 16:06:22
asal
840 orang telah melayarinya

Masalah overfitting model pembelajaran mesin

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.

  1. Punca masalah pemasangan berlebihan
    Masalah pemasangan berlebihan terutamanya disebabkan oleh model yang terlalu kompleks dan mempunyai terlalu banyak parameter. Apabila model mempunyai terlalu banyak parameter, model akan memberi terlalu banyak perhatian kepada hingar dan outlier dalam set latihan, mengakibatkan prestasi yang lemah pada data baharu. Selain itu, data yang tidak mencukupi juga merupakan salah satu punca masalah overfitting. Apabila terdapat lebih sedikit sampel dalam set latihan, model cenderung untuk mengingati butiran setiap sampel dan tidak boleh membuat generalisasi kepada data yang tidak kelihatan.
  2. Kaedah untuk menyelesaikan over-fitting
    Untuk menyelesaikan masalah over-fitting, kita boleh mengambil kaedah berikut:

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))
Salin selepas log masuk

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()
Salin selepas log masuk

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))
Salin selepas log masuk
  1. Ringkasan
    Pemasangan berlebihan ialah masalah biasa dalam model pembelajaran mesin, tetapi kami boleh mengambil beberapa kaedah untuk menyelesaikannya. Penambahan data, penyelarasan dan Keciciran adalah semua kaedah yang biasa digunakan untuk menyelesaikan masalah overfitting. Kita boleh memilih kaedah yang sesuai untuk menangani masalah pemasangan berlebihan mengikut senario aplikasi tertentu, dan seterusnya mengoptimumkan prestasi model dengan melaraskan parameter dan kaedah lain.

Atas ialah kandungan terperinci Masalah overfitting model pembelajaran mesin. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan