日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

使用权值衰减算法解决神经网络过拟合问题、python实现

發布時間:2025/3/12 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用权值衰减算法解决神经网络过拟合问题、python实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用權值衰減算法解決神經網絡過擬合問題、python實現

    • 一、what is 過擬合
    • 二、過擬合原因
    • 三、權值衰減
    • 四、實驗驗證
      • 4.1制造過擬合現象
      • 4.2使用權值衰減抑制過擬合

一、what is 過擬合

過擬合指只能擬合訓練數據,但不能很好擬合不包含在訓練數據中的其他數據的狀態。

二、過擬合原因

模型參數過多、表現力強

訓練數據少

三、權值衰減

這玩意在之前提到過,就是減小權值,通過在學習過程中對大的權重進行懲罰,來抑制過擬合。

深度學習目的是減小損失函數的值,那么為損失函數加上權重平方范數,就可以抑制權重變大。

L2范數是什么,就是相當于各個元素的平方和。如下面數學式子表示。

正則化是什么,regularizer,也就是規則化,也就是,向你的模型加入某些規則。為損失函數加上權重平方范數其實就是加上了正則化項,這個正則化項就是L2范數的權值衰減。

L2范數的權值衰減數學表達:

W是權重。λ是控制正則化強度的超參數,它越大,對權重施加的懲罰越多。二分之一是調整常量,這樣的話,求導后是λW。

求權重的梯度的計算中,要為之前的誤差反向傳播法的結果加上正則化項的導數λW。

四、實驗驗證

4.1制造過擬合現象

我們制造過擬合,就需要增加網絡參數,減少訓練數據,那么就從MNIST數據集里只選出來300個數據,然后增加網絡復雜幅度用7層網絡,每層100個神經元,激活函數ReLU。

代碼:

import os import syssys.path.append(os.pardir) # 為了導入父目錄的文件而進行的設定 import numpy as np import matplotlib.pyplot as plt from dataset.mnist import load_mnist from common.multi_layer_net import MultiLayerNet from common.optimizer import SGD(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True)# 為了再現過擬合,減少學習數據 x_train = x_train[:300] t_train = t_train[:300]# weight decay(權值衰減)的設定 ======================= weight_decay_lambda = 0 # 不使用權值衰減的情況 #weight_decay_lambda = 0.1 # ====================================================network = MultiLayerNet(input_size=784, hidden_size_list=[100, 100, 100, 100, 100, 100], output_size=10,weight_decay_lambda=weight_decay_lambda) optimizer = SGD(lr=0.01)max_epochs = 201 train_size = x_train.shape[0] batch_size = 100train_loss_list = [] train_acc_list = [] test_acc_list = []iter_per_epoch = max(train_size / batch_size, 1) epoch_cnt = 0for i in range(1000000000):batch_mask = np.random.choice(train_size, batch_size)x_batch = x_train[batch_mask]t_batch = t_train[batch_mask]grads = network.gradient(x_batch, t_batch)optimizer.update(network.params, grads)if i % iter_per_epoch == 0:train_acc = network.accuracy(x_train, t_train)test_acc = network.accuracy(x_test, t_test)train_acc_list.append(train_acc)test_acc_list.append(test_acc)print("epoch:" + str(epoch_cnt) + ", train acc:" + str(train_acc) + ", test acc:" + str(test_acc))epoch_cnt += 1if epoch_cnt >= max_epochs:break# 3.繪制圖形========== markers = {'train': 'o', 'test': 's'} x = np.arange(max_epochs) plt.plot(x, train_acc_list, marker='o', label='train', markevery=10) plt.plot(x, test_acc_list, marker='s', label='test', markevery=10) plt.xlabel("epochs") plt.ylabel("accuracy") plt.ylim(0, 1.0) plt.legend(loc='lower right') plt.show()

由圖可看出,過了100個epoch,用訓練數據測得識別精度幾乎為100%,但是測試數據與100%有較大差距,說明,模型對訓練時沒有使用的測試數據擬合的不好。

4.2使用權值衰減抑制過擬合

在上面代碼中修改weight_decay_lambda = 0.1,可以看到如下結果。

測試數據和訓練數據識別精度有差距,但是差距比之前的減小了。

有人說,那他的測試數據識別精度也沒提升啊。

其實這是因為訓練數據的精度也沒到100%哦,如果再有多個訓練數據進入網絡訓練,它精度到100%的時候,測試數據精度就會比之前過擬合時候要高。

總結

以上是生活随笔為你收集整理的使用权值衰减算法解决神经网络过拟合问题、python实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。