蒙特卡洛dropout

2021-10-11 02:08:35 字數 2861 閱讀 9547

鏈結是這個

自我總結先寫前面,我認為蒙特卡洛dropout首先肯定是測試的時候也開著dropout,然後就是測試n次的測試集,然後求n次的輸出概率的平均值,得到不確定性,以此再取沿軸的最大值;

普通的softmax在測試時候的dropout是關閉著的。就是直接乙個測試就乙個輸出,然後直接取沿軸最大值當作輸出、

(x_train, y_train)

,(x_test, y_test)

= keras.datasets.mnist.

load_data()

model = keras.models.

sequential()

model.

add(keras.layers.

flatten

(input_shape=(28

,28))

)model.

add(keras.layers.

dropout

(0.25))

model.

add(keras.layers.

dense

(300

, activation=

"relu"))

model.

add(keras.layers.

dropout

(0.25))

model.

add(keras.layers.

dense

(300

, activation=

"relu"))

model.

add(keras.layers.

dropout

(0.25))

model.

add(keras.layers.

dense(10

, activation=

"softmax"))

optimizer = keras.optimizers.

nadam

(lr=

0.001

)model.

compile

(loss=

"sparse_categorical_crossentropy"

, optimizer=optimizer, metrics=

["accuracy"])

model.

fit(x_train, y_train, epochs=50)

model.

evaluate

(x_test, y_test)

可以生成任意數量的**,就是說可以**任意多次

def predict_proba

(x, model, num_samples)

: preds =

[model

(x, training=true)

for _ in range

(num_samples)

]return np.

stack

(preds)

.mean

(axis=0)

def predict_class

(x, model, num_samples)

: proba_preds =

predict_proba

(x, model, num_samples)

return np.

argmax

(proba_preds, axis=

1)

y_pred =

predict_class

(x_test, model,

100)

acc = np.

mean

(y_pred == y_test)

由以上**可以看出,先弄num_samples次**,然後取平均值,然後再沿著某一軸取最大值,即可得到比原來好的**效果。

y_pred_proba =

predict_proba

(x_test, model,

100)

softmax_output = np.

round

(model.

predict

(x_test[1:

2]),

3)mc_pred_proba = np.

round

(y_pred_proba[1]

,3)print

(softmax_output, mc_pred_proba)

softmax_output:[0.

0.1.

0.0.

0.0.

0.0.0.]

mc_pred_proba:[0.

0.0.989

0.008

0.001

0.0.

0.001

0.0010.]

softmax_output: [

0.0.

1.0.

0.0.

0.0.

0.0.][

0.0.

1.0.

0.0.

0.0.

0.0.

] mc_pred_proba: [

0.0.

0.989

0.008

0.001

0.0.

0.001

0.0010.]

[0.0.0.989

0.008

0.001

0.0.

0.001

0.001

0.]

蒙特卡洛理解

蒙特卡羅演算法並不是一種演算法的名稱,而是是一類隨機方法的統稱。這類方法的特點是,可以在隨機取樣上計算得到近似結果,隨著取樣的增多,得到的結果是正確結果的概率逐漸加大,但在 放棄隨機取樣,而採用類似全取樣這樣的確定性方法 獲得真正的結果之前,無法知道目前得到的結果是不是真正的結果。從特性特性來說,我...

蒙特卡洛演算法

從今天開始要研究sampling methods,主要是mcmc演算法 contents 1.蒙特卡洛介紹 2.蒙特卡洛的應用 3.蒙特卡洛積分 1.蒙特卡洛介紹 蒙特卡羅方法 monte carlo method 也稱統計模擬方法,是二十世紀四十年代中期由於科學技術的 發展和電子計算機的發明,而被...

蒙特卡洛取樣

1.馬爾可夫鏈及其平穩分布 馬爾可夫鏈的定義很簡單,即後乙個狀態只與前面乙個狀態相關 p x t x cdots,x p x t x 2.馬氏鏈定理 如果乙個非週期馬爾可夫鏈具有狀態轉移矩陣 p 且它的任意兩個狀態都是連通的,那麼 mathop limits p n 存在且與 i 無關,記 math...