大網(wǎng)站制作公司成都培訓(xùn)機(jī)構(gòu)排名前十
概念
Dropout 是一種常用的正則化技術(shù),用于減少深度神經(jīng)網(wǎng)絡(luò)中的過擬合問題。它在訓(xùn)練過程中隨機(jī)地將一部分神經(jīng)元的輸出置為零,從而強(qiáng)制模型在訓(xùn)練過程中學(xué)習(xí)多個獨(dú)立的子模型,從而減少神經(jīng)元之間的依賴關(guān)系,提高模型的泛化能力。
原理
隨機(jī)失活:在每個訓(xùn)練批次中,Dropout 隨機(jī)地選擇一些神經(jīng)元,并將其輸出設(shè)置為零。這意味著這些神經(jīng)元在此次訓(xùn)練中不會被激活,也不會參與前向傳播和反向傳播。
訓(xùn)練階段和預(yù)測階段:在訓(xùn)練階段,通過將部分神經(jīng)元失活,Dropout 有助于防止神經(jīng)元的過度依賴,從而減少過擬合。在預(yù)測階段,Dropout 通常會關(guān)閉,因?yàn)榇藭r需要使用整個網(wǎng)絡(luò)來進(jìn)行推理。
集成效應(yīng):由于 Dropout 訓(xùn)練了多個子模型,可以將它們合并起來形成一個集成模型,從而提高模型的性能和穩(wěn)定性。
代碼實(shí)現(xiàn)
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers# 加載數(shù)據(jù)
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
x_train = x_train.reshape(-1, 28 * 28).astype('float32') / 255.0
x_test = x_test.reshape(-1, 28 * 28).astype('float32') / 255.0
y_train = keras.utils.to_categorical(y_train, num_classes=10)
y_test = keras.utils.to_categorical(y_test, num_classes=10)# 構(gòu)建帶 Dropout 正則化的神經(jīng)網(wǎng)絡(luò)模型
model = keras.Sequential([layers.Input(shape=(784,)), # 輸入層layers.Dense(128, activation='relu'), # 隱藏層layers.Dropout(0.5), # Dropout 層,隨機(jī)失活率為 0.5layers.Dense(10, activation='softmax') # 輸出層
])# 編譯模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])# 訓(xùn)練模型
model.fit(x_train, y_train, batch_size=64, epochs=10, validation_split=0.1)# 評估模型
test_loss, test_accuracy = model.evaluate(x_test, y_test)
print("Test Loss:", test_loss)
print("Test Accuracy:", test_accuracy)