keras模型用于預(yù)測時(shí)需要注意什么-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)、錫林浩特網(wǎng)絡(luò)推廣、微信小程序開發(fā)、錫林浩特網(wǎng)絡(luò)營銷、錫林浩特企業(yè)策劃、錫林浩特品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供錫林浩特建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:muchs.cn

這篇文章將為大家詳細(xì)講解有關(guān)keras模型用于預(yù)測時(shí)需要注意什么,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

為什么訓(xùn)練誤差比測試誤差高很多?

一個(gè)Keras的模型有兩個(gè)模式:訓(xùn)練模式測試模式。一些正則機(jī)制,如Dropout,L1/L2正則項(xiàng)在測試模式下將不被啟用。

另外,訓(xùn)練誤差是訓(xùn)練數(shù)據(jù)每個(gè)batch的誤差的平均。在訓(xùn)練過程中,每個(gè)epoch起始時(shí)的batch的誤差要大一些,而后面的batch的誤差要小一些。另一方面,每個(gè)epoch結(jié)束時(shí)計(jì)算的測試誤差是由模型在epoch結(jié)束時(shí)的狀態(tài)決定的,這時(shí)候的網(wǎng)絡(luò)將產(chǎn)生較小的誤差。

【Tips】可以通過定義回調(diào)函數(shù)將每個(gè)epoch的訓(xùn)練誤差和測試誤差并作圖,如果訓(xùn)練誤差曲線和測試誤差曲線之間有很大的空隙,說明你的模型可能有過擬合的問題。當(dāng)然,這個(gè)問題與Keras無關(guān)。

在keras中文文檔中指出了這一誤區(qū),筆者認(rèn)為產(chǎn)生這一問題的原因在于網(wǎng)絡(luò)實(shí)現(xiàn)的機(jī)制。即dropout層有前向?qū)崿F(xiàn)和反向?qū)崿F(xiàn)兩種方式,這就決定了概率p是在訓(xùn)練時(shí)候設(shè)置還是測試的時(shí)候進(jìn)行設(shè)置

利用預(yù)訓(xùn)練的權(quán)值進(jìn)行Fine tune時(shí)的注意事項(xiàng):

不能把自己添加的層進(jìn)行將隨機(jī)初始化后直接連接到前面預(yù)訓(xùn)練后的網(wǎng)絡(luò)層

in order to perform fine-tuning, all layers should start with properly trained weights: for instance you should not slap a randomly initialized fully-connected network on top of a pre-trained convolutional base. This is because the large gradient updates triggered by the randomly initialized weights would wreck the learned weights in the convolutional base. In our case this is why we first train the top-level classifier, and only then start fine-tuning convolutional weights alongside it.

we choose to only fine-tune the last convolutional block rather than the entire network in order to prevent overfitting, since the entire network would have a very large entropic capacity and thus a strong tendency to overfit. The features learned by low-level convolutional blocks are more general, less abstract than those found higher-up, so it is sensible to keep the first few blocks fixed (more general features) and only fine-tune the last one (more specialized features).

fine-tuning should be done with a very slow learning rate, and typically with the SGD optimizer rather than an adaptative learning rate optimizer such as RMSProp. This is to make sure that the magnitude of the updates stays very small, so as not to wreck the previously learned features.

補(bǔ)充知識(shí):keras框架中用keras.models.Model做的時(shí)候預(yù)測數(shù)據(jù)不是標(biāo)簽的問題

我們發(fā)現(xiàn),在用Sequential去搭建網(wǎng)絡(luò)的時(shí)候,其中有predict和predict_classes兩個(gè)預(yù)測函數(shù),前一個(gè)是返回的精度,后面的是返回的具體標(biāo)簽。但是,在使用keras.models.Model去做的時(shí)候,就會(huì)發(fā)現(xiàn),它只有一個(gè)predict函數(shù),沒有返回標(biāo)簽的predict_classes函數(shù),所以,針對這個(gè)問題,我們將其改寫。改寫如下:

def my_predict_classes(predict_data):
  if predict_data.shape[-1] > 1:
    return predict_data.argmax(axis=-1)
  else:
    return (predict_data > 0.5).astype('int32')
 
# 這里省略網(wǎng)絡(luò)搭建部分。。。。
 
model = Model(data_input, label_output)
model.compile(loss='categorical_crossentropy',
       optimizer=keras.optimizers.Nadam(lr=0.002),
       metrics=['accuracy'])
model.summary()
 
y_predict = model.predict(X_test)
y_pre = my_predict_classes(y_predict)

當(dāng)前文章:keras模型用于預(yù)測時(shí)需要注意什么-創(chuàng)新互聯(lián)
文章地址:http://muchs.cn/article24/dejcje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、虛擬主機(jī)、外貿(mào)建站、面包屑導(dǎo)航、網(wǎng)站制作、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站