因?yàn)闆](méi)有找到官方對(duì)estimator的翻譯贯涎,這里暫時(shí)稱作估算器掩蛤,待以后改正鸵熟。
估算器是tf重要的高級(jí)接口high level api摘投,被設(shè)計(jì)用來(lái)簡(jiǎn)化機(jī)器學(xué)習(xí)程序的献幔。
估算器有tf自帶的預(yù)制pre-made估算器懂傀,也支持用戶自己編寫創(chuàng)建自定義custom估算器。
估算器可以被灌入數(shù)據(jù)執(zhí)行訓(xùn)練train蜡感,可以對(duì)訓(xùn)練的模型進(jìn)行評(píng)價(jià)evaluate蹬蚁,可以使用訓(xùn)練好的模型進(jìn)行預(yù)測(cè)predict。
通過(guò)估算器操作模型
估算器優(yōu)勢(shì)
- 可以本地或分布式服務(wù)器上運(yùn)行基于估算器的模型郑兴,而無(wú)需更改犀斋,甚至是CPU、GPU情连、TPU上運(yùn)行叽粹。
- 估算器簡(jiǎn)化了模型開(kāi)發(fā)者之間共享方式。
- 可以利用估算器憑直覺(jué)的簡(jiǎn)單創(chuàng)建模型却舀。
- 估算器本身就是基于tf.layers虫几,自定義起來(lái)更簡(jiǎn)單。
- 估算器直接創(chuàng)建graph圖挽拔,從而無(wú)需手工創(chuàng)建辆脸。
- 估算器創(chuàng)建了一個(gè)安全的分布式訓(xùn)練循環(huán),你可以:
- 建造graph圖
- 初始化變量
- 開(kāi)始隊(duì)列
- 控制處理異常
- 創(chuàng)建checkpoint檢查點(diǎn)文件螃诅,從失敗中恢復(fù)
- 將summary總結(jié)保存到tensorboard信息板
當(dāng)使用估算器編寫應(yīng)用的時(shí)候啡氢,必須把數(shù)據(jù)輸入流程data input pipline單獨(dú)出來(lái)状囱,這可以使流程簡(jiǎn)化。
預(yù)制估算器Pre-made Estimator
估算器為你管理著graph圖和session會(huì)話倘是,你無(wú)需手工管理它們亭枷。
利用估算器可以很容易的更換不同的算法,比如DNNClassifier等辨绊。
使用預(yù)制估算器的應(yīng)用結(jié)構(gòu):
-
編寫數(shù)據(jù)導(dǎo)入函數(shù)奶栖,比如導(dǎo)入訓(xùn)練數(shù)據(jù)的函數(shù)和導(dǎo)入測(cè)試數(shù)據(jù)的函數(shù)。這樣的函數(shù)應(yīng)該返回:
- 特征字典dict:{特征名:張量Tensor或稀疏張量SpareTensor}
- 標(biāo)簽張量Tensor门坷,包含標(biāo)簽labels
#針對(duì)訓(xùn)練的喂食函數(shù)
def train_input_fn(features, labels, batch_size):
dataset = tf.data.Dataset.from_tensor_slices((dict(features), labels))
dataset = dataset.shuffle(1000).repeat().batch(batch_size)
features_result, labels_result = dataset.make_one_shot_iterator().get_next()
print(features_result, labels_result)
return dataset.make_one_shot_iterator().get_next()
得到features_result, labels_result打印結(jié)果是:
#features_result 特征字典
{
'SepalLength': <tf.Tensor 'IteratorGetNext:2' shape=(?,) dtype=float64>,
'SepalWidth': <tf.Tensor 'IteratorGetNext:3' shape=(?,) dtype=float64>,
'PetalLength': <tf.Tensor 'IteratorGetNext:0' shape=(?,) dtype=float64>,
'PetalWidth': <tf.Tensor 'IteratorGetNext:1' shape=(?,) dtype=float64>
}
#labels_result 標(biāo)簽列
Tensor("IteratorGetNext:4", shape=(?,), dtype=int64, device=/device:CPU:0)
-
定義特征列宣鄙,tf.feature_column定義了特征的名稱、數(shù)據(jù)類型和預(yù)處理方法默蚌。
# 兩個(gè)數(shù)值型特征列
population = tf.feature_column.numeric_column('population')
crime_rate = tf.feature_column.numeric_column('crime_rate')
# 數(shù)值型特征列指定了規(guī)則化函數(shù)冻晤。每個(gè)數(shù)值將被減去100
median_education = tf.feature_column.numeric_column('median_education',
normalizer_fn='lambda x: x - 100')
-
實(shí)例化預(yù)制估算器
# 實(shí)例化,傳入特征列列表[fc1,fc2,fc3]
estimator = tf.estimator.Estimator.LinearClassifier(
feature_columns=[population, crime_rate, median_education],
)
-
調(diào)用train绸吸,evaluate鼻弧,predict函數(shù)
# my_training_set是第一步編寫的輸入函數(shù),這里它并沒(méi)有帶參數(shù)輸入原始數(shù)據(jù)
estimator.train(input_fn=my_training_set, steps=2000)
預(yù)制估算器實(shí)現(xiàn)了計(jì)算圖graph運(yùn)算的最佳方法锦茁,無(wú)論是單機(jī)運(yùn)算還是群集運(yùn)算
攘轩,也實(shí)現(xiàn)全局統(tǒng)計(jì)的最佳方法。自定義估算器則要手工實(shí)現(xiàn)這些码俩。
自定義估算器Custom Estimator
無(wú)論是預(yù)制還是自定義的估算器度帮,核心都是model_fn函數(shù),它將實(shí)現(xiàn)創(chuàng)建圖graph和訓(xùn)練稿存、評(píng)價(jià)笨篷、預(yù)測(cè)方法。
建議流程
- 如果有合適的預(yù)制估算器瓣履,先使用它作為基礎(chǔ)
- 使用預(yù)制估算器創(chuàng)建和測(cè)試你的模型率翅,包括模型的完整性和可靠性
- 如果有其他可選的預(yù)制估算器,實(shí)驗(yàn)?zāi)囊粋€(gè)是最好的
- 可以的話袖迎,進(jìn)一步自定義改進(jìn)你的估算器
探索人工智能的新邊界
如果您發(fā)現(xiàn)文章錯(cuò)誤冕臭,請(qǐng)不吝留言指正;
如果您覺(jué)得有用燕锥,請(qǐng)點(diǎn)喜歡浴韭;
如果您覺(jué)得很有用,感謝轉(zhuǎn)發(fā)~
END