煉丹tips
- 網(wǎng)絡(luò)層數(shù)诡延,參數(shù)量什么的都不是大問題竭钝,在性能不丟的情況下,減到最小
- 欠擬合:增加網(wǎng)絡(luò)層數(shù)燥滑,增加節(jié)點(diǎn)數(shù)渐北,減少dropout值,減少L2正則
過擬合:提高模型泛化能力的方向铭拧,調(diào)節(jié)參數(shù) - 先參考相關(guān)論文赃蛛, 以論文中給出的參數(shù)作為初始參數(shù) 恃锉。 至少論文中的參數(shù),是個(gè)不差的結(jié)果呕臂。
- 對訓(xùn)練數(shù)據(jù)進(jìn)行采樣破托。例如原來100W條數(shù)據(jù),先采樣成1W歧蒋,進(jìn)行實(shí)驗(yàn)看看土砂。
- dropout對小數(shù)據(jù)防止過擬合有很好的效果,值一般設(shè)為0.3,0.5,0.8, 然后依據(jù)這三個(gè)的結(jié)果進(jìn)行微調(diào)
- 自動調(diào)參:
Gird Search.這個(gè)是最常見的疏尿。具體說瘟芝,就是每種參數(shù)確定好幾個(gè)要嘗試的值,然后像一個(gè)網(wǎng)格一樣褥琐,把所有參數(shù)值的組合遍歷一下。優(yōu)點(diǎn)是實(shí)現(xiàn)簡單暴力晤郑,如果能全部遍歷的話敌呈,結(jié)果比較可靠。缺點(diǎn)是太費(fèi)時(shí)間了造寝,特別像神經(jīng)網(wǎng)絡(luò)磕洪,一般嘗試不了太多的參數(shù)組合。
Bayesian Optimization.貝葉斯優(yōu)化诫龙,考慮到了不同參數(shù)對應(yīng)的實(shí)驗(yàn)結(jié)果值析显,因此更節(jié)省時(shí)間。和網(wǎng)絡(luò)搜索相比簡直就是老牛和跑車的區(qū)別签赃。具體原理可以參考這個(gè)論文:Practical Bayesian Optimization of Machine Learning Algorithms 谷异,這里同時(shí)推薦兩個(gè)實(shí)現(xiàn)了貝葉斯調(diào)參的Python庫,可以上手即用 - 盡量對數(shù)據(jù)做shuffle
- 當(dāng)你的模型有 Batch Normalization锦聊,初始化通常不需要操心歹嘹,激活函數(shù)默認(rèn) Relu 即可(某引用數(shù)萬的大佬說的)。一般順序是 Conv - BN - Relu孔庭。如果沒有 BN(很多任務(wù)上尺上,BN降低訓(xùn)練難度,但是可能影響最終性能 )圆到,試著要做一些數(shù)據(jù)歸一化怎抛。([作者:hzwer](https://www.zhihu.com/question/41631631/answer/859040970)
- tensorboard很好用
- 網(wǎng)絡(luò)層數(shù),參數(shù)量什么的都不是大問題芽淡,在性能不丟的情況下马绝,減到最小
- pandas.describe()函數(shù)可以描述一維數(shù)據(jù)集或二維表結(jié)構(gòu)的初步特征,目的在于觀察這一系列數(shù)據(jù)的范圍吐绵、大小迹淌、波動趨勢等等河绽。
- 同一套超參,沒事多跑幾遍唉窃,要是區(qū)別很大耙饰,就肯定有問題
- 實(shí)在沒招了,調(diào)一調(diào)隨機(jī)數(shù)種子纹份,沒準(zhǔn)有奇效
參考:
時(shí)序tips
突然想起自己做的時(shí)序預(yù)測蔓涧,那是不是可以找找相關(guān)煉丹tips
- 嘗試一下序列做過一階差分進(jìn)行預(yù)測件已,嘗試一下,看看效果怎么樣
# DataFrame.diff(periods=1, axis=0)
import numpy as np
import pandas as pd
# 轉(zhuǎn)化np.array數(shù)據(jù)為DataFrame數(shù)據(jù)類型
df = pd.DataFrame(df)
# 一階差分
df.diff()
# 一階差分 消除nan
df.diff().dropna()
# 二階差分
df.diff(periods = 2)
# 縱向一階差分元暴, 當(dāng)前行減去上一行篷扩,第一行變成Nan(x,y)->(x-1,y)
df.diff(axis=0).dropna()
# 橫向一階差分,當(dāng)前列減去左邊的列最左側(cè)的列變?yōu)镹an(x,y)->(x,y-1)
df.diff(axis=1).dropna()
# 轉(zhuǎn)化回np.array
df=df.values
因?yàn)槲疫@是np數(shù)列茉盏,剛剛發(fā)現(xiàn)np也有diff函數(shù)呀鉴未,不過好像沒有pd的用的人多,相關(guān)帖子并不算多
# np.diff()
np.diff(a, n=1,axis=-1)
# a:輸入矩陣
# n:可選鸠姨,代表要執(zhí)行幾次差值
# axis:默認(rèn)是最后一個(gè)铜秆,估計(jì)和pd的差不多
np.diff(a, n=1, axis = 0) # 縱向一階差分
差分完,預(yù)測出結(jié)果之后還要還原回去把惹ā连茧!別忘了還原回去啊巍糯!
先給數(shù)據(jù)加上差分前的第一行啸驯,np.append
np.append(a[0:1,...], diffed_a, axis = 0) # 向下拼接
湊成完整的后,還原鳞贷,np.cumsum
np.cumsum()# numpy.cumsum(a, axis=None, dtype=None, out=None)
# axis = 0 縱向坯汤; 1 橫向
#dtype = 輸出類型,平臺默認(rèn)為整形搀愧,可改為float
np.cumsum(a) # 拉成一維惰聂,依次累加
np.cumsum(a, dtype=float) # 輸出浮點(diǎn)型數(shù)據(jù)
np.cumsum(a, axis = 0) #縱向還原
np.cumsum(a, axis = 1) # 橫向還原
效果出來了。咱筛。搓幌。啥也不是!