2017-05-08 37 views
2
features = [tf.contrib.layers.real_valued_column("x", dimension=1)] 
estimator = tf.contrib.learn.LinearRegressor(feature_columns=features) 
y = np.array([0., -1., -2., -3.]) 
input_fn = tf.contrib.learn.io.numpy_input_fn({"x":x}, y, batch_size=4, 
               num_epochs=1000) 

estimator.fit(input_fn=input_fn, steps=1000) 

例如,做這些 「步驟= 1000」 和 「num_epochs = 1000」 的意思是完全一樣的東西?如果是,爲什麼需要重複?如果沒有,我可以設置這兩個參數不同嗎?時代和訓練步驟是否一樣?

回答

1

這裏是任何機器學習算法或框架劃時代和步驟之間的基本區別:

一旦框架經過設置,以更新其參數,它被稱爲一個時代在訓練中的所有數據點。步驟是參數的一次更新(例如,如果訓練DNN,神經網絡的權重)。此更新可以使用單個數據點或一小批數據點(例如隨機抽取100個數據點,有或沒有替換)或所有點獲得。因此,您可以看到是否所有數據點在一個步驟中使用(或參數更新),它將成爲一個時間點,即一個步驟=一個時間點。

通常框架使用微型配料和在一個步驟中它們批次100(或某個其他數目)的數據點一起,做一個更新。在這種情況下,如果說你有100萬個數據點(10^6),那麼一個時間點有10000步,因爲一個步驟包含100個數據點。

+0

順便說一句,在我的例子中,我可以更改步驟從「500」到「1000」?我的理解不是,因爲所有數據點由於批量大小=「4」而在一個步驟中使用。如果是這種情況,爲什麼我應該指定「steps」參數?它不應該總是通過「(數據點數/批量大小)*時代」自動計算嗎? – user697911

2

不,他們是不一樣的。與大多數(全部?)框架,Tensorflow有指定時期一些命令,以及一些在工作步驟,a.k.a 迭代。 A 步驟是一個批次,其由模型的輸入中指定的批量大小管理。例如,如果您使用的默認批次大小爲256的AlexNet和ILSVRC 2012數據集大約128萬個圖像,那麼每個時期(1,280,000/256)大約有5000個步驟。

批量大小是並行處理圖像的數量。如果數據集中有1.28M圖像,則必須處理每個時期12.8M的圖像:這就是時期的定義 - 處理每個輸入一次。算術清楚了嗎?

+1

通過「每個紀元5000步」,你的意思是批量大小256等於時代的數量?請澄清更多。 – user697911

相關問題