最近在學吳恩達的深度學習課程,在參考別人的**的時候,發現在cpu多執行緒情況下和gpu執行的情況下,同樣的**、資料,每次訓練出來的結果都不一樣,這還怎麼調參,於是stackoverflow走起。
windows10 64位
python 3.6
tensorflow 1.14
keras 2.2.5
cuda 10.0
cudnn for cuda 10.0
# seed value
seed_value=
0# 1. set the `pythonhashseed` environment variable at a fixed value
import os
os.environ[
'pythonhashseed']=
str(seed_value)
# 2. set the `python` built-in pseudo-random generator at a fixed value
import random
random.seed(seed_value)
# 3. set the `numpy` pseudo-random generator at a fixed value
import numpy as np
np.random.seed(seed_value)
# 4. set the `tensorflow` pseudo-random generator at a fixed value
import tensorflow as tf
tf.set_random_seed(seed_value)
# 5. configure a new global `tensorflow` session
from keras import backend as k
session_conf = tf.configproto(intra_op_parallelism_threads=
1, inter_op_parallelism_threads=1)
sess = tf.session(graph=tf.get_default_graph(
), config=session_conf)
k.set_session(sess)
就是各種設定隨機數種子,然後強行讓cpu單執行緒跑。。。 感覺這種方式比較拉跨。網路一旦深度變大,cpu跑本來就因為並行度的原因很慢,還要限制為單核,實在是太慢了。
查了不少stackoverflow,最終看到有老哥發了個github的鏈結,點進去一看是nvidia官方的乙個tensorflow gpu跑的乙個包。
pip install tensorflow-determinism
由於我用的是1.14版本,所以應該這樣用
import tensorflow as tf
from tfdeterminism import patch
patch(
)# use tf as normal
總算是解決了gpu可復現的問題。。。 Pytorch 保證實驗結果可重複性質
由於在模型訓練的過程中存在大量的隨機操作,使得對於同乙份 重複執行後得到的結果不一致。因此,為了得到可重複的實驗結果,我們需要對隨機數生成器設定乙個固定的種子。許多部落格都有介紹如何解決這個問題,但是很多都不夠全面,往往不能保證結果精確一致。我經過許多調研和實驗,總結了以下方法,記錄下來。全部設定可...
mysql 可重複讀。
一 可重複讀 我們先看看現象,再分析原理。我的mysql版本是5.5。下面是一張表,只有一條資料,並且我開啟了事物 此時,另乙個事物將record加1,因此我在開啟乙個命令列客戶端,執行下面的命令 成功加1之後,實際上,資料庫中record肯定是2。然後回到之前的客戶端,再查一次 沒毛病,recor...
mysql可重複讀
mysql innodb的預設隔離級別是可重複讀,之前理解有些偏差,查閱一些資料後總結出幾點 首先有兩個概念 一致性檢視 當乙個事務開啟時,innodb會生成乙個檢視,這個檢視是邏輯檢視,通過undo log和row tranzaction id控制實現。在該事務的任何時間點,一致性檢視中的資料都是...