From f37d0a5f3e23f037d1490c5b50c7c8e024fa14c7 Mon Sep 17 00:00:00 2001 From: slaweks17 Date: Sun, 3 Jun 2018 10:17:26 -0700 Subject: [PATCH 1/3] Add files via upload --- ES_RNN.zip | Bin 0 -> 488443 bytes ES_RNN_SlawekSmyl.pdf | Bin 0 -> 348615 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 ES_RNN.zip create mode 100644 ES_RNN_SlawekSmyl.pdf diff --git a/ES_RNN.zip b/ES_RNN.zip new file mode 100644 index 0000000000000000000000000000000000000000..ef07091e95729b9af62d69774bbd2833d003fa4b GIT binary patch literal 488443 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 E;Nup`8uV1 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

6PK*WX~KbK?h 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

    Z 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

    7)cl9Xz26F?-EWfBd* z)KR)?L3r1-;7Gc8y1Hw-t3f?$zg*_zM1)>%yJvlS-@Rv!O{C?$-`_pvP6{=# z-r0<_+SseCqK%m>8R+Z+fn{cO7wjjnRk9yJR?58vo9N`$l==#`lNc)5kKik1K7uV& z|JUB&aCNX1ZKW_&w1O5VI@+TMRI(Veff~OvIY5LX!D%_dB@vlgU{Z&nf0eMf7|?<= zv%;}?r3WA(H>bd{XB;pe?}svl7|;eMLZ3EQhzH1nRO7?!ni`bykw7#r_CpPfL(m)o zvw_SbvN$Qi8V`d^b_CSoJEjDyK_r2J@>AE7V_dV{_s1|F!THZ$8eD@jX+-paDJTTD zVD8fZ`w+rYkwoilp*%AWQ0AHVx>(V=n}&GMli$#h4d0a6%A_gVhKZ`AV6r(Od8bsv*LG??czn z3g2PUB^uI&jkb)JlO~Mp_h9qwcmI(P49e9q2(2R_L>&nLQy!sI&f4fpCyCoCS^m`-|;St@?n#?_Gy?$_Ou_)*xxUf}+?Wza- zjR8Z}4F2XveQD)C{P~sH9s`jqfn#7SGWA$`!X&{K4ZZAgtO9yUfk^2^CIuA}2aPmh z#EYRutkapFf}q2DOh$K*1-0cm6ceRyhJ@Z_v5;0$ag{KSDo3`Y70sf&hza&PCaEh8 zM#60HGBKnplAiA+PMl4tX{NMlrtGSS2*X!hI)b2wN!j8y5tWi6!&D@!MU|y%G>HXE zD8{}JGL0X2O}TbLRb^CSz8DWvQv9G2eN2`x&Sko#%2w2&+)iHtO%N;9wWfv(=igSUFLc_Z;tzim-KDLe-C6vOE8in(M zA0Fe)>ilCN=xI^0AdQSl!YGW|^2}_Ij4DAa_*Kg4&)%5w#{tgtJxHD1t3h#kMU0(2 zHoUhWH<~vkkWz4a9K1Nei2D)a*~GTWDTPGgDhmz5>&37FeM2CYR@SuAkl*yfH4Plp^@DL7Tmr zB9bZ)$CzIwqrZiJTlhE)Tm4oWTK}S4Zt^Z~YaO+Rx@yR(b&+sZ(xOmY3&Dn|s9sC| zKgQlUI2YjQ_l!?)Vmmo`V%xTD+dlD=oKvRDBxH0;doTX^f6NP^1JEgFu z?0i#9KDhcgG82$ntV}sL{#gdzML0N?3@al{A+qr5w>Ot!KXLe*s(>7K%3WOg%*8oK=Lb?3Pmea|j#6LZ*Ml?5$=)#>Je>6K+=B2a|&SiuccJPA1Ofs%ox zbCxR6`?L#%{YpwD#G26UN@r2sEJG;cA>EB5O%&3HV%Wbubh(qiyH#bWd5VfGi^}j9 zSd&M^Tva|pd{|V#dAY2WlZj;jv3YKz4a0N+eXwPcSF_%~Vki$&h~a;u(>G#-OM{4_ z3uV6Nz$TT7VU4wrUeh?b!!meikKoc#M? z0sH+#8{8+{a2H82D-E@z6e{*=@EiO;f@GG=#e@+f=?f*-AkIJGjVp;)#199(Kv9e; zuz>FC0D1f%ii|KaC`I(@>h%Q8g?zckq740osDPT6BqYL(5IO8GPtb*M9STAcmW#MC z2MtN-16CX1IefIh8W*qfdzi5xxT$ELBpPaLUqBxEbY!+cM<65SRPc@Xhhh-}>nJjx z^ym++;CQSVL@Wiy)2_vzR~e8Ckx+ijGZ{&00WJ|g4=GH7cn~MEg?6QjT<`c(>{Aj7 zeH!;Aiy=|AP{H}dReCTW8ORv%mjwg082TTA%Se&*@YpB!#;M%qx>EH5^rJH9Lik3i zMnQnZh+mFH!ByaCR=lW%P*w9){2XwKN{XNEi@=WtGsZKK{f~ltBoNYEvynbXBBos@ zK@o62OGP)YVG-?LNT!U`SXOP^#DAJxc%khE98yXCw2nPN@C7>9OCR>$DvfNXsLR}MI%(CSiypV zU#3*gSgjKcGZrb6g@KBqCB&Qzu|B?I>s$}CAs#$J?AJ#VmQlAf6; zb%-^ET&W0JoT^r|A_4O|JcD))DOHb>ge8?Op?Ck)h$cA^MT&L~asdTGjA9--Ei%^7 z$qFq2S*t8qMfeE`5j!s-)`@n*;-3PI&>!*z761{%A`%L=XPZcZh()7=w0SdONcM~1 zL-3FQ8%*(ngh`-K{#d`tSt5^EgPDbjCo5iZIhs{iJfQJXqiaz*{|V}k!5mIfIU8jV z>?wpw5=D~$GJINeku+K%59S1!OIoU0PH_S%R&H5h-1u(;%vu$3ie9;*-?g(8ew{Xv zH3Rc7VRALZjj6#P!2p+kAu1F7jj%8dRVw*VwymOhDHjr~L}iQA(C`{%q<=&IVJKUx z5E13}fw;8kBt@Bm4KbpW5-%ARqAUn6M`AwN%^s%L` zC`V8N#&u-Me<_NN!P6E)_$*8Oqr*{x%aW2n!(zZQ0H-kfhfJIHEBQi2ATLjW6b8yj zK=95#IN3~!MSwwQV0!UvF|WIOZEejas1MP`z(-%VS}Q3pu9Vr?yQuwdl2S=g%J`E~ z7zTW=3+wd4`H~eUOg{8&6Ay#@qlnd7g6&jwWbRG-mEEfFYLIaE-?yQIl<9B490X^I`BLhhC z_%xs>jV#_2ytq(_Y9&CVG)}Jwg74u^R~a6oCISUeUW=+oU=bA2!Uac3Dk#_wG#nbd zif$B453mcCkGdZYHC!u`RFzl(s9#@BP$&lDgE}t-p}wtNDFX$JLYI>1BuI`fHPONf zz=|L@;c*3uAZJJx$8kZcJsS}@wZjh6qNTC1!bvAs_*GIBA+!CKyUjQDQ>bqkqfwF_ zm4MMM8oLeR)vskrg2J-j)kDLez#&e1N3P=oa0}Oj22oE7F(ayhX60H6s7!#46FaXA z%UFzSm0H^8fMgYjjzT;_krDOMA+7f^F<~TEgF-_S|0)!Ln#EqnT7`8-vl&sb1bO?< zeW3)d2XlOUXbJcMw5p_}qzr(gDoP*(Qdxmu>PiSS2auG@^BAaewcg9Pk^tdWk+-~U z7wEg)TFKVBQ-^?g+~OlZsB$=aVNu>V#_qp(Xsc2GQmNtrc`$5|s$Z~{%!>VB^Ol~e zomw0c;xMzbm=x8dL>lFbfFRo)v?M9_-gqgT^?8ZVOPQp7ZmxcoS?fdrEHLEQGLUp) zO(;~QEaG0PeJqHcNRcp1si0PXENdb|S+`UYLh*0N3P9GdO5v>Xx=iS#rAXCeQYuBc z-(?dQk_^Bht_}(~1H!OlJ-P~fMKT~4WWDn zV!c7|OA=5`P<WC?nad(lDiN96kg<3SA> zpbY@=ckshMlg(QVf+1K6bmWPnk-Az5J3RLE5Z57aDxt>6WIE2^kYEsgx>tUo$rwxl z)<64@M#QJ}|B{939Icu32aOGNi1i`hQAi_y9p-WNMZ1eYT%z7mP|YrC(8l~Dt<9m> zUm8UjI~WGj`qR4hmvQ6!CQ(6!-rH299U_x>6{U*nWQ2A&Mmy4Xpqbx}@w-j?xAx=1 z0olRNu`JY47hwxFza6vBrrBrfRB6O9za5L!js;fb!-3ktNY#JJqJF$vaGDo$x(pcj zd_mrHe|%-$QNJl+nA3F91Y5G2RJc)^+i)at;37tsMm04WgGY_>=nFM8Dn&{@xAF34 zM0k2*CjQ*6MH-zj;nM$2Gc;YOqbNR&;$2v;Y@9V^!NM^eHgURiz@?s$i<+F$(q?i9 zOR^=WE{1Gi7>%@4r0VxNph-YJA+>$T+T*u@(7S`aS2;xjlQv<0?cb6K)nrNF+s;_$ z-ujM-FumdHf}W+Vspl=Hru~a@5QO1%C-jgbJvEhTW)}S|FsSdwf&ti(BKME$?b&}8 zvrJ1CsI~zVd*lZt6=>#%9)z;{WkE$ZkD=I-l}*l;CF1?+M8<1$ZNxxf3X-BcXdKGg z3#~GK@TC98Vb@BX$?o>IJPk7ewqLw3fnrfZ2m;f7V?KKU8?i5dL(s1eH0#6Pu2vG0 ze)Tm*Vi~C==)pDmc=HuHntVI^yh&9o*6LN&p)fS$PQ-t9dQUOS`|}U@7f|T)4@c&6 z>#w3%=PuZ=Qu@U^q2i7*zqI7v4?Wa33EbP^@epmSgoN{srL6^f)d> zZ`0<{W)+nuy89?eS#u4(+rvCxRf@PiO)d)RHwq=9Lpgl47>VY< zIaYlG=I!~d@7Z)`Vr#tG;_d?1Y3KLG6NSM-VMoDfL0inG`%br&;~D?pt8%iQ#*d5M z&Q@J|y^EAhq>i0e(~pO0Wi3h*H}c1plkBtoqD*YPqs&c>d)LJ!f(rz)L-_RhfxfNF zX+LRU?IAwCeFhu-ZG@Jt8uP=p5?2bn$HRik)_>R^rmI2!>OzL$4P-Yf+_&8$3Pwse zUOs6-@td2uo5~7rr=ISVPiT>BK8qH>^gq0);i?;7IT=?wxL?R0UNB1#%b1vdSvEGt zT7uIUg>`@=w6oM(7|u-+-yWQ&z&!ja7WsJOx%+scl`YrV&O>s#t99ttK4gD@cK4FR zDr&B}zB4=x8JEL-hE!u49&+%j5XIYuJ4q2sxexzydXrU%Mxx)*XH?CGq(N_s!u(h*dDd-H(9ovzR3yFa>- zBCiCzzdy*67iV4eIrunCd6`{)KAbFcWbyF);+Uo7x=P7ac9$?N`A(yYwzzInX9WjnB|A(!vgZ7G@|{PyjF&ctD=n-JPr zt`Yhm8w6yxXWMV&?*vu{M35uX{z@A43ck9CTLtz8yrsxp^RzNplp7zuU+$5k=&dH1 z#n`B<$+ODTmH;{hIWG2TcR~>cCRbR#RA|au3B1iW_h+wlx2I$eWT^?cjaA&8-W@&` z2$(f6;i&DWwi^98PJGv#=ece^-1E>;b634l(KdX0UTyUR`@iU+hn_RErVw&hM|~lv zJ8uzG<~!1-C!l3S%yQw7b~W7Lrv(i#0)IJk_;9#GDj29O47vP-0v|iy*pGimaiVf+ zo3{8a${y~WGkh-@P7BOuLEISYh(qi;NKU+sbi1Fqla z?R>V=*Wkuf#Z^5D+h>)p!n=e$@M(@MS1IDc_0dsQ3@UD0d2W+!=8*%8b<$PfH;;8c zEWp0K4sZJ?Zx=&7;}uG3yBJGNm%URX%;P+HMrwTX*BQr%JFkwGEtKJ5-TZ=rr0p-* zYzXQHeH-6Hi@f1@2oGNNuOWl->@8g1A+EN42WS0Q#TZv8I12uCW=w-2BRg#uC+>gVS_H{ zA|-2NSbqml$KUx_5Dbw!DzC=@zutEHputGVkWxbf2Et(=?!QUF!C`$uf)MPXA>B-v zdNfk^BDv0N^el!=G@2Z`GCSG#YQ;a}w>f*%d%hkwrXReryQ~vbXt`v>w6k}7FXyIW zoIj?dY*8+oM&eK0z4fkN@z1R3?0qegPwPl0NkS?#ex9)lZYJAMGh;R;xmag7QS`ey zhw^OazVuvRQ(N7wq-Od2oZCJWLw4vexGE8V?b~0si>}nLWO@&OyR)v9Hlw~s*LbR> zINKL*_KKx;0t-Ra(5J}pUE}QL*g9Q^YlIJ?8$77L#N0BrXw!186hGVg_htjR;nQFE zX3OYH^hbBsDw3mS(yxjF5kL--UMFX6WvwLTpK_HYc-OPL+SRbRtEM-F{_LI}c#Fna2_!#j%)?G53&r;^w$}`PPUvcutph6A$g*r)>^>^e#78*!X9y=Fe~M)Nn(uA+U#{~g-Gv)@Rnvycqp@|`PQNp_ue0cIUW*a}_den+7fGu#(2Mi@NBO4#on<@8xko;54{v!%DAG}i#_X|j9!j7wphIcX0%C^(U( z9J`83+SQ&SwmUZ@dOF)|AroVKd_P(#bNoq?lWZNU>Odf~FUdoo7yVs|Tk^-Vkt-BX zADpHh#ok5)PkIv%n7ZrHRU!?⋘F$Bk+m7hoHvxSJq-WkmPq~ZeahhzomQM;ip;D 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

    Yg-k){MI%dTWv3~8u|q!G^98^f61{oc%M0Wu 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

    )$46g@F+G%ot!e3Q>P~Eq=40#J|*& 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

    +;NWZR>Y}($Oeb9yW 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%0D9& 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

    6PK*WX~KbK?h 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

      Z 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

      7)cl9Xz26F?-EWfBd* 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⋘F$Bk+m7hoHvxSJq-WkmPq~ZeahhzomQM;ip;D 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

      Yg-k){MI%dTWv3~8u|q!G^98^f61{oc%M0Wu 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

      )$46g@F+G%ot!e3Q>P~Eq=40#J|*& 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 means backtesting +SP="Quarterly" +#SP="Yearly" +#SP="Daily" +#SP="Hourly" + +#//----------------PARAMS ---------- comment/uncomment following 3 variables +#for ES_RNN_E, so for all except Monthly and Quarterly runs: +#NUM_OF_SEEDS=1 +#NUM_OF_CHUNKS=1 +#IBIGS= + +#for ES_RNN (do for Monthly and Quarterly): +NUM_OF_CHUNKS=2 #same as NUM_OF_CHUNKS constant the the c++ cource code, changing it is not recommended. +NUM_OF_SEEDS=3 #It is equal to the number of seeds in the startup script, (or number of teams of worker processes) +# so number_of_concurrent_executables==number_of_lines_in_the_running script/NUM_OF_CHUNKS, and number_of_chunks +#E.g if using following script for ES_RNN: +# start 10 1 0 +# start 10 2 0 +# start 20 1 5 +# start 20 2 5 +# start 30 1 10 +# start 30 2 10 +# we have here three seeds: 10,20,30, and two chunks: 1,2. (The pairs of workes have IBIG offsets of 0,5,10) +IBIGS=3 #number of complete runs by each executables, so if programs are not interrupted, this should be equal to the constant BIG_LOOP in the c++ code, by default 3. + + +m4_df=read.csv(paste0(DATA_DIR,SP,"-train.csv")) + +sMAPE<-function(forec,actual) { + mean(abs(forec-actual)/(abs(forec)+abs(actual)))*200 +} +errorFunc=sMAPE + + +spInfo_df=m4Info_df[m4Info_df$SP==SP,] +ids=spInfo_df$M4id +horizon=spInfo_df[1,"Horizon"] + +#VARIABLE + "_" + to_string(seedForChunks) + "_" + to_string(chunkNo) + "_" + to_string(ibigDb)+"_LB"+ to_string(LBACK)+ ".csv"; +inputFiles=list.files(path = FOREC_DIR, pattern = paste0(SP,".*LB",LBACK), full.names = T) +if (length(inputFiles)!=NUM_OF_SEEDS*NUM_OF_CHUNKS*IBIGS) { + stop("length(inputFiles)!=NUM_OF_SEEDS*NUM_OF_CHUNKS*IBIGS") +} + + +comp_df=NULL +fil=inputFiles[1] +for (fil in inputFiles) { + print(fil) + c_df=read.csv(fil, header=F) + comp_df=rbind(comp_df,c_df) +} +names(comp_df)[1]='id' + +forecSeries=sort(unique(comp_df$id)) +if (length(forecSeries)!=length(ids) && LBACK==0) { + stop(paste0("Expected number of cases:",length(ids)," but got:",length(forecSeries))) +} + +SIZE_OF_CHUNK=1000 +out_df=NULL; ou_df=NULL +fSeries=forecSeries[1] +for (fSeries in forecSeries) { + oneSeriesForecs_df=comp_df[comp_df$id==fSeries,] + o1=colMeans(oneSeriesForecs_df[,2:ncol(oneSeriesForecs_df)]) + o_df=data.frame(id=fSeries, as.list(o1), stringsAsFactors =F) + ou_df=rbind(ou_df, o_df) + if (nrow(ou_df)>=SIZE_OF_CHUNK) { + out_df=rbind(out_df,ou_df) + ou_df=NULL + print(nrow(out_df)) + } +} +out_df=rbind(out_df,ou_df) +print(nrow(out_df)) +out_df=out_df[order(as.integer(substring(out_df$id, 2))),] + +#FOREC_DIR="e:\\temp" +outPath=paste0(FOREC_DIR,'\\',SP,"Forec.csv") +write.csv(out_df,file=outPath,row.names = F) + +################ Main work done, now just diagnostics calculations and plots + +#display a sample of forecasts and, if LBACK>0, actuals +MAX_NUM_OF_POINTS_TO_SHOW=200 +for (i in 1:100) { + irand=sample(1:length(forecSeries),1) + fSeries=forecSeries[irand] + forec=as.numeric(out_df[out_df$id==fSeries,2:ncol(out_df)]) + actual=as.numeric(m4_df[m4_df$V1==fSeries,2:ncol(m4_df)]) + actual=actual[!is.na(actual)] + if (length(actual)>MAX_NUM_OF_POINTS_TO_SHOW) { + actual=actual[(length(actual)-MAX_NUM_OF_POINTS_TO_SHOW):length(actual)] + } + if (LBACK==0) { + plot(c(actual,forec), col=c(rep(1,length(actual)),rep(2,length(forec))), main=fSeries) + } else { + ymin=min(actual,forec) + ymax=max(actual,forec) + plot(1:length(actual),actual, main=fSeries, ylim=c(ymin,ymax)) + lines((length(actual)-length(forec)+1):length(actual), forec, col=2, type='p') + } + + Sys.sleep(5) +} + + +#calc error metrics +if (LBACK>0) { + summErrors=0 + fSeries=forecSeries[1] + i=1 + for (fSeries in forecSeries) { + if (i%%1000==0) + cat(".") + forec=as.numeric(out_df[out_df$id==fSeries,2:ncol(out_df)]) + actual=as.numeric(m4_df[m4_df$V1==fSeries,2:ncol(m4_df)]) + actual=actual[!is.na(actual)] + actual=actual[(length(actual)-LBACK*horizon+1):(length(actual)-(LBACK-1)*horizon)] + summErrors=summErrors+errorFunc(forec,actual) + i=i+1 + } + print(".") + print(paste0("avg error:",round(summErrors/length(forecSeries),2))) +} diff --git a/R/merge_PI.R b/R/merge_PI.R new file mode 100644 index 0000000..6033d7a --- /dev/null +++ b/R/merge_PI.R @@ -0,0 +1,210 @@ +# Merging outputs, per category, M4 competition, for Prediction Intervals , so for ES_RNN_PI and ES_RNN_E_PI +# Author: Slawek Smyl, Mar-May 2018 + + +#The c++ executables write to one (occasinally two, sorry :-), so in such case move files to one dir before continuing) directories. +#(One logical run of several instances of the same program will produce a number files, e.g. outputs with different ibig value) +#This script merges, averages values, and writes them down to the same directory - FOREC_DIR +############################################################################### + +#directory that should include all *-train.csv files, as well as M4-info.csv +DATA_DIR="F:/progs/data/M4DataSet/" +m4Info_df=read.csv(paste0(DATA_DIR,"M4-info.csv")) +options(stringsAsFactors =FALSE) +memory.limit(10000) + +#directory with all the output files produced by the c++ code we want to merge +FOREC_DIR='F:\\progs\\data\\M4\\Hourlygood' #do not end with separator + +LBACK=1 #shoud be as in the c++ code, LBACK>0 means backtesting +#SP="Quarterly" +#SP="Yearly" +#SP="Daily" +SP="Hourly" +m4_df=read.csv(paste0(DATA_DIR,SP,"-train.csv")) + + +#//----------------PARAMS ---------- comment/uncomment following 3 variables +#for ES_RNN_E_PI, so for all except Monthly and Quarterly runs: +NUM_OF_SEEDS=1 +NUM_OF_CHUNKS=1 +#IBIGS=/2 +IBIGS=6 + +#for ES_RNN_PI (do for Monthly and Quarterly): +#NUM_OF_CHUNKS=2 #same as NUM_OF_CHUNKS constant the the c++ cource code, changing it is not recommended. +#NUM_OF_SEEDS=3 #It is equal to the number of seeds in the startup script, (or number of teams of worker processes) +# so number_of_concurrent_executables==number_of_lines_in_the_running script/NUM_OF_CHUNKS, and number_of_chunks +#E.g if using following script for ES_RNN: +# start 10 1 0 +# start 10 2 0 +# start 20 1 5 +# start 20 2 5 +# start 30 1 10 +# start 30 2 10 +# we have here three seeds: 10,20,30, and two chunks: 1,2. (The pairs of workes have IBIG offsets of 0,5,10) +#IBIGS=3 #number of complete runs by each executables, so if programs are not interrupted, this should be equal to the constant BIG_LOOP in the c++ code, by default 3. + +ALPHA = 0.05; +ALPHA_MULTIP = 2 / ALPHA; + +MSIS<-function(forecL,forecH,actual) { + sumDiffs=0 + for (i in 1:(length(actual)-seasonality)) { + sumDiffs=sumDiffs+abs(actual[i+seasonality]-actual[i]) + } + avgAbsDiff=sumDiffs/(length(actual)-seasonality) + + actual=actual[(length(actual)-LBACK*horizon+1):(length(actual)-(LBACK-1)*horizon)] + + msis=sum(forecH-forecL)+sum(pmax(0,forecL-actual))*ALPHA_MULTIP+sum(pmax(0,actual-forecH))*ALPHA_MULTIP + msis/horizon/avgAbsDiff +} +errorFunc=MSIS + +spInfo_df=m4Info_df[m4Info_df$SP==SP,] +ids=spInfo_df$M4id +horizon=spInfo_df[1,"Horizon"] +seasonality=spInfo_df[1,"Frequency"] + + +#lower +#VARIABLE + "_" + to_string(seedForChunks) + "_" + to_string(chunkNo) + "_" + to_string(ibigDb)+"_LB"+ to_string(LBACK)+ ".csv"; +inputFiles=list.files(path = FOREC_DIR, pattern = paste0(SP,".*LLB",LBACK), full.names = T) +if (length(inputFiles)!=NUM_OF_SEEDS*NUM_OF_CHUNKS*IBIGS) { + stop("length(inputFiles)!=NUM_OF_SEEDS*NUM_OF_CHUNKS*IBIGS") +} + +comp_df=NULL +fil=inputFiles[1] +for (fil in inputFiles) { + print(fil) + c_df=read.csv(fil, header=F) + comp_df=rbind(comp_df,c_df) +} +names(comp_df)[1]='id' + +forecSeries=sort(unique(comp_df$id)) +if (length(forecSeries)!=length(ids) && LBACK==0) { + stop(paste0("Expected number of cases:",length(ids)," but got:",length(forecSeries))) +} + +SIZE_OF_CHUNK=1000 +out_df=NULL; ou_df=NULL +fSeries=forecSeries[1] +for (fSeries in forecSeries) { + oneSeriesForecs_df=comp_df[comp_df$id==fSeries,] + o1=colMeans(oneSeriesForecs_df[,2:ncol(oneSeriesForecs_df)]) + o_df=data.frame(id=fSeries, as.list(o1), stringsAsFactors =F) + ou_df=rbind(ou_df, o_df) + if (nrow(ou_df)>=SIZE_OF_CHUNK) { + out_df=rbind(out_df,ou_df) + ou_df=NULL + print(nrow(out_df)) + } +} +out_df=rbind(out_df,ou_df) +print(nrow(out_df)) +out_df=out_df[order(as.integer(substring(out_df$id, 2))),] + +outPath=paste0(FOREC_DIR,'\\',SP,"ForecL.csv") +write.csv(out_df,file=outPath,row.names = F) + +lower_df=out_df + +##################################### +#higher +inputFiles=list.files(path = FOREC_DIR, pattern = paste0(SP,".*HLB",LBACK), full.names = T) +if (length(inputFiles)!=NUM_OF_SEEDS*NUM_OF_CHUNKS*IBIGS) { + stop("length(inputFiles)!=NUM_OF_SEEDS*NUM_OF_CHUNKS*IBIGS") +} + +comp_df=NULL +fil=inputFiles[1] +for (fil in inputFiles) { + print(fil) + c_df=read.csv(fil, header=F) + comp_df=rbind(comp_df,c_df) +} +names(comp_df)[1]='id' + +forecSeries=sort(unique(comp_df$id)) +if (length(forecSeries)!=length(ids) && LBACK==0) { + print(paste0("Warning. Expected number of cases:",length(ids)," but got:",length(forecSeries))) +} + +SIZE_OF_CHUNK=1000 +out_df=NULL; ou_df=NULL +fSeries=forecSeries[1] +for (fSeries in forecSeries) { + oneSeriesForecs_df=comp_df[comp_df$id==fSeries,] + o1=colMeans(oneSeriesForecs_df[,2:ncol(oneSeriesForecs_df)]) + o_df=data.frame(id=fSeries, as.list(o1), stringsAsFactors =F) + ou_df=rbind(ou_df, o_df) + if (nrow(ou_df)>=SIZE_OF_CHUNK) { + out_df=rbind(out_df,ou_df) + ou_df=NULL + print(nrow(out_df)) + } +} +out_df=rbind(out_df,ou_df) +print(nrow(out_df)) +out_df=out_df[order(as.integer(substring(out_df$id, 2))),] + +outPath=paste0(FOREC_DIR,'\\',SP,"ForecH.csv") +write.csv(out_df,file=outPath,row.names = F) + +higher_df=out_df + + +################ Main work done, now just diagnostics calculations and plots + +#display a sample of forecasts and, if LBACK>0, actuals +MAX_NUM_OF_POINTS_TO_SHOW=200 +i=1 +for (i in 1:100) { + irand=sample(1:length(forecSeries),1) + fSeries=forecSeries[irand] + forecL=as.numeric(lower_df[lower_df$id==fSeries,2:ncol(lower_df)]) + forecH=as.numeric(higher_df[higher_df$id==fSeries,2:ncol(higher_df)]) + actual=as.numeric(m4_df[m4_df$V1==fSeries,2:ncol(m4_df)]) + actual=actual[!is.na(actual)] + if (length(actual)>MAX_NUM_OF_POINTS_TO_SHOW) { + actual=actual[(length(actual)-MAX_NUM_OF_POINTS_TO_SHOW):length(actual)] + } + if (LBACK==0) { + plot(c(actual,forecH), col=c(rep(1,length(actual)),rep(2,length(forecH))), main=fSeries) + lines(c(actual,forecL), col=c(rep(1,length(actual)),rep(3,length(forecL))), type='p') + } else { + ymin=min(actual,forecL) + ymax=max(actual,forecH) + plot(1:length(actual),actual, main=fSeries, ylim=c(ymin,ymax)) + lines((length(actual)-length(forecH)+1):length(actual), forecH, col=2, type='p') + lines((length(actual)-length(forecL)+1):length(actual), forecL, col=3, type='p') + } + + Sys.sleep(5) +} + + + +#calc error metric: MSIS +if (LBACK>0) { + summErrors=0 + fSeries=forecSeries[1] + i=1 + for (fSeries in forecSeries) { + if (i%%1000==0) + cat(".") + forecL=as.numeric(lower_df[lower_df$id==fSeries,2:ncol(lower_df)]) + forecH=as.numeric(higher_df[higher_df$id==fSeries,2:ncol(higher_df)]) + actual=as.numeric(m4_df[m4_df$V1==fSeries,2:ncol(m4_df)]) + actual=actual[!is.na(actual)] + summErrors=summErrors+errorFunc(forecL, forecH, actual) + i=i+1 + } + print(".") + print(paste0("avg error:",round(summErrors/length(forecSeries),2))) +} + + diff --git a/R/readme.txt b/R/readme.txt new file mode 100644 index 0000000..013d8f7 --- /dev/null +++ b/R/readme.txt @@ -0,0 +1,8 @@ +When the c++ workers run, they output results (forecasts) to a directory or two. +(Sorry occasionally two directories are filled, in such case first "manually" put all the output files to a single dir) +These scripts merge them into one file and save it, show a sample of graphs, and if this is backtesting run (LBACK>0), calculate some accuracy metrics. + +Both scripts needs to be updated with your input, output dirs, and other params, see inside, there are a lot of comments there. + +merge.R is meant to be used for point forecst runs, so for ES_RNN and ES_RNN_E programs. +mergePI.R - for Prediction Interval runs, so for ES_RNN_PI and ES_RNN_E_PI programs. diff --git a/c++/ES_RNN.cc b/c++/ES_RNN.cc new file mode 100644 index 0000000..43dc358 --- /dev/null +++ b/c++/ES_RNN.cc @@ -0,0 +1,1193 @@ +/*ES-RNN: ES-RNN Exponential Smoothing Recurrent Neural Network hybrid. Point forecast. +Slawek Smyl, Jan-May 2017. + +Dilated LSTMs, with optional shortcuts, attention. +It is meant to be used for Monthly and Quarterly series of M4 competition, becasue the DE (Diversified Ensemble) version is too slow. +The program uses and requires Dynet NN library(https://github.com/clab/dynet); can be compiled and run on Windows, Linux, and Mac. + +It has to be invoked in pair of executables, passing at least two integers: seedForChunks, chunkNo +so e.g. create a script with following lines on Windows +start 10 1 +start 10 2 +Modern computers have at more then 2 cores, so e.g. on 6-core machine create and run the following script with 3 pairs of workers: +# start 10 1 0 +# start 10 2 0 +# start 20 1 5 +# start 20 2 5 +# start 30 1 10 +# start 30 2 10 +seedForChunks have to be the same withion one pair, chunk numbers have to be 1 and 2. +We have added here the third parameter: ibigOffset. The straddle should be equal or bigger than BIG_LOOP. +Each pair goes through BIG_LOOP (by default 3, change in code below if you want) of model fitting and prediction, +so 2 pairs, as above, will produce 6 forecasts to be ensembled later, in R. +By increasing number of pairs, e.g. to 6 on 12-core computer, one can reduce BIG_LOOP to 1, so reduce execution time, and still have 6 forecasts - +a decent number to ensemble (in a separate R script). + +There are three blocks of parameters below, one active (starting with //PARAMS--------------) and two inactive. +The active block is setup as in the final run of forecasting quarterly series. Similarly Monthly block. +The Daily block is more of a demo, allowing to run quickly forecast for Daily series, although with slightly worse performance (use another program ES_RNN_E.cc for it). It was not used for the final submission. +So, you need comment/uncomment to have one block of interest active. + + +*/ + +//#define USE_ODBC +//define USE_ODBC if you want to +// 1. run the program in backtesting mode (which means you also need to set LBACK>0 below. Read the comment below. +// 2. save forecasts to a datatabase. Mysql and SQL Server were tested. The table creation and some other scripts should be found in \sql directory of the source code. +// Of course setting up ODBC is not that simple, :-), e.g. you need to create DSN=slawek, that points to a database with the output table. +// Saving to the db is convenient, but not necessary - all forecasts are always saved to as csv files in automatically created subdirectory (sorry sometimes two directories, so you have to copy :-)) of OUTPUT_DIR +//If saving to database you need to modify run varaible, for each new run, otherwise you will get the table key error. + +#include "dynet/dynet.h" +#include "dynet/training.h" +#include "dynet/expr.h" +#include "dynet/io.h" +#include "dynet/model.h" +#include "dynet/nodes.h" +#include "dynet/expr.h" +#include "dynet/lstm.h" +#include "slstm.h" //my implementation of dilated LSTMs + +#if defined USE_ODBC + #if defined _WINDOWS + #include + #endif + #include + #include +#endif + +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace dynet; + + + +string DATA_DIR = "f:\\progs\\data\\M4DataSet\\"; //with the competition data csvs +//string DATA_DIR="/home/uber/progs/data/M4DataSet/"; +string OUTPUT_DIR = "f:\\progs\\data\\M4\\"; +//string OUTPUT_DIR="/home/uber/progs/data/M4/"; + +int LBACK = 0; //LBACK 0 means final mode: learning on all data and forecasting. LBACK=1 would move back by OUTPUT_SIZE, and forecast last known OUTPUT_SIZE points, for backtesting. LBACK could be a larger integer, but then number of series shrinks. + + +//PARAMS-------------- +string VARIABLE = "Quarterly"; +const string run = "50/45 (1,2),(4,8), LR=0.001/{10,1e-4f}, EPOCHS=15, LVP=80 40*"; +const float PERCENTILE = 50; //we always use Pinball loss, although on normalized values. When forecasting point value, we actually forecast median, so PERCENTILE=50 +const float TRAINING_PERCENTILE = 45; //the program has a tendency for positive bias. So, we can reduce it by running smaller TRAINING_PERCENTILE. + +vector> dilations={{1,2},{4,8}};//Each vector represents one chunk of Dilateed LSTMS, connected in standard resnNet fashion +//#define USE_RESIDUAL_LSTM +//#define USE_ATTENTIVE_LSTM //so for Quarterly series, we do not use either the more advanced residual connections nor attention. +const bool ADD_NL_LAYER=false; //whether to insert a tanh() layer between the RNN stack and the linear adaptor (output) layer + +const float INITIAL_LEARNING_RATE = 0.001f; +const map LEARNING_RATES = { { 10,1e-4f } }; //at which epoch we set them up to what +const float PER_SERIES_LR_MULTIP = 1; //multiplier for per-series parameters' learning rate. + +const int NUM_OF_TRAIN_EPOCHS = 15; +const unsigned int STATE_HSIZE = 40; + +const int SEASONALITY = 4; +const unsigned int INPUT_SIZE = 4; +const int INPUT_SIZE_I= INPUT_SIZE; +const unsigned int OUTPUT_SIZE = 8; +const int OUTPUT_SIZE_I= OUTPUT_SIZE; +const int MIN_INP_SEQ_LEN = 0; +const float LEVEL_VARIABILITY_PENALTY = 80; //Multiplier for L" penalty against wigglines of level vector. Important. +const int MIN_SERIES_LENGTH = INPUT_SIZE_I + OUTPUT_SIZE_I+ MIN_INP_SEQ_LEN+2; +const int MAX_SERIES_LENGTH = 40 * SEASONALITY + MIN_SERIES_LENGTH; //we are chopping longer series, to last, max e.g. 40 years + + + +/* +string VARIABLE = "Monthly"; +const string run = "50/49 Res (1,3,6,12), LR=5e-4 {12,1e-4f}, EPOCHS=10, 20*"; +const float PERCENTILE = 50; //we always use Pinball loss, although on normalized values. When forecasting point value, we actually forecast median, so PERCENTILE=50 +const float TRAINING_PERCENTILE = 49; //the program has a tendency for positive bias. So, we can reduce it by running smaller TRAINING_PERCENTILE + +#define USE_RESIDUAL_LSTM //so for Monthly we use only one block, so no standard resNet shortcuts, but instead but of the special residual shortcuts, after https://arxiv.org/abs/1701.03360. +//#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = false; //whether to insert a tanh() layer between the RNN stack and the linear adaptor (output) layer + +vector> dilations={{1,3,6,12}};//so for Monthly we use only one block, so no standard resNet shortcut +const float INITIAL_LEARNING_RATE = 5e-4; +const map LEARNING_RATES = { { 12,1e-4f } }; //at which epoch we set them up to what +const float PER_SERIES_LR_MULTIP = 1; //multiplier for per-series parameters' learning rate. + +const int NUM_OF_TRAIN_EPOCHS = 10; +const unsigned int STATE_HSIZE = 50; + +const float LEVEL_VARIABILITY_PENALTY = 50; //Multiplier for L" penalty against wigglines of level vector. + +const int SEASONALITY = 12; +const unsigned int OUTPUT_SIZE = 18; +const unsigned int INPUT_SIZE = 12; +const int INPUT_SIZE_I= INPUT_SIZE; +const int OUTPUT_SIZE_I= OUTPUT_SIZE; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = INPUT_SIZE_I + OUTPUT_SIZE_I+ MIN_INP_SEQ_LEN+2; +const int MAX_SERIES_LENGTH = 20 * SEASONALITY + MIN_SERIES_LENGTH; //we are chopping longer series, to last, max e.g. 40 years +*/ + + +/* +string VARIABLE = "Daily"; +const string run = "50/49 NL LRMult=1.5, 3/5 (1,7,28) LR=3e-4 {9,1e-4f} EPOCHS=15, LVP=100 HSIZE=40 20w"; + +//#define USE_RESIDUAL_LSTM +//#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = true; + +const int PERCENTILE = 50; //we always use Pinball loss. When forecasting point value, we actually forecast median, so PERCENTILE=50 +const int TRAINING_PERCENTILE = 49; //the program has a tendency for positive bias. So, we can reduce it by running smaller TRAINING_PERCENTILE + +const int SEASONALITY_NUM = 1; //0 means no seasonality, for Yearly; 1 - single seasonality for Daily(7), Weekly(52); 2 - dual seaonality for Hourly (24,168) +const int SEASONALITY = 7; +const int SEASONALITY2 = 0; +vector> dilations = { { 1,7,28 } }; + +const float INITIAL_LEARNING_RATE = 3e-4; +const map LEARNING_RATES = { { 9,1e-4f } }; //at which epoch we manually set them up to what +const float PER_SERIES_LR_MULTIP = 1.5; +const int NUM_OF_TRAIN_EPOCHS = 15; + +float LEVEL_VARIABILITY_PENALTY = 100; //Multiplier for L" penalty against wigglines of level vector. +const unsigned int STATE_HSIZE = 40; + +const unsigned int INPUT_SIZE = 7; +const int INPUT_SIZE_I = INPUT_SIZE; +const unsigned int OUTPUT_SIZE = 14; +const int OUTPUT_SIZE_I = OUTPUT_SIZE; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = OUTPUT_SIZE + INPUT_SIZE + MIN_INP_SEQ_LEN + 2; //this is compared to n==(total length - OUTPUT_SIZE). Total length may be truncated by LBACK +const int MAX_SERIES_LENGTH = 20 * SEASONALITY + MIN_SERIES_LENGTH; //we are chopping longer series, to max of last 20 years +*/ + +Expression squash(const Expression& x) { + return log(x); +} + +Expression expand(const Expression& x) { + return exp(x); +} + +string INPUT_PATH = DATA_DIR + VARIABLE + "-train.csv"; +string INFO_INPUT_PATH = DATA_DIR + "M4-info.csv"; + +#if defined _DEBUG + const int MAX_NUM_OF_SERIES = 40; +#else + const int MAX_NUM_OF_SERIES = -1; //use all series +#endif // _DEBUG + +const unsigned int NUM_OF_CATEGORIES = 6;//in data provided +const int BIG_LOOP = 3; +const int NUM_OF_CHUNKS = 2; +const float EPS=1e-6; +const int AVERAGING_LEVEL=5; +const bool USE_MEDIAN = false; +const int MIDDLE_POS_FOR_AVG = 2; //if using medians + +const float NOISE_STD=0.001; +const int FREQ_OF_TEST=1; +const float GRADIENT_CLIPPING=20; +const float C_STATE_PENALTY = 0; + +const float BIG_FLOAT=1e38;//numeric_limits::max(); +const bool PRINT_DIAGN=true; +const float TAU = PERCENTILE / 100.; +const float TRAINING_TAU = TRAINING_PERCENTILE / 100.; +const unsigned ATTENTION_HSIZE=STATE_HSIZE; + +const bool USE_AUTO_LEARNING_RATE=false; +//if USE_AUTO_LEARNING_RATE, and only if LBACK>0 +const float MIN_LEARNING_RATE = 0.0001f; +const float LR_RATIO = sqrt(10); +const float LR_TOLERANCE_MULTIP = 1.005; +const int L3_PERIOD = 2; +const int MIN_EPOCHS_BEFORE_CHANGING_LRATE = 2; + + +#if defined USE_ODBC + void HandleDiagnosticRecord(SQLHANDLE hHandle, + SQLSMALLINT hType, + RETCODE RetCode); + + #if defined _WINDOWS + WCHAR* pwszConnStr = L"DSN=slawek"; + #else + SQLCHAR* pwszConnStr = (SQLCHAR*) "DSN=slawek"; + #endif + #define TRYODBC(h, ht, x) { RETCODE rc = x;\ + if (rc != SQL_SUCCESS) \ + { \ + HandleDiagnosticRecord (h, ht, rc); \ + } \ + if (rc == SQL_ERROR) \ + { \ + fprintf(stderr, "Error in " #x "\n"); \ + if (hStmt) { \ + SQLFreeHandle(SQL_HANDLE_STMT, hStmt); \ + } \ + if (hDbc) { \ + SQLDisconnect(hDbc); \ + SQLFreeHandle(SQL_HANDLE_DBC, hDbc); \ + } \ + if (hEnv) { \ + SQLFreeHandle(SQL_HANDLE_ENV, hEnv); \ + } \ + exit(-1); \ + } \ + } + +#endif + +struct M4TS {//storing series data + vector < float> categories_vect; + vector vals; + vector testVals;//empty, unless LBACK>0 + int n; + + M4TS(string category, stringstream &line_stream) { + array categories = { 0,0,0,0,0,0 }; + if (category == "Demographic") + categories[0] = 1; + else if (category == "Finance") + categories[1] = 1; + else if (category == "Industry") + categories[2] = 1; + else if (category == "Macro") + categories[3] = 1; + else if (category == "Micro") + categories[4] = 1; + else if (category == "Other") + categories[5] = 1; + else { + cerr << "unknown category?"; + exit(-1); + } + for (int i = 0; i < NUM_OF_CATEGORIES; i++) + categories_vect.push_back(categories[i]); + + string tmp_str; + while(getline(line_stream, tmp_str, ',' )) { + string val_str; + for (const auto c : tmp_str) { + if (c != '\"' && c != '\r') //remove quotes and very occasional double end of line + val_str.push_back(c); + } + if (val_str.size() == 0) + break; + float val=(atof(val_str.c_str())); + vals.push_back(val); + } + if (LBACK > 0) { //extract last OUTPUT_SIZE points as the test values + if (vals.size() > LBACK*OUTPUT_SIZE_I) { + auto first = vals.begin() + vals.size() - LBACK*OUTPUT_SIZE_I; + auto pastLast = vals.begin() + vals.size() - (LBACK-1)*OUTPUT_SIZE_I; + vector input_vect(first, pastLast); //[first,pastLast) + testVals= input_vect; + vals.resize(vals.size() - LBACK*OUTPUT_SIZE_I); //remove last LBACK*OUTPUT_SIZE elements + n = vals.size(); + } else + n = 0; + } else { + n = vals.size(); + } + if (n > MAX_SERIES_LENGTH) { //chop long series + vals.erase(vals.begin(), vals.begin() + (n-MAX_SERIES_LENGTH)); //remove some early data + n = vals.size(); + } + } + M4TS(){}; +}; + + +struct AdditionalParams {//Per series, important + Parameter levSm; + Parameter sSm; + array initSeasonality; +}; + +struct AdditionalParamsF {//Used for storing diagnostics + float levSm; + float sSm; + array initSeasonality; + vector levels; + vector seasons; +}; + + +Expression pinBallLoss(const Expression& out_ex, const Expression& actuals_ex) {//used by Dynet, learning loss function + vector losses; + for (unsigned int indx = 0; indx as_scalar(forec.value())) + losses.push_back((actual - forec)*TRAINING_TAU); + else + losses.push_back((actual - forec)*(TRAINING_TAU - 1)); + } + return sum(losses) / OUTPUT_SIZE * 2; +} + + +//weighted quantile Loss, used just for diagnostics, if if LBACK>0 and PERCENTILE!=50 +float wQuantLoss(vector& out_vect, vector& actuals_vect) { + float sumf = 0; float suma=0; + for (unsigned int indx = 0; indx forec) + sumf = sumf + (actual - forec)*TAU; + else + sumf = sumf + (actual - forec)*(TAU - 1); + } + return sumf / suma * 200; +} + +//used just for diagnostics, if LBACK>0 and PERCENTILE==50 +float sMAPE(vector& out_vect, vector& actuals_vect) { + float sumf = 0; + for (unsigned int indx = 0; indx& out_vect, vector& actuals_vect) { + if (PERCENTILE==50) + return sMAPE(out_vect, actuals_vect); + else + return wQuantLoss(out_vect, actuals_vect); +} + +int main(int argc, char** argv) { + dynet::initialize(argc, argv); + + int seedForChunks = 10; //Yes it runs, without any params, but it will work only on 1/NUM_OF_CHUNKS of all cases. The system is expected to run in NUM_OF_CHUNKS multiples. + int chunkNo = 1; + int ibigOffset = 0; + if (argc >= 3) { + seedForChunks = atoi(argv[1]); + chunkNo = atoi(argv[2]); + } + if (argc >= 4) + ibigOffset = atoi(argv[3]); + + if (chunkNo > NUM_OF_CHUNKS) { + cerr << "chunkNo > NUM_OF_CHUNKS"; + exit(-1); + } + else if (chunkNo <= 0) { + cerr << "chunkNo <= 0"; + exit(-1); + } + + cout<0) + std::cout<< " ibigOffset:"<< ibigOffset; //if continuing prematurely stopped run + if (LBACK>0) + std::cout<<" lback:"<tm_year+1900; + now_ts.month=now->tm_mon+1; + now_ts.day=now->tm_mday; + now_ts.hour=now->tm_hour; + now_ts.minute=now->tm_min; + now_ts.second=now->tm_sec; + now_ts.fraction=0; //reportedly needed + + const int OFFSET_TO_FIRST_ACTUAL=5; + string insertQuery_str = "insert into M72nn(run, LBack, ibig, series, epoch "; + for (int iq = 1; iq <= OUTPUT_SIZE_I; iq++) { + stringstream ss; + ss << iq; + string iq_str = ss.str(); + insertQuery_str = insertQuery_str +", actual"+iq_str+", forec" + iq_str; + } + insertQuery_str = insertQuery_str +", trainingError, variable, n, dateTimeOfPrediction) \ + values(? , ? , ? , ? , ? "; + for (int iq = 1; iq <= OUTPUT_SIZE_I; iq++) { + insertQuery_str = insertQuery_str + ",?,?"; + } + insertQuery_str = insertQuery_str + ",?,?,?,?)"; + #if defined _WINDOWS + wstring insertQuery(insertQuery_str.begin(), insertQuery_str.end()); + SQLWCHAR* sqlQuery = (SQLWCHAR*)insertQuery.c_str(); + #else + SQLCHAR* sqlQuery =(SQLCHAR*)insertQuery_str.c_str(); + #endif + + + SQLHENV hEnv = NULL; + SQLHDBC hDbc = NULL; + SQLHSTMT hStmt = NULL, hInsertStmt = NULL; + + if (SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv) == SQL_ERROR) { + fprintf(stderr, "Unable to allocate an environment handle\n"); + exit(-1); + } + TRYODBC(hEnv, + SQL_HANDLE_ENV, + SQLSetEnvAttr(hEnv, + SQL_ATTR_ODBC_VERSION, + (SQLPOINTER)SQL_OV_ODBC3, + 0)); + + // Allocate a connection + TRYODBC(hEnv, + SQL_HANDLE_ENV, + SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc)); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLDriverConnect(hDbc, + NULL, + pwszConnStr, + SQL_NTS, + NULL, + 0, + NULL, + SQL_DRIVER_COMPLETE)); + fprintf(stderr, "Connected!\n"); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLSetConnectAttr(hDbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, SQL_IS_INTEGER)); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hInsertStmt)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLPrepare(hInsertStmt, sqlQuery, SQL_NTS)); + + SQLLEN nullTerminatedStringOfRun = SQL_NTS; + SQLLEN nullTerminatedStringOfSeries = SQL_NTS; + SQLLEN nullTerminatedStringOfVariable = SQL_NTS; + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)run.c_str(), 0, &nullTerminatedStringOfRun)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&LBACK, 0, NULL)); + + // variable, n, dateTimeOfPrediction + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL+2*OUTPUT_SIZE_I+2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)VARIABLE.c_str(), 0, &nullTerminatedStringOfVariable)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE_I + 4, SQL_PARAM_INPUT, SQL_C_TYPE_TIMESTAMP, SQL_TYPE_TIMESTAMP, 0, 0, &now_ts, sizeof(TIMESTAMP_STRUCT), NULL)); +#endif + + random_device rd; // only used once to initialise (seed) engine + mt19937 rng(rd()); // random-number engine used (Mersenne-Twister) + mt19937 rngForChunks(seedForChunks); + + vector series_vect; + unordered_map allSeries_map(30000);//max series in one chunk would be 48/2=24k, for monthly series + unordered_map seriesCategories_map(120000);//100k series + + ifstream infoFile(INFO_INPUT_PATH); + string line; + getline(infoFile, line); //header + while (getline(infoFile, line)) { + //cout << string( line)<= MIN_SERIES_LENGTH) { + series_vect.push_back(series); + allSeries_map[series] = m4Obj; + } + if (MAX_NUM_OF_SERIES>0 && series_vect.size()>=MAX_NUM_OF_SERIES) + break; + } + + int series_len=(int)series_vect.size(); + int chunkSize= series_len/NUM_OF_CHUNKS; + std::cout << "num of series:" << series_vect.size() <<" size of chunk:"<< chunkSize< uniOnSeries(0, chunkSize -1); // closed interval [a, b] + + unordered_map, AVERAGING_LEVEL+1>> testResults_map((int)chunkSize*1.5); + set diagSeries; + + for (int ibig=0; ibig perfValid_vect; + int epochOfLastChangeOfLRate = -1; + +#if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&ibigDb, 0, NULL)); +#endif + + ParameterCollection pc; + ParameterCollection perSeriesPC; + + float learning_rate= INITIAL_LEARNING_RATE; + AdamTrainer trainer(pc, learning_rate, 0.9, 0.999, EPS); + trainer.clip_threshold = GRADIENT_CLIPPING; + AdamTrainer perSeriesTrainer(perSeriesPC, learning_rate*PER_SERIES_LR_MULTIP, 0.9, 0.999, EPS); + perSeriesTrainer.clip_threshold = GRADIENT_CLIPPING; + + #if defined USE_RESIDUAL_LSTM + vector rNNStack; + rNNStack.emplace_back(ResidualDilatedLSTMBuilder(dilations[0], INPUT_SIZE + NUM_OF_CATEGORIES, STATE_HSIZE, pc)); + for (int il = 1; il rNNStack; + rNNStack.emplace_back(AttentiveDilatedLSTMBuilder(dilations[0], INPUT_SIZE + NUM_OF_CATEGORIES, STATE_HSIZE, ATTENTION_HSIZE, pc)); + for (int il = 1; il rNNStack; + rNNStack.emplace_back(DilatedLSTMBuilder(dilations[0], INPUT_SIZE + NUM_OF_CATEGORIES, STATE_HSIZE, pc)); + for (int il = 1; il oneChunk_vect(start,end); + if (PRINT_DIAGN) { + for (int k = 0; k<10; k++) //diag + cout << oneChunk_vect[k] << " "; + cout << endl; + } + if (chunkNo == NUM_OF_CHUNKS) + cout<<"last chunk size:"<< oneChunk_vect.size()< additionalParams_map((int)oneChunk_vect.size()*1.5); //per series + unordered_map*> historyOfAdditionalParams_map((int)oneChunk_vect.size()*1.5); + for (auto iter = oneChunk_vect.begin(); iter != oneChunk_vect.end(); ++iter) {//setup + string series = *iter; + AdditionalParams addParams; + addParams.levSm = perSeriesPC.add_parameters({ 1 }, 0.5); //level smoothing + addParams.sSm = perSeriesPC.add_parameters({ 1 }, 0.5); //seasonality smoothing + for (int isea = 0; isea(); + } + + for (int iEpoch=0; iEpoch testLosses; //test losses of all series in this epoch + vector testAvgLosses; //test avg (over last few epochs) losses of all series in this epoch + vector trainingLosses; //training losses of all series in one epoch + vector forecLosses; vector levVarLosses; vector stateLosses; + #if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&iEpoch, 0, NULL)); + #endif + + for (auto iter = oneChunk_vect.begin() ; iter != oneChunk_vect.end(); ++iter) { + string series=*iter; + auto m4Obj = allSeries_map[series]; + + #if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)series.c_str(), 0, &nullTerminatedStringOfSeries)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE_I + 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&m4Obj.n, 0, NULL)); + #endif + + ComputationGraph cg; + for (int il=0; il season_exVect;//vector, because we do not know how long the series is + for (int iseas=0; iseas seas==1 + season_exVect.push_back(seas);//Expression is a simple struct, without any storage management, so the auto copy constructor works OK. + } + season_exVect.push_back(season_exVect[0]); + + vector logDiffOfLevels_vect; + vector levels_exVect; + Expression lev=cdiv(input(cg, m4Obj.vals[0]), season_exVect[0]); + levels_exVect.push_back(lev); + for (int i=1; i 0) { + vector levelVarLoss_v; + for (int i = 1; iSEASONALITY) { + unsigned long startSeasonalityIndx=season_exVect.size()-SEASONALITY; + for (int i=0;i<(OUTPUT_SIZE_I-SEASONALITY);i++) + season_exVect.push_back(season_exVect[startSeasonalityIndx+i]); + } + vector losses; + for (int i=INPUT_SIZE_I-1; i<(m4Obj.n- OUTPUT_SIZE_I); i++) { + vector::const_iterator firstE = season_exVect.begin() +i+1-INPUT_SIZE_I; + vector::const_iterator pastLastE = season_exVect.begin() +i+1; //not including the last one + vector inputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + Expression inputSeasonality_ex=concatenate(inputSeasonality_exVect); + + vector::const_iterator first = m4Obj.vals.begin() +i+1-INPUT_SIZE_I; + vector::const_iterator pastLast = m4Obj.vals.begin() +i+1; //not including the last one + vector input_vect(first, pastLast); //[first,pastLast) + Expression input0_ex=input(cg,{INPUT_SIZE},input_vect); + Expression input1_ex=cdiv(input0_ex,inputSeasonality_ex); //deseasonalization + vector joinedInput_ex; + input1_ex= cdiv(input1_ex, levels_exVect[i]); + joinedInput_ex.emplace_back(noise(squash(input1_ex), NOISE_STD)); //normalization+noise + joinedInput_ex.emplace_back(input(cg, { NUM_OF_CATEGORIES }, m4Obj.categories_vect)); + Expression input_ex = concatenate(joinedInput_ex); + + Expression rnn_ex; + try { + rnn_ex = rNNStack[0].add_input(input_ex); + for (int il=1; il outputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + Expression outputSeasonality_ex=concatenate(outputSeasonality_exVect); + + first = m4Obj.vals.begin() +i+1; + pastLast = m4Obj.vals.begin() +i+1+OUTPUT_SIZE_I; + vector labels_vect(first, pastLast); //[first,pastLast) + Expression labels0_ex=input(cg,{OUTPUT_SIZE},labels_vect); + Expression labels1_ex=cdiv(labels0_ex,outputSeasonality_ex); //deseasonalization + labels1_ex= cdiv(labels1_ex, levels_exVect[i]);//normalization + Expression labels_ex=squash(labels1_ex); + + Expression loss_ex=pinBallLoss(out_ex, labels_ex); + if (i>=INPUT_SIZE_I+MIN_INP_SEQ_LEN) + losses.push_back(loss_ex); + } + + Expression forecLoss_ex= average(losses); + Expression loss_exp = forecLoss_ex; + + float levVarLoss=0; + if (LEVEL_VARIABILITY_PENALTY > 0) { + Expression levelVarLossP_ex = levelVarLoss_ex*LEVEL_VARIABILITY_PENALTY; + levVarLoss = as_scalar(levelVarLossP_ex.value()); + levVarLosses.push_back(levVarLoss); + loss_exp= loss_exp + levelVarLossP_ex; + } + + float cStateLoss=0; + if (C_STATE_PENALTY>0) { + vector cStateLosses_vEx; + for (int irnn = 0; irnn < rNNStack.size(); irnn++) + for (int it = 0; it maxAbs) { + maxAbs = abs(state[iv]); + timeOfMax = it; + layerOfMax = il; + chunkOfMax = irnn; + } + } + } //through layers/states + } //through time + } //through chunks + + cout << "levSm:" << as_scalar(levSm_ex.value()) << endl; + cout << "sSm:" << as_scalar(sSm_ex.value()) << endl; + cout << " min season=" << minSeason << endl; + cout << " min level=" << minLevel << endl; + cout << " max abs:" << maxAbs << " at time:" << timeOfMax << " at layer:" << layerOfMax << " and chunk:" << chunkOfMax << endl; + + //diagSeries.insert(series); + pc.reset_gradient(); + perSeriesPC.reset_gradient(); + } + + //saving per-series values for diagnostics purposes + AdditionalParamsF &histAdditionalParams= historyOfAdditionalParams_map[series]->at(iEpoch); + histAdditionalParams.levSm=as_scalar(levSm_ex.value()); + histAdditionalParams.sSm=as_scalar(sSm_ex.value()); + for (int isea=0; isea::const_iterator firstE = season_exVect.begin() + i + 1 - INPUT_SIZE_I; + vector::const_iterator pastLastE = season_exVect.begin() + i + 1; //not including the last one + vector inputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + Expression inputSeasonality_ex = concatenate(inputSeasonality_exVect); + + vector::const_iterator first = m4Obj.vals.begin() + i + 1 - INPUT_SIZE_I; + vector::const_iterator pastLast = m4Obj.vals.begin() + i + 1; //not including the last one + vector input_vect(first, pastLast); //[first,pastLast) + Expression input0_ex = input(cg, { INPUT_SIZE }, input_vect); + Expression input1_ex = cdiv(input0_ex, inputSeasonality_ex); //deseasonalization + vector joinedInput_ex; + input1_ex= cdiv(input1_ex, levels_exVect[i]);//normalization + joinedInput_ex.emplace_back(squash(input1_ex)); + joinedInput_ex.emplace_back(input(cg, { NUM_OF_CATEGORIES }, m4Obj.categories_vect)); + Expression input_ex = concatenate(joinedInput_ex); + + Expression rnn_ex; + try { + rnn_ex = rNNStack[0].add_input(input_ex); + for (int il=1; il outputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + Expression outputSeasonality_ex = concatenate(outputSeasonality_exVect); + + Expression out_ex; + if (ADD_NL_LAYER) { + out_ex=MLPW_ex*rnn_ex+MLPB_ex; + out_ex = adapterW_ex*tanh(out_ex)+adapterB_ex; + } else + out_ex=adapterW_ex*rnn_ex+adapterB_ex; + + out_ex = cmult(expand(out_ex), outputSeasonality_ex)*levels_exVect[i];//back to original scale + vector out_vect = as_vector(out_ex.value()); + + if (LBACK > 0) { + float qLoss = errorFunc(out_vect, m4Obj.testVals); + testLosses.push_back(qLoss); + } + + testResults_map[series][iEpoch%AVERAGING_LEVEL] = out_vect; + if (iEpoch >= AVERAGING_LEVEL) { + if (USE_MEDIAN) { + if (testResults_map[series][AVERAGING_LEVEL].size() == 0) + testResults_map[series][AVERAGING_LEVEL] = out_vect; //just to initialized, to make space. The values will be overwritten + for (int iii = 0; iii < OUTPUT_SIZE_I; iii++) { + vector temp_vect2; + for (int ii = 0; ii firstForec = testResults_map[series][0]; + testResults_map[series][AVERAGING_LEVEL] = firstForec; + for (int ii = 1; ii nextForec = testResults_map[series][ii]; + for (int iii = 0; iii 0) { + float qLoss = errorFunc(testResults_map[series][AVERAGING_LEVEL], m4Obj.testVals); + testAvgLosses.push_back(qLoss); + + #if defined USE_ODBC //save + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE_I + 1, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_FLOAT, 0, 0, (SQLPOINTER)&forecastLoss, 0, NULL)); + + for (int io = 0; io < OUTPUT_SIZE_I; io++) { + int ipos=OFFSET_TO_FIRST_ACTUAL + 1 + 2*io; + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, ipos, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_FLOAT, 0, 0, (SQLPOINTER)&m4Obj.testVals[io], 0, NULL)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, ipos+1, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_FLOAT, 0, 0, (SQLPOINTER)&testResults_map[series][AVERAGING_LEVEL][io], 0, NULL)); + } + if (MAX_NUM_OF_SERIES<0) + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLExecute(hInsertStmt)); + #endif + } + } //time to average + }//last anchor point of the series + }//through TEST loop + }//through series + + + if (iEpoch % FREQ_OF_TEST == 0) { + float averageTrainingLoss = accumulate(trainingLosses.begin(), trainingLosses.end(), 0.0) / trainingLosses.size(); + + cout << ibig << " " << iEpoch << " loss:" << averageTrainingLoss * 100; + if (LEVEL_VARIABILITY_PENALTY > 0 || C_STATE_PENALTY > 0) { + float averageForecLoss = accumulate(forecLosses.begin(), forecLosses.end(), 0.0) / forecLosses.size(); + cout << " forecast loss:" << averageForecLoss*100; + } + if (LEVEL_VARIABILITY_PENALTY > 0) { + float averagelevVarLoss = accumulate(levVarLosses.begin(), levVarLosses.end(), 0.0) / levVarLosses.size(); + cout << " levVar loss:" << averagelevVarLoss * 100; + } + if (C_STATE_PENALTY > 0) { + float averageStateLoss = accumulate(stateLosses.begin(), stateLosses.end(), 0.0) / stateLosses.size(); + cout << " state loss:" << averageStateLoss * 100; + } + + float averageTestLoss=0; + if (LBACK > 0) { + float averageTestLoss = accumulate(testLosses.begin(), testLosses.end(), 0.0) / testLosses.size(); + cout<<" Test loss:" << averageTestLoss; + if (iEpoch >= AVERAGING_LEVEL) { + float averageTestAvgLoss = accumulate(testAvgLosses.begin(), testAvgLosses.end(), 0.0) / testAvgLosses.size();//of this epoch + cout << " avgLoss:" << averageTestAvgLoss; + } + if (USE_AUTO_LEARNING_RATE) + perfValid_vect.push_back(averageTestLoss); + } + cout << endl; + } + + if (USE_AUTO_LEARNING_RATE) { + bool changeL2Rate = false; + if (iEpoch >= 2) { + if (iEpoch < L3_PERIOD) + changeL2Rate = perfValid_vect[perfValid_vect.size() - 2] MIN_LEARNING_RATE && (iEpoch - epochOfLastChangeOfLRate) >= MIN_EPOCHS_BEFORE_CHANGING_LRATE) { + learning_rate /= LR_RATIO; + cout << "decreasing LR to:" << learning_rate << endl; + epochOfLastChangeOfLRate = iEpoch; + trainer.learning_rate = learning_rate; + } + } + #if defined USE_ODBC + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLEndTran( + SQL_HANDLE_DBC, + hDbc, + SQL_COMMIT)); + #endif + }//through epochs + + if (PRINT_DIAGN) {//some diagnostic info + set diagSeries; + for (int i = 0; i<1; i++) {//add a few normal ones + int irand = uniOnSeries(rng); + diagSeries.insert(oneChunk_vect[irand]); + } + for (auto series : diagSeries) { + cout << endl << series << endl; + array* historyOfAdditionalParams_ptrToArr = historyOfAdditionalParams_map[series]; + cout << "lSm:" << endl; + for (int iEpoch = 0; iEpochat(iEpoch).levSm << " "; + cout << endl; + cout << "sSm:" << endl; + for (int iEpoch = 0; iEpochat(iEpoch).sSm << " "; + cout << endl; + cout << "seasons:" << endl; + for (int isea = 0; iseaat(iEpoch).initSeasonality[isea] << " "; + cout << endl; + } + cout << endl; + for (int iEpoch = 0; iEpochat(iEpoch).levels.size()>0) { + cout << "levels:" << iEpoch << " "; + for (int iv = 0; ivat(iEpoch).levels.size(); iv++) + cout << historyOfAdditionalParams_ptrToArr->at(iEpoch).levels[iv] << ", "; + cout << endl; + cout << "seas:" << iEpoch << " "; + for (int iv = 0; ivat(iEpoch).seasons.size(); iv++) + cout << historyOfAdditionalParams_ptrToArr->at(iEpoch).seasons[iv] << ", "; + cout << endl; + } + } + } + } + + //save the forecast to outputFile + ofstream outputFile; + outputFile.open(outputPath); + for (auto iter = oneChunk_vect.begin(); iter != oneChunk_vect.end(); ++iter) { + string series = *iter; + outputFile<< series; + for (int io=0; io 0 +start 10 +start 20 +start 30 +on 4-core computer. +In this setup, learning and fitting would be repeated 4*3 times, probably unnecessarily too many, 6-8 independent runs should be enough for a good ensemble. +Therefore if running on say 8 core machine , one can extend the above script to 8 concurrent executions and reduce BIG_LOOP to 1. +(Creating final forecasts is done in a supplied R script) + +There are four blocks of parameters below, one active (starting with //PARAMS--------------) and three inactive. +These blocks are as they were during the final forecasting run. You need comment/uncomment to have one block of interest active. +*/ + + +//#define USE_ODBC +//define USE_ODBC if you want to +// 1. run the program in backtesting mode (which means you also need to set LBACK>0 below. Read the comment below. +// 2. save forecasts to a datatabase. Mysql and SQL Server were tested. The table creation and some other scripts should be found in \sql directory of the source code. +// Of course setting up ODBC is not that simple, :-), e.g. you need to create DSN=slawek, that points to a database with the output table. +// Saving to the db is convenient, but not necessary - all forecasts are always saved to as csv files in automatically created subdirectory (sorry sometimes two directories, so you have to copy :-)) of OUTPUT_DIR +//If saving to database you need to modify run varaible, for each new run, otherwise you will get the table key error. + +#include "dynet/dynet.h" +#include "dynet/training.h" +#include "dynet/expr.h" +#include "dynet/io.h" +#include "dynet/model.h" +#include "dynet/nodes.h" +#include "dynet/expr.h" +#include "dynet/lstm.h" +#include "slstm.h" //my implementation of dilated LSTMs + + +#if defined USE_ODBC + #if defined _WINDOWS + #include + #endif + #include + #include +#endif + +#include +#include +#include +//#include +#include +#include +#include +#include + +using namespace std; +using namespace dynet; + + +string DATA_DIR = "f:\\progs\\data\\M4DataSet\\"; //with the competition data csvs +//string DATA_DIR="/home/uber/progs/data/M4DataSet/"; +string OUTPUT_DIR = "f:\\progs\\data\\M4\\"; +//string OUTPUT_DIR="/home/uber/progs/data/M4/"; + +int LBACK = 0; //LBACK 0 means final mode: learning on all data and forecasting. LBACK=1 would move back by OUTPUT_SIZE, and forecast last known OUTPUT_SIZE points, for backtesting. LBACK could be a larger integer, but then number of series shrinks. + + +//PARAMS-------------- +string VARIABLE = "Hourly"; +const string run = "50/49 Att 4/5 1,4)(24,168) LR=0.01,{7,5e-3f},{18,1e-3f},{22,3e-4f} EPOCHS=27, LVP=10, CSP=1"; + +//#define USE_RESIDUAL_LSTM +//#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = false; + +const float PERCENTILE = 50; //we always use Pinball loss. When forecasting point value, we actually forecast median, so PERCENTILE=50 +const float TRAINING_PERCENTILE = 49; //the program has a tendency for positive bias. So, we can reduce it by running smaller TRAINING_PERCENTILE + +const int SEASONALITY_NUM = 2;//0 means no seasonality, for Yearly; 1 - single seasonality for Daily(7), Weekly(52); 2 - dual seaonality for Hourly (24,168) +const int SEASONALITY = 24; +const int SEASONALITY2 = 168; +vector> dilations = { { 1,4 },{ 24, 168 } }; + +const float INITIAL_LEARNING_RATE = 0.01f; +const map LEARNING_RATES = { { 7,5e-3f },{ 18,1e-3f },{ 22,3e-4f } }; //at which epoch we manually set them up to what +const float PER_SERIES_LR_MULTIP = 1; +const int NUM_OF_TRAIN_EPOCHS = 27; + +float LEVEL_VARIABILITY_PENALTY = 10; //Multiplier for L" penalty against wigglines of level vector. +const float C_STATE_PENALTY = 1; + +const unsigned int STATE_HSIZE = 40; + +const unsigned int INPUT_SIZE = 24; +const unsigned int OUTPUT_SIZE = 48; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = OUTPUT_SIZE + INPUT_SIZE + MIN_INP_SEQ_LEN + 2; //this is compared to n==(total length - OUTPUT_SIZE). Total length may be truncated by LBACK +const int MAX_SERIES_LENGTH = 53 * SEASONALITY2 + MIN_SERIES_LENGTH; //==all +const int TOPN = 4; + + +/* +string VARIABLE = "Weekly"; +const string run = "50/47 Att 3/5 (1,52) LR=1e-3 {11,3e-4f}, {17,1e-4f} EPOCHS=23, LVP=100 6y"; + +const int PERCENTILE = 50; //we always use Pinball loss. When forecasting point value, we actually forecast median, so PERCENTILE=50 +const int TRAINING_PERCENTILE = 47; //the program has a tendency for positive bias. So, we can reduce it by running smaller TRAINING_PERCENTILE + +//#define USE_RESIDUAL_LSTM +#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = false; + +const int SEASONALITY_NUM = 0; //0 means no seasonality, for Yearly; 1 - single seasonality for Daily(7), Weekly(52); 2 - dual seaonality for Hourly (24,168) +const int SEASONALITY = 52; +const int SEASONALITY2 = 0; +vector> dilations = { { 1, 52 } }; + +const float INITIAL_LEARNING_RATE = 1e-3; +const map LEARNING_RATES = { { 11,3e-4f },{ 17,1e-4f } }; //at which epoch we manually set them up to what +const int NUM_OF_TRAIN_EPOCHS = 23; + +float LEVEL_VARIABILITY_PENALTY = 100; //Multiplier for L" penalty against wigglines of level vector. +const float C_STATE_PENALTY = 0; +const float PER_SERIES_LR_MULTIP = 1; + +const unsigned int STATE_HSIZE = 40; + +const unsigned int INPUT_SIZE = 10; +const unsigned int OUTPUT_SIZE = 13; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = OUTPUT_SIZE + INPUT_SIZE + MIN_INP_SEQ_LEN + 2; //this is compared to n==(total length - OUTPUT_SIZE). Total length may be truncated by LBACK + //#Min. 1st Qu. Median Mean 3rd Qu. Max. + //#81 380 935 1023 1604 2598 +const int MAX_SERIES_LENGTH = 6 * SEASONALITY + MIN_SERIES_LENGTH; //==all +const int TOPN = 3; +*/ + +/* +string VARIABLE = "Daily"; +const string run = "Final 50/49 730 4/5 (1,3)(7,14) LR=3e-4 {9,1e-4f} EPOCHS=13, LVP=100 13w"; +//#define USE_RESIDUAL_LSTM +//#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = false; + +const int PERCENTILE = 50; //we always use Pinball loss. When forecasting point value, we actually forecast median, so PERCENTILE=50 +const int TRAINING_PERCENTILE = 49; //the program has a tendency for positive bias. So, we can reduce it by running smaller TRAINING_PERCENTILE + +const int SEASONALITY_NUM = 1; //0 means no seasonality, for Yearly; 1 - single seasonality for Daily(7), Weekly(52); 2 - dual seaonality for Hourly (24,168) +const int SEASONALITY = 7; +const int SEASONALITY2 = 0; +vector> dilations = { { 1,3 },{ 7, 14 } }; + +const float INITIAL_LEARNING_RATE = 3e-4; +const map LEARNING_RATES = { { 9,1e-4f } }; //at which epoch we manually set them up to what +const float PER_SERIES_LR_MULTIP = 1; +const int NUM_OF_TRAIN_EPOCHS = 13; + +float LEVEL_VARIABILITY_PENALTY = 100; //Multiplier for L" penalty against wigglines of level vector. +const float C_STATE_PENALTY = 0; + +const unsigned int STATE_HSIZE = 40; + +const unsigned int INPUT_SIZE = 7; +const unsigned int OUTPUT_SIZE = 14; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = OUTPUT_SIZE + INPUT_SIZE + MIN_INP_SEQ_LEN + 2; //this is compared to n==(total length - OUTPUT_SIZE). Total length may be truncated by LBACK + //#Min. 1st Qu. Median Mean 3rd Qu. Max. + //##93 323 2940 2357 4197 9919 +const int MAX_SERIES_LENGTH = 13 * SEASONALITY + MIN_SERIES_LENGTH; +const int TOPN = 4; +*/ + +/* +string VARIABLE = "Yearly"; +const string run = "50 Att 4/5 (1,6) LR=1e-4 EPOCHS=12, 60*"; + +//#define USE_RESIDUAL_LSTM +#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = false; + +const float PERCENTILE = 50; //we always use Pinball loss. When forecasting point value, we actually forecast median, so PERCENTILE=50 +const float TRAINING_PERCENTILE = 50; + +const int SEASONALITY_NUM = 0; //0 means no seasonality, for Yearly; 1 - single seasonality for Daily(7), Weekly(52); 2 - dual seaonality for Hourly (24,168) +const int SEASONALITY = 0; +const int SEASONALITY2 = 0; +vector> dilations = { { 1,6 } }; + +const float INITIAL_LEARNING_RATE = 1e-4; +const map LEARNING_RATES = { { 15,1e-5 } }; //at which epoch we manually set them up to what +const float PER_SERIES_LR_MULTIP = 1; +const int NUM_OF_TRAIN_EPOCHS = 12; + +float LEVEL_VARIABILITY_PENALTY = 0; //Multiplier for L" penalty against wigglines of level vector. +const float C_STATE_PENALTY = 0; + +const unsigned int STATE_HSIZE = 30; + +const unsigned int INPUT_SIZE = 4; +const unsigned int OUTPUT_SIZE = 6; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = OUTPUT_SIZE + INPUT_SIZE + MIN_INP_SEQ_LEN + 2; //this is compared to n==(total length - OUTPUT_SIZE). Total length may be truncated by LBACK + //#Min. 1st Qu. Median Mean 3rd Qu. Max. + //#13.00 20.00 29.00 31.32 40.00 835.00 +const int MAX_SERIES_LENGTH = 60 + MIN_SERIES_LENGTH; +const int TOPN = 4; +*/ + +//end of VARIABLE-specific params + +const int BIG_LOOP = 3; +const int NUM_OF_NETS = 5; +const unsigned int ATTENTION_HSIZE = STATE_HSIZE; + + +#if defined _DEBUG + const int MAX_NUM_OF_SERIES = 20; +#else + const int MAX_NUM_OF_SERIES = -1; +#endif // _DEBUG + +const unsigned int NUM_OF_CATEGORIES = 6; +const int AVERAGING_LEVEL = 5; +const float EPS=1e-6; + +const float NOISE_STD=0.001; +const int FREQ_OF_TEST=1; +const float GRADIENT_CLIPPING=50; +const float BIG_FLOAT=1e38;//numeric_limits::max(); +const bool PRINT_DIAGN = false; +const float TAU = PERCENTILE / 100.; +const float TRAINING_TAU = TRAINING_PERCENTILE / 100.; + +string INPUT_PATH = DATA_DIR + VARIABLE + "-train.csv"; +string INFO_INPUT_PATH = DATA_DIR + "M4-info.csv"; + + +Expression squash(const Expression& x) { + return log(x); +} +float squash(float x) { + return log(x); +} + +Expression expand(const Expression& x) { + return exp(x); +} +float expand(float x) { + return exp(x); +} + + +#if defined USE_ODBC + void HandleDiagnosticRecord(SQLHANDLE hHandle, + SQLSMALLINT hType, + RETCODE RetCode); + + #if defined _WINDOWS + WCHAR* pwszConnStr = L"DSN=slawek"; + #else + SQLCHAR* pwszConnStr = (SQLCHAR*) "DSN=slawek"; + #endif + #define TRYODBC(h, ht, x) { RETCODE rc = x;\ + if (rc != SQL_SUCCESS) \ + { \ + HandleDiagnosticRecord (h, ht, rc); \ + } \ + if (rc == SQL_ERROR) \ + { \ + fprintf(stderr, "Error in " #x "\n"); \ + if (hStmt) { \ + SQLFreeHandle(SQL_HANDLE_STMT, hStmt); \ + } \ + if (hDbc) { \ + SQLDisconnect(hDbc); \ + SQLFreeHandle(SQL_HANDLE_DBC, hDbc); \ + } \ + if (hEnv) { \ + SQLFreeHandle(SQL_HANDLE_ENV, hEnv); \ + } \ + exit(-1); \ + } \ + } + +#endif + +struct M4TS {//storing series data + vector < float> categories_vect; + vector vals; + vector testVals;//empty, unless LBACK>0 + int n; + + M4TS(string category, stringstream &line_stream) { + array categories = { 0,0,0,0,0,0 }; + if (category == "Demographic") + categories[0] = 1; + else if (category == "Finance") + categories[1] = 1; + else if (category == "Industry") + categories[2] = 1; + else if (category == "Macro") + categories[3] = 1; + else if (category == "Micro") + categories[4] = 1; + else if (category == "Other") + categories[5] = 1; + else { + cerr << "unknown category?"; + exit(-1); + } + for (int i = 0; i < NUM_OF_CATEGORIES; i++) + categories_vect.push_back(categories[i]); + + string tmp_str; + while(getline(line_stream, tmp_str, ',' )) { + string val_str; + for (const auto c : tmp_str) { + if (c != '\"' && c != '\r') //remove quotes and very occasional double end of line + val_str.push_back(c); + } + if (val_str.size() == 0) + break; + float val=(atof(val_str.c_str())); + vals.push_back(val); + } + if (LBACK > 0) { //extract last OUTPUT_SIZE points as the test values + if (vals.size() > LBACK*OUTPUT_SIZE) { + auto first = vals.begin() + vals.size() - LBACK*OUTPUT_SIZE; + auto pastLast = vals.begin() + vals.size() - (LBACK-1)*OUTPUT_SIZE; + vector input_vect(first, pastLast); //[first,pastLast) + testVals= input_vect; + vals.resize(vals.size() - LBACK*OUTPUT_SIZE); //remove last LBACK*OUTPUT_SIZE elements + n = vals.size(); + } else + n = 0; + } else { + n = vals.size(); + } + if (n > MAX_SERIES_LENGTH) {//chop long series + vals.erase(vals.begin(), vals.begin() + (n-MAX_SERIES_LENGTH)); //remove some early data + n = vals.size(); + } + } + M4TS(){}; +}; + +#if defined USE_ODBC +void HandleDiagnosticRecord(SQLHANDLE hHandle, + SQLSMALLINT hType, + RETCODE RetCode); +#endif + + + +struct AdditionalParams {//Per series, important + Parameter levSm; + Parameter sSm; + array initSeasonality; + Parameter sSm2; + array initSeasonality2; +}; +struct AdditionalParamsF {//Used for storing diagnostics + float levSm; + float sSm; + array initSeasonality; + float sSm2; + array initSeasonality2; + vector levels; + vector seasons; + vector seasons2; +}; + + +array perfToRanking (array perf_arr) { + array index; + + for (int itop=0; itop losses; + for (unsigned int indx = 0; indx as_scalar(forec.value())) + losses.push_back((actual - forec)*TRAINING_TAU); + else + losses.push_back((actual - forec)*(TRAINING_TAU - 1)); + } + return sum(losses) / OUTPUT_SIZE * 2; +} + + +// weighted quantile Loss, used just for diagnostics, if if LBACK>0 and PERCENTILE!=50 +float wQuantLoss(vector& out_vect, vector& actuals_vect) { + float sumf = 0; float suma=0; + for (unsigned int indx = 0; indx forec) + sumf = sumf + (actual - forec)*TAU; + else + sumf = sumf + (actual - forec)*(TAU - 1); + } + return sumf / suma * 200; +} + +//used just for diagnostics, if LBACK>0 and PERCENTILE==50 +float sMAPE(vector& out_vect, vector& actuals_vect) { + float sumf = 0; + for (unsigned int indx = 0; indx& out_vect, vector& actuals_vect) { + if (PERCENTILE==50) + return sMAPE(out_vect, actuals_vect); + else + return wQuantLoss(out_vect, actuals_vect); +} + +int main(int argc, char** argv) { + dynet::initialize(argc, argv); + + int ibigOffset = 0; + if (argc == 2) + ibigOffset = atoi(argv[1]); + + cout << VARIABLE<<" "< 0) { + cout<<"Warning. LEVEL_VARIABILITY_PENALTY has to be equal zero if SEASONALITY_NUM==0"<tm_year+1900; + now_ts.month=now->tm_mon+1; + now_ts.day=now->tm_mday; + now_ts.hour=now->tm_hour; + now_ts.minute=now->tm_min; + now_ts.second=now->tm_sec; + now_ts.fraction=0; //reportedly needed + + const int OFFSET_TO_FIRST_ACTUAL=5; + string insertQuery_str = "insert into M72nn(run, LBack, ibig, series, epoch "; + for (int iq = 1; iq <= OUTPUT_SIZE; iq++) { + stringstream ss; + ss << iq; + string iq_str = ss.str(); + insertQuery_str = insertQuery_str +", actual"+iq_str+", forec" + iq_str; + } + insertQuery_str = insertQuery_str +", trainingError, variable, n, dateTimeOfPrediction) \ + values(? , ? , ? , ? , ? "; + for (int iq = 1; iq <= OUTPUT_SIZE; iq++) { + insertQuery_str = insertQuery_str + ",?,?"; + } + insertQuery_str = insertQuery_str + ",?,?,?,?)"; + #if defined _WINDOWS + wstring insertQuery(insertQuery_str.begin(), insertQuery_str.end()); + SQLWCHAR* sqlQuery = (SQLWCHAR*)insertQuery.c_str(); + #else + SQLCHAR* sqlQuery =(SQLCHAR*)insertQuery_str.c_str(); + #endif + + SQLHENV hEnv = NULL; + SQLHDBC hDbc = NULL; + SQLHSTMT hStmt = NULL, hInsertStmt = NULL; + + if (SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv) == SQL_ERROR) { + fprintf(stderr, "Unable to allocate an environment handle\n"); + exit(-1); + } + TRYODBC(hEnv, + SQL_HANDLE_ENV, + SQLSetEnvAttr(hEnv, + SQL_ATTR_ODBC_VERSION, + (SQLPOINTER)SQL_OV_ODBC3, + 0)); + + // Allocate a connection + TRYODBC(hEnv, + SQL_HANDLE_ENV, + SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc)); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLDriverConnect(hDbc, + NULL, + pwszConnStr, + SQL_NTS, + NULL, + 0, + NULL, + SQL_DRIVER_COMPLETE)); + fprintf(stderr, "Connected!\n"); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLSetConnectAttr(hDbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, SQL_IS_INTEGER)); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hInsertStmt)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLPrepare(hInsertStmt, sqlQuery, SQL_NTS)); + + SQLLEN nullTerminatedStringOfRun = SQL_NTS; + SQLLEN nullTerminatedStringOfSeries = SQL_NTS; + SQLLEN nullTerminatedStringOfVariable = SQL_NTS; + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)run.c_str(), 0, &nullTerminatedStringOfRun)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&LBACK, 0, NULL)); + + // variable, n, dateTimeOfPrediction + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL+2*OUTPUT_SIZE+2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)VARIABLE.c_str(), 0, &nullTerminatedStringOfVariable)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE + 4, SQL_PARAM_INPUT, SQL_C_TYPE_TIMESTAMP, SQL_TYPE_TIMESTAMP, 0, 0, &now_ts, sizeof(TIMESTAMP_STRUCT), NULL)); +#endif + + random_device rd; // only used once to initialise (seed) engine + mt19937 rng(rd()); // random-number engine used (Mersenne-Twister in this case) + + vector series_vect; + unordered_map allSeries_map(30000);//max series in one chunk would be 24k for yearly series + unordered_map seriesCategories_map(120000);//100k series + + ifstream infoFile(INFO_INPUT_PATH); + string line; + getline(infoFile, line); //header + while (getline(infoFile, line)) { + //cout << string( line)<= MIN_SERIES_LENGTH) { + series_vect.push_back(series); + allSeries_map[series] = m4Obj; + } + if (MAX_NUM_OF_SERIES>0 && series_vect.size()>=MAX_NUM_OF_SERIES) + break; + } + cout << "num of series:" << series_vect.size() << endl; + + unsigned int series_len=(unsigned int)series_vect.size(); + uniform_int_distribution uniOnSeries(0,series_len-1); // closed interval [a, b] + uniform_int_distribution uniOnNets(0,NUM_OF_NETS-1); // closed interval [a, b] + + unordered_map, AVERAGING_LEVEL+1>, NUM_OF_NETS>> testResults_map((int)series_len*1.5);//per series, etc... + unordered_map> finalResults_map((int)series_len*1.5);//per series + set diagSeries; + + unordered_map> netRanking_map; + for (int ibig=0; ibig perfValid_vect; + int epochOfLastChangeOfLRate = -1; + +#if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&ibigDb, 0, NULL)); +#endif + + //create nets + array paramsCollection_arr;//per net + array perSeriesParamsCollection_arr;//per net + array trainers_arr; + array perSeriesTrainers_arr; + + + #if defined USE_RESIDUAL_LSTM + array, NUM_OF_NETS> rnnStack_arr; + #elif defined USE_ATTENTIVE_LSTM + array, NUM_OF_NETS> rnnStack_arr; + #else + array, NUM_OF_NETS> rnnStack_arr; + #endif + + array MLPW_parArr; + array MLPB_parArr; + array adapterW_parArr; + array adapterB_parArr; + + //this is not a history, this is the real stuff + unordered_map* > additionalParams_mapOfArr((int)series_len*1.5); //per series, per net + for (auto iter = series_vect.begin() ; iter != series_vect.end(); ++iter) { + string series=*iter; + additionalParams_mapOfArr[series]=new array(); + } + + for (int inet=0; inetclip_threshold = GRADIENT_CLIPPING; + perSeriesTrainers_arr[inet]=new AdamTrainer (perSeriesPC, INITIAL_LEARNING_RATE*PER_SERIES_LR_MULTIP, 0.9, 0.999, EPS); + perSeriesTrainers_arr[inet]->clip_threshold = GRADIENT_CLIPPING; + + auto& rNNStack=rnnStack_arr[inet]; + #if defined USE_RESIDUAL_LSTM + rNNStack.emplace_back(ResidualDilatedLSTMBuilder(dilations[0], INPUT_SIZE + NUM_OF_CATEGORIES, STATE_HSIZE, pc)); + for (int il = 1; il* additionalParams_arr=additionalParams_mapOfArr[series]; + additionalParams_arr->at(inet).levSm=perSeriesPC.add_parameters({1}, 0.5);//per series, per net + if (SEASONALITY_NUM > 0) { + additionalParams_arr->at(inet).sSm = perSeriesPC.add_parameters({ 1 }, 0.5); + for (int isea = 0; iseaat(inet).initSeasonality[isea] = perSeriesPC.add_parameters({ 1 }, 0.5); + } + if (SEASONALITY_NUM > 1) { + additionalParams_arr->at(inet).sSm2 = perSeriesPC.add_parameters({ 1 }, 0.5); + for (int isea = 0; iseaat(inet).initSeasonality2[isea] = perSeriesPC.add_parameters({ 1 }, 0.5); + } + } + }//seting up, through nets + + //history of params. Series->[NUM_OF_NETS,NUM_OF_TRAIN_EPOCHS] + unordered_map, NUM_OF_NETS>*> historyOfAdditionalParams_map((int)series_len*1.5); + for (auto iter = series_vect.begin() ; iter != series_vect.end(); ++iter) { + string series=*iter; + historyOfAdditionalParams_map[series]=new array, NUM_OF_NETS>(); + } + + //first assignment. Yes, we are using vector , so the very first time the duplicates are possible. But a set can't be sorted + array, NUM_OF_NETS> seriesAssignment;//every net has an array + for (int j=0; j> netPerf_map; + for (int inet=0; inetlearning_rate = LEARNING_RATES.at(iEpoch); + if (inet==0) + cout << "changing LR to:" << trainer->learning_rate << endl; + perSeriesTrainer->learning_rate = LEARNING_RATES.at(iEpoch)*PER_SERIES_LR_MULTIP; + } + + auto& rNNStack=rnnStack_arr[inet]; + Parameter& MLPW_par = MLPW_parArr[inet]; + Parameter& MLPB_par = MLPB_parArr[inet]; + Parameter& adapterW_par=adapterW_parArr[inet]; + Parameter& adapterB_par=adapterB_parArr[inet]; + + vector oneNetAssignments=seriesAssignment[inet]; + random_shuffle (oneNetAssignments.begin(), oneNetAssignments.end()); + + vector epochLosses; + vector forecLosses; vector levVarLosses; vector stateLosses; + for (auto iter = oneNetAssignments.begin() ; iter != oneNetAssignments.end(); ++iter) { + string series=*iter; + auto m4Obj=allSeries_map[series]; + + ComputationGraph cg; + for (int il=0; ilat(inet); + array& historyOfAdditionalParams_arr=historyOfAdditionalParams_map[series]->at(inet); + + Expression MLPW_ex,MLPB_ex; + if (ADD_NL_LAYER) { + MLPW_ex = parameter(cg, MLPW_par); + MLPB_ex = parameter(cg, MLPB_par); + } + Expression adapterW_ex=parameter(cg, adapterW_par); + Expression adapterB_ex=parameter(cg, adapterB_par); + + Expression levSmSerNet0_ex= parameter(cg, additionalParams.levSm); + Expression levSm_ex = logistic(levSmSerNet0_ex); + + vector season_exVect;//vector, because we do not know how long the series is + Expression sSm_ex; + if (SEASONALITY_NUM > 0) { + Expression sSmSerNet0_ex= parameter(cg, additionalParams.sSm); + sSm_ex = logistic(sSmSerNet0_ex); + + for (int isea = 0; isea season2_exVect;//vector, because we do not know how long the series is + Expression sSm2_ex; + if (SEASONALITY_NUM > 1) { + Expression sSm2SerNet0_ex= parameter(cg, additionalParams.sSm2); + sSm2_ex = logistic(sSm2SerNet0_ex); + + for (int isea = 0; isea logDiffOfLevels_vect; + vector levels_exVect; + if (SEASONALITY_NUM == 0) { + levels_exVect.push_back(input(cg, m4Obj.vals[0])); + for (int i = 1; iSEASONALITY) { + unsigned long startSeasonalityIndx = season_exVect.size() - SEASONALITY; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY); i++) + season_exVect.push_back(season_exVect[startSeasonalityIndx + i]); + } + } + else if (SEASONALITY_NUM == 2) { + Expression lev = cdiv(input(cg, m4Obj.vals[0]), season_exVect[0] * season2_exVect[0]); + levels_exVect.push_back(lev); + for (int i = 1; iSEASONALITY) { + unsigned long startSeasonalityIndx = season_exVect.size() - SEASONALITY; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY); i++) + season_exVect.push_back(season_exVect[startSeasonalityIndx + i]); + } + //if prediction horizon is larger than seasonality, so we need to repeat some of the seasonality factors + if (OUTPUT_SIZE>SEASONALITY2) { + unsigned long startSeasonalityIndx = season2_exVect.size() - SEASONALITY2; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY2); i++) + season2_exVect.push_back(season2_exVect[startSeasonalityIndx + i]); + } + } + else { + cerr<<"SEASONALITY_NUM="<< SEASONALITY_NUM; + exit(-1); + } + + Expression levelVarLoss_ex; + if (LEVEL_VARIABILITY_PENALTY > 0) { + vector levelVarLoss_v; + for (int i = 1; i losses;//losses of steps through single time series + for (int i=INPUT_SIZE-1; i<(m4Obj.n- OUTPUT_SIZE); i++) { + vector::const_iterator first = m4Obj.vals.begin() + i + 1 - INPUT_SIZE; + vector::const_iterator pastLast = m4Obj.vals.begin() + i + 1; //not including the last one + vector input_vect(first, pastLast); //[first,pastLast) + + first = m4Obj.vals.begin() + i + 1; + pastLast = m4Obj.vals.begin() + i + 1 + OUTPUT_SIZE; + vector labels_vect(first, pastLast); //[first,pastLast) + + Expression input1_ex = input(cg, { INPUT_SIZE }, input_vect); + Expression labels1_ex = input(cg, { OUTPUT_SIZE }, labels_vect); + + if (SEASONALITY_NUM > 0 ) { + vector::const_iterator firstE = season_exVect.begin() +i+1-INPUT_SIZE; + vector::const_iterator pastLastE = season_exVect.begin() +i+1; //not including the last one + vector inputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + inputSeasonality_ex=concatenate(inputSeasonality_exVect); + + firstE = season_exVect.begin() + i + 1; + pastLastE = season_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + outputSeasonality_ex = concatenate(outputSeasonality_exVect); + + input1_ex = cdiv(input1_ex, inputSeasonality_ex); // input deseasonalization + labels1_ex = cdiv(labels1_ex, outputSeasonality_ex); //output deseasonalization + } + if (SEASONALITY_NUM > 1) { + vector::const_iterator firstE = season2_exVect.begin() + i + 1 - INPUT_SIZE; + vector::const_iterator pastLastE = season2_exVect.begin() + i + 1; //not including the last one + vector inputSeasonality2_exVect(firstE, pastLastE); //[first,pastLast) + inputSeasonality2_ex = concatenate(inputSeasonality2_exVect); + + firstE = season2_exVect.begin() + i + 1; + pastLastE = season2_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality2_exVect(firstE, pastLastE); //[first,pastLast) + Expression outputSeasonality2_ex = concatenate(outputSeasonality2_exVect); + + input1_ex = cdiv(input1_ex, inputSeasonality2_ex); //input deseasonalization + labels1_ex = cdiv(labels1_ex, outputSeasonality2_ex); //output deseasonalization + } + + vector joinedInput_ex; + joinedInput_ex.emplace_back(noise(squash(cdiv(input1_ex, levels_exVect[i])), NOISE_STD)); //input normalization+noise + joinedInput_ex.emplace_back(input(cg, { NUM_OF_CATEGORIES }, m4Obj.categories_vect)); + Expression input_ex = concatenate(joinedInput_ex); + + Expression labels_ex = squash(cdiv(labels1_ex, levels_exVect[i]));//output normalization + + Expression rnn_ex; + try { + rnn_ex = rNNStack[0].add_input(input_ex); + for (int il=1; il=INPUT_SIZE+MIN_INP_SEQ_LEN) + losses.push_back(loss_ex); + }//through points of a series + + Expression forecLoss_ex= average(losses); + Expression loss_exp = forecLoss_ex; + + float levVarLoss=0; + if (LEVEL_VARIABILITY_PENALTY > 0) { + Expression levelVarLossP_ex = levelVarLoss_ex*LEVEL_VARIABILITY_PENALTY; + levVarLoss = as_scalar(levelVarLossP_ex.value()); + levVarLosses.push_back(levVarLoss); + loss_exp= loss_exp + levelVarLossP_ex; + } + + float cStateLoss=0; + if (C_STATE_PENALTY>0) { + vector cStateLosses_vEx; + for (int irnn = 0; irnn < rNNStack.size(); irnn++) + for (int it = 0; itupdate();//update shared weights + perSeriesTrainer->update(); //update params of this series only + } catch (exception& e) { //long diagnostics for this unlikely event :-) + cerr<<"cought exception while doing "< maxAbs) { + maxAbs = abs(state[iv]); + timeOfMax=it; + layerOfMax=il; + chunkOfMax= irnn; + } + } + } //through layers/states + } //through time + } //through chunks + + cout << "levSm:" << as_scalar(levSm_ex.value()) << endl; + if (SEASONALITY_NUM > 0) + cout << "sSm:" << as_scalar(sSm_ex.value()) << endl; + if (SEASONALITY_NUM > 1) + cout << "sSm2:" << as_scalar(sSm2_ex.value()) << endl; + cout << "max abs:" << maxAbs <<" at time:"<< timeOfMax<<" at layer:"<< layerOfMax<<" and chunk:"<< chunkOfMax< 0) { + histAdditionalParams.sSm=as_scalar(sSm_ex.value()); + for (int isea = 0; isea 1) { + histAdditionalParams.sSm2 = as_scalar(sSm2_ex.value()); + for (int isea=0; isea 0 || C_STATE_PENALTY > 0) { + float averageForecLoss = accumulate(forecLosses.begin(), forecLosses.end(), 0.0) / forecLosses.size(); + cout << " forec loss:" << averageForecLoss * 100; + } + if (LEVEL_VARIABILITY_PENALTY > 0) { + float averagelevVarLoss = accumulate(levVarLosses.begin(), levVarLosses.end(), 0.0) / levVarLosses.size(); + cout << " levVar loss:" << averagelevVarLoss * 100; + } + if (C_STATE_PENALTY > 0) { + float averageStateLoss = accumulate(stateLosses.begin(), stateLosses.end(), 0.0) / stateLosses.size(); + cout << " state loss:" << averageStateLoss * 100; + } + cout<at(inet); + Expression MLPW_ex, MLPB_ex; + if (ADD_NL_LAYER) { + MLPW_ex = parameter(cg, MLPW_par); + MLPB_ex = parameter(cg, MLPB_par); + } + Expression adapterW_ex=parameter(cg, adapterW_par); + Expression adapterB_ex=parameter(cg, adapterB_par); + + Expression levSmSerNet0_ex = parameter(cg, additionalParams.levSm); + Expression levSm_ex = logistic(levSmSerNet0_ex); + + vector season_exVect;//vector, because we do not know how long the series is + Expression sSm_ex; + if (SEASONALITY_NUM > 0) { + Expression sSmSerNet0_ex= parameter(cg, additionalParams.sSm); + sSm_ex = logistic(sSmSerNet0_ex); + + for (int isea = 0; isea season2_exVect;//vector, because we do not know how long the series is + Expression sSm2_ex; + if (SEASONALITY_NUM > 1) { + Expression sSm2SerNet0_ex= parameter(cg, additionalParams.sSm2); + sSm2_ex = logistic(sSm2SerNet0_ex); + + for (int isea = 0; isea levels_exVect; + if (SEASONALITY_NUM == 0) { + levels_exVect.push_back(input(cg, m4Obj.vals[0])); + for (int i = 1; i0 then this is shortened, so it always contains data awe have right to access + Expression newLevel_ex = m4Obj.vals[i] * cdiv(levSm_ex, season_exVect[i]) + (1 - levSm_ex)*levels_exVect[i - 1]; + levels_exVect.push_back(newLevel_ex); + + Expression newSeason_ex = m4Obj.vals[i] * cdiv(sSm_ex, newLevel_ex) + (1 - sSm_ex)*season_exVect[i]; + season_exVect.push_back(newSeason_ex); + } + + //if prediction horizon is larger than seasonality, so we need to repeat some of the seasonality factors + if (OUTPUT_SIZE>SEASONALITY) { + unsigned long startSeasonalityIndx = season_exVect.size() - SEASONALITY; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY); i++) + season_exVect.push_back(season_exVect[startSeasonalityIndx + i]); + } + } + else if (SEASONALITY_NUM == 2) { + Expression lev = cdiv(input(cg, m4Obj.vals[0]), season_exVect[0] * season2_exVect[0]); + levels_exVect.push_back(lev); + for (int i = 1; iSEASONALITY) { + unsigned long startSeasonalityIndx = season_exVect.size() - SEASONALITY; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY); i++) + season_exVect.push_back(season_exVect[startSeasonalityIndx + i]); + } + //if prediction horizon is larger than seasonality, so we need to repeat some of the seasonality factors + if (OUTPUT_SIZE>SEASONALITY2) { + unsigned long startSeasonalityIndx = season2_exVect.size() - SEASONALITY2; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY2); i++) + season2_exVect.push_back(season2_exVect[startSeasonalityIndx + i]); + } + } + else { + cerr<<"SEASONALITY_NUM="<< SEASONALITY_NUM; + exit(-1); + } + + + Expression inputSeasonality_ex; Expression inputSeasonality2_ex; + Expression outputSeasonality_ex; Expression outputSeasonality2_ex; + vector losses;//losses of steps through single time series + Expression out_ex;//we declare it here, bcause the last one will be the forecast + for (int i=INPUT_SIZE-1; i::const_iterator first = m4Obj.vals.begin() + i + 1 - INPUT_SIZE; + vector::const_iterator pastLast = m4Obj.vals.begin() + i + 1; //not including the last one + vector input_vect(first, pastLast); //[first,pastLast) + Expression input1_ex = input(cg, { INPUT_SIZE }, input_vect); + + if (SEASONALITY_NUM > 0 ) { + vector::const_iterator firstE = season_exVect.begin() +i+1-INPUT_SIZE; + vector::const_iterator pastLastE = season_exVect.begin() +i+1; //not including the last one + vector inputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + inputSeasonality_ex=concatenate(inputSeasonality_exVect); + input1_ex = cdiv(input1_ex, inputSeasonality_ex); // input deseasonalization + } + if (SEASONALITY_NUM > 1) { + vector::const_iterator firstE = season2_exVect.begin() + i + 1 - INPUT_SIZE; + vector::const_iterator pastLastE = season2_exVect.begin() + i + 1; //not including the last one + vector inputSeasonality2_exVect(firstE, pastLastE); //[first,pastLast) + inputSeasonality2_ex = concatenate(inputSeasonality2_exVect); + input1_ex = cdiv(input1_ex, inputSeasonality2_ex); //input deseasonalization + } + + vector joinedInput_ex; + joinedInput_ex.emplace_back(noise(squash(cdiv(input1_ex, levels_exVect[i])), NOISE_STD)); //input normalization+noise + joinedInput_ex.emplace_back(input(cg, { NUM_OF_CATEGORIES }, m4Obj.categories_vect)); + Expression input_ex = concatenate(joinedInput_ex); + + Expression rnn_ex; + try { + rnn_ex = rNNStack[0].add_input(input_ex); + for (int il=1; il::const_iterator first = m4Obj.vals.begin() + i + 1; + vector::const_iterator pastLast = m4Obj.vals.begin() + i + 1 + OUTPUT_SIZE; + vector labels_vect(first, pastLast); //[first,pastLast) + Expression labels1_ex = input(cg, { OUTPUT_SIZE }, labels_vect); + + if (SEASONALITY_NUM > 0) { + vector::const_iterator firstE = season_exVect.begin() + i + 1; + vector::const_iterator pastLastE = season_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + outputSeasonality_ex = concatenate(outputSeasonality_exVect); + labels1_ex = cdiv(labels1_ex, outputSeasonality_ex); //output deseasonalization + } + if (SEASONALITY_NUM > 1) { + vector::const_iterator firstE = season2_exVect.begin() + i + 1; + vector::const_iterator pastLastE = season2_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality2_exVect(firstE, pastLastE); //[first,pastLast) + Expression outputSeasonality2_ex = concatenate(outputSeasonality2_exVect); + labels1_ex = cdiv(labels1_ex, outputSeasonality2_ex); //output deseasonalization + } + Expression labels_ex = squash(cdiv(labels1_ex, levels_exVect[i]));//output normalization + + Expression loss_ex = pinBallLoss(out_ex, labels_ex); + if (i>=INPUT_SIZE+MIN_INP_SEQ_LEN) + losses.push_back(loss_ex); //training area losses + } + + if (i==(m4Obj.n-1)) {//validation loss + out_ex=expand(out_ex)*levels_exVect[i];//back to original scale + if (SEASONALITY_NUM > 0 ) { + vector::const_iterator firstE = season_exVect.begin() + i + 1; + vector::const_iterator pastLastE = season_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + outputSeasonality_ex = concatenate(outputSeasonality_exVect); + out_ex = cmult(out_ex, outputSeasonality_ex);//reseasonalize + } + if (SEASONALITY_NUM > 1 ) { + vector::const_iterator firstE = season2_exVect.begin() + i + 1; + vector::const_iterator pastLastE = season2_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality2_exVect(firstE, pastLastE); //[first,pastLast) + Expression outputSeasonality2_ex = concatenate(outputSeasonality2_exVect); + out_ex = cmult(out_ex, outputSeasonality2_ex);//reseasonalize + } + //we do not need the matching label here, because we do not bother calculate valid losses of each net across all series. + //We care about best and topn performance + } + }//end of going through all point of a series + + Expression loss_exp = average(losses); + float loss = as_scalar(cg.forward(loss_exp));//training loss of a single series + netPerf_map[series][inet]=loss; + + //unordered_map, AVERAGING_LEVEL+1>, NUM_OF_NETS>, BIG_LOOP>> testResults_map((int)series_len*1.5);//per series, big loop, etc... + //No epoch here, because this will just reflect the current (latest) situation - the last few epochs + vector out_vect=as_vector(out_ex.value()); + testResults_map[series][inet][iEpoch%AVERAGING_LEVEL]=out_vect; + if (iEpoch>=AVERAGING_LEVEL && iEpoch % FREQ_OF_TEST==0) { + vector firstForec=testResults_map[series][inet][0]; + testResults_map[series][inet][AVERAGING_LEVEL]=firstForec; + for (int ii=1; ii nextForec=testResults_map[series][inet][ii]; + for (int iii=0; iii0 && iEpoch % FREQ_OF_TEST==0) { + //now that we have saved outputs of all nets on all series, let's calc how best and topn combinations performed during current epoch. + vector bestEpochLosses; + vector bestEpochAvgLosses; + vector topnEpochLosses; + vector topnEpochAvgLosses; + + for (auto iter = series_vect.begin() ; iter != series_vect.end(); ++iter) { + string series=*iter; + auto m4Obj=allSeries_map[series]; + +#if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)series.c_str(), 0, &nullTerminatedStringOfSeries)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE + 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&m4Obj.n, 0, NULL)); +#endif + + float avgLoss; + vector avgLatest; + vector avgAvg; + + for (int itop=0; itop 0) { + float qLoss = errorFunc(testResults_map[series][inet][iEpoch%AVERAGING_LEVEL], m4Obj.testVals); + bestEpochLosses.push_back(qLoss); + } + avgLatest=testResults_map[series][inet][iEpoch%AVERAGING_LEVEL]; //used later for calculating topn loss + + if (iEpoch>=AVERAGING_LEVEL) { + if (LBACK > 0) { + float qLoss = errorFunc(testResults_map[series][inet][AVERAGING_LEVEL], m4Obj.testVals); + bestEpochAvgLosses.push_back(qLoss); + } + avgAvg=testResults_map[series][inet][AVERAGING_LEVEL]; + } + } else { + for (int iii=0; iii=AVERAGING_LEVEL) + avgAvg[iii]+=testResults_map[series][inet][AVERAGING_LEVEL][iii]; + } + } + }//through topn + + for (int iii=0; iii 0) { + float qLoss = errorFunc(avgLatest, m4Obj.testVals); + topnEpochLosses.push_back(qLoss); + } + + if (iEpoch>=AVERAGING_LEVEL) { + for (int iii = 0; iii 0) { +#if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE + 1, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_FLOAT, 0, 0, (SQLPOINTER)&avgLoss, 0, NULL)); + + for (int iii=0; iii 0) { + float bestEpochLoss=accumulate( bestEpochLosses.begin(), bestEpochLosses.end(), 0.0)/bestEpochLosses.size(); + float topnEpochLoss=accumulate( topnEpochLosses.begin(), topnEpochLosses.end(), 0.0)/topnEpochLosses.size(); + cout<=AVERAGING_LEVEL) { + float bestEpochAvgLoss=accumulate( bestEpochAvgLosses.begin(), bestEpochAvgLosses.end(), 0.0)/bestEpochAvgLosses.size(); + float topnEpochAvgLoss=accumulate( topnEpochAvgLosses.begin(), topnEpochAvgLosses.end(), 0.0)/topnEpochAvgLosses.size(); + cout<<" bestAvg:"<> netRanking_map + netRanking_map[series]=perfToRanking(netPerf_map[series]); + + for (int itop=0; itop diagSeries; + for (int i=0; i<1; i++) {//add a few normal ones + int irand=uniOnSeries(rng); + diagSeries.insert(series_vect[irand]); + } + for(auto series : diagSeries) { + cout<at(inet); + for (int iEpoch=0; iEpoch 0 ) { + cout<<"sSm:"<at(inet); + for (int iEpoch=0; iEpoch 1 ) { + cout<<"sSm2:"<at(inet); + for (int iEpoch=0; iEpochat(inet); + for (int iEpoch = 0; iEpoch0) { + cout << "levels:" << iEpoch<<" "; + for (int iv = 0; iv 0 ) { + cout << "seasons:" << iEpoch<<" "; + for (int iv = 0; iv 1 ) { + cout << "seasons2:" << iEpoch<<" "; + for (int iv = 0; iv 0 +start 10 +start 20 +start 30 +on 4-core computer. +In this setup, learning and fitting would be repeated 4*3 times, probably unnecessarily too many, 6-8 independent runs should be enough for a good ensemble. +Therefore if running on say 8 core machine , one can extend the above script to 8 concurrent executions and reduce BIG_LOOP to 1. +(Creating final forecasts is done in a supplied R script) + +There are four blocks of parameters below, one active (starting with //PARAMS--------------) and three inactive. +These blocks are as they were during the final forecasting run. You need comment/uncomment to have one block of interest active. +*/ + + +//#define USE_ODBC +//define USE_ODBC if you want to +// 1. run the program in backtesting mode (which means you also need to set LBACK>0 below. Read the comment below. +// 2. save forecasts to a datatabase. Mysql and SQL Server were tested. The table creation and some other scripts should be found in \sql directory of the source code. +// Of course setting up ODBC is not that simple, :-), e.g. you need to create DSN=slawek, that points to a database with the output table. +// Saving to the db is convenient, but not necessary - all forecasts are always saved to as csv files in automatically created subdirectory (sorry sometimes two directories, so you have to copy :-)) of OUTPUT_DIR +//If saving to database you need to modify run varaible, for each new run, otherwise you will get the table key error. + +#include "dynet/dynet.h" +#include "dynet/training.h" +#include "dynet/expr.h" +#include "dynet/io.h" +#include "dynet/model.h" +#include "dynet/nodes.h" +#include "dynet/expr.h" +#include "dynet/lstm.h" +#include "slstm.h" //my implementation of dilated LSTMs + + +#if defined USE_ODBC + #if defined _WINDOWS + #include + #endif + #include + #include +#endif + +#include +#include +#include +//#include +#include +#include +#include +#include + +using namespace std; +using namespace dynet; + +string DATA_DIR = "f:\\progs\\data\\M4DataSet\\"; //with the competition data csvs +//string DATA_DIR="/home/uber/progs/data/M4DataSet/"; +string OUTPUT_DIR = "f:\\progs\\data\\M4\\"; +//string OUTPUT_DIR="/home/uber/progs/data/M4/"; + +int LBACK = 0; //LBACK 0 means final mode: learning on all data and forecasting. LBACK=1 would move back by OUTPUT_SIZE, and forecast last known OUTPUT_SIZE points, for backtesting. LBACK could be a larger integer, but then number of series shrinks. + + +//PARAMS-------------- + +string VARIABLE = "Hourly"; +const string run0 = "(1,4)(24,168) LR=0.01, {25,3e-3f} EPOCHS=37, LVP=10, CSP=0"; +const string runL = "alpha5L " + run0; +const string runH = "alpha5H " + run0; + +//#define USE_RESIDUAL_LSTM +//#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = false; + +const int SEASONALITY_NUM = 2;//0 means no seasonality, for Yearly; 1 - single seasonality for Daily(7), Weekly(52); 2 - dual seaonality for Hourly (24,168) +const int SEASONALITY = 24; +const int SEASONALITY2 = 168; +vector> dilations = { { 1,4 },{ 24, 168 } }; + +const float INITIAL_LEARNING_RATE = 0.01f; +const map LEARNING_RATES = { { 20,1e-3f } }; //at which epoch we manually set them up to what +const float PER_SERIES_LR_MULTIP = 1; +const int NUM_OF_TRAIN_EPOCHS = 37; + +float LEVEL_VARIABILITY_PENALTY = 10; //Multiplier for L" penalty against wigglines of level vector. +const float C_STATE_PENALTY = 0; + +const unsigned int STATE_HSIZE = 40; + +const unsigned int INPUT_SIZE = 24; +const unsigned int OUTPUT_SIZE = 48; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = OUTPUT_SIZE + INPUT_SIZE + MIN_INP_SEQ_LEN + 2; //this is compared to n==(total length - OUTPUT_SIZE). Total length may be truncated by LBACK +const int MAX_SERIES_LENGTH = 53 * SEASONALITY2 + MIN_SERIES_LENGTH; //==all +const int TOPN = 4; + + +/* +string VARIABLE = "Weekly"; +const string run0 = "Att 4/5 (1,52) LR=1e-3 {15,3e-4f} EPOCHS=31, LVP=100 6y"; +const string runL = "alpha5L " + run0; +const string runH = "alpha5H " + run0; + +//#define USE_RESIDUAL_LSTM +#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = false; + +const int SEASONALITY_NUM = 1; //0 means no seasonality, for Yearly; 1 - single seasonality for Daily(7), Weekly(52); 2 - dual seaonality for Hourly (24,168) +const int SEASONALITY = 52; +const int SEASONALITY2 = 0; +vector> dilations = { { 1, 52 } }; + +const float INITIAL_LEARNING_RATE = 1e-3; +const map LEARNING_RATES = { { 15,3e-4f } }; //at which epoch we manually set them up to what +const float PER_SERIES_LR_MULTIP = 1; +const int NUM_OF_TRAIN_EPOCHS = 31; + +float LEVEL_VARIABILITY_PENALTY = 100; //Multiplier for L" penalty against wigglines of level vector. +const float C_STATE_PENALTY = 0; + +const unsigned int STATE_HSIZE = 40; + +const unsigned int INPUT_SIZE = 10; +const unsigned int OUTPUT_SIZE = 13; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = OUTPUT_SIZE + INPUT_SIZE + MIN_INP_SEQ_LEN + 2; //this is compared to n==(total length - OUTPUT_SIZE). Total length may be truncated by LBACK + //#Min. 1st Qu. Median Mean 3rd Qu. Max. + //#81 380 935 1023 1604 2598 +const int MAX_SERIES_LENGTH = 6 * SEASONALITY + MIN_SERIES_LENGTH; +const int TOPN = 4; +*/ + +/* + +string VARIABLE = "Daily"; +const string run0 = "4/5 (1,3)(7,14) LR=3e-4 {13,1e-4f} EPOCHS=21, LVP=100 13w"; +const string runL = "alpha5L " + run0; +const string runH = "alpha5H " + run0; + +//#define USE_RESIDUAL_LSTM +//#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER=false; + +const int SEASONALITY_NUM = 1; //0 means no seasonality, for Yearly; 1 - single seasonality for Daily(7), Weekly(52); 2 - dual seaonality for Hourly (24,168) +const int SEASONALITY = 7; +const int SEASONALITY2 = 0; +vector> dilations = { { 1,3 },{ 7, 14 } }; + +const float INITIAL_LEARNING_RATE = 3e-4; +const map LEARNING_RATES = { { 13,1e-4f } }; //at which epoch we manually set them up to what +const float PER_SERIES_LR_MULTIP = 1; +const int NUM_OF_TRAIN_EPOCHS = 21; + +float LEVEL_VARIABILITY_PENALTY = 100; //Multiplier for L" penalty against wigglines of level vector. +const float C_STATE_PENALTY = 0; + +const unsigned int STATE_HSIZE = 40; + +const unsigned int INPUT_SIZE = 7; +const unsigned int OUTPUT_SIZE = 14; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = OUTPUT_SIZE + INPUT_SIZE + MIN_INP_SEQ_LEN + 2; //this is compared to n==(total length - OUTPUT_SIZE). Total length may be truncated by LBACK + //#Min. 1st Qu. Median Mean 3rd Qu. Max. + //##93 323 2940 2357 4197 9919 +const int MAX_SERIES_LENGTH = 13 * SEASONALITY + MIN_SERIES_LENGTH; +const int TOPN = 4; +*/ + +/* +string VARIABLE = "Yearly"; +const string run0 = "Att NL 4/5 (1,6) LR=1e-4 {17,3e-5}{22,1e-5} EPOCHS=29, 60*"; +const string runL = "alpha5L " + run0; +const string runH = "alpha5H " + run0; + +//#define USE_RESIDUAL_LSTM +#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = true; + +const int SEASONALITY_NUM = 0; //0 means no seasonality +const int SEASONALITY = 1; //for no seasonality, set it to 1, important +const int SEASONALITY2 = 0; +vector> dilations = { { 1,6 } }; + +const float INITIAL_LEARNING_RATE = 1e-4; +const map LEARNING_RATES = { { 17,3e-5 },{ 22,1e-5 } }; //at which epoch we manually set them up to what +const float PER_SERIES_LR_MULTIP = 1; +const int NUM_OF_TRAIN_EPOCHS = 29; + +float LEVEL_VARIABILITY_PENALTY = 0; //Multiplier for L" penalty against wigglines of level vector. +const float C_STATE_PENALTY = 0; + +const unsigned int STATE_HSIZE = 30; + +const unsigned int INPUT_SIZE = 4; +const unsigned int OUTPUT_SIZE = 6; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = OUTPUT_SIZE + INPUT_SIZE + MIN_INP_SEQ_LEN + 2; //this is compared to n==(total length - OUTPUT_SIZE). Total length may be truncated by LBACK + //#Min. 1st Qu. Median Mean 3rd Qu. Max. + //#13.00 20.00 29.00 31.32 40.00 835.00 +const int MAX_SERIES_LENGTH = 60 + MIN_SERIES_LENGTH; +const int TOPN = 4; +*/ + +const float ALPHA = 0.05; +const float TAUL = ALPHA / 2; +const float TAUH = 1 - TAUL; +const float ALPHA_MULTIP = 2 / ALPHA; + +const int BIG_LOOP = 3; +const int NUM_OF_NETS = 5; +const unsigned ATTENTION_HSIZE = STATE_HSIZE; + +#if defined _DEBUG + const int MAX_NUM_OF_SERIES = 20; +#else + const int MAX_NUM_OF_SERIES = -1; +#endif // _DEBUG + +const unsigned int NUM_OF_CATEGORIES = 6; +const int AVERAGING_LEVEL = 5; +const float EPS=1e-6; + +const float NOISE_STD=0.001; +const int FREQ_OF_TEST=1; +const float GRADIENT_CLIPPING=50; +const float BIG_FLOAT=1e38;//numeric_limits::max(); +const bool PRINT_DIAGN = false; + +string INPUT_PATH = DATA_DIR + VARIABLE + "-train.csv"; +string INFO_INPUT_PATH = DATA_DIR + "M4-info.csv"; + + +Expression squash(const Expression& x) { + return log(x); +} +float squash(float x) { + return log(x); +} + +Expression expand(const Expression& x) { + return exp(x); +} +float expand(float x) { + return exp(x); +} + + +#if defined USE_ODBC + void HandleDiagnosticRecord(SQLHANDLE hHandle, + SQLSMALLINT hType, + RETCODE RetCode); + + #if defined _WINDOWS + WCHAR* pwszConnStr = L"DSN=slawek"; + #else + SQLCHAR* pwszConnStr = (SQLCHAR*) "DSN=slawek"; + #endif + #define TRYODBC(h, ht, x) { RETCODE rc = x;\ + if (rc != SQL_SUCCESS) \ + { \ + HandleDiagnosticRecord (h, ht, rc); \ + } \ + if (rc == SQL_ERROR) \ + { \ + fprintf(stderr, "Error in " #x "\n"); \ + if (hStmt) { \ + SQLFreeHandle(SQL_HANDLE_STMT, hStmt); \ + } \ + if (hDbc) { \ + SQLDisconnect(hDbc); \ + SQLFreeHandle(SQL_HANDLE_DBC, hDbc); \ + } \ + if (hEnv) { \ + SQLFreeHandle(SQL_HANDLE_ENV, hEnv); \ + } \ + exit(-1); \ + } \ + } + +#endif + +struct M4TS {//storing series data + vector < float> categories_vect; + vector vals; + vector testVals;//empty, unless LBACK>0 + float meanAbsSeasDiff; + int n; + + M4TS(string category, stringstream &line_stream) { + array categories = { 0,0,0,0,0,0 }; + if (category == "Demographic") + categories[0] = 1; + else if (category == "Finance") + categories[1] = 1; + else if (category == "Industry") + categories[2] = 1; + else if (category == "Macro") + categories[3] = 1; + else if (category == "Micro") + categories[4] = 1; + else if (category == "Other") + categories[5] = 1; + else { + cerr << "unknown category?"; + exit(-1); + } + for (int i = 0; i < NUM_OF_CATEGORIES; i++) + categories_vect.push_back(categories[i]); + + string tmp_str; + while(getline(line_stream, tmp_str, ',' )) { + string val_str; + for (const auto c : tmp_str) { + if (c != '\"' && c != '\r') //remove quotes and very occasional double end of line + val_str.push_back(c); + } + if (val_str.size() == 0) + break; + float val=(atof(val_str.c_str())); + vals.push_back(val); + } + + meanAbsSeasDiff = 0; + float sumf = 0; + for (int ip = SEASONALITY; ip0) + meanAbsSeasDiff = sumf / (vals.size() - SEASONALITY); + + if (LBACK > 0) { //extract last OUTPUT_SIZE points as the test values + if (vals.size() > LBACK*OUTPUT_SIZE) { + auto first = vals.begin() + vals.size() - LBACK*OUTPUT_SIZE; + auto pastLast = vals.begin() + vals.size() - (LBACK-1)*OUTPUT_SIZE; + vector input_vect(first, pastLast); //[first,pastLast) + testVals= input_vect; + vals.resize(vals.size() - LBACK*OUTPUT_SIZE); //remove last LBACK*OUTPUT_SIZE elements + n = vals.size(); + } else + n = 0; + } else { + n = vals.size(); + } + if (n > MAX_SERIES_LENGTH) {//chop long series + vals.erase(vals.begin(), vals.begin() + (n-MAX_SERIES_LENGTH)); //remove some early data + n = vals.size(); + } + } + M4TS(){}; +}; + +#if defined USE_ODBC +void HandleDiagnosticRecord(SQLHANDLE hHandle, + SQLSMALLINT hType, + RETCODE RetCode); +#endif + +struct AdditionalParams {//Per series, important + Parameter levSm; + Parameter sSm; + array initSeasonality; + Parameter sSm2; + array initSeasonality2; +}; +struct AdditionalParamsF {//Used for storing diagnostics + float levSm; + float sSm; + array initSeasonality; + float sSm2; + array initSeasonality2; + vector levels; + vector seasons; + vector seasons2; +}; + + +array perfToRanking (array perf_arr) { + array index; + + for (int itop=0; itop losses; + for (unsigned int indx = 0; indx as_scalar(forecH.value())) + loss = loss + (actual - forecH)*ALPHA_MULTIP; + losses.push_back(loss); + } + return sum(losses) / OUTPUT_SIZE; +} + +// weighted quantile Loss +float wQuantLoss(vector& out_vect, vector& actuals_vect, float tau, int offset) {//used just for diagnostics, if if LBACK>0 and PERCENTILE!=50 + float sumf = 0; float suma = 0; + for (unsigned int indx = 0; indx forec) + sumf = sumf + (actual - forec)*tau; + else + sumf = sumf + (actual - forec)*(tau - 1); + } + return sumf / suma * 200; +} + +float errorFunc(vector& out_vect, vector& actuals_vect, float meanAbsSeasDiff) { + float sumf=0; + for (unsigned int indx = 0; indx forecH) + loss = loss + (actualf - forecH)*ALPHA_MULTIP; + sumf+=loss; + } + return sumf / (OUTPUT_SIZE*meanAbsSeasDiff); +} + + + +int main(int argc, char** argv) { + dynet::initialize(argc, argv); + + int ibigOffset = 0; + if (argc == 2) + ibigOffset = atoi(argv[1]); + + cout< 0) { + cout<<"Warning. LEVEL_VARIABILITY_PENALTY has to be equal zero if SEASONALITY_NUM==0"<tm_year+1900; + now_ts.month=now->tm_mon+1; + now_ts.day=now->tm_mday; + now_ts.hour=now->tm_hour; + now_ts.minute=now->tm_min; + now_ts.second=now->tm_sec; + now_ts.fraction=0; //reportedly needed + + const int OFFSET_TO_FIRST_ACTUAL=5; + string insertQuery_str = "insert into M72nn(run, LBack, ibig, series, epoch "; + for (int iq = 1; iq <= OUTPUT_SIZE; iq++) { + stringstream ss; + ss << iq; + string iq_str = ss.str(); + insertQuery_str = insertQuery_str +", actual"+iq_str+", forec" + iq_str; + } + insertQuery_str = insertQuery_str +", trainingError, variable, n, dateTimeOfPrediction) \ + values(? , ? , ? , ? , ? "; + for (int iq = 1; iq <= OUTPUT_SIZE; iq++) { + insertQuery_str = insertQuery_str + ",?,?"; + } + insertQuery_str = insertQuery_str + ",?,?,?,?)"; + #if defined _WINDOWS + wstring insertQuery(insertQuery_str.begin(), insertQuery_str.end()); + SQLWCHAR* sqlQuery = (SQLWCHAR*)insertQuery.c_str(); + #else + SQLCHAR* sqlQuery =(SQLCHAR*)insertQuery_str.c_str(); + #endif + + SQLHENV hEnv = NULL; + SQLHDBC hDbc = NULL; + SQLHSTMT hStmt = NULL, hInsertStmt = NULL; + + if (SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv) == SQL_ERROR) { + fprintf(stderr, "Unable to allocate an environment handle\n"); + exit(-1); + } + TRYODBC(hEnv, + SQL_HANDLE_ENV, + SQLSetEnvAttr(hEnv, + SQL_ATTR_ODBC_VERSION, + (SQLPOINTER)SQL_OV_ODBC3, + 0)); + + // Allocate a connection + TRYODBC(hEnv, + SQL_HANDLE_ENV, + SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc)); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLDriverConnect(hDbc, + NULL, + pwszConnStr, + SQL_NTS, + NULL, + 0, + NULL, + SQL_DRIVER_COMPLETE)); + fprintf(stderr, "Connected!\n"); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLSetConnectAttr(hDbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, SQL_IS_INTEGER)); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hInsertStmt)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLPrepare(hInsertStmt, sqlQuery, SQL_NTS)); + + SQLLEN nullTerminatedStringOfRun = SQL_NTS; + SQLLEN nullTerminatedStringOfSeries = SQL_NTS; + SQLLEN nullTerminatedStringOfVariable = SQL_NTS; + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&LBACK, 0, NULL)); + + // variable, n, dateTimeOfPrediction + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL+2*OUTPUT_SIZE+2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)VARIABLE.c_str(), 0, &nullTerminatedStringOfVariable)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE + 4, SQL_PARAM_INPUT, SQL_C_TYPE_TIMESTAMP, SQL_TYPE_TIMESTAMP, 0, 0, &now_ts, sizeof(TIMESTAMP_STRUCT), NULL)); +#endif + + random_device rd; // only used once to initialise (seed) engine + mt19937 rng(rd()); // random-number engine used (Mersenne-Twister in this case) + + vector series_vect; + unordered_map allSeries_map(30000);//max series in one chunk would be 24k for yearly series + unordered_map seriesCategories_map(120000);//100k series + + ifstream infoFile(INFO_INPUT_PATH); + string line; + getline(infoFile, line); //header + while (getline(infoFile, line)) { + //cout << string( line)<= MIN_SERIES_LENGTH) { + series_vect.push_back(series); + if (m4Obj.meanAbsSeasDiff==0) { + cout<<"Warning, flat series:"<0 && series_vect.size()>=MAX_NUM_OF_SERIES) + break; + } + cout << "num of series:" << series_vect.size() << endl; + + unsigned int series_len=(unsigned int)series_vect.size(); + uniform_int_distribution uniOnSeries(0,series_len-1); // closed interval [a, b] + uniform_int_distribution uniOnNets(0,NUM_OF_NETS-1); // closed interval [a, b] + + unordered_map, AVERAGING_LEVEL+1>, NUM_OF_NETS>> testResults_map((int)series_len*1.5);//per series, etc... + unordered_map> finalResults_map((int)series_len*1.5);//per series + set diagSeries; + + unordered_map> netRanking_map; + for (int ibig=0; ibig perfValid_vect; + int epochOfLastChangeOfLRate = -1; + +#if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&ibigDb, 0, NULL)); +#endif + + //create nets + array paramsCollection_arr;//per net + array perSeriesParamsCollection_arr;//per net + array trainers_arr; + array perSeriesTrainers_arr; + + + #if defined USE_RESIDUAL_LSTM + array, NUM_OF_NETS> rnnStack_arr; + #elif defined USE_ATTENTIVE_LSTM + array, NUM_OF_NETS> rnnStack_arr; + #else + array, NUM_OF_NETS> rnnStack_arr; + #endif + + array MLPW_parArr; + array MLPB_parArr; + array adapterW_parArr; + array adapterB_parArr; + + //this is not a history, this is the real stuff + unordered_map* > additionalParams_mapOfArr((int)series_len*1.5); //per series, per net + for (auto iter = series_vect.begin() ; iter != series_vect.end(); ++iter) { + string series=*iter; + additionalParams_mapOfArr[series]=new array(); + } + + for (int inet=0; inetclip_threshold = GRADIENT_CLIPPING; + perSeriesTrainers_arr[inet]=new AdamTrainer (perSeriesPC, INITIAL_LEARNING_RATE*PER_SERIES_LR_MULTIP, 0.9, 0.999, EPS); + perSeriesTrainers_arr[inet]->clip_threshold = GRADIENT_CLIPPING; + + auto& rNNStack=rnnStack_arr[inet]; + #if defined USE_RESIDUAL_LSTM + rNNStack.emplace_back(ResidualDilatedLSTMBuilder(dilations[0], INPUT_SIZE + NUM_OF_CATEGORIES, STATE_HSIZE, pc)); + for (int il = 1; il* additionalParams_arr=additionalParams_mapOfArr[series]; + additionalParams_arr->at(inet).levSm=perSeriesPC.add_parameters({1}, 0.5);//per series, per net + if (SEASONALITY_NUM > 0) { + additionalParams_arr->at(inet).sSm = perSeriesPC.add_parameters({ 1 }, 0.5); + for (int isea = 0; iseaat(inet).initSeasonality[isea] = perSeriesPC.add_parameters({ 1 }, 0.5); + } + if (SEASONALITY_NUM > 1) { + additionalParams_arr->at(inet).sSm2 = perSeriesPC.add_parameters({ 1 }, 0.5); + for (int isea = 0; iseaat(inet).initSeasonality2[isea] = perSeriesPC.add_parameters({ 1 }, 0.5); + } + } + }//seting up, through nets + + //history of params. Series->[NUM_OF_NETS,NUM_OF_TRAIN_EPOCHS] + unordered_map, NUM_OF_NETS>*> historyOfAdditionalParams_map((int)series_len*1.5); + for (auto iter = series_vect.begin() ; iter != series_vect.end(); ++iter) { + string series=*iter; + historyOfAdditionalParams_map[series]=new array, NUM_OF_NETS>(); + } + + //first assignment. Yes, we are using vector , so the very first time the duplicates are possible. But a set can't be sorted + array, NUM_OF_NETS> seriesAssignment;//every net has an array + for (int j=0; j> netPerf_map; + for (int inet=0; inetlearning_rate = LEARNING_RATES.at(iEpoch); + if (inet==0) + cout << "changing LR to:" << trainer->learning_rate << endl; + perSeriesTrainer->learning_rate = LEARNING_RATES.at(iEpoch)*PER_SERIES_LR_MULTIP; + } + + auto& rNNStack=rnnStack_arr[inet]; + Parameter& MLPW_par = MLPW_parArr[inet]; + Parameter& MLPB_par = MLPB_parArr[inet]; + Parameter& adapterW_par=adapterW_parArr[inet]; + Parameter& adapterB_par=adapterB_parArr[inet]; + + vector oneNetAssignments=seriesAssignment[inet]; + random_shuffle (oneNetAssignments.begin(), oneNetAssignments.end()); + + vector epochLosses; + vector forecLosses; vector levVarLosses; vector stateLosses; + for (auto iter = oneNetAssignments.begin() ; iter != oneNetAssignments.end(); ++iter) { + string series=*iter; + auto m4Obj=allSeries_map[series]; + + ComputationGraph cg; + for (int il=0; ilat(inet); + array& historyOfAdditionalParams_arr=historyOfAdditionalParams_map[series]->at(inet); + + Expression MLPW_ex,MLPB_ex; + if (ADD_NL_LAYER) { + MLPW_ex = parameter(cg, MLPW_par); + MLPB_ex = parameter(cg, MLPB_par); + } + Expression adapterW_ex=parameter(cg, adapterW_par); + Expression adapterB_ex=parameter(cg, adapterB_par); + + Expression levSmSerNet0_ex= parameter(cg, additionalParams.levSm); + Expression levSm_ex = logistic(levSmSerNet0_ex); + + vector season_exVect;//vector, because we do not know how long the series is + Expression sSm_ex; + if (SEASONALITY_NUM > 0) { + Expression sSmSerNet0_ex= parameter(cg, additionalParams.sSm); + sSm_ex = logistic(sSmSerNet0_ex); + + for (int isea = 0; isea season2_exVect;//vector, because we do not know how long the series is + Expression sSm2_ex; + if (SEASONALITY_NUM > 1) { + Expression sSm2SerNet0_ex= parameter(cg, additionalParams.sSm2); + sSm2_ex = logistic(sSm2SerNet0_ex); + + for (int isea = 0; isea logDiffOfLevels_vect; + vector levels_exVect; + if (SEASONALITY_NUM == 0) { + levels_exVect.push_back(input(cg, m4Obj.vals[0])); + for (int i = 1; iSEASONALITY) { + unsigned long startSeasonalityIndx = season_exVect.size() - SEASONALITY; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY); i++) + season_exVect.push_back(season_exVect[startSeasonalityIndx + i]); + } + } + else if (SEASONALITY_NUM == 2) { + Expression lev = cdiv(input(cg, m4Obj.vals[0]), season_exVect[0] * season2_exVect[0]); + levels_exVect.push_back(lev); + for (int i = 1; iSEASONALITY) { + unsigned long startSeasonalityIndx = season_exVect.size() - SEASONALITY; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY); i++) + season_exVect.push_back(season_exVect[startSeasonalityIndx + i]); + } + //if prediction horizon is larger than seasonality, so we need to repeat some of the seasonality factors + if (OUTPUT_SIZE>SEASONALITY2) { + unsigned long startSeasonalityIndx = season2_exVect.size() - SEASONALITY2; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY2); i++) + season2_exVect.push_back(season2_exVect[startSeasonalityIndx + i]); + } + } + else { + cerr<<"SEASONALITY_NUM="<< SEASONALITY_NUM; + exit(-1); + } + + Expression levelVarLoss_ex; + if (LEVEL_VARIABILITY_PENALTY > 0) { + vector levelVarLoss_v; + for (int i = 1; i losses;//losses of steps through single time series + for (int i=INPUT_SIZE-1; i<(m4Obj.n- OUTPUT_SIZE); i++) { + vector::const_iterator first = m4Obj.vals.begin() + i + 1 - INPUT_SIZE; + vector::const_iterator pastLast = m4Obj.vals.begin() + i + 1; //not including the last one + vector input_vect(first, pastLast); //[first,pastLast) + + first = m4Obj.vals.begin() + i + 1; + pastLast = m4Obj.vals.begin() + i + 1 + OUTPUT_SIZE; + vector labels_vect(first, pastLast); //[first,pastLast) + + Expression input1_ex = input(cg, { INPUT_SIZE }, input_vect); + Expression labels1_ex = input(cg, { OUTPUT_SIZE }, labels_vect); + + if (SEASONALITY_NUM > 0 ) { + vector::const_iterator firstE = season_exVect.begin() +i+1-INPUT_SIZE; + vector::const_iterator pastLastE = season_exVect.begin() +i+1; //not including the last one + vector inputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + inputSeasonality_ex=concatenate(inputSeasonality_exVect); + + firstE = season_exVect.begin() + i + 1; + pastLastE = season_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + outputSeasonality_ex = concatenate(outputSeasonality_exVect); + + input1_ex = cdiv(input1_ex, inputSeasonality_ex); // input deseasonalization + labels1_ex = cdiv(labels1_ex, outputSeasonality_ex); //output deseasonalization + } + if (SEASONALITY_NUM > 1) { + vector::const_iterator firstE = season2_exVect.begin() + i + 1 - INPUT_SIZE; + vector::const_iterator pastLastE = season2_exVect.begin() + i + 1; //not including the last one + vector inputSeasonality2_exVect(firstE, pastLastE); //[first,pastLast) + inputSeasonality2_ex = concatenate(inputSeasonality2_exVect); + + firstE = season2_exVect.begin() + i + 1; + pastLastE = season2_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality2_exVect(firstE, pastLastE); //[first,pastLast) + Expression outputSeasonality2_ex = concatenate(outputSeasonality2_exVect); + + input1_ex = cdiv(input1_ex, inputSeasonality2_ex); //input deseasonalization + labels1_ex = cdiv(labels1_ex, outputSeasonality2_ex); //output deseasonalization + } + + vector joinedInput_ex; + joinedInput_ex.emplace_back(noise(squash(cdiv(input1_ex, levels_exVect[i])), NOISE_STD)); //input normalization+noise + joinedInput_ex.emplace_back(input(cg, { NUM_OF_CATEGORIES }, m4Obj.categories_vect)); + Expression input_ex = concatenate(joinedInput_ex); + + Expression labels_ex = squash(cdiv(labels1_ex, levels_exVect[i]));//output normalization + + Expression rnn_ex; + try { + rnn_ex = rNNStack[0].add_input(input_ex); + for (int il=1; il=INPUT_SIZE+MIN_INP_SEQ_LEN) + losses.push_back(loss_ex); + }//through points of a series + + Expression forecLoss_ex= average(losses); + Expression loss_exp = forecLoss_ex; + + float levVarLoss=0; + if (LEVEL_VARIABILITY_PENALTY > 0) { + Expression levelVarLossP_ex = levelVarLoss_ex*LEVEL_VARIABILITY_PENALTY; + levVarLoss = as_scalar(levelVarLossP_ex.value()); + levVarLosses.push_back(levVarLoss); + loss_exp= loss_exp + levelVarLossP_ex; + } + + float cStateLoss=0; + if (C_STATE_PENALTY>0) { + vector cStateLosses_vEx; + for (int irnn = 0; irnn < rNNStack.size(); irnn++) + for (int it = 0; itupdate();//update shared weights + perSeriesTrainer->update();//update params of this series only + } catch (exception& e) {//it may happen occasionally. I believe it is due to not robust enough implementation of squashing functions in Dynet. When abs(x)>35 NAs appear. + //so the code below is trying to produce some diagnostics, hopefully useful when setting LEVEL_VARIABILITY_PENALTY and C_STATE_PENALTY. + cerr<<"cought exception while doing "< maxAbs) { + maxAbs = abs(state[iv]); + timeOfMax=it; + layerOfMax=il; + chunkOfMax= irnn; + } + } + } //through layers/states + } //through time + } //through chunks + + cout << "levSm:" << as_scalar(levSm_ex.value()) << endl; + if (SEASONALITY_NUM > 0) + cout << "sSm:" << as_scalar(sSm_ex.value()) << endl; + if (SEASONALITY_NUM > 1) + cout << "sSm2:" << as_scalar(sSm2_ex.value()) << endl; + cout << "max abs:" << maxAbs <<" at time:"<< timeOfMax<<" at layer:"<< layerOfMax<<" and chunk:"<< chunkOfMax< 0) { + histAdditionalParams.sSm=as_scalar(sSm_ex.value()); + for (int isea = 0; isea 1) { + histAdditionalParams.sSm2 = as_scalar(sSm2_ex.value()); + for (int isea=0; isea 0 || C_STATE_PENALTY > 0) { + float averageForecLoss = accumulate(forecLosses.begin(), forecLosses.end(), 0.0) / forecLosses.size(); + cout << " forec loss:" << averageForecLoss * 100; + } + if (LEVEL_VARIABILITY_PENALTY > 0) { + float averagelevVarLoss = accumulate(levVarLosses.begin(), levVarLosses.end(), 0.0) / levVarLosses.size(); + cout << " levVar loss:" << averagelevVarLoss * 100; + } + if (C_STATE_PENALTY > 0) { + float averageStateLoss = accumulate(stateLosses.begin(), stateLosses.end(), 0.0) / stateLosses.size(); + cout << " state loss:" << averageStateLoss * 100; + } + cout<at(inet); + Expression MLPW_ex, MLPB_ex; + if (ADD_NL_LAYER) { + MLPW_ex = parameter(cg, MLPW_par); + MLPB_ex = parameter(cg, MLPB_par); + } + Expression adapterW_ex=parameter(cg, adapterW_par); + Expression adapterB_ex=parameter(cg, adapterB_par); + + Expression levSmSerNet0_ex = parameter(cg, additionalParams.levSm); + Expression levSm_ex = logistic(levSmSerNet0_ex); + + vector season_exVect;//vector, because we do not know how long the series is + Expression sSm_ex; + if (SEASONALITY_NUM > 0) { + Expression sSmSerNet0_ex= parameter(cg, additionalParams.sSm); + sSm_ex = logistic(sSmSerNet0_ex); + + for (int isea = 0; isea season2_exVect;//vector, because we do not know how long the series is + Expression sSm2_ex; + if (SEASONALITY_NUM > 1) { + Expression sSm2SerNet0_ex= parameter(cg, additionalParams.sSm2); + sSm2_ex = logistic(sSm2SerNet0_ex); + + for (int isea = 0; isea levels_exVect; + if (SEASONALITY_NUM == 0) { + levels_exVect.push_back(input(cg, m4Obj.vals[0])); + for (int i = 1; i0 then this is shortened, so it always contains data awe have right to access + Expression newLevel_ex = m4Obj.vals[i] * cdiv(levSm_ex, season_exVect[i]) + (1 - levSm_ex)*levels_exVect[i - 1]; + levels_exVect.push_back(newLevel_ex); + + Expression newSeason_ex = m4Obj.vals[i] * cdiv(sSm_ex, newLevel_ex) + (1 - sSm_ex)*season_exVect[i]; + season_exVect.push_back(newSeason_ex); + } + + //if prediction horizon is larger than seasonality, so we need to repeat some of the seasonality factors + if (OUTPUT_SIZE>SEASONALITY) { + unsigned long startSeasonalityIndx = season_exVect.size() - SEASONALITY; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY); i++) + season_exVect.push_back(season_exVect[startSeasonalityIndx + i]); + } + } + else if (SEASONALITY_NUM == 2) { + Expression lev = cdiv(input(cg, m4Obj.vals[0]), season_exVect[0] * season2_exVect[0]); + levels_exVect.push_back(lev); + for (int i = 1; iSEASONALITY) { + unsigned long startSeasonalityIndx = season_exVect.size() - SEASONALITY; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY); i++) + season_exVect.push_back(season_exVect[startSeasonalityIndx + i]); + } + //if prediction horizon is larger than seasonality, so we need to repeat some of the seasonality factors + if (OUTPUT_SIZE>SEASONALITY2) { + unsigned long startSeasonalityIndx = season2_exVect.size() - SEASONALITY2; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY2); i++) + season2_exVect.push_back(season2_exVect[startSeasonalityIndx + i]); + } + } + else { + cerr<<"SEASONALITY_NUM="<< SEASONALITY_NUM; + exit(-1); + } + + + Expression inputSeasonality_ex; Expression inputSeasonality2_ex; + Expression outputSeasonality_ex; Expression outputSeasonality2_ex; + vector losses;//losses of steps through single time series + Expression out_ex;//we declare it here, bcause the last one will be the forecast + for (int i=INPUT_SIZE-1; i::const_iterator first = m4Obj.vals.begin() + i + 1 - INPUT_SIZE; + vector::const_iterator pastLast = m4Obj.vals.begin() + i + 1; //not including the last one + vector input_vect(first, pastLast); //[first,pastLast) + Expression input1_ex = input(cg, { INPUT_SIZE }, input_vect); + + if (SEASONALITY_NUM > 0 ) { + vector::const_iterator firstE = season_exVect.begin() +i+1-INPUT_SIZE; + vector::const_iterator pastLastE = season_exVect.begin() +i+1; //not including the last one + vector inputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + inputSeasonality_ex=concatenate(inputSeasonality_exVect); + input1_ex = cdiv(input1_ex, inputSeasonality_ex); // input deseasonalization + } + if (SEASONALITY_NUM > 1) { + vector::const_iterator firstE = season2_exVect.begin() + i + 1 - INPUT_SIZE; + vector::const_iterator pastLastE = season2_exVect.begin() + i + 1; //not including the last one + vector inputSeasonality2_exVect(firstE, pastLastE); //[first,pastLast) + inputSeasonality2_ex = concatenate(inputSeasonality2_exVect); + input1_ex = cdiv(input1_ex, inputSeasonality2_ex); //input deseasonalization + } + + vector joinedInput_ex; + joinedInput_ex.emplace_back(noise(squash(cdiv(input1_ex, levels_exVect[i])), NOISE_STD)); //input normalization+noise + joinedInput_ex.emplace_back(input(cg, { NUM_OF_CATEGORIES }, m4Obj.categories_vect)); + Expression input_ex = concatenate(joinedInput_ex); + + Expression rnn_ex; + try { + rnn_ex = rNNStack[0].add_input(input_ex); + for (int il=1; il::const_iterator first = m4Obj.vals.begin() + i + 1; + vector::const_iterator pastLast = m4Obj.vals.begin() + i + 1 + OUTPUT_SIZE; + vector labels_vect(first, pastLast); //[first,pastLast) + Expression labels1_ex = input(cg, { OUTPUT_SIZE }, labels_vect); + + if (SEASONALITY_NUM > 0) { + vector::const_iterator firstE = season_exVect.begin() + i + 1; + vector::const_iterator pastLastE = season_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + outputSeasonality_ex = concatenate(outputSeasonality_exVect); + labels1_ex = cdiv(labels1_ex, outputSeasonality_ex); //output deseasonalization + } + if (SEASONALITY_NUM > 1) { + vector::const_iterator firstE = season2_exVect.begin() + i + 1; + vector::const_iterator pastLastE = season2_exVect.begin() + i + 1 + OUTPUT_SIZE;//checking if enough elements is in the vecor was done a few pe + vector outputSeasonality2_exVect(firstE, pastLastE); //[first,pastLast) + Expression outputSeasonality2_ex = concatenate(outputSeasonality2_exVect); + labels1_ex = cdiv(labels1_ex, outputSeasonality2_ex); //output deseasonalization + } + Expression labels_ex = squash(cdiv(labels1_ex, levels_exVect[i]));//output normalization + + //Expression loss_ex = pinBallLoss(out_ex, labels_ex); + Expression loss_ex = MSIS(out_ex, labels_ex); + if (i>=INPUT_SIZE+MIN_INP_SEQ_LEN) + losses.push_back(loss_ex); //training area losses + } + + if (i==(m4Obj.n-1)) {//validation loss + out_ex=expand(out_ex)*levels_exVect[i];//back to original scale + if (SEASONALITY_NUM > 0 ) { + vector::const_iterator firstE = season_exVect.begin() + i + 1; + vector::const_iterator pastLastE = season_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + for (int ios=0; ios 1 ) { + vector::const_iterator firstE = season2_exVect.begin() + i + 1; + vector::const_iterator pastLastE = season2_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality2_exVect(firstE, pastLastE); //[first,pastLast) + for (int ios = 0; ios, AVERAGING_LEVEL+1>, NUM_OF_NETS>, BIG_LOOP>> testResults_map((int)series_len*1.5);//per series, big loop, etc... + //No epoch here, because this will just reflect the current (latest) situation - the last few epochs + vector out_vect=as_vector(out_ex.value()); + testResults_map[series][inet][iEpoch%AVERAGING_LEVEL]=out_vect; + if (iEpoch>=AVERAGING_LEVEL && iEpoch % FREQ_OF_TEST==0) { + vector firstForec=testResults_map[series][inet][0]; + testResults_map[series][inet][AVERAGING_LEVEL]=firstForec; + for (int ii=1; ii nextForec=testResults_map[series][inet][ii]; + for (int iii=0; iii<2*OUTPUT_SIZE; iii++) + testResults_map[series][inet][AVERAGING_LEVEL][iii]+=nextForec[iii]; + } + for (int iii=0; iii<2*OUTPUT_SIZE; iii++) + testResults_map[series][inet][AVERAGING_LEVEL][iii]/=AVERAGING_LEVEL; + } //time to average + }//through series + } //through nets + + if (iEpoch>0 && iEpoch % FREQ_OF_TEST==0) { + //now that we have saved outputs of all nets on all series, let's calc how best and topn combinations performed during current epoch. + vector bestEpochLosses; + vector bestEpochAvgLosses; + vector topnEpochLosses; + vector topnEpochAvgLosses; + vector bestEpochLossesL; + vector bestEpochAvgLossesL; + vector topnEpochLossesL; + vector topnEpochAvgLossesL; + vector bestEpochLossesH; + vector bestEpochAvgLossesH; + vector topnEpochLossesH; + vector topnEpochAvgLossesH; + + for (auto iter = series_vect.begin() ; iter != series_vect.end(); ++iter) { + string series=*iter; + auto m4Obj=allSeries_map[series]; + +#if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)series.c_str(), 0, &nullTerminatedStringOfSeries)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE + 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&m4Obj.n, 0, NULL)); +#endif + + float avgLoss; + vector avgLatest; + vector avgAvg; + + for (int itop=0; itop 0) { + float qLoss = errorFunc(testResults_map[series][inet][iEpoch%AVERAGING_LEVEL], m4Obj.testVals, m4Obj.meanAbsSeasDiff); + bestEpochLosses.push_back(qLoss); + + qLoss=wQuantLoss(testResults_map[series][inet][iEpoch%AVERAGING_LEVEL], m4Obj.testVals, TAUL, 0); + bestEpochLossesL.push_back(qLoss); + + qLoss = wQuantLoss(testResults_map[series][inet][iEpoch%AVERAGING_LEVEL], m4Obj.testVals, TAUH, OUTPUT_SIZE); + bestEpochLossesH.push_back(qLoss); + } + avgLatest=testResults_map[series][inet][iEpoch%AVERAGING_LEVEL]; //used later for calculating topn loss + + if (iEpoch>=AVERAGING_LEVEL) { + if (LBACK > 0) { + float qLoss = errorFunc(testResults_map[series][inet][AVERAGING_LEVEL], m4Obj.testVals, m4Obj.meanAbsSeasDiff); + bestEpochAvgLosses.push_back(qLoss); + + qLoss = wQuantLoss(testResults_map[series][inet][AVERAGING_LEVEL], m4Obj.testVals, TAUL, 0); + bestEpochAvgLossesL.push_back(qLoss); + + qLoss = wQuantLoss(testResults_map[series][inet][AVERAGING_LEVEL], m4Obj.testVals, TAUH, OUTPUT_SIZE); + bestEpochAvgLossesH.push_back(qLoss); + } + avgAvg=testResults_map[series][inet][AVERAGING_LEVEL]; + } + } else { + for (int iii=0; iii<2*OUTPUT_SIZE; iii++) { + avgLatest[iii]+=testResults_map[series][inet][iEpoch%AVERAGING_LEVEL][iii];//calculate current topn + if (iEpoch>=AVERAGING_LEVEL) + avgAvg[iii]+=testResults_map[series][inet][AVERAGING_LEVEL][iii]; + } + } + }//through topn + + for (int iii=0; iii<2*OUTPUT_SIZE; iii++) + avgLatest[iii]/=TOPN; + + if (LBACK > 0) { + float qLoss = errorFunc(avgLatest, m4Obj.testVals, m4Obj.meanAbsSeasDiff); + topnEpochLosses.push_back(qLoss); + + qLoss = wQuantLoss(avgLatest, m4Obj.testVals, TAUL, 0); + topnEpochLossesL.push_back(qLoss); + + qLoss = wQuantLoss(avgLatest, m4Obj.testVals, TAUH, OUTPUT_SIZE); + topnEpochLossesH.push_back(qLoss); + } + + if (iEpoch>=AVERAGING_LEVEL) { + for (int iii = 0; iii<2*OUTPUT_SIZE; iii++) + avgAvg[iii] /= TOPN; + + finalResults_map[series] = avgAvg; + + if (LBACK > 0) { +#if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE + 1, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_FLOAT, 0, 0, (SQLPOINTER)&avgLoss, 0, NULL)); + + for (int iv=0; iv<2; iv++) { + if (iv==0) + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)runL.c_str(), 0, &nullTerminatedStringOfRun)) + else + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)runH.c_str(), 0, &nullTerminatedStringOfRun)); + + for (int iii=0; iii 0) { + float bestEpochLoss=accumulate( bestEpochLosses.begin(), bestEpochLosses.end(), 0.0)/bestEpochLosses.size(); + float topnEpochLoss=accumulate( topnEpochLosses.begin(), topnEpochLosses.end(), 0.0)/topnEpochLosses.size(); + float bestEpochLossL = accumulate(bestEpochLossesL.begin(), bestEpochLossesL.end(), 0.0) / bestEpochLossesL.size(); + float topnEpochLossL = accumulate(topnEpochLossesL.begin(), topnEpochLossesL.end(), 0.0) / topnEpochLossesL.size(); + float bestEpochLossH = accumulate(bestEpochLossesH.begin(), bestEpochLossesH.end(), 0.0) / bestEpochLossesH.size(); + float topnEpochLossH = accumulate(topnEpochLossesH.begin(), topnEpochLossesH.end(), 0.0) / topnEpochLossesH.size(); + cout<=AVERAGING_LEVEL) { + float bestEpochAvgLoss=accumulate( bestEpochAvgLosses.begin(), bestEpochAvgLosses.end(), 0.0)/bestEpochAvgLosses.size(); + float topnEpochAvgLoss=accumulate( topnEpochAvgLosses.begin(), topnEpochAvgLosses.end(), 0.0)/topnEpochAvgLosses.size(); + float bestEpochAvgLossL = accumulate(bestEpochAvgLossesL.begin(), bestEpochAvgLossesL.end(), 0.0) / bestEpochAvgLossesL.size(); + float topnEpochAvgLossL = accumulate(topnEpochAvgLossesL.begin(), topnEpochAvgLossesL.end(), 0.0) / topnEpochAvgLossesL.size(); + float bestEpochAvgLossH = accumulate(bestEpochAvgLossesH.begin(), bestEpochAvgLossesH.end(), 0.0) / bestEpochAvgLossesH.size(); + float topnEpochAvgLossH = accumulate(topnEpochAvgLossesH.begin(), topnEpochAvgLossesH.end(), 0.0) / topnEpochAvgLossesH.size(); + cout<<" bestAvg:"<> netRanking_map + netRanking_map[series]=perfToRanking(netPerf_map[series]); + + for (int itop=0; itop diagSeries; + for (int i=0; i<1; i++) {//add a few normal ones + int irand=uniOnSeries(rng); + diagSeries.insert(series_vect[irand]); + } + for(auto series : diagSeries) { + cout<at(inet); + for (int iEpoch=0; iEpoch 0 ) { + cout<<"sSm:"<at(inet); + for (int iEpoch=0; iEpoch 1 ) { + cout<<"sSm2:"<at(inet); + for (int iEpoch=0; iEpochat(inet); + for (int iEpoch = 0; iEpoch0) { + cout << "levels:" << iEpoch<<" "; + for (int iv = 0; iv 0 ) { + cout << "seasons:" << iEpoch<<" "; + for (int iv = 0; iv 1 ) { + cout << "seasons2:" << iEpoch<<" "; + for (int iv = 0; iv 10 1 +start 10 2 +Modern computers have at more then 2 cores, so e.g. on 6-core machine create and run the following script with 3 pairs of workers: +# start 10 1 0 +# start 10 2 0 +# start 20 1 5 +# start 20 2 5 +# start 30 1 10 +# start 30 2 10 +seedForChunks have to be the same withion one pair, chunk numbers have to be 1 and 2. +We have added here the third parameter: ibigOffset. The straddle should be equal or bigger than BIG_LOOP. +Each pair goes through BIG_LOOP (by default 3, change in code below if you want) of model fitting and prediction, +so 2 pairs, as above, will produce 6 forecasts to be ensembled later, in R. +By increasing number of pairs, e.g. to 6 on 12-core computer, one can reduce BIG_LOOP to 1, so reduce execution time, and still have 6 forecasts - +a decent number to ensemble (in a separate, supplied R script). + +There are three blocks of parameters below, one active (starting with //PARAMS--------------) and two inactive. +The active block is setup as in the final run of forecasting quarterly series. Similarly Monthly block. +The Daily block is more of a demo, allowing to run quickly forecast for Daily series, although with slightly worse performance (use another program ES_RNN_E.cc for it). It was not used for the final submission. +So, you need comment/uncomment to have one block of interest active. + + +*/ + +//#define USE_ODBC +//define USE_ODBC if you want to +// 1. run the program in backtesting mode (which means you also need to set LBACK>0 below. Read the comment below. +// 2. save forecasts to a datatabase. Mysql and SQL Server were tested. The table creation and some other scripts should be found in \sql directory of the source code. +// Of course setting up ODBC is not that simple, :-), e.g. you need to create DSN=slawek, that points to a database with the output table. +// Saving to the db is convenient, but not necessary - all forecasts are always saved to as csv files in automatically created subdirectory (sorry sometimes two directories, so you have to copy :-)) of OUTPUT_DIR +//If saving to database you need to modify run varaible, for each new run, otherwise you will get the table key error. + +#include "dynet/dynet.h" +#include "dynet/training.h" +#include "dynet/expr.h" +#include "dynet/io.h" +#include "dynet/model.h" +#include "dynet/nodes.h" +#include "dynet/expr.h" +#include "dynet/lstm.h" +#include "slstm.h" //my implementation of dilated LSTMs + + +#if defined USE_ODBC + #if defined _WINDOWS + #include + #endif + #include + #include +#endif + +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace dynet; + + + +string DATA_DIR = "f:\\progs\\data\\M4DataSet\\"; //with the competition data csvs +//string DATA_DIR="/home/uber/progs/data/M4DataSet/"; +string OUTPUT_DIR = "f:\\progs\\data\\M4\\"; +//string OUTPUT_DIR="/home/uber/progs/data/M4/"; + +int LBACK = 0; //LBACK 0 means final mode: learning on all data and forecasting. LBACK=1 would move back by OUTPUT_SIZE, and forecast last known OUTPUT_SIZE points, for backtesting. LBACK could be a larger integer, but then number of series shrinks. + + +//PARAMS-------------- +string VARIABLE = "Quarterly"; +const string run0 = "(1,2),(4,8), LR=1e-3/{7,3e-4f},{11,1e-4f}, EPOCHS=16, LVP=200 40*"; +const string runL = "alpha5L " + run0; +const string runH = "alpha5H " + run0; + +vector> dilations = { { 1,2 },{ 4,8 } };//Each vector represents one chunk of Dilateed LSTMS, connected in resnNet fashion +const float INITIAL_LEARNING_RATE = 1e-3f; +//else +const map LEARNING_RATES = { { 7,3e-4f },{ 11,1e-4f } }; //at which epoch we manually set them up to what +const float PER_SERIES_LR_MULTIP = 1; //multiplier for per-series parameters' learning rate. + +const float ALPHA = 0.05; +const float TAUL = ALPHA / 2; +const float TAUH = 1 - TAUL; +const float ALPHA_MULTIP = 2 / ALPHA; + +//#define USE_RESIDUAL_LSTM +//#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = false; //whether to insert a tanh() layer between the RNN stack and the linear adaptor (output) layer + +const int NUM_OF_TRAIN_EPOCHS = 16; +const unsigned int STATE_HSIZE = 40; + +const int SEASONALITY = 4; +const unsigned int INPUT_SIZE = 4; +const int INPUT_SIZE_I = INPUT_SIZE; +const unsigned int OUTPUT_SIZE = 8; +const int OUTPUT_SIZE_I = OUTPUT_SIZE; +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = INPUT_SIZE_I + OUTPUT_SIZE_I + MIN_INP_SEQ_LEN + 2; +const int MAX_SERIES_LENGTH = 40 * SEASONALITY + MIN_SERIES_LENGTH; //we are chopping longer series, to last, max e.g. 40 years + +const float LEVEL_VARIABILITY_PENALTY = 200; //Multiplier for L" penalty against wigglines of level vector. + + +/* +string VARIABLE = "Monthly"; +const string run0 = "Res(1,3,6,12), LR=1e-3 {8,3e-4f},{13,1e-4f}, EPOCHS=14, LVP=50, 20*"; +const string runL = "alpha5L " + run0; +const string runH = "alpha5H " + run0; + +#define USE_RESIDUAL_LSTM +//#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = false; + +vector> dilations = { { 1,3,6,12 } };//Each vector represents one chunk of Dilateed LSTMS, connected in resnNet fashion^M +const float INITIAL_LEARNING_RATE = 1e-3f; +const map LEARNING_RATES = { { 8,3e-4f },{ 13,1e-4f } }; //at which epoch we set them up to what^M +const float PER_SERIES_LR_MULTIP = 1; + +const int NUM_OF_TRAIN_EPOCHS = 14; +const unsigned int STATE_HSIZE = 50; + +const float LEVEL_VARIABILITY_PENALTY = 50; //Multiplier for L" penalty against wigglines of level vector. + +const int SEASONALITY = 12; +const unsigned int OUTPUT_SIZE = 18; +const unsigned int INPUT_SIZE = 12; +const int INPUT_SIZE_I = INPUT_SIZE; +const int OUTPUT_SIZE_I = OUTPUT_SIZE; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = INPUT_SIZE_I + OUTPUT_SIZE_I + MIN_INP_SEQ_LEN + 2; +const int MAX_SERIES_LENGTH = 40 * SEASONALITY + MIN_SERIES_LENGTH; //we are chopping longer series, to last, max e.g. 40 years + +const float ALPHA = 0.05; +const float TAUL = ALPHA / 2; +const float TAUH = 1 - TAUL; +const float ALPHA_MULTIP = 2 / ALPHA; +*/ + +Expression squash(const Expression& x) { + return log(x); +} + +Expression expand(const Expression& x) { + return exp(x); +} + +string INPUT_PATH = DATA_DIR + VARIABLE + "-train.csv"; +string INFO_INPUT_PATH = DATA_DIR + "M4-info.csv"; + +#if defined _DEBUG + const int MAX_NUM_OF_SERIES = 40; +#else + const int MAX_NUM_OF_SERIES = -1; //use all series +#endif // _DEBUG + +const unsigned int NUM_OF_CATEGORIES = 6;//in data provided +const int BIG_LOOP = 3; +const int NUM_OF_CHUNKS = 2; +const float EPS=1e-6; +const int AVERAGING_LEVEL=5; +const bool USE_MEDIAN = false; +const int MIDDLE_POS_FOR_AVG = 2; //if using medians + +const float NOISE_STD=0.001; +const int FREQ_OF_TEST=1; +const float GRADIENT_CLIPPING=20; +const float C_STATE_PENALTY = 0; + +const float BIG_FLOAT=1e38;//numeric_limits::max(); +const bool PRINT_DIAGN=true; +const unsigned ATTENTION_HSIZE=STATE_HSIZE; + +const bool USE_AUTO_LEARNING_RATE=false; +//if USE_AUTO_LEARNING_RATE, and only if LBACK>0 +const float MIN_LEARNING_RATE = 0.0001f; +const float LR_RATIO = sqrt(10); +const float LR_TOLERANCE_MULTIP = 1.005; +const int L3_PERIOD = 2; +const int MIN_EPOCHS_BEFORE_CHANGING_LRATE = 2; + + +#if defined USE_ODBC + void HandleDiagnosticRecord(SQLHANDLE hHandle, + SQLSMALLINT hType, + RETCODE RetCode); + + #if defined _WINDOWS + WCHAR* pwszConnStr = L"DSN=slawek"; + #else + SQLCHAR* pwszConnStr = (SQLCHAR*) "DSN=slawek"; + #endif + #define TRYODBC(h, ht, x) { RETCODE rc = x;\ + if (rc != SQL_SUCCESS) \ + { \ + HandleDiagnosticRecord (h, ht, rc); \ + } \ + if (rc == SQL_ERROR) \ + { \ + fprintf(stderr, "Error in " #x "\n"); \ + if (hStmt) { \ + SQLFreeHandle(SQL_HANDLE_STMT, hStmt); \ + } \ + if (hDbc) { \ + SQLDisconnect(hDbc); \ + SQLFreeHandle(SQL_HANDLE_DBC, hDbc); \ + } \ + if (hEnv) { \ + SQLFreeHandle(SQL_HANDLE_ENV, hEnv); \ + } \ + exit(-1); \ + } \ + } + +#endif + +struct M4TS {//storing series data + vector < float> categories_vect; + vector vals; + vector testVals;//empty, unless LBACK>0 + float meanAbsSeasDiff; + int n; + + M4TS(string category, stringstream &line_stream) { + array categories = { 0,0,0,0,0,0 }; + if (category == "Demographic") + categories[0] = 1; + else if (category == "Finance") + categories[1] = 1; + else if (category == "Industry") + categories[2] = 1; + else if (category == "Macro") + categories[3] = 1; + else if (category == "Micro") + categories[4] = 1; + else if (category == "Other") + categories[5] = 1; + else { + cerr << "unknown category?"; + exit(-1); + } + for (int i = 0; i < NUM_OF_CATEGORIES; i++) + categories_vect.push_back(categories[i]); + + string tmp_str; + while(getline(line_stream, tmp_str, ',' )) { + string val_str; + for (const auto c : tmp_str) { + if (c != '\"' && c != '\r') //remove quotes and very occasional double end of line + val_str.push_back(c); + } + if (val_str.size() == 0) + break; + float val=(atof(val_str.c_str())); + vals.push_back(val); + } + + meanAbsSeasDiff = 0; + float sumf = 0; + for (int ip = SEASONALITY; ip0) + meanAbsSeasDiff = sumf / (vals.size() - SEASONALITY); + + if (LBACK > 0) { //extract last OUTPUT_SIZE points as the test values + if (vals.size() > LBACK*OUTPUT_SIZE_I) { + auto first = vals.begin() + vals.size() - LBACK*OUTPUT_SIZE_I; + auto pastLast = vals.begin() + vals.size() - (LBACK-1)*OUTPUT_SIZE_I; + vector input_vect(first, pastLast); //[first,pastLast) + testVals= input_vect; + vals.resize(vals.size() - LBACK*OUTPUT_SIZE_I); //remove last LBACK*OUTPUT_SIZE elements + n = vals.size(); + } else + n = 0; + } else { + n = vals.size(); + } + if (n > MAX_SERIES_LENGTH) {//chop long series + vals.erase(vals.begin(), vals.begin() + (n-MAX_SERIES_LENGTH)); //remove some early data + n = vals.size(); + } + } + M4TS(){}; +}; + + +struct AdditionalParams {//Per series, important + Parameter levSm; + Parameter sSm; + array initSeasonality; +}; + +struct AdditionalParamsF {//Used for storing diagnostics + float levSm; + float sSm; + array initSeasonality; + vector levels; + vector seasons; +}; + +//loss function +Expression MSIS(const Expression& out_ex, const Expression& actuals_ex) { + vector losses; + for (unsigned int indx = 0; indx as_scalar(forecH.value())) + loss = loss + (actual - forecH)*ALPHA_MULTIP; + losses.push_back(loss); + } + Expression ret = sum(losses) / OUTPUT_SIZE; + #if defined _DEBUG + float retf = as_scalar(ret.value()); + if (retf>100) { + vector out_vect = as_vector(out_ex.value()); + vector actuals_vect = as_vector(actuals_ex.value()); + for (int i = 0; i0 and PERCENTILE!=50 +float wQuantLoss(vector& out_vect, vector& actuals_vect, float tau, int offset) {//used just for diagnostics, if if LBACK>0 and PERCENTILE!=50 + float sumf = 0; float suma = 0; + for (unsigned int indx = 0; indx forec) + sumf = sumf + (actual - forec)*tau; + else + sumf = sumf + (actual - forec)*(tau - 1); + } + return sumf / suma * 200; +} + +//MSIS operating on floats, used for validation +float errorFunc(vector& out_vect, vector& actuals_vect, float meanAbsSeasDiff) { + float sumf=0; + for (unsigned int indx = 0; indx forecH) + loss = loss + (actualf - forecH)*ALPHA_MULTIP; + sumf+=loss; + } + return sumf / (OUTPUT_SIZE*meanAbsSeasDiff); +} + + + + +int main(int argc, char** argv) { + dynet::initialize(argc, argv); + + int seedForChunks = 10; //Yes it runs, without any params, but it will work only on 1/NUM_OF_CHUNKS of all cases. The system is expected to run in NUM_OF_CHUNKS multiples. + int chunkNo = 1; + int ibigOffset = 0; + if (argc >= 3) { + seedForChunks = atoi(argv[1]); + chunkNo = atoi(argv[2]); + } + if (argc >= 4) + ibigOffset = atoi(argv[3]); + + if (chunkNo > NUM_OF_CHUNKS) { + cerr << "chunkNo > NUM_OF_CHUNKS"; + exit(-1); + } + else if (chunkNo <= 0) { + cerr << "chunkNo <= 0"; + exit(-1); + } + + cout<0) + std::cout<< " ibigOffset:"<< ibigOffset; //if continuing prematurely stopped run + if (LBACK>0) + std::cout<<" lback:"<tm_year+1900; + now_ts.month=now->tm_mon+1; + now_ts.day=now->tm_mday; + now_ts.hour=now->tm_hour; + now_ts.minute=now->tm_min; + now_ts.second=now->tm_sec; + now_ts.fraction=0; //reportedly needed + + const int OFFSET_TO_FIRST_ACTUAL=5; + string insertQuery_str = "insert into M72nn(run, LBack, ibig, series, epoch "; + for (int iq = 1; iq <= OUTPUT_SIZE_I; iq++) { + stringstream ss; + ss << iq; + string iq_str = ss.str(); + insertQuery_str = insertQuery_str +", actual"+iq_str+", forec" + iq_str; + } + insertQuery_str = insertQuery_str +", trainingError, variable, n, dateTimeOfPrediction) \ + values(? , ? , ? , ? , ? "; + for (int iq = 1; iq <= OUTPUT_SIZE_I; iq++) { + insertQuery_str = insertQuery_str + ",?,?"; + } + insertQuery_str = insertQuery_str + ",?,?,?,?)"; + #if defined _WINDOWS + wstring insertQuery(insertQuery_str.begin(), insertQuery_str.end()); + SQLWCHAR* sqlQuery = (SQLWCHAR*)insertQuery.c_str(); + #else + SQLCHAR* sqlQuery =(SQLCHAR*)insertQuery_str.c_str(); + #endif + + + SQLHENV hEnv = NULL; + SQLHDBC hDbc = NULL; + SQLHSTMT hStmt = NULL, hInsertStmt = NULL; + + if (SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv) == SQL_ERROR) { + fprintf(stderr, "Unable to allocate an environment handle\n"); + exit(-1); + } + TRYODBC(hEnv, + SQL_HANDLE_ENV, + SQLSetEnvAttr(hEnv, + SQL_ATTR_ODBC_VERSION, + (SQLPOINTER)SQL_OV_ODBC3, + 0)); + + // Allocate a connection + TRYODBC(hEnv, + SQL_HANDLE_ENV, + SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc)); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLDriverConnect(hDbc, + NULL, + pwszConnStr, + SQL_NTS, + NULL, + 0, + NULL, + SQL_DRIVER_COMPLETE)); + fprintf(stderr, "Connected!\n"); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLSetConnectAttr(hDbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, SQL_IS_INTEGER)); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hInsertStmt)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLPrepare(hInsertStmt, sqlQuery, SQL_NTS)); + + SQLLEN nullTerminatedStringOfRun = SQL_NTS; + SQLLEN nullTerminatedStringOfSeries = SQL_NTS; + SQLLEN nullTerminatedStringOfVariable = SQL_NTS; + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&LBACK, 0, NULL)); + + // variable, n, dateTimeOfPrediction + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL+2*OUTPUT_SIZE_I+2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)VARIABLE.c_str(), 0, &nullTerminatedStringOfVariable)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE_I + 4, SQL_PARAM_INPUT, SQL_C_TYPE_TIMESTAMP, SQL_TYPE_TIMESTAMP, 0, 0, &now_ts, sizeof(TIMESTAMP_STRUCT), NULL)); +#endif + + random_device rd; // only used once to initialise (seed) engine + mt19937 rng(rd()); // random-number engine used (Mersenne-Twister) + mt19937 rngForChunks(seedForChunks); + + vector series_vect; + unordered_map allSeries_map(30000);//max series in one chunk would be 48/2=24k, for monthly series + unordered_map seriesCategories_map(120000);//100k series + + ifstream infoFile(INFO_INPUT_PATH); + string line; + getline(infoFile, line); //header + while (getline(infoFile, line)) { + //cout << string( line)<= MIN_SERIES_LENGTH) { + series_vect.push_back(series); + if (m4Obj.meanAbsSeasDiff==0) { + cout<<"Warning, flat series:"<0 && series_vect.size()>=MAX_NUM_OF_SERIES) + break; + } + + int series_len=(int)series_vect.size(); + int chunkSize= series_len/NUM_OF_CHUNKS; + std::cout << "num of series:" << series_vect.size() <<" size of chunk:"<< chunkSize< uniOnSeries(0, chunkSize -1); // closed interval [a, b] + + unordered_map, AVERAGING_LEVEL+1>> testResults_map((int)chunkSize*1.5); + set diagSeries; + + for (int ibig=0; ibig perfValid_vect; + int epochOfLastChangeOfLRate = -1; + +#if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&ibigDb, 0, NULL)); +#endif + + ParameterCollection pc; + ParameterCollection perSeriesPC; + + float learning_rate= INITIAL_LEARNING_RATE; + AdamTrainer trainer(pc, learning_rate, 0.9, 0.999, EPS); + trainer.clip_threshold = GRADIENT_CLIPPING; + AdamTrainer perSeriesTrainer(perSeriesPC, learning_rate*PER_SERIES_LR_MULTIP, 0.9, 0.999, EPS); + perSeriesTrainer.clip_threshold = GRADIENT_CLIPPING; + + #if defined USE_RESIDUAL_LSTM + vector rNNStack; + rNNStack.emplace_back(ResidualDilatedLSTMBuilder(dilations[0], INPUT_SIZE + NUM_OF_CATEGORIES, STATE_HSIZE, pc)); + for (int il = 1; il rNNStack; + rNNStack.emplace_back(AttentiveDilatedLSTMBuilder(dilations[0], INPUT_SIZE + NUM_OF_CATEGORIES, STATE_HSIZE, ATTENTION_HSIZE, pc)); + for (int il = 1; il rNNStack; + rNNStack.emplace_back(DilatedLSTMBuilder(dilations[0], INPUT_SIZE + NUM_OF_CATEGORIES, STATE_HSIZE, pc)); + for (int il = 1; il oneChunk_vect(start,end); + if (PRINT_DIAGN) { + for (int k = 0; k<10; k++) //diag + cout << oneChunk_vect[k] << " "; + cout << endl; + } + if (chunkNo == NUM_OF_CHUNKS) + cout<<"last chunk size:"<< oneChunk_vect.size()< additionalParams_map((int)oneChunk_vect.size()*1.5); //per series + unordered_map*> historyOfAdditionalParams_map((int)oneChunk_vect.size()*1.5); + for (auto iter = oneChunk_vect.begin(); iter != oneChunk_vect.end(); ++iter) {//setup + string series = *iter; + AdditionalParams addParams; + addParams.levSm = perSeriesPC.add_parameters({ 1 }, 0.5); //level smoothing + addParams.sSm = perSeriesPC.add_parameters({ 1 }, 0.5); //seasonality smoothing + for (int isea = 0; isea(); + } + + for (int iEpoch=0; iEpoch testLosses; //test losses of all series in this epoch + vector testAvgLosses; //test avg (over last few epochs) losses of all series in this epoch + vector testLossesL; //lower quantile loss + vector testAvgLossesL; //lower quantile loss + vector testLossesH; //higher quantile loss + vector testAvgLossesH; //higher quantile loss + vector trainingLosses; //training losses of all series in one epoch + vector forecLosses; vector levVarLosses; vector stateLosses; + #if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&iEpoch, 0, NULL)); + #endif + + for (auto iter = oneChunk_vect.begin() ; iter != oneChunk_vect.end(); ++iter) { + string series=*iter; + auto m4Obj = allSeries_map[series]; + + #if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)series.c_str(), 0, &nullTerminatedStringOfSeries)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE_I + 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&m4Obj.n, 0, NULL)); + #endif + + ComputationGraph cg; + for (int il=0; il season_exVect;//vector, because we do not know how long the series is + for (int iseas=0; iseas seas==1 + season_exVect.push_back(seas);//Expression is a simple struct, without any storage management, so the auto copy constructor works OK. + } + season_exVect.push_back(season_exVect[0]); + + vector logDiffOfLevels_vect; + vector levels_exVect; + Expression lev=cdiv(input(cg, m4Obj.vals[0]), season_exVect[0]); + levels_exVect.push_back(lev); + for (int i=1; i 0) { + vector levelVarLoss_v; + for (int i = 1; iSEASONALITY) { + unsigned long startSeasonalityIndx=season_exVect.size()-SEASONALITY; + for (int i=0;i<(OUTPUT_SIZE_I-SEASONALITY);i++) + season_exVect.push_back(season_exVect[startSeasonalityIndx+i]); + } + vector losses; + for (int i=INPUT_SIZE_I-1; i<(m4Obj.n- OUTPUT_SIZE_I); i++) { + vector::const_iterator firstE = season_exVect.begin() +i+1-INPUT_SIZE_I; + vector::const_iterator pastLastE = season_exVect.begin() +i+1; //not including the last one + vector inputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + Expression inputSeasonality_ex=concatenate(inputSeasonality_exVect); + + vector::const_iterator first = m4Obj.vals.begin() +i+1-INPUT_SIZE_I; + vector::const_iterator pastLast = m4Obj.vals.begin() +i+1; //not including the last one + vector input_vect(first, pastLast); //[first,pastLast) + Expression input0_ex=input(cg,{INPUT_SIZE},input_vect); + Expression input1_ex=cdiv(input0_ex,inputSeasonality_ex); //deseasonalization + vector joinedInput_ex; + input1_ex= cdiv(input1_ex, levels_exVect[i]); + joinedInput_ex.emplace_back(noise(squash(input1_ex), NOISE_STD)); //normalization+noise + joinedInput_ex.emplace_back(input(cg, { NUM_OF_CATEGORIES }, m4Obj.categories_vect)); + Expression input_ex = concatenate(joinedInput_ex); + + Expression rnn_ex; + try { + rnn_ex = rNNStack[0].add_input(input_ex); + for (int il=1; il outputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + Expression outputSeasonality_ex=concatenate(outputSeasonality_exVect); + + first = m4Obj.vals.begin() +i+1; + pastLast = m4Obj.vals.begin() +i+1+OUTPUT_SIZE_I; + vector labels_vect(first, pastLast); //[first,pastLast) + Expression labels0_ex=input(cg,{OUTPUT_SIZE},labels_vect); + Expression labels1_ex=cdiv(labels0_ex,outputSeasonality_ex); //deseasonalization + labels1_ex= cdiv(labels1_ex, levels_exVect[i]);//normalization + Expression labels_ex=squash(labels1_ex); + + Expression loss_ex=MSIS(out_ex, labels_ex);//although out_ex has doubled size, labels_ex have normal size. NB, we do not have duplicated labels during training. + //Expression loss_ex=pinBallLoss(out_ex, labels_ex); + if (i>=INPUT_SIZE_I+MIN_INP_SEQ_LEN) + losses.push_back(loss_ex); + } + + Expression forecLoss_ex= average(losses); + Expression loss_exp = forecLoss_ex; + + float levVarLoss=0; + if (LEVEL_VARIABILITY_PENALTY > 0) { + Expression levelVarLossP_ex = levelVarLoss_ex*LEVEL_VARIABILITY_PENALTY; + levVarLoss = as_scalar(levelVarLossP_ex.value()); + levVarLosses.push_back(levVarLoss); + loss_exp= loss_exp + levelVarLossP_ex; + } + + float cStateLoss=0; + if (C_STATE_PENALTY>0) { + vector cStateLosses_vEx; + for (int irnn = 0; irnn < rNNStack.size(); irnn++) + for (int it = 0; it maxAbs) { + maxAbs = abs(state[iv]); + timeOfMax = it; + layerOfMax = il; + chunkOfMax = irnn; + } + } + } //through layers/states + } //through time + } //through chunks + + cout << "levSm:" << as_scalar(levSm_ex.value()) << endl; + cout << "sSm:" << as_scalar(sSm_ex.value()) << endl; + cout << " min season=" << minSeason << endl; + cout << " min level=" << minLevel << endl; + cout << " max abs:" << maxAbs << " at time:" << timeOfMax << " at layer:" << layerOfMax << " and chunk:" << chunkOfMax << endl; + + //diagSeries.insert(series); + pc.reset_gradient(); + perSeriesPC.reset_gradient(); + } + + //saving per-series values for diagnostics purposes + AdditionalParamsF &histAdditionalParams= historyOfAdditionalParams_map[series]->at(iEpoch); + histAdditionalParams.levSm=as_scalar(levSm_ex.value()); + histAdditionalParams.sSm=as_scalar(sSm_ex.value()); + for (int isea=0; isea::const_iterator firstE = season_exVect.begin() + i + 1 - INPUT_SIZE_I; + vector::const_iterator pastLastE = season_exVect.begin() + i + 1; //not including the last one + vector inputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + Expression inputSeasonality_ex = concatenate(inputSeasonality_exVect); + + vector::const_iterator first = m4Obj.vals.begin() + i + 1 - INPUT_SIZE_I; + vector::const_iterator pastLast = m4Obj.vals.begin() + i + 1; //not including the last one + vector input_vect(first, pastLast); //[first,pastLast) + Expression input0_ex = input(cg, { INPUT_SIZE }, input_vect); + Expression input1_ex = cdiv(input0_ex, inputSeasonality_ex); //deseasonalization + vector joinedInput_ex; + input1_ex= cdiv(input1_ex, levels_exVect[i]);//normalization + joinedInput_ex.emplace_back(squash(input1_ex)); + joinedInput_ex.emplace_back(input(cg, { NUM_OF_CATEGORIES }, m4Obj.categories_vect)); + Expression input_ex = concatenate(joinedInput_ex); + + Expression rnn_ex; + try { + rnn_ex = rNNStack[0].add_input(input_ex); + for (int il=1; il outputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + for (int ios=0; ios out_vect = as_vector(out_ex.value()); + + if (LBACK > 0) { + float qLoss = errorFunc(out_vect, m4Obj.testVals, m4Obj.meanAbsSeasDiff); + testLosses.push_back(qLoss); + + qLoss = wQuantLoss(out_vect, m4Obj.testVals, TAUL, 0); + testLossesL.push_back(qLoss); + + qLoss = wQuantLoss(out_vect, m4Obj.testVals, TAUH, OUTPUT_SIZE); + testLossesH.push_back(qLoss); + } + + testResults_map[series][iEpoch%AVERAGING_LEVEL] = out_vect; + if (iEpoch >= AVERAGING_LEVEL) { + if (USE_MEDIAN) { + if (testResults_map[series][AVERAGING_LEVEL].size() == 0) + testResults_map[series][AVERAGING_LEVEL] = out_vect; //just to initialized, to make space. The values will be overwritten + for (int iii = 0; iii < OUTPUT_SIZE_I*2; iii++) { + vector temp_vect2; + for (int ii = 0; ii firstForec = testResults_map[series][0]; + testResults_map[series][AVERAGING_LEVEL] = firstForec; + for (int ii = 1; ii nextForec = testResults_map[series][ii]; + for (int iii = 0; iii 0) { + float qLoss = errorFunc(testResults_map[series][AVERAGING_LEVEL], m4Obj.testVals, m4Obj.meanAbsSeasDiff); + testAvgLosses.push_back(qLoss); + + qLoss = wQuantLoss(testResults_map[series][AVERAGING_LEVEL], m4Obj.testVals, TAUL, 0); + testAvgLossesL.push_back(qLoss); + + qLoss = wQuantLoss(testResults_map[series][AVERAGING_LEVEL], m4Obj.testVals, TAUH, OUTPUT_SIZE); + testAvgLossesH.push_back(qLoss); + + #if defined USE_ODBC //save + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE_I + 1, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_FLOAT, 0, 0, (SQLPOINTER)&forecastLoss, 0, NULL)); + + for (int iv = 0; iv<2; iv++) { + if (iv == 0) + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)runL.c_str(), 0, &nullTerminatedStringOfRun)) + else + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)runH.c_str(), 0, &nullTerminatedStringOfRun)); + + for (int io = 0; io < OUTPUT_SIZE_I; io++) { + int ipos=OFFSET_TO_FIRST_ACTUAL + 1 + 2*io; + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, ipos, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_FLOAT, 0, 0, (SQLPOINTER)&m4Obj.testVals[io], 0, NULL)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, ipos+1, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_FLOAT, 0, 0, (SQLPOINTER)&testResults_map[series][AVERAGING_LEVEL][io + iv*OUTPUT_SIZE_I], 0, NULL)); + } + if (MAX_NUM_OF_SERIES<0) + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLExecute(hInsertStmt)); + } + #endif + } //lback>0 + } //time to average + }//last anchor point of the series + }//through TEST loop + }//through series + + + if (iEpoch % FREQ_OF_TEST == 0) { + float averageTrainingLoss = accumulate(trainingLosses.begin(), trainingLosses.end(), 0.0) / trainingLosses.size(); + + cout << ibig << " " << iEpoch << " loss:" << averageTrainingLoss * 100; + if (LEVEL_VARIABILITY_PENALTY > 0 || C_STATE_PENALTY > 0) { + float averageForecLoss = accumulate(forecLosses.begin(), forecLosses.end(), 0.0) / forecLosses.size(); + cout << " forecast loss:" << averageForecLoss*100; + } + if (LEVEL_VARIABILITY_PENALTY > 0) { + float averagelevVarLoss = accumulate(levVarLosses.begin(), levVarLosses.end(), 0.0) / levVarLosses.size(); + cout << " levVar loss:" << averagelevVarLoss * 100; + } + if (C_STATE_PENALTY > 0) { + float averageStateLoss = accumulate(stateLosses.begin(), stateLosses.end(), 0.0) / stateLosses.size(); + cout << " state loss:" << averageStateLoss * 100; + } + + float averageTestLoss=0; + if (LBACK > 0) { + float averageTestLoss = accumulate(testLosses.begin(), testLosses.end(), 0.0) / testLosses.size(); + float averageTestLossL = accumulate(testLossesL.begin(), testLossesL.end(), 0.0) / testLossesL.size(); + float averageTestLossH = accumulate(testLossesH.begin(), testLossesH.end(), 0.0) / testLossesH.size(); + cout<<" Test loss:" << averageTestLoss<<" L:"<< averageTestLossL<<" H:"<< averageTestLossH; + if (iEpoch >= AVERAGING_LEVEL) { + float averageTestAvgLoss = accumulate(testAvgLosses.begin(), testAvgLosses.end(), 0.0) / testAvgLosses.size();//of this epoch + float averageTestAvgLossL = accumulate(testAvgLossesL.begin(), testAvgLossesL.end(), 0.0) / testAvgLossesL.size();//of this epoch + float averageTestAvgLossH = accumulate(testAvgLossesH.begin(), testAvgLossesH.end(), 0.0) / testAvgLossesH.size();//of this epoch + cout << " avgLoss:" << averageTestAvgLoss<<" L:"<< averageTestAvgLossL<<" H:"<< averageTestAvgLossH<= 2) { + if (iEpoch < L3_PERIOD) + changeL2Rate = perfValid_vect[perfValid_vect.size() - 2] MIN_LEARNING_RATE && (iEpoch - epochOfLastChangeOfLRate) >= MIN_EPOCHS_BEFORE_CHANGING_LRATE) { + learning_rate /= LR_RATIO; + cout << "decreasing LR to:" << learning_rate << endl; + epochOfLastChangeOfLRate = iEpoch; + trainer.learning_rate = learning_rate; + } + } + #if defined USE_ODBC + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLEndTran( + SQL_HANDLE_DBC, + hDbc, + SQL_COMMIT)); + #endif + }//through epochs + + if (PRINT_DIAGN) {//some diagnostic info + set diagSeries; + for (int i = 0; i<1; i++) {//add a few normal ones + int irand = uniOnSeries(rng); + diagSeries.insert(oneChunk_vect[irand]); + } + for (auto series : diagSeries) { + cout << endl << series << endl; + array* historyOfAdditionalParams_ptrToArr = historyOfAdditionalParams_map[series]; + cout << "lSm:" << endl; + for (int iEpoch = 0; iEpochat(iEpoch).levSm << " "; + cout << endl; + cout << "sSm:" << endl; + for (int iEpoch = 0; iEpochat(iEpoch).sSm << " "; + cout << endl; + cout << "seasons:" << endl; + for (int isea = 0; iseaat(iEpoch).initSeasonality[isea] << " "; + cout << endl; + } + cout << endl; + for (int iEpoch = 0; iEpochat(iEpoch).levels.size()>0) { + cout << "levels:" << iEpoch << " "; + for (int iv = 0; ivat(iEpoch).levels.size(); iv++) + cout << historyOfAdditionalParams_ptrToArr->at(iEpoch).levels[iv] << ", "; + cout << endl; + cout << "seas:" << iEpoch << " "; + for (int iv = 0; ivat(iEpoch).seasons.size(); iv++) + cout << historyOfAdditionalParams_ptrToArr->at(iEpoch).seasons[iv] << ", "; + cout << endl; + } + } + } + } + + //save the forecast to outputFile + ofstream outputFile; + outputFile.open(outputPathL); + for (auto iter = oneChunk_vect.begin(); iter != oneChunk_vect.end(); ++iter) { + string series = *iter; + outputFile<< series; + for (int io=0; io +#include +#include +#include + +#if defined DEBUG + #define _DEBUG +#endif + +using namespace std; + +namespace dynet { + + // ResidualDilatedLSTMBuilder based on Vanilla LSTM + enum { _X2I, _H2I, _BI, _X2F, _H2F, _BF, _X2O, _H2O, _BO, _X2G, _H2G, _BG }; + enum { LN_GH, LN_BH, LN_GX, LN_BX, LN_GC, LN_BC }; + + ResidualDilatedLSTMBuilder::ResidualDilatedLSTMBuilder() : has_initial_state(false), layers(0), input_dim(0), hid(0), dropout_rate_h(0), ln_lstm(false), forget_bias(1.f), dropout_masks_valid(false) { } + + ResidualDilatedLSTMBuilder::ResidualDilatedLSTMBuilder(vector dilations, + unsigned input_dim, + unsigned hidden_dim, + ParameterCollection& model, + bool ln_lstm, float forget_bias) : dilations(dilations), layers(unsigned(dilations.size())), + input_dim(input_dim), hid(hidden_dim), ln_lstm(ln_lstm), forget_bias(forget_bias), dropout_masks_valid(false) { + unsigned layer_input_dim = input_dim; + local_model = model.add_subcollection("ResidualDilated-lstm-builder"); + for (unsigned i = 0; i < layers; ++i) { + // i + Parameter p_x2i = local_model.add_parameters({ hidden_dim * 4, layer_input_dim }); + Parameter p_h2i = local_model.add_parameters({ hidden_dim * 4, hidden_dim }); + //Parameter p_c2i = model.add_parameters({hidden_dim, hidden_dim}); + Parameter p_bi = local_model.add_parameters({ hidden_dim * 4 }, ParameterInitConst(0.f)); + + layer_input_dim = hidden_dim; // output (hidden) from 1st layer is input to next + + vector ps = { p_x2i, p_h2i, /*p_c2i,*/ p_bi }; + params.push_back(ps); + + if (ln_lstm) { + Parameter p_gh = model.add_parameters({ hidden_dim * 4 }, ParameterInitConst(1.f)); + Parameter p_bh = model.add_parameters({ hidden_dim * 4 }, ParameterInitConst(0.f)); + Parameter p_gx = model.add_parameters({ hidden_dim * 4 }, ParameterInitConst(1.f)); + Parameter p_bx = model.add_parameters({ hidden_dim * 4 }, ParameterInitConst(0.f)); + Parameter p_gc = model.add_parameters({ hidden_dim }, ParameterInitConst(1.f)); + Parameter p_bc = model.add_parameters({ hidden_dim }, ParameterInitConst(0.f)); + vector ln_ps = { p_gh, p_bh, p_gx, p_bx, p_gc, p_bc }; + ln_params.push_back(ln_ps); + } + } // layers + dropout_rate = 0.f; + dropout_rate_h = 0.f; + } + + void ResidualDilatedLSTMBuilder::new_graph_impl(ComputationGraph& cg, bool update) { + param_vars.clear(); + if (ln_lstm)ln_param_vars.clear(); + for (unsigned i = 0; i < layers; ++i) { + auto& p = params[i]; + vector vars; + for (unsigned j = 0; j < p.size(); ++j) { vars.push_back(update ? parameter(cg, p[j]) : const_parameter(cg, p[j])); } + param_vars.push_back(vars); + if (ln_lstm) { + auto& ln_p = ln_params[i]; + vector ln_vars; + for (unsigned j = 0; j < ln_p.size(); ++j) { ln_vars.push_back(update ? parameter(cg, ln_p[j]) : const_parameter(cg, ln_p[j])); } + ln_param_vars.push_back(ln_vars); + } + } + + _cg = &cg; + } + // layout: 0..layers = c + // layers+1..2*layers = h + void ResidualDilatedLSTMBuilder::start_new_sequence_impl(const vector& hinit) { + h.clear(); + c.clear(); + + if (hinit.size() > 0) { + DYNET_ARG_CHECK(layers * 2 == hinit.size(), + "ResidualDilatedLSTMBuilder must be initialized with 2 times as many expressions as layers " + "(hidden state, and cell for each layer). However, for " << layers << " layers, " << + hinit.size() << " expressions were passed in"); + h0.resize(layers); + c0.resize(layers); + for (unsigned i = 0; i < layers; ++i) { + c0[i] = hinit[i]; + h0[i] = hinit[i + layers]; + } + has_initial_state = true; + } + else { + has_initial_state = false; + } + + dropout_masks_valid = false; + } + + void ResidualDilatedLSTMBuilder::set_dropout_masks(unsigned batch_size) { + masks.clear(); + for (unsigned i = 0; i < layers; ++i) { + std::vector masks_i; + unsigned idim = (i == 0) ? input_dim : hid; + if (dropout_rate > 0.f || dropout_rate_h > 0.f) { + float retention_rate = 1.f - dropout_rate; + float retention_rate_h = 1.f - dropout_rate_h; + float scale = 1.f / retention_rate; + float scale_h = 1.f / retention_rate_h; + // in + masks_i.push_back(random_bernoulli(*_cg, Dim({ idim }, batch_size), retention_rate, scale)); + // h + masks_i.push_back(random_bernoulli(*_cg, Dim({ hid }, batch_size), retention_rate_h, scale_h)); + masks.push_back(masks_i); + } + } + dropout_masks_valid = true; + } + + ParameterCollection & ResidualDilatedLSTMBuilder::get_parameter_collection() { + return local_model; + } + + // TODO - Make this correct + // Copied c from the previous step (otherwise c.size()< h.size()) + // Also is creating a new step something we want? + // wouldn't overwriting the current one be better? + Expression ResidualDilatedLSTMBuilder::set_h_impl(int prev, const vector& h_new) { + DYNET_ARG_CHECK(h_new.empty() || h_new.size() == layers, + "ResidualDilatedLSTMBuilder::set_h expects as many inputs as layers, but got " << + h_new.size() << " inputs for " << layers << " layers"); + const unsigned t = h.size(); + h.push_back(vector(layers)); + c.push_back(vector(layers)); + for (unsigned i = 0; i < layers; ++i) { + Expression h_i = h_new[i]; + Expression c_i = c[t - 1][i]; + h[t][i] = h_i; + c[t][i] = c_i; + } + return h[t].back(); + } + // Current implementation : s_new is either {new_c[0],...,new_c[n]} + // or {new_c[0],...,new_c[n],new_h[0],...,new_h[n]} + Expression ResidualDilatedLSTMBuilder::set_s_impl(int prev, const std::vector& s_new) { + DYNET_ARG_CHECK(s_new.size() == layers || s_new.size() == 2 * layers, + "ResidualDilatedLSTMBuilder::set_s expects either as many inputs or twice as many inputs as layers, but got " << s_new.size() << " inputs for " << layers << " layers"); + bool only_c = s_new.size() == layers; + const unsigned t = c.size(); + h.push_back(vector(layers)); + c.push_back(vector(layers)); + for (unsigned i = 0; i < layers; ++i) { + Expression h_i = only_c ? h[t - 1][i] : s_new[i + layers]; + Expression c_i = s_new[i]; + h[t][i] = h_i; + c[t][i] = c_i; + } + return h[t].back(); + } + + Expression ResidualDilatedLSTMBuilder::add_input_impl(int prev, const Expression& x) { + h.push_back(vector(layers)); + c.push_back(vector(layers)); + vector& ht = h.back(); + vector& ct = c.back(); + Expression in = x; + if ((dropout_rate > 0.f || dropout_rate_h > 0.f) && !dropout_masks_valid) set_dropout_masks(x.dim().bd); + for (unsigned i = 0; i < layers; ++i) { + int dilation_offset = dilations[i] - 1; + const vector& vars = param_vars[i]; + + Expression i_h_tm1, i_c_tm1; + bool has_prev_state = (prev >= 0 || has_initial_state); + if (prev < dilation_offset) { + if (has_initial_state) { + // intial value for h and c at timestep 0 in layer i + // defaults to zero matrix input if not set in add_parameter_edges + i_h_tm1 = h0[i]; + i_c_tm1 = c0[i]; + } + else { + i_h_tm1 = zeros(*_cg, Dim({ vars[_BI].dim()[0] / 4 }, x.dim().bd)); + i_c_tm1 = i_h_tm1; + } + } + else { + i_h_tm1 = h[prev - dilation_offset][i]; + i_c_tm1 = c[prev - dilation_offset][i]; + } + // apply dropout according to https://arxiv.org/abs/1512.05287 (tied weights) + if (dropout_rate > 0.f) { + in = cmult(in, masks[i][0]); + } + if (has_prev_state && dropout_rate_h > 0.f) + i_h_tm1 = cmult(i_h_tm1, masks[i][1]); + // input + Expression tmp; + Expression i_ait; + Expression i_aft; + Expression i_aot; + Expression i_agt; + if (ln_lstm) { + const vector& ln_vars = ln_param_vars[i]; + if (has_prev_state) + tmp = vars[_BI] + layer_norm(vars[_X2I] * in, ln_vars[LN_GX], ln_vars[LN_BX]) + layer_norm(vars[_H2I] * i_h_tm1, ln_vars[LN_GH], ln_vars[LN_BH]); + else + tmp = vars[_BI] + layer_norm(vars[_X2I] * in, ln_vars[LN_GX], ln_vars[LN_BX]); + } + else { + if (has_prev_state) + tmp = affine_transform({ vars[_BI], vars[_X2I], in, vars[_H2I], i_h_tm1 }); + else + tmp = affine_transform({ vars[_BI], vars[_X2I], in }); + } + i_ait = pick_range(tmp, 0, hid); + i_aft = pick_range(tmp, hid, hid * 2); + i_aot = pick_range(tmp, hid * 2, hid * 3); + i_agt = pick_range(tmp, hid * 3, hid * 4); + Expression i_it = logistic(i_ait); + if (forget_bias != 0.0) + tmp = logistic(i_aft + forget_bias); + else + tmp = logistic(i_aft); + + Expression i_ft = tmp; + Expression i_ot = logistic(i_aot); + Expression i_gt = tanh(i_agt); + + ct[i] = has_prev_state ? (cmult(i_ft, i_c_tm1) + cmult(i_it, i_gt)) : cmult(i_it, i_gt); + if (ln_lstm) { + const vector& ln_vars = ln_param_vars[i]; + if (i==0) + in = ht[i] = cmult(i_ot, tanh(layer_norm(ct[i], ln_vars[LN_GC], ln_vars[LN_BC]))); + else + in = ht[i] = cmult(i_ot, in+tanh(layer_norm(ct[i], ln_vars[LN_GC], ln_vars[LN_BC]))); + } + else { + if (i==0) + in = ht[i] = cmult(i_ot, tanh(ct[i])); + else + in = ht[i] = cmult(i_ot, in+tanh(ct[i])); + } + } + return ht.back(); + } + + void ResidualDilatedLSTMBuilder::copy(const RNNBuilder & rnn) { + const ResidualDilatedLSTMBuilder & rnn_lstm = (const ResidualDilatedLSTMBuilder&)rnn; + DYNET_ARG_CHECK(params.size() == rnn_lstm.params.size(), + "Attempt to copy ResidualDilatedLSTMBuilder with different number of parameters " + "(" << params.size() << " != " << rnn_lstm.params.size() << ")"); + for (size_t i = 0; i < params.size(); ++i) + for (size_t j = 0; j < params[i].size(); ++j) + params[i][j] = rnn_lstm.params[i][j]; + for (size_t i = 0; i < ln_params.size(); ++i) + for (size_t j = 0; j < ln_params[i].size(); ++j) + ln_params[i][j] = rnn_lstm.ln_params[i][j]; + } + + void ResidualDilatedLSTMBuilder::set_dropout(float d) { + DYNET_ARG_CHECK(d >= 0.f && d <= 1.f, + "dropout rate must be a probability (>=0 and <=1)"); + dropout_rate = d; + dropout_rate_h = d; + } + + void ResidualDilatedLSTMBuilder::set_dropout(float d, float d_h) { + DYNET_ARG_CHECK(d >= 0.f && d <= 1.f && d_h >= 0.f && d_h <= 1.f, + "dropout rate must be a probability (>=0 and <=1)"); + dropout_rate = d; + dropout_rate_h = d_h; + } + + void ResidualDilatedLSTMBuilder::disable_dropout() { + dropout_rate = 0.f; + dropout_rate_h = 0.f; + } + + + + + //enum { _X2I, _H2I, _BI, _X2F, _H2F, _BF, _X2O, _H2O, _BO, _X2G, _H2G, _BG }; + enum { _X2I_, _H2I_, _BI_, _XA1, _HA1, _SA1, _BA1, _A2, _B2 }; + + +//*************************** + + + + AttentiveDilatedLSTMBuilder::AttentiveDilatedLSTMBuilder() : has_initial_state(false), layers(0), input_dim(0), hid(0), dropout_rate_h(0), weightnoise_std(0), dropout_masks_valid(false) { } + + AttentiveDilatedLSTMBuilder::AttentiveDilatedLSTMBuilder(vector max_dilations, + unsigned input_dim, + unsigned hidden_dim, + unsigned attention_dim, + ParameterCollection& model) + : max_dilations(max_dilations), layers(unsigned(max_dilations.size())), + input_dim(input_dim), hid(hidden_dim), attention_dim(attention_dim), weightnoise_std(0), dropout_masks_valid(false) { + unsigned layer_input_dim = input_dim; + local_model = model.add_subcollection("compact-vanilla-lstm-builder"); + for (unsigned i = 0; i < layers; ++i) { + // i + Parameter p_Wx = local_model.add_parameters({ hidden_dim * 4, layer_input_dim }); + Parameter p_Wh = local_model.add_parameters({ hidden_dim * 4, hidden_dim }); + Parameter p_b = local_model.add_parameters({ hidden_dim * 4 }, ParameterInitConst(0.f)); + + Parameter p_Wxa1 = local_model.add_parameters({ attention_dim, layer_input_dim }); + Parameter p_Wha1 = local_model.add_parameters({ attention_dim, hidden_dim }); + Parameter p_Wsa1 = local_model.add_parameters({ attention_dim, hidden_dim }); + Parameter p_ba1 = local_model.add_parameters({ attention_dim }, ParameterInitConst(0.f)); + + Parameter p_Wa2 = local_model.add_parameters({ max_dilations[i], attention_dim }); + Parameter p_ba2 = local_model.add_parameters({ max_dilations[i] }, ParameterInitConst(0.f)); + + layer_input_dim = hidden_dim; // output (hidden) from 1st layer is input to next + + vector ps = { p_Wx, p_Wh, p_b, p_Wxa1, p_Wha1, p_Wsa1, p_ba1, p_Wa2, p_ba2 }; + params.push_back(ps); + + } // layers + dropout_rate = 0.f; + dropout_rate_h = 0.f; + } + + void AttentiveDilatedLSTMBuilder::new_graph_impl(ComputationGraph& cg, bool update) { + param_vars.clear(); + for (unsigned i = 0; i < layers; ++i) { + auto& p = params[i]; + vector vars; + for (unsigned j = 0; j < p.size(); ++j) { + vars.push_back(update ? parameter(cg, p[j]) : const_parameter(cg, p[j])); + } + param_vars.push_back(vars); + } + + _cg = &cg; + } + // layout: 0..layers = c + // layers+1..2*layers = h + void AttentiveDilatedLSTMBuilder::start_new_sequence_impl(const vector& hinit) { + h.clear(); + c.clear(); + + if (hinit.size() > 0) { + DYNET_ARG_CHECK(layers * 2 == hinit.size(), + "AttentiveDilatedLSTMBuilder must be initialized with 2 times as many expressions as layers " + "(hidden state, and cell for each layer). However, for " << layers << " layers, " << + hinit.size() << " expressions were passed in"); + h0.resize(layers); + c0.resize(layers); + for (unsigned i = 0; i < layers; ++i) { + c0[i] = hinit[i]; + h0[i] = hinit[i + layers]; + } + has_initial_state = true; + } + else { + has_initial_state = false; + } + + dropout_masks_valid = false; + } + + void AttentiveDilatedLSTMBuilder::set_dropout_masks(unsigned batch_size) { + masks.clear(); + for (unsigned i = 0; i < layers; ++i) { + std::vector masks_i; + unsigned idim = (i == 0) ? input_dim : hid; + if (dropout_rate > 0.f || dropout_rate_h > 0.f) { + float retention_rate = 1.f - dropout_rate; + float retention_rate_h = 1.f - dropout_rate_h; + float scale = 1.f / retention_rate; + float scale_h = 1.f / retention_rate_h; + // in + masks_i.push_back(random_bernoulli(*_cg, Dim({ idim }, batch_size), retention_rate, scale)); + // h + masks_i.push_back(random_bernoulli(*_cg, Dim({ hid }, batch_size), retention_rate_h, scale_h)); + masks.push_back(masks_i); + } + } + dropout_masks_valid = true; + } + + ParameterCollection & AttentiveDilatedLSTMBuilder::get_parameter_collection() { + return local_model; + } + + // TODO - Make this correct + // Copied c from the previous step (otherwise c.size()< h.size()) + // Also is creating a new step something we want? + // wouldn't overwriting the current one be better? + Expression AttentiveDilatedLSTMBuilder::set_h_impl(int prev, const vector& h_new) { + DYNET_ARG_CHECK(h_new.empty() || h_new.size() == layers, + "AttentiveDilatedLSTMBuilder::set_h expects as many inputs as layers, but got " << + h_new.size() << " inputs for " << layers << " layers"); + const unsigned t = unsigned(h.size()); + h.push_back(vector(layers)); + c.push_back(vector(layers)); + for (unsigned i = 0; i < layers; ++i) { + Expression h_i = h_new[i]; + Expression c_i = c[t - 1][i]; + h[t][i] = h_i; + c[t][i] = c_i; + } + return h[t].back(); + } + // Current implementation : s_new is either {new_c[0],...,new_c[n]} + // or {new_c[0],...,new_c[n],new_h[0],...,new_h[n]} + Expression AttentiveDilatedLSTMBuilder::set_s_impl(int prev, const std::vector& s_new) { + DYNET_ARG_CHECK(s_new.size() == layers || s_new.size() == 2 * layers, + "AttentiveDilatedLSTMBuilder::set_s expects either as many inputs or twice as many inputs as layers, but got " << s_new.size() << " inputs for " << layers << " layers"); + bool only_c = s_new.size() == layers; + const unsigned t = unsigned(c.size()); + h.push_back(vector(layers)); + c.push_back(vector(layers)); + for (unsigned i = 0; i < layers; ++i) { + Expression h_i = only_c ? h[t - 1][i] : s_new[i + layers]; + Expression c_i = s_new[i]; + h[t][i] = h_i; + c[t][i] = c_i; + } + return h[t].back(); + } + + Expression AttentiveDilatedLSTMBuilder::add_input_impl(int prev, const Expression& x) { + h.push_back(vector(layers)); + c.push_back(vector(layers)); + vector& ht = h.back(); + vector& ct = c.back(); + Expression in = x; + if ((dropout_rate > 0.f || dropout_rate_h > 0.f) && !dropout_masks_valid) set_dropout_masks(x.dim().bd); + for (unsigned i = 0; i < layers; ++i) { + int dilation_offset= max_dilations[i]-1; + const vector& vars = param_vars[i]; + Expression i_h_tm1, i_c_tm1; + if (prev < dilation_offset) { + if (has_initial_state) { + // initial value for h and c at timestep 0 in layer i + // defaults to zero matrix input if not set in add_parameter_edges + i_h_tm1 = h0[i]; + i_c_tm1 = c0[i]; + } + else { + i_h_tm1 = zeros(*_cg, Dim({ vars[_BI].dim()[0] / 4 }, x.dim().bd)); + i_c_tm1 = i_h_tm1; + } + } + else { + if (dilation_offset>0) { + //enum { _X2I, _H2I, _BI, _XA1, _HA1, _SA1, _BA1, _A2, _B2 }; + Expression weights_ex=vars[_XA1]*in+ vars[_HA1]*h[prev][i]+ vars[_SA1]*c[prev][i]+ vars[_BA1]; + weights_ex=tanh(weights_ex); + weights_ex=vars[_A2]* weights_ex+ vars[_B2]; + weights_ex =softmax(weights_ex); + #if defined _DEBUG + vector weights=as_vector(weights_ex.value()); + #endif + + unsigned indx=0; + Expression w_ex = pick(weights_ex, indx); + Expression avg_h= cmult(h[prev][i], w_ex); + for (indx=1; indx <= dilation_offset; indx++) {//dilation_offset==max_dilations[i]-1, so together with indx==0, we cover max_dilations[i] steps + w_ex = pick(weights_ex, indx); + avg_h = avg_h+cmult(h[prev- indx][i], w_ex); + } + i_h_tm1 = avg_h; + } else { + i_h_tm1 = h[prev- dilation_offset][i]; + } + i_c_tm1 = c[prev- dilation_offset][i]; + } + if (dropout_rate > 0.f || dropout_rate_h > 0.f) { + // apply dropout according to https://arxiv.org/abs/1512.05287 (tied weights) + Expression gates_t = vanilla_lstm_gates_dropout({ in }, i_h_tm1, vars[_X2I], vars[_H2I], vars[_BI], masks[i][0], masks[i][1], weightnoise_std); + ct[i] = vanilla_lstm_c(i_c_tm1, gates_t); + in = ht[i] = vanilla_lstm_h(ct[i], gates_t); + } + else { + Expression gates_t = vanilla_lstm_gates({ in }, i_h_tm1, vars[_X2I], vars[_H2I], vars[_BI], weightnoise_std); + ct[i] = vanilla_lstm_c(i_c_tm1, gates_t); + in = ht[i] = vanilla_lstm_h(ct[i], gates_t); + } + } + return ht.back(); + } + + void AttentiveDilatedLSTMBuilder::copy(const RNNBuilder & rnn) { + const AttentiveDilatedLSTMBuilder & rnn_lstm = (const AttentiveDilatedLSTMBuilder&)rnn; + DYNET_ARG_CHECK(params.size() == rnn_lstm.params.size(), + "Attempt to copy AttentiveDilatedLSTMBuilder with different number of parameters " + "(" << params.size() << " != " << rnn_lstm.params.size() << ")"); + for (size_t i = 0; i < params.size(); ++i) + for (size_t j = 0; j < params[i].size(); ++j) + params[i][j] = rnn_lstm.params[i][j]; + } + + void AttentiveDilatedLSTMBuilder::set_dropout(float d) { + DYNET_ARG_CHECK(d >= 0.f && d <= 1.f, + "dropout rate must be a probability (>=0 and <=1)"); + dropout_rate = d; + dropout_rate_h = d; + } + + void AttentiveDilatedLSTMBuilder::set_dropout(float d, float d_h) { + DYNET_ARG_CHECK(d >= 0.f && d <= 1.f && d_h >= 0.f && d_h <= 1.f, + "dropout rate must be a probability (>=0 and <=1)"); + dropout_rate = d; + dropout_rate_h = d_h; + } + + void AttentiveDilatedLSTMBuilder::disable_dropout() { + dropout_rate = 0.f; + dropout_rate_h = 0.f; + } + void AttentiveDilatedLSTMBuilder::set_weightnoise(float std) { + DYNET_ARG_CHECK(std >= 0.f, "weight noise must have standard deviation >=0"); + weightnoise_std = std; + } + + //*/ + + DilatedLSTMBuilder::DilatedLSTMBuilder() : has_initial_state(false), layers(0), input_dim(0), hid(0), dropout_rate_h(0), weightnoise_std(0), dropout_masks_valid(false) { } + + DilatedLSTMBuilder::DilatedLSTMBuilder(vector dilations, + unsigned input_dim, + unsigned hidden_dim, + ParameterCollection& model) + : dilations(dilations), layers(unsigned(dilations.size())), + input_dim(input_dim), hid(hidden_dim), weightnoise_std(0), dropout_masks_valid(false) { + unsigned layer_input_dim = input_dim; + local_model = model.add_subcollection("compact-vanilla-lstm-builder"); + for (unsigned i = 0; i < layers; ++i) { + // i + Parameter p_Wx = local_model.add_parameters({ hidden_dim * 4, layer_input_dim }); + Parameter p_Wh = local_model.add_parameters({ hidden_dim * 4, hidden_dim }); + Parameter p_b = local_model.add_parameters({ hidden_dim * 4 }, ParameterInitConst(0.f)); + + layer_input_dim = hidden_dim; // output (hidden) from 1st layer is input to next + + vector ps = { p_Wx, p_Wh, p_b }; + params.push_back(ps); + + } // layers + dropout_rate = 0.f; + dropout_rate_h = 0.f; + } + + void DilatedLSTMBuilder::new_graph_impl(ComputationGraph& cg, bool update) { + param_vars.clear(); + for (unsigned i = 0; i < layers; ++i) { + auto& p = params[i]; + vector vars; + for (unsigned j = 0; j < p.size(); ++j) { vars.push_back(update ? parameter(cg, p[j]) : const_parameter(cg, p[j])); } + param_vars.push_back(vars); + } + + _cg = &cg; + } + // layout: 0..layers = c + // layers+1..2*layers = h + void DilatedLSTMBuilder::start_new_sequence_impl(const vector& hinit) { + h.clear(); + c.clear(); + + if (hinit.size() > 0) { + DYNET_ARG_CHECK(layers * 2 == hinit.size(), + "DilatedLSTMBuilder must be initialized with 2 times as many expressions as layers " + "(hidden state, and cell for each layer). However, for " << layers << " layers, " << + hinit.size() << " expressions were passed in"); + h0.resize(layers); + c0.resize(layers); + for (unsigned i = 0; i < layers; ++i) { + c0[i] = hinit[i]; + h0[i] = hinit[i + layers]; + } + has_initial_state = true; + } else { + has_initial_state = false; + } + + dropout_masks_valid = false; + } + + void DilatedLSTMBuilder::set_dropout_masks(unsigned batch_size) { + masks.clear(); + for (unsigned i = 0; i < layers; ++i) { + std::vector masks_i; + unsigned idim = (i == 0) ? input_dim : hid; + if (dropout_rate > 0.f || dropout_rate_h > 0.f) { + float retention_rate = 1.f - dropout_rate; + float retention_rate_h = 1.f - dropout_rate_h; + float scale = 1.f / retention_rate; + float scale_h = 1.f / retention_rate_h; + // in + masks_i.push_back(random_bernoulli(*_cg, Dim({ idim }, batch_size), retention_rate, scale)); + // h + masks_i.push_back(random_bernoulli(*_cg, Dim({ hid }, batch_size), retention_rate_h, scale_h)); + masks.push_back(masks_i); + } + } + dropout_masks_valid = true; + } + + ParameterCollection & DilatedLSTMBuilder::get_parameter_collection() { + return local_model; + } + + // TODO - Make this correct + // Copied c from the previous step (otherwise c.size()< h.size()) + // Also is creating a new step something we want? + // wouldn't overwriting the current one be better? + Expression DilatedLSTMBuilder::set_h_impl(int prev, const vector& h_new) { + DYNET_ARG_CHECK(h_new.empty() || h_new.size() == layers, + "DilatedLSTMBuilder::set_h expects as many inputs as layers, but got " << + h_new.size() << " inputs for " << layers << " layers"); + const unsigned t = unsigned(h.size()); + h.push_back(vector(layers)); + c.push_back(vector(layers)); + for (unsigned i = 0; i < layers; ++i) { + Expression h_i = h_new[i]; + Expression c_i = c[t - 1][i]; + h[t][i] = h_i; + c[t][i] = c_i; + } + return h[t].back(); + } + // Current implementation : s_new is either {new_c[0],...,new_c[n]} + // or {new_c[0],...,new_c[n],new_h[0],...,new_h[n]} + Expression DilatedLSTMBuilder::set_s_impl(int prev, const std::vector& s_new) { + DYNET_ARG_CHECK(s_new.size() == layers || s_new.size() == 2 * layers, + "DilatedLSTMBuilder::set_s expects either as many inputs or twice as many inputs as layers, but got " << s_new.size() << " inputs for " << layers << " layers"); + bool only_c = s_new.size() == layers; + const unsigned t = unsigned(c.size()); + h.push_back(vector(layers)); + c.push_back(vector(layers)); + for (unsigned i = 0; i < layers; ++i) { + Expression h_i = only_c ? h[t - 1][i] : s_new[i + layers]; + Expression c_i = s_new[i]; + h[t][i] = h_i; + c[t][i] = c_i; + } + return h[t].back(); + } + + Expression DilatedLSTMBuilder::add_input_impl(int prev, const Expression& x) { + h.push_back(vector(layers)); + c.push_back(vector(layers)); + vector& ht = h.back(); + vector& ct = c.back(); + Expression in = x; + if ((dropout_rate > 0.f || dropout_rate_h > 0.f) && !dropout_masks_valid) set_dropout_masks(x.dim().bd); + for (unsigned i = 0; i < layers; ++i) { + int dilation_offset = dilations[i] - 1; + const vector& vars = param_vars[i]; + Expression i_h_tm1, i_c_tm1; + if (prev < dilation_offset) { + if (has_initial_state) { + // initial value for h and c at timestep 0 in layer i + // defaults to zero matrix input if not set in add_parameter_edges + i_h_tm1 = h0[i]; + i_c_tm1 = c0[i]; + } else { + i_h_tm1 = zeros(*_cg, Dim({ vars[_BI].dim()[0] / 4 }, x.dim().bd)); + i_c_tm1 = i_h_tm1; + } + } else { // t > 0 + i_h_tm1 = h[prev - dilation_offset][i]; + i_c_tm1 = c[prev - dilation_offset][i]; + } + if (dropout_rate > 0.f || dropout_rate_h > 0.f) { + // apply dropout according to https://arxiv.org/abs/1512.05287 (tied weights) + Expression gates_t = vanilla_lstm_gates_dropout({ in }, i_h_tm1, vars[_X2I], vars[_H2I], vars[_BI], masks[i][0], masks[i][1], weightnoise_std); + ct[i] = vanilla_lstm_c(i_c_tm1, gates_t); + in = ht[i] = vanilla_lstm_h(ct[i], gates_t); + } else { + Expression gates_t = vanilla_lstm_gates({ in }, i_h_tm1, vars[_X2I], vars[_H2I], vars[_BI], weightnoise_std); + ct[i] = vanilla_lstm_c(i_c_tm1, gates_t); + in = ht[i] = vanilla_lstm_h(ct[i], gates_t); + } + } + return ht.back(); + } + + void DilatedLSTMBuilder::copy(const RNNBuilder & rnn) { + const DilatedLSTMBuilder & rnn_lstm = (const DilatedLSTMBuilder&)rnn; + DYNET_ARG_CHECK(params.size() == rnn_lstm.params.size(), + "Attempt to copy DilatedLSTMBuilder with different number of parameters " + "(" << params.size() << " != " << rnn_lstm.params.size() << ")"); + for (size_t i = 0; i < params.size(); ++i) + for (size_t j = 0; j < params[i].size(); ++j) + params[i][j] = rnn_lstm.params[i][j]; + } + + void DilatedLSTMBuilder::set_dropout(float d) { + DYNET_ARG_CHECK(d >= 0.f && d <= 1.f, + "dropout rate must be a probability (>=0 and <=1)"); + dropout_rate = d; + dropout_rate_h = d; + } + + void DilatedLSTMBuilder::set_dropout(float d, float d_h) { + DYNET_ARG_CHECK(d >= 0.f && d <= 1.f && d_h >= 0.f && d_h <= 1.f, + "dropout rate must be a probability (>=0 and <=1)"); + dropout_rate = d; + dropout_rate_h = d_h; + } + + void DilatedLSTMBuilder::disable_dropout() { + dropout_rate = 0.f; + dropout_rate_h = 0.f; + } + void DilatedLSTMBuilder::set_weightnoise(float std) { + DYNET_ARG_CHECK(std >= 0.f, "weight noise must have standard deviation >=0"); + weightnoise_std = std; + } + +} // namespace dynet diff --git a/c++/slstm.h b/c++/slstm.h new file mode 100644 index 0000000..adb63a7 --- /dev/null +++ b/c++/slstm.h @@ -0,0 +1,394 @@ +/** +* file slstm.h +* header for my implementation of dilated LSTMs, based on Dynet LSTM builders + - DilatedLSTMBuilder - standard Dilated LSTM (https://papers.nips.cc/paper/6613-dilated-recurrent-neural-networks.pdf) + - ResidualDilatedLSTMBuilder - Dilated LSTM with special Residual shortcuts, after https://arxiv.org/abs/1701.03360 + - AttentiveDilatedLSTMBuilder - Dilated LSTM with Attention mechanism, as in the second stage of https://arxiv.org/abs/1704.02971 +* +Slawek Smyl, Mar-May 2018 +*/ + +#ifndef DYNET_SLSTMS_H_ +#define DYNET_SLSTMS_H_ + +#include "dynet/dynet.h" +#include "dynet/rnn.h" +#include "dynet/expr.h" + +using namespace std; + +namespace dynet { + + //basd on VanillaLSTMBuilder + struct ResidualDilatedLSTMBuilder : public RNNBuilder { + /** + * @brief Default Constructor + */ + ResidualDilatedLSTMBuilder(); + /** + * \brief Constructor for the ResidualDilatedLSTMBuilder + * + * \param dilations Vector of dilations + * \param input_dim Dimention of the input \f$x_t\f$ + * \param hidden_dim Dimention of the hidden states \f$h_t\f$ and \f$c_t\f$ + * \param model ParameterCollection holding the parameters + * \param ln_lstm Whether to use layer normalization + * \param forget_bias value(float) to use as bias for the forget gate(default = 1.0) + */ + explicit ResidualDilatedLSTMBuilder(vector dilations, + unsigned input_dim, + unsigned hidden_dim, + ParameterCollection& model, + bool ln_lstm = false, + float forget_bias = 1.f); + + Expression back() const override { return (cur == -1 ? h0.back() : h[cur].back()); } + std::vector final_h() const override { return (h.size() == 0 ? h0 : h.back()); } + std::vector final_s() const override { + std::vector ret = (c.size() == 0 ? c0 : c.back()); + for (auto my_h : final_h()) ret.push_back(my_h); + return ret; + } + unsigned num_h0_components() const override { return 2 * layers; } + + std::vector get_h(RNNPointer i) const override { return (i == -1 ? h0 : h[i]); } + std::vector get_s(RNNPointer i) const override { + std::vector ret = (i == -1 ? c0 : c[i]); + for (auto my_h : get_h(i)) ret.push_back(my_h); + return ret; + } + + void copy(const RNNBuilder & params) override; + + /** + * \brief Set the dropout rates to a unique value + * \details This has the same effect as `set_dropout(d,d_h)` except that all the dropout rates are set to the same value. + * \param d Dropout rate to be applied on all of \f$x,h\f$ + */ + void set_dropout(float d); + /** + * \brief Set the dropout rates + * \details The dropout implemented here is the variational dropout with tied weights introduced in [Gal, 2016](http://papers.nips.cc/paper/6241-a-theoretically-grounded-application-of-dropout-in-recurrent-neural-networks) + * More specifically, dropout masks \f$\mathbf{z_x}\sim \mathrm{Bernoulli}(1-d_x)\f$,\f$\mathbf{z_h}\sim \mathrm{Bernoulli}(1-d_h)\f$ are sampled at the start of each sequence. + * The dynamics of the cell are then modified to : + * + * \f$ + * \begin{split} + i_t & =\sigma(W_{ix}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ih}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_i)\\ + f_t & = \sigma(W_{fx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{fh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_f)\\ + o_t & = \sigma(W_{ox}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{oh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_o)\\ + \tilde{c_t} & = \tanh(W_{cx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ch}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_c)\\ + c_t & = c_{t-1}\circ f_t + \tilde{c_t}\circ i_t\\ + h_t & = \tanh(c_t)\circ o_t\\ + \end{split} + * \f$ + * + * For more detail as to why scaling is applied, see the "Unorthodox" section of the documentation + * \param d Dropout rate \f$d_x\f$ for the input \f$x_t\f$ + * \param d_h Dropout rate \f$d_h\f$ for the output \f$h_t\f$ + */ + void set_dropout(float d, float d_r); + /** + * \brief Set all dropout rates to 0 + * \details This is equivalent to `set_dropout(0)` or `set_dropout(0,0,0)` + * + */ + void disable_dropout(); + /** + * \brief Set dropout masks at the beginning of a sequence for a specific batch size + * \details If this function is not called on batched input, the same mask will be applied across + * all batch elements. Use this to apply different masks to each batch element + * + * \param batch_size Batch size + */ + void set_dropout_masks(unsigned batch_size = 1); + /** + * \brief Get parameters in ResidualDilatedLSTMBuilder + * \return list of points to ParameterStorage objects + */ + ParameterCollection & get_parameter_collection() override; + protected: + void new_graph_impl(ComputationGraph& cg, bool update) override; + void start_new_sequence_impl(const std::vector& h0) override; + Expression add_input_impl(int prev, const Expression& x) override; + Expression set_h_impl(int prev, const std::vector& h_new) override; + Expression set_s_impl(int prev, const std::vector& s_new) override; + + public: + ParameterCollection local_model; + // first index is layer, then ... + std::vector> params; + // first index is layer, then ... + std::vector> ln_params; + + // first index is layer, then ... + std::vector> param_vars; + // first index is layer, then ... + std::vector> ln_param_vars; + + // first index is layer, then ... + std::vector> masks; + + // first index is time, second is layer + std::vector> h, c; + + // initial values of h and c at each layer + // - both default to zero matrix input + bool has_initial_state; // if this is false, treat h0 and c0 as 0 + std::vector h0; + std::vector c0; + unsigned layers; + unsigned input_dim, hid; + float dropout_rate_h; + bool ln_lstm; + float forget_bias; + bool dropout_masks_valid; + vector dilations; //one int per layer + + private: + ComputationGraph* _cg; // Pointer to current cg + + }; + + + struct DilatedLSTMBuilder : public RNNBuilder { + /** + * @brief Default Constructor + */ + DilatedLSTMBuilder(); + /** + * \brief Constructor for the DilatedLSTMBuilder + * + * \param dilations Vector of dilations + * \param input_dim Dimention of the input \f$x_t\f$ + * \param hidden_dim Dimention of the hidden states \f$h_t\f$ and \f$c_t\f$ + * \param model ParameterCollection holding the parameters + */ + explicit DilatedLSTMBuilder(vector dilations, + unsigned input_dim, + unsigned hidden_dim, + ParameterCollection& model); + + Expression back() const override { return (cur == -1 ? h0.back() : h[cur].back()); } + std::vector final_h() const override { return (h.size() == 0 ? h0 : h.back()); } + std::vector final_s() const override { + std::vector ret = (c.size() == 0 ? c0 : c.back()); + for (auto my_h : final_h()) ret.push_back(my_h); + return ret; + } + unsigned num_h0_components() const override { return 2 * layers; } + + std::vector get_h(RNNPointer i) const override { return (i == -1 ? h0 : h[i]); } + std::vector get_s(RNNPointer i) const override { + std::vector ret = (i == -1 ? c0 : c[i]); + for (auto my_h : get_h(i)) ret.push_back(my_h); + return ret; + } + + void copy(const RNNBuilder & params) override; + + /** + * \brief Set the dropout rates to a unique value + * \details This has the same effect as `set_dropout(d,d_h)` except that all the dropout rates are set to the same value. + * \param d Dropout rate to be applied on all of \f$x,h\f$ + */ + void set_dropout(float d); + /** + * \brief Set the dropout rates + * \details The dropout implemented here is the variational dropout with tied weights introduced in [Gal, 2016](http://papers.nips.cc/paper/6241-a-theoretically-grounded-application-of-dropout-in-recurrent-neural-networks) + * More specifically, dropout masks \f$\mathbf{z_x}\sim \mathrm{Bernoulli}(1-d_x)\f$,\f$\mathbf{z_h}\sim \mathrm{Bernoulli}(1-d_h)\f$ are sampled at the start of each sequence. + * The dynamics of the cell are then modified to : + * + * \f$ + * \begin{split} + i_t & =\sigma(W_{ix}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ih}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_i)\\ + f_t & = \sigma(W_{fx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{fh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_f)\\ + o_t & = \sigma(W_{ox}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{oh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_o)\\ + \tilde{c_t} & = \tanh(W_{cx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ch}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_c)\\ + c_t & = c_{t-1}\circ f_t + \tilde{c_t}\circ i_t\\ + h_t & = \tanh(c_t)\circ o_t\\ + \end{split} + * \f$ + * + * For more detail as to why scaling is applied, see the "Unorthodox" section of the documentation + * \param d Dropout rate \f$d_x\f$ for the input \f$x_t\f$ + */ + void set_dropout(float d, float d_r); + /** + * \brief Set all dropout rates to 0 + * \details This is equivalent to `set_dropout(0)` or `set_dropout(0,0,0)` + * + */ + void disable_dropout(); + /** + * \brief Set dropout masks at the beginning of a sequence for a specific batch size + * \details If this function is not called on batched input, the same mask will be applied across + * all batch elements. Use this to apply different masks to each batch element + * + * \param batch_size Batch size + */ + void set_dropout_masks(unsigned batch_size = 1); + + void set_weightnoise(float std); + ParameterCollection & get_parameter_collection() override; + protected: + void new_graph_impl(ComputationGraph& cg, bool update) override; + void start_new_sequence_impl(const std::vector& h0) override; + Expression add_input_impl(int prev, const Expression& x) override; + Expression set_h_impl(int prev, const std::vector& h_new) override; + Expression set_s_impl(int prev, const std::vector& s_new) override; + + public: + ParameterCollection local_model; + // first index is layer, then ... + std::vector> params; + + // first index is layer, then ... + std::vector> param_vars; + + // first index is layer, then ... + std::vector> masks; + + // first index is time, second is layer + std::vector> h, c; + + // initial values of h and c at each layer + // - both default to zero matrix input + bool has_initial_state; // if this is false, treat h0 and c0 as 0 + std::vector h0; + std::vector c0; + unsigned layers; + unsigned input_dim, hid; + float dropout_rate_h; + float weightnoise_std; + vector dilations; //one int per layer + + bool dropout_masks_valid; + private: + ComputationGraph* _cg; // Pointer to current cg + + }; + + + struct AttentiveDilatedLSTMBuilder : public RNNBuilder { + /** + * @brief Default Constructor + */ + AttentiveDilatedLSTMBuilder(); + /** + * \brief Constructor for the AttentiveDilatedLSTMBuilder + * + * \param max_dilations Vector, maximum dilations (per layer) + * \param input_dim Dimention of the input \f$x_t\f$ + * \param hidden_dim Dimention of the hidden states \f$h_t\f$ and \f$c_t\f$ + * \param model ParameterCollection holding the parameters + */ + explicit AttentiveDilatedLSTMBuilder(vector max_dilations, + unsigned input_dim, + unsigned hidden_dim, + unsigned attention_dim, + ParameterCollection& model); + + Expression back() const override { return (cur == -1 ? h0.back() : h[cur].back()); } + std::vector final_h() const override { return (h.size() == 0 ? h0 : h.back()); } + std::vector final_s() const override { + std::vector ret = (c.size() == 0 ? c0 : c.back()); + for (auto my_h : final_h()) ret.push_back(my_h); + return ret; + } + unsigned num_h0_components() const override { return 2 * layers; } + + std::vector get_h(RNNPointer i) const override { return (i == -1 ? h0 : h[i]); } + std::vector get_s(RNNPointer i) const override { + std::vector ret = (i == -1 ? c0 : c[i]); + for (auto my_h : get_h(i)) ret.push_back(my_h); + return ret; + } + + void copy(const RNNBuilder & params) override; + + /** + * \brief Set the dropout rates to a unique value + * \details This has the same effect as `set_dropout(d,d_h)` except that all the dropout rates are set to the same value. + * \param d Dropout rate to be applied on all of \f$x,h\f$ + */ + void set_dropout(float d); + /** + * \brief Set the dropout rates + * \details The dropout implemented here is the variational dropout with tied weights introduced in [Gal, 2016](http://papers.nips.cc/paper/6241-a-theoretically-grounded-application-of-dropout-in-recurrent-neural-networks) + * More specifically, dropout masks \f$\mathbf{z_x}\sim \mathrm{Bernoulli}(1-d_x)\f$,\f$\mathbf{z_h}\sim \mathrm{Bernoulli}(1-d_h)\f$ are sampled at the start of each sequence. + * The dynamics of the cell are then modified to : + * + * \f$ + * \begin{split} + i_t & =\sigma(W_{ix}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ih}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_i)\\ + f_t & = \sigma(W_{fx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{fh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_f)\\ + o_t & = \sigma(W_{ox}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{oh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_o)\\ + \tilde{c_t} & = \tanh(W_{cx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ch}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_c)\\ + c_t & = c_{t-1}\circ f_t + \tilde{c_t}\circ i_t\\ + h_t & = \tanh(c_t)\circ o_t\\ + \end{split} + * \f$ + * + * For more detail as to why scaling is applied, see the "Unorthodox" section of the documentation + * \param d Dropout rate \f$d_x\f$ for the input \f$x_t\f$ + */ + void set_dropout(float d, float d_r); + /** + * \brief Set all dropout rates to 0 + * \details This is equivalent to `set_dropout(0)` or `set_dropout(0,0,0)` + * + */ + void disable_dropout(); + /** + * \brief Set dropout masks at the beginning of a sequence for a specific batch size + * \details If this function is not called on batched input, the same mask will be applied across + * all batch elements. Use this to apply different masks to each batch element + * + * \param batch_size Batch size + */ + void set_dropout_masks(unsigned batch_size = 1); + + void set_weightnoise(float std); + ParameterCollection & get_parameter_collection() override; + protected: + void new_graph_impl(ComputationGraph& cg, bool update) override; + void start_new_sequence_impl(const std::vector& h0) override; + Expression add_input_impl(int prev, const Expression& x) override; + Expression set_h_impl(int prev, const std::vector& h_new) override; + Expression set_s_impl(int prev, const std::vector& s_new) override; + + public: + ParameterCollection local_model; + // first index is layer, then ... + std::vector> params; + + // first index is layer, then ... + std::vector> param_vars; + + // first index is layer, then ... + std::vector> masks; + + // first index is time, second is layer + std::vector> h, c; + + // initial values of h and c at each layer + // - both default to zero matrix input + bool has_initial_state; // if this is false, treat h0 and c0 as 0 + std::vector h0; + std::vector c0; + unsigned layers; + unsigned input_dim, hid; + unsigned attention_dim; + float dropout_rate_h; + float weightnoise_std; + vector max_dilations; //one int per layer + + bool dropout_masks_valid; + private: + ComputationGraph* _cg; // Pointer to current cg + + }; +} // namespace dynet + +#endif diff --git a/c++/windows_VisualStudio/M4.sln b/c++/windows_VisualStudio/M4.sln new file mode 100644 index 0000000..035373c --- /dev/null +++ b/c++/windows_VisualStudio/M4.sln @@ -0,0 +1,58 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "M41", "M41\M41.vcxproj", "{928301A0-F01A-48F6-A499-851B3CE8BD4E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "M42", "M42\M42.vcxproj", "{A16B5466-E680-43F6-A884-A4A01EB78E50}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "M43", "M43\M43.vcxproj", "{BE951571-3F3A-4048-BAA3-0C05F38CFF42}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "M44", "M44\M44.vcxproj", "{7A192E0C-8F58-4D65-998E-3A7010AB5F87}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + RelWithDebug|x64 = RelWithDebug|x64 + RelWithDebug|x86 = RelWithDebug|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {928301A0-F01A-48F6-A499-851B3CE8BD4E}.Debug|x64.ActiveCfg = Debug|x64 + {928301A0-F01A-48F6-A499-851B3CE8BD4E}.Debug|x64.Build.0 = Debug|x64 + {928301A0-F01A-48F6-A499-851B3CE8BD4E}.Debug|x86.ActiveCfg = Debug|Win32 + {928301A0-F01A-48F6-A499-851B3CE8BD4E}.Debug|x86.Build.0 = Debug|Win32 + {928301A0-F01A-48F6-A499-851B3CE8BD4E}.RelWithDebug|x64.ActiveCfg = RelWithDebug|x64 + {928301A0-F01A-48F6-A499-851B3CE8BD4E}.RelWithDebug|x64.Build.0 = RelWithDebug|x64 + {928301A0-F01A-48F6-A499-851B3CE8BD4E}.RelWithDebug|x86.ActiveCfg = RelWithDebug|Win32 + {928301A0-F01A-48F6-A499-851B3CE8BD4E}.RelWithDebug|x86.Build.0 = RelWithDebug|Win32 + {A16B5466-E680-43F6-A884-A4A01EB78E50}.Debug|x64.ActiveCfg = Debug|x64 + {A16B5466-E680-43F6-A884-A4A01EB78E50}.Debug|x64.Build.0 = Debug|x64 + {A16B5466-E680-43F6-A884-A4A01EB78E50}.Debug|x86.ActiveCfg = Debug|Win32 + {A16B5466-E680-43F6-A884-A4A01EB78E50}.Debug|x86.Build.0 = Debug|Win32 + {A16B5466-E680-43F6-A884-A4A01EB78E50}.RelWithDebug|x64.ActiveCfg = RelWithDebug|x64 + {A16B5466-E680-43F6-A884-A4A01EB78E50}.RelWithDebug|x64.Build.0 = RelWithDebug|x64 + {A16B5466-E680-43F6-A884-A4A01EB78E50}.RelWithDebug|x86.ActiveCfg = RelWithDebug|Win32 + {A16B5466-E680-43F6-A884-A4A01EB78E50}.RelWithDebug|x86.Build.0 = RelWithDebug|Win32 + {BE951571-3F3A-4048-BAA3-0C05F38CFF42}.Debug|x64.ActiveCfg = Debug|x64 + {BE951571-3F3A-4048-BAA3-0C05F38CFF42}.Debug|x64.Build.0 = Debug|x64 + {BE951571-3F3A-4048-BAA3-0C05F38CFF42}.Debug|x86.ActiveCfg = Debug|Win32 + {BE951571-3F3A-4048-BAA3-0C05F38CFF42}.Debug|x86.Build.0 = Debug|Win32 + {BE951571-3F3A-4048-BAA3-0C05F38CFF42}.RelWithDebug|x64.ActiveCfg = RelWithDebug|x64 + {BE951571-3F3A-4048-BAA3-0C05F38CFF42}.RelWithDebug|x64.Build.0 = RelWithDebug|x64 + {BE951571-3F3A-4048-BAA3-0C05F38CFF42}.RelWithDebug|x86.ActiveCfg = RelWithDebug|Win32 + {BE951571-3F3A-4048-BAA3-0C05F38CFF42}.RelWithDebug|x86.Build.0 = RelWithDebug|Win32 + {7A192E0C-8F58-4D65-998E-3A7010AB5F87}.Debug|x64.ActiveCfg = Debug|x64 + {7A192E0C-8F58-4D65-998E-3A7010AB5F87}.Debug|x64.Build.0 = Debug|x64 + {7A192E0C-8F58-4D65-998E-3A7010AB5F87}.Debug|x86.ActiveCfg = Debug|Win32 + {7A192E0C-8F58-4D65-998E-3A7010AB5F87}.Debug|x86.Build.0 = Debug|Win32 + {7A192E0C-8F58-4D65-998E-3A7010AB5F87}.RelWithDebug|x64.ActiveCfg = RelWithDebug|x64 + {7A192E0C-8F58-4D65-998E-3A7010AB5F87}.RelWithDebug|x64.Build.0 = RelWithDebug|x64 + {7A192E0C-8F58-4D65-998E-3A7010AB5F87}.RelWithDebug|x86.ActiveCfg = RelWithDebug|Win32 + {7A192E0C-8F58-4D65-998E-3A7010AB5F87}.RelWithDebug|x86.Build.0 = RelWithDebug|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/c++/windows_VisualStudio/M41/ES_RNN.cc b/c++/windows_VisualStudio/M41/ES_RNN.cc new file mode 100644 index 0000000..43dc358 --- /dev/null +++ b/c++/windows_VisualStudio/M41/ES_RNN.cc @@ -0,0 +1,1193 @@ +/*ES-RNN: ES-RNN Exponential Smoothing Recurrent Neural Network hybrid. Point forecast. +Slawek Smyl, Jan-May 2017. + +Dilated LSTMs, with optional shortcuts, attention. +It is meant to be used for Monthly and Quarterly series of M4 competition, becasue the DE (Diversified Ensemble) version is too slow. +The program uses and requires Dynet NN library(https://github.com/clab/dynet); can be compiled and run on Windows, Linux, and Mac. + +It has to be invoked in pair of executables, passing at least two integers: seedForChunks, chunkNo +so e.g. create a script with following lines on Windows +start 10 1 +start 10 2 +Modern computers have at more then 2 cores, so e.g. on 6-core machine create and run the following script with 3 pairs of workers: +# start 10 1 0 +# start 10 2 0 +# start 20 1 5 +# start 20 2 5 +# start 30 1 10 +# start 30 2 10 +seedForChunks have to be the same withion one pair, chunk numbers have to be 1 and 2. +We have added here the third parameter: ibigOffset. The straddle should be equal or bigger than BIG_LOOP. +Each pair goes through BIG_LOOP (by default 3, change in code below if you want) of model fitting and prediction, +so 2 pairs, as above, will produce 6 forecasts to be ensembled later, in R. +By increasing number of pairs, e.g. to 6 on 12-core computer, one can reduce BIG_LOOP to 1, so reduce execution time, and still have 6 forecasts - +a decent number to ensemble (in a separate R script). + +There are three blocks of parameters below, one active (starting with //PARAMS--------------) and two inactive. +The active block is setup as in the final run of forecasting quarterly series. Similarly Monthly block. +The Daily block is more of a demo, allowing to run quickly forecast for Daily series, although with slightly worse performance (use another program ES_RNN_E.cc for it). It was not used for the final submission. +So, you need comment/uncomment to have one block of interest active. + + +*/ + +//#define USE_ODBC +//define USE_ODBC if you want to +// 1. run the program in backtesting mode (which means you also need to set LBACK>0 below. Read the comment below. +// 2. save forecasts to a datatabase. Mysql and SQL Server were tested. The table creation and some other scripts should be found in \sql directory of the source code. +// Of course setting up ODBC is not that simple, :-), e.g. you need to create DSN=slawek, that points to a database with the output table. +// Saving to the db is convenient, but not necessary - all forecasts are always saved to as csv files in automatically created subdirectory (sorry sometimes two directories, so you have to copy :-)) of OUTPUT_DIR +//If saving to database you need to modify run varaible, for each new run, otherwise you will get the table key error. + +#include "dynet/dynet.h" +#include "dynet/training.h" +#include "dynet/expr.h" +#include "dynet/io.h" +#include "dynet/model.h" +#include "dynet/nodes.h" +#include "dynet/expr.h" +#include "dynet/lstm.h" +#include "slstm.h" //my implementation of dilated LSTMs + +#if defined USE_ODBC + #if defined _WINDOWS + #include + #endif + #include + #include +#endif + +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace dynet; + + + +string DATA_DIR = "f:\\progs\\data\\M4DataSet\\"; //with the competition data csvs +//string DATA_DIR="/home/uber/progs/data/M4DataSet/"; +string OUTPUT_DIR = "f:\\progs\\data\\M4\\"; +//string OUTPUT_DIR="/home/uber/progs/data/M4/"; + +int LBACK = 0; //LBACK 0 means final mode: learning on all data and forecasting. LBACK=1 would move back by OUTPUT_SIZE, and forecast last known OUTPUT_SIZE points, for backtesting. LBACK could be a larger integer, but then number of series shrinks. + + +//PARAMS-------------- +string VARIABLE = "Quarterly"; +const string run = "50/45 (1,2),(4,8), LR=0.001/{10,1e-4f}, EPOCHS=15, LVP=80 40*"; +const float PERCENTILE = 50; //we always use Pinball loss, although on normalized values. When forecasting point value, we actually forecast median, so PERCENTILE=50 +const float TRAINING_PERCENTILE = 45; //the program has a tendency for positive bias. So, we can reduce it by running smaller TRAINING_PERCENTILE. + +vector> dilations={{1,2},{4,8}};//Each vector represents one chunk of Dilateed LSTMS, connected in standard resnNet fashion +//#define USE_RESIDUAL_LSTM +//#define USE_ATTENTIVE_LSTM //so for Quarterly series, we do not use either the more advanced residual connections nor attention. +const bool ADD_NL_LAYER=false; //whether to insert a tanh() layer between the RNN stack and the linear adaptor (output) layer + +const float INITIAL_LEARNING_RATE = 0.001f; +const map LEARNING_RATES = { { 10,1e-4f } }; //at which epoch we set them up to what +const float PER_SERIES_LR_MULTIP = 1; //multiplier for per-series parameters' learning rate. + +const int NUM_OF_TRAIN_EPOCHS = 15; +const unsigned int STATE_HSIZE = 40; + +const int SEASONALITY = 4; +const unsigned int INPUT_SIZE = 4; +const int INPUT_SIZE_I= INPUT_SIZE; +const unsigned int OUTPUT_SIZE = 8; +const int OUTPUT_SIZE_I= OUTPUT_SIZE; +const int MIN_INP_SEQ_LEN = 0; +const float LEVEL_VARIABILITY_PENALTY = 80; //Multiplier for L" penalty against wigglines of level vector. Important. +const int MIN_SERIES_LENGTH = INPUT_SIZE_I + OUTPUT_SIZE_I+ MIN_INP_SEQ_LEN+2; +const int MAX_SERIES_LENGTH = 40 * SEASONALITY + MIN_SERIES_LENGTH; //we are chopping longer series, to last, max e.g. 40 years + + + +/* +string VARIABLE = "Monthly"; +const string run = "50/49 Res (1,3,6,12), LR=5e-4 {12,1e-4f}, EPOCHS=10, 20*"; +const float PERCENTILE = 50; //we always use Pinball loss, although on normalized values. When forecasting point value, we actually forecast median, so PERCENTILE=50 +const float TRAINING_PERCENTILE = 49; //the program has a tendency for positive bias. So, we can reduce it by running smaller TRAINING_PERCENTILE + +#define USE_RESIDUAL_LSTM //so for Monthly we use only one block, so no standard resNet shortcuts, but instead but of the special residual shortcuts, after https://arxiv.org/abs/1701.03360. +//#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = false; //whether to insert a tanh() layer between the RNN stack and the linear adaptor (output) layer + +vector> dilations={{1,3,6,12}};//so for Monthly we use only one block, so no standard resNet shortcut +const float INITIAL_LEARNING_RATE = 5e-4; +const map LEARNING_RATES = { { 12,1e-4f } }; //at which epoch we set them up to what +const float PER_SERIES_LR_MULTIP = 1; //multiplier for per-series parameters' learning rate. + +const int NUM_OF_TRAIN_EPOCHS = 10; +const unsigned int STATE_HSIZE = 50; + +const float LEVEL_VARIABILITY_PENALTY = 50; //Multiplier for L" penalty against wigglines of level vector. + +const int SEASONALITY = 12; +const unsigned int OUTPUT_SIZE = 18; +const unsigned int INPUT_SIZE = 12; +const int INPUT_SIZE_I= INPUT_SIZE; +const int OUTPUT_SIZE_I= OUTPUT_SIZE; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = INPUT_SIZE_I + OUTPUT_SIZE_I+ MIN_INP_SEQ_LEN+2; +const int MAX_SERIES_LENGTH = 20 * SEASONALITY + MIN_SERIES_LENGTH; //we are chopping longer series, to last, max e.g. 40 years +*/ + + +/* +string VARIABLE = "Daily"; +const string run = "50/49 NL LRMult=1.5, 3/5 (1,7,28) LR=3e-4 {9,1e-4f} EPOCHS=15, LVP=100 HSIZE=40 20w"; + +//#define USE_RESIDUAL_LSTM +//#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = true; + +const int PERCENTILE = 50; //we always use Pinball loss. When forecasting point value, we actually forecast median, so PERCENTILE=50 +const int TRAINING_PERCENTILE = 49; //the program has a tendency for positive bias. So, we can reduce it by running smaller TRAINING_PERCENTILE + +const int SEASONALITY_NUM = 1; //0 means no seasonality, for Yearly; 1 - single seasonality for Daily(7), Weekly(52); 2 - dual seaonality for Hourly (24,168) +const int SEASONALITY = 7; +const int SEASONALITY2 = 0; +vector> dilations = { { 1,7,28 } }; + +const float INITIAL_LEARNING_RATE = 3e-4; +const map LEARNING_RATES = { { 9,1e-4f } }; //at which epoch we manually set them up to what +const float PER_SERIES_LR_MULTIP = 1.5; +const int NUM_OF_TRAIN_EPOCHS = 15; + +float LEVEL_VARIABILITY_PENALTY = 100; //Multiplier for L" penalty against wigglines of level vector. +const unsigned int STATE_HSIZE = 40; + +const unsigned int INPUT_SIZE = 7; +const int INPUT_SIZE_I = INPUT_SIZE; +const unsigned int OUTPUT_SIZE = 14; +const int OUTPUT_SIZE_I = OUTPUT_SIZE; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = OUTPUT_SIZE + INPUT_SIZE + MIN_INP_SEQ_LEN + 2; //this is compared to n==(total length - OUTPUT_SIZE). Total length may be truncated by LBACK +const int MAX_SERIES_LENGTH = 20 * SEASONALITY + MIN_SERIES_LENGTH; //we are chopping longer series, to max of last 20 years +*/ + +Expression squash(const Expression& x) { + return log(x); +} + +Expression expand(const Expression& x) { + return exp(x); +} + +string INPUT_PATH = DATA_DIR + VARIABLE + "-train.csv"; +string INFO_INPUT_PATH = DATA_DIR + "M4-info.csv"; + +#if defined _DEBUG + const int MAX_NUM_OF_SERIES = 40; +#else + const int MAX_NUM_OF_SERIES = -1; //use all series +#endif // _DEBUG + +const unsigned int NUM_OF_CATEGORIES = 6;//in data provided +const int BIG_LOOP = 3; +const int NUM_OF_CHUNKS = 2; +const float EPS=1e-6; +const int AVERAGING_LEVEL=5; +const bool USE_MEDIAN = false; +const int MIDDLE_POS_FOR_AVG = 2; //if using medians + +const float NOISE_STD=0.001; +const int FREQ_OF_TEST=1; +const float GRADIENT_CLIPPING=20; +const float C_STATE_PENALTY = 0; + +const float BIG_FLOAT=1e38;//numeric_limits::max(); +const bool PRINT_DIAGN=true; +const float TAU = PERCENTILE / 100.; +const float TRAINING_TAU = TRAINING_PERCENTILE / 100.; +const unsigned ATTENTION_HSIZE=STATE_HSIZE; + +const bool USE_AUTO_LEARNING_RATE=false; +//if USE_AUTO_LEARNING_RATE, and only if LBACK>0 +const float MIN_LEARNING_RATE = 0.0001f; +const float LR_RATIO = sqrt(10); +const float LR_TOLERANCE_MULTIP = 1.005; +const int L3_PERIOD = 2; +const int MIN_EPOCHS_BEFORE_CHANGING_LRATE = 2; + + +#if defined USE_ODBC + void HandleDiagnosticRecord(SQLHANDLE hHandle, + SQLSMALLINT hType, + RETCODE RetCode); + + #if defined _WINDOWS + WCHAR* pwszConnStr = L"DSN=slawek"; + #else + SQLCHAR* pwszConnStr = (SQLCHAR*) "DSN=slawek"; + #endif + #define TRYODBC(h, ht, x) { RETCODE rc = x;\ + if (rc != SQL_SUCCESS) \ + { \ + HandleDiagnosticRecord (h, ht, rc); \ + } \ + if (rc == SQL_ERROR) \ + { \ + fprintf(stderr, "Error in " #x "\n"); \ + if (hStmt) { \ + SQLFreeHandle(SQL_HANDLE_STMT, hStmt); \ + } \ + if (hDbc) { \ + SQLDisconnect(hDbc); \ + SQLFreeHandle(SQL_HANDLE_DBC, hDbc); \ + } \ + if (hEnv) { \ + SQLFreeHandle(SQL_HANDLE_ENV, hEnv); \ + } \ + exit(-1); \ + } \ + } + +#endif + +struct M4TS {//storing series data + vector < float> categories_vect; + vector vals; + vector testVals;//empty, unless LBACK>0 + int n; + + M4TS(string category, stringstream &line_stream) { + array categories = { 0,0,0,0,0,0 }; + if (category == "Demographic") + categories[0] = 1; + else if (category == "Finance") + categories[1] = 1; + else if (category == "Industry") + categories[2] = 1; + else if (category == "Macro") + categories[3] = 1; + else if (category == "Micro") + categories[4] = 1; + else if (category == "Other") + categories[5] = 1; + else { + cerr << "unknown category?"; + exit(-1); + } + for (int i = 0; i < NUM_OF_CATEGORIES; i++) + categories_vect.push_back(categories[i]); + + string tmp_str; + while(getline(line_stream, tmp_str, ',' )) { + string val_str; + for (const auto c : tmp_str) { + if (c != '\"' && c != '\r') //remove quotes and very occasional double end of line + val_str.push_back(c); + } + if (val_str.size() == 0) + break; + float val=(atof(val_str.c_str())); + vals.push_back(val); + } + if (LBACK > 0) { //extract last OUTPUT_SIZE points as the test values + if (vals.size() > LBACK*OUTPUT_SIZE_I) { + auto first = vals.begin() + vals.size() - LBACK*OUTPUT_SIZE_I; + auto pastLast = vals.begin() + vals.size() - (LBACK-1)*OUTPUT_SIZE_I; + vector input_vect(first, pastLast); //[first,pastLast) + testVals= input_vect; + vals.resize(vals.size() - LBACK*OUTPUT_SIZE_I); //remove last LBACK*OUTPUT_SIZE elements + n = vals.size(); + } else + n = 0; + } else { + n = vals.size(); + } + if (n > MAX_SERIES_LENGTH) { //chop long series + vals.erase(vals.begin(), vals.begin() + (n-MAX_SERIES_LENGTH)); //remove some early data + n = vals.size(); + } + } + M4TS(){}; +}; + + +struct AdditionalParams {//Per series, important + Parameter levSm; + Parameter sSm; + array initSeasonality; +}; + +struct AdditionalParamsF {//Used for storing diagnostics + float levSm; + float sSm; + array initSeasonality; + vector levels; + vector seasons; +}; + + +Expression pinBallLoss(const Expression& out_ex, const Expression& actuals_ex) {//used by Dynet, learning loss function + vector losses; + for (unsigned int indx = 0; indx as_scalar(forec.value())) + losses.push_back((actual - forec)*TRAINING_TAU); + else + losses.push_back((actual - forec)*(TRAINING_TAU - 1)); + } + return sum(losses) / OUTPUT_SIZE * 2; +} + + +//weighted quantile Loss, used just for diagnostics, if if LBACK>0 and PERCENTILE!=50 +float wQuantLoss(vector& out_vect, vector& actuals_vect) { + float sumf = 0; float suma=0; + for (unsigned int indx = 0; indx forec) + sumf = sumf + (actual - forec)*TAU; + else + sumf = sumf + (actual - forec)*(TAU - 1); + } + return sumf / suma * 200; +} + +//used just for diagnostics, if LBACK>0 and PERCENTILE==50 +float sMAPE(vector& out_vect, vector& actuals_vect) { + float sumf = 0; + for (unsigned int indx = 0; indx& out_vect, vector& actuals_vect) { + if (PERCENTILE==50) + return sMAPE(out_vect, actuals_vect); + else + return wQuantLoss(out_vect, actuals_vect); +} + +int main(int argc, char** argv) { + dynet::initialize(argc, argv); + + int seedForChunks = 10; //Yes it runs, without any params, but it will work only on 1/NUM_OF_CHUNKS of all cases. The system is expected to run in NUM_OF_CHUNKS multiples. + int chunkNo = 1; + int ibigOffset = 0; + if (argc >= 3) { + seedForChunks = atoi(argv[1]); + chunkNo = atoi(argv[2]); + } + if (argc >= 4) + ibigOffset = atoi(argv[3]); + + if (chunkNo > NUM_OF_CHUNKS) { + cerr << "chunkNo > NUM_OF_CHUNKS"; + exit(-1); + } + else if (chunkNo <= 0) { + cerr << "chunkNo <= 0"; + exit(-1); + } + + cout<0) + std::cout<< " ibigOffset:"<< ibigOffset; //if continuing prematurely stopped run + if (LBACK>0) + std::cout<<" lback:"<tm_year+1900; + now_ts.month=now->tm_mon+1; + now_ts.day=now->tm_mday; + now_ts.hour=now->tm_hour; + now_ts.minute=now->tm_min; + now_ts.second=now->tm_sec; + now_ts.fraction=0; //reportedly needed + + const int OFFSET_TO_FIRST_ACTUAL=5; + string insertQuery_str = "insert into M72nn(run, LBack, ibig, series, epoch "; + for (int iq = 1; iq <= OUTPUT_SIZE_I; iq++) { + stringstream ss; + ss << iq; + string iq_str = ss.str(); + insertQuery_str = insertQuery_str +", actual"+iq_str+", forec" + iq_str; + } + insertQuery_str = insertQuery_str +", trainingError, variable, n, dateTimeOfPrediction) \ + values(? , ? , ? , ? , ? "; + for (int iq = 1; iq <= OUTPUT_SIZE_I; iq++) { + insertQuery_str = insertQuery_str + ",?,?"; + } + insertQuery_str = insertQuery_str + ",?,?,?,?)"; + #if defined _WINDOWS + wstring insertQuery(insertQuery_str.begin(), insertQuery_str.end()); + SQLWCHAR* sqlQuery = (SQLWCHAR*)insertQuery.c_str(); + #else + SQLCHAR* sqlQuery =(SQLCHAR*)insertQuery_str.c_str(); + #endif + + + SQLHENV hEnv = NULL; + SQLHDBC hDbc = NULL; + SQLHSTMT hStmt = NULL, hInsertStmt = NULL; + + if (SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv) == SQL_ERROR) { + fprintf(stderr, "Unable to allocate an environment handle\n"); + exit(-1); + } + TRYODBC(hEnv, + SQL_HANDLE_ENV, + SQLSetEnvAttr(hEnv, + SQL_ATTR_ODBC_VERSION, + (SQLPOINTER)SQL_OV_ODBC3, + 0)); + + // Allocate a connection + TRYODBC(hEnv, + SQL_HANDLE_ENV, + SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc)); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLDriverConnect(hDbc, + NULL, + pwszConnStr, + SQL_NTS, + NULL, + 0, + NULL, + SQL_DRIVER_COMPLETE)); + fprintf(stderr, "Connected!\n"); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLSetConnectAttr(hDbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, SQL_IS_INTEGER)); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hInsertStmt)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLPrepare(hInsertStmt, sqlQuery, SQL_NTS)); + + SQLLEN nullTerminatedStringOfRun = SQL_NTS; + SQLLEN nullTerminatedStringOfSeries = SQL_NTS; + SQLLEN nullTerminatedStringOfVariable = SQL_NTS; + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)run.c_str(), 0, &nullTerminatedStringOfRun)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&LBACK, 0, NULL)); + + // variable, n, dateTimeOfPrediction + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL+2*OUTPUT_SIZE_I+2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)VARIABLE.c_str(), 0, &nullTerminatedStringOfVariable)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE_I + 4, SQL_PARAM_INPUT, SQL_C_TYPE_TIMESTAMP, SQL_TYPE_TIMESTAMP, 0, 0, &now_ts, sizeof(TIMESTAMP_STRUCT), NULL)); +#endif + + random_device rd; // only used once to initialise (seed) engine + mt19937 rng(rd()); // random-number engine used (Mersenne-Twister) + mt19937 rngForChunks(seedForChunks); + + vector series_vect; + unordered_map allSeries_map(30000);//max series in one chunk would be 48/2=24k, for monthly series + unordered_map seriesCategories_map(120000);//100k series + + ifstream infoFile(INFO_INPUT_PATH); + string line; + getline(infoFile, line); //header + while (getline(infoFile, line)) { + //cout << string( line)<= MIN_SERIES_LENGTH) { + series_vect.push_back(series); + allSeries_map[series] = m4Obj; + } + if (MAX_NUM_OF_SERIES>0 && series_vect.size()>=MAX_NUM_OF_SERIES) + break; + } + + int series_len=(int)series_vect.size(); + int chunkSize= series_len/NUM_OF_CHUNKS; + std::cout << "num of series:" << series_vect.size() <<" size of chunk:"<< chunkSize< uniOnSeries(0, chunkSize -1); // closed interval [a, b] + + unordered_map, AVERAGING_LEVEL+1>> testResults_map((int)chunkSize*1.5); + set diagSeries; + + for (int ibig=0; ibig perfValid_vect; + int epochOfLastChangeOfLRate = -1; + +#if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&ibigDb, 0, NULL)); +#endif + + ParameterCollection pc; + ParameterCollection perSeriesPC; + + float learning_rate= INITIAL_LEARNING_RATE; + AdamTrainer trainer(pc, learning_rate, 0.9, 0.999, EPS); + trainer.clip_threshold = GRADIENT_CLIPPING; + AdamTrainer perSeriesTrainer(perSeriesPC, learning_rate*PER_SERIES_LR_MULTIP, 0.9, 0.999, EPS); + perSeriesTrainer.clip_threshold = GRADIENT_CLIPPING; + + #if defined USE_RESIDUAL_LSTM + vector rNNStack; + rNNStack.emplace_back(ResidualDilatedLSTMBuilder(dilations[0], INPUT_SIZE + NUM_OF_CATEGORIES, STATE_HSIZE, pc)); + for (int il = 1; il rNNStack; + rNNStack.emplace_back(AttentiveDilatedLSTMBuilder(dilations[0], INPUT_SIZE + NUM_OF_CATEGORIES, STATE_HSIZE, ATTENTION_HSIZE, pc)); + for (int il = 1; il rNNStack; + rNNStack.emplace_back(DilatedLSTMBuilder(dilations[0], INPUT_SIZE + NUM_OF_CATEGORIES, STATE_HSIZE, pc)); + for (int il = 1; il oneChunk_vect(start,end); + if (PRINT_DIAGN) { + for (int k = 0; k<10; k++) //diag + cout << oneChunk_vect[k] << " "; + cout << endl; + } + if (chunkNo == NUM_OF_CHUNKS) + cout<<"last chunk size:"<< oneChunk_vect.size()< additionalParams_map((int)oneChunk_vect.size()*1.5); //per series + unordered_map*> historyOfAdditionalParams_map((int)oneChunk_vect.size()*1.5); + for (auto iter = oneChunk_vect.begin(); iter != oneChunk_vect.end(); ++iter) {//setup + string series = *iter; + AdditionalParams addParams; + addParams.levSm = perSeriesPC.add_parameters({ 1 }, 0.5); //level smoothing + addParams.sSm = perSeriesPC.add_parameters({ 1 }, 0.5); //seasonality smoothing + for (int isea = 0; isea(); + } + + for (int iEpoch=0; iEpoch testLosses; //test losses of all series in this epoch + vector testAvgLosses; //test avg (over last few epochs) losses of all series in this epoch + vector trainingLosses; //training losses of all series in one epoch + vector forecLosses; vector levVarLosses; vector stateLosses; + #if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&iEpoch, 0, NULL)); + #endif + + for (auto iter = oneChunk_vect.begin() ; iter != oneChunk_vect.end(); ++iter) { + string series=*iter; + auto m4Obj = allSeries_map[series]; + + #if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)series.c_str(), 0, &nullTerminatedStringOfSeries)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE_I + 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&m4Obj.n, 0, NULL)); + #endif + + ComputationGraph cg; + for (int il=0; il season_exVect;//vector, because we do not know how long the series is + for (int iseas=0; iseas seas==1 + season_exVect.push_back(seas);//Expression is a simple struct, without any storage management, so the auto copy constructor works OK. + } + season_exVect.push_back(season_exVect[0]); + + vector logDiffOfLevels_vect; + vector levels_exVect; + Expression lev=cdiv(input(cg, m4Obj.vals[0]), season_exVect[0]); + levels_exVect.push_back(lev); + for (int i=1; i 0) { + vector levelVarLoss_v; + for (int i = 1; iSEASONALITY) { + unsigned long startSeasonalityIndx=season_exVect.size()-SEASONALITY; + for (int i=0;i<(OUTPUT_SIZE_I-SEASONALITY);i++) + season_exVect.push_back(season_exVect[startSeasonalityIndx+i]); + } + vector losses; + for (int i=INPUT_SIZE_I-1; i<(m4Obj.n- OUTPUT_SIZE_I); i++) { + vector::const_iterator firstE = season_exVect.begin() +i+1-INPUT_SIZE_I; + vector::const_iterator pastLastE = season_exVect.begin() +i+1; //not including the last one + vector inputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + Expression inputSeasonality_ex=concatenate(inputSeasonality_exVect); + + vector::const_iterator first = m4Obj.vals.begin() +i+1-INPUT_SIZE_I; + vector::const_iterator pastLast = m4Obj.vals.begin() +i+1; //not including the last one + vector input_vect(first, pastLast); //[first,pastLast) + Expression input0_ex=input(cg,{INPUT_SIZE},input_vect); + Expression input1_ex=cdiv(input0_ex,inputSeasonality_ex); //deseasonalization + vector joinedInput_ex; + input1_ex= cdiv(input1_ex, levels_exVect[i]); + joinedInput_ex.emplace_back(noise(squash(input1_ex), NOISE_STD)); //normalization+noise + joinedInput_ex.emplace_back(input(cg, { NUM_OF_CATEGORIES }, m4Obj.categories_vect)); + Expression input_ex = concatenate(joinedInput_ex); + + Expression rnn_ex; + try { + rnn_ex = rNNStack[0].add_input(input_ex); + for (int il=1; il outputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + Expression outputSeasonality_ex=concatenate(outputSeasonality_exVect); + + first = m4Obj.vals.begin() +i+1; + pastLast = m4Obj.vals.begin() +i+1+OUTPUT_SIZE_I; + vector labels_vect(first, pastLast); //[first,pastLast) + Expression labels0_ex=input(cg,{OUTPUT_SIZE},labels_vect); + Expression labels1_ex=cdiv(labels0_ex,outputSeasonality_ex); //deseasonalization + labels1_ex= cdiv(labels1_ex, levels_exVect[i]);//normalization + Expression labels_ex=squash(labels1_ex); + + Expression loss_ex=pinBallLoss(out_ex, labels_ex); + if (i>=INPUT_SIZE_I+MIN_INP_SEQ_LEN) + losses.push_back(loss_ex); + } + + Expression forecLoss_ex= average(losses); + Expression loss_exp = forecLoss_ex; + + float levVarLoss=0; + if (LEVEL_VARIABILITY_PENALTY > 0) { + Expression levelVarLossP_ex = levelVarLoss_ex*LEVEL_VARIABILITY_PENALTY; + levVarLoss = as_scalar(levelVarLossP_ex.value()); + levVarLosses.push_back(levVarLoss); + loss_exp= loss_exp + levelVarLossP_ex; + } + + float cStateLoss=0; + if (C_STATE_PENALTY>0) { + vector cStateLosses_vEx; + for (int irnn = 0; irnn < rNNStack.size(); irnn++) + for (int it = 0; it maxAbs) { + maxAbs = abs(state[iv]); + timeOfMax = it; + layerOfMax = il; + chunkOfMax = irnn; + } + } + } //through layers/states + } //through time + } //through chunks + + cout << "levSm:" << as_scalar(levSm_ex.value()) << endl; + cout << "sSm:" << as_scalar(sSm_ex.value()) << endl; + cout << " min season=" << minSeason << endl; + cout << " min level=" << minLevel << endl; + cout << " max abs:" << maxAbs << " at time:" << timeOfMax << " at layer:" << layerOfMax << " and chunk:" << chunkOfMax << endl; + + //diagSeries.insert(series); + pc.reset_gradient(); + perSeriesPC.reset_gradient(); + } + + //saving per-series values for diagnostics purposes + AdditionalParamsF &histAdditionalParams= historyOfAdditionalParams_map[series]->at(iEpoch); + histAdditionalParams.levSm=as_scalar(levSm_ex.value()); + histAdditionalParams.sSm=as_scalar(sSm_ex.value()); + for (int isea=0; isea::const_iterator firstE = season_exVect.begin() + i + 1 - INPUT_SIZE_I; + vector::const_iterator pastLastE = season_exVect.begin() + i + 1; //not including the last one + vector inputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + Expression inputSeasonality_ex = concatenate(inputSeasonality_exVect); + + vector::const_iterator first = m4Obj.vals.begin() + i + 1 - INPUT_SIZE_I; + vector::const_iterator pastLast = m4Obj.vals.begin() + i + 1; //not including the last one + vector input_vect(first, pastLast); //[first,pastLast) + Expression input0_ex = input(cg, { INPUT_SIZE }, input_vect); + Expression input1_ex = cdiv(input0_ex, inputSeasonality_ex); //deseasonalization + vector joinedInput_ex; + input1_ex= cdiv(input1_ex, levels_exVect[i]);//normalization + joinedInput_ex.emplace_back(squash(input1_ex)); + joinedInput_ex.emplace_back(input(cg, { NUM_OF_CATEGORIES }, m4Obj.categories_vect)); + Expression input_ex = concatenate(joinedInput_ex); + + Expression rnn_ex; + try { + rnn_ex = rNNStack[0].add_input(input_ex); + for (int il=1; il outputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + Expression outputSeasonality_ex = concatenate(outputSeasonality_exVect); + + Expression out_ex; + if (ADD_NL_LAYER) { + out_ex=MLPW_ex*rnn_ex+MLPB_ex; + out_ex = adapterW_ex*tanh(out_ex)+adapterB_ex; + } else + out_ex=adapterW_ex*rnn_ex+adapterB_ex; + + out_ex = cmult(expand(out_ex), outputSeasonality_ex)*levels_exVect[i];//back to original scale + vector out_vect = as_vector(out_ex.value()); + + if (LBACK > 0) { + float qLoss = errorFunc(out_vect, m4Obj.testVals); + testLosses.push_back(qLoss); + } + + testResults_map[series][iEpoch%AVERAGING_LEVEL] = out_vect; + if (iEpoch >= AVERAGING_LEVEL) { + if (USE_MEDIAN) { + if (testResults_map[series][AVERAGING_LEVEL].size() == 0) + testResults_map[series][AVERAGING_LEVEL] = out_vect; //just to initialized, to make space. The values will be overwritten + for (int iii = 0; iii < OUTPUT_SIZE_I; iii++) { + vector temp_vect2; + for (int ii = 0; ii firstForec = testResults_map[series][0]; + testResults_map[series][AVERAGING_LEVEL] = firstForec; + for (int ii = 1; ii nextForec = testResults_map[series][ii]; + for (int iii = 0; iii 0) { + float qLoss = errorFunc(testResults_map[series][AVERAGING_LEVEL], m4Obj.testVals); + testAvgLosses.push_back(qLoss); + + #if defined USE_ODBC //save + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE_I + 1, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_FLOAT, 0, 0, (SQLPOINTER)&forecastLoss, 0, NULL)); + + for (int io = 0; io < OUTPUT_SIZE_I; io++) { + int ipos=OFFSET_TO_FIRST_ACTUAL + 1 + 2*io; + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, ipos, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_FLOAT, 0, 0, (SQLPOINTER)&m4Obj.testVals[io], 0, NULL)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, ipos+1, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_FLOAT, 0, 0, (SQLPOINTER)&testResults_map[series][AVERAGING_LEVEL][io], 0, NULL)); + } + if (MAX_NUM_OF_SERIES<0) + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLExecute(hInsertStmt)); + #endif + } + } //time to average + }//last anchor point of the series + }//through TEST loop + }//through series + + + if (iEpoch % FREQ_OF_TEST == 0) { + float averageTrainingLoss = accumulate(trainingLosses.begin(), trainingLosses.end(), 0.0) / trainingLosses.size(); + + cout << ibig << " " << iEpoch << " loss:" << averageTrainingLoss * 100; + if (LEVEL_VARIABILITY_PENALTY > 0 || C_STATE_PENALTY > 0) { + float averageForecLoss = accumulate(forecLosses.begin(), forecLosses.end(), 0.0) / forecLosses.size(); + cout << " forecast loss:" << averageForecLoss*100; + } + if (LEVEL_VARIABILITY_PENALTY > 0) { + float averagelevVarLoss = accumulate(levVarLosses.begin(), levVarLosses.end(), 0.0) / levVarLosses.size(); + cout << " levVar loss:" << averagelevVarLoss * 100; + } + if (C_STATE_PENALTY > 0) { + float averageStateLoss = accumulate(stateLosses.begin(), stateLosses.end(), 0.0) / stateLosses.size(); + cout << " state loss:" << averageStateLoss * 100; + } + + float averageTestLoss=0; + if (LBACK > 0) { + float averageTestLoss = accumulate(testLosses.begin(), testLosses.end(), 0.0) / testLosses.size(); + cout<<" Test loss:" << averageTestLoss; + if (iEpoch >= AVERAGING_LEVEL) { + float averageTestAvgLoss = accumulate(testAvgLosses.begin(), testAvgLosses.end(), 0.0) / testAvgLosses.size();//of this epoch + cout << " avgLoss:" << averageTestAvgLoss; + } + if (USE_AUTO_LEARNING_RATE) + perfValid_vect.push_back(averageTestLoss); + } + cout << endl; + } + + if (USE_AUTO_LEARNING_RATE) { + bool changeL2Rate = false; + if (iEpoch >= 2) { + if (iEpoch < L3_PERIOD) + changeL2Rate = perfValid_vect[perfValid_vect.size() - 2] MIN_LEARNING_RATE && (iEpoch - epochOfLastChangeOfLRate) >= MIN_EPOCHS_BEFORE_CHANGING_LRATE) { + learning_rate /= LR_RATIO; + cout << "decreasing LR to:" << learning_rate << endl; + epochOfLastChangeOfLRate = iEpoch; + trainer.learning_rate = learning_rate; + } + } + #if defined USE_ODBC + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLEndTran( + SQL_HANDLE_DBC, + hDbc, + SQL_COMMIT)); + #endif + }//through epochs + + if (PRINT_DIAGN) {//some diagnostic info + set diagSeries; + for (int i = 0; i<1; i++) {//add a few normal ones + int irand = uniOnSeries(rng); + diagSeries.insert(oneChunk_vect[irand]); + } + for (auto series : diagSeries) { + cout << endl << series << endl; + array* historyOfAdditionalParams_ptrToArr = historyOfAdditionalParams_map[series]; + cout << "lSm:" << endl; + for (int iEpoch = 0; iEpochat(iEpoch).levSm << " "; + cout << endl; + cout << "sSm:" << endl; + for (int iEpoch = 0; iEpochat(iEpoch).sSm << " "; + cout << endl; + cout << "seasons:" << endl; + for (int isea = 0; iseaat(iEpoch).initSeasonality[isea] << " "; + cout << endl; + } + cout << endl; + for (int iEpoch = 0; iEpochat(iEpoch).levels.size()>0) { + cout << "levels:" << iEpoch << " "; + for (int iv = 0; ivat(iEpoch).levels.size(); iv++) + cout << historyOfAdditionalParams_ptrToArr->at(iEpoch).levels[iv] << ", "; + cout << endl; + cout << "seas:" << iEpoch << " "; + for (int iv = 0; ivat(iEpoch).seasons.size(); iv++) + cout << historyOfAdditionalParams_ptrToArr->at(iEpoch).seasons[iv] << ", "; + cout << endl; + } + } + } + } + + //save the forecast to outputFile + ofstream outputFile; + outputFile.open(outputPath); + for (auto iter = oneChunk_vect.begin(); iter != oneChunk_vect.end(); ++iter) { + string series = *iter; + outputFile<< series; + for (int io=0; io + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + RelWithDebug + Win32 + + + RelWithDebug + x64 + + + + + + + + + + + {928301A0-F01A-48F6-A499-851B3CE8BD4E} + Win32Proj + M41 + 8.1 + + + + Application + true + v140 + Unicode + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + Application + true + v140 + Unicode + Sequential + + + Application + true + v140 + Unicode + Sequential + + + Application + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + true + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + + + NotUsing + Level1 + Disabled + WIN32;_WINDOWS;EIGEN_USE_MKL_ALL;EIGEN_FAST_MATH;NOMINMAX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + E:\progs2\dynet;E:\progs\Eigen; + + + Console + true + E:\progs2\dynet\buildMKL\dynet\Debug + dynet.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + NotUsing + Level1 + MaxSpeed + WIN32;_WINDOWS;EIGEN_FAST_MATH;EIGEN_USE_MKL_ALL;NOMINMAX;NDEBUG_;CONSOLE;%(PreprocessorDefinitions) + E:\progs2\dynet;E:\progs\Eigen; + AnySuitable + true + Speed + AdvancedVectorExtensions + Default + MultiThreadedDLL + ProgramDatabase + true + false + + + Console + true + E:\progs2\dynet\buildMKL\dynet\RelWithDebInfo + dynet.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + true + true + + + + + + \ No newline at end of file diff --git a/c++/windows_VisualStudio/M41/slstm.cpp b/c++/windows_VisualStudio/M41/slstm.cpp new file mode 100644 index 0000000..3935604 --- /dev/null +++ b/c++/windows_VisualStudio/M41/slstm.cpp @@ -0,0 +1,729 @@ +/* +My implementation of dilated LSTMs, based on Dynet LSTM builders +- DilatedLSTMBuilder - standard Dilated LSTM (https://papers.nips.cc/paper/6613-dilated-recurrent-neural-networks.pdf) +- ResidualDilatedLSTMBuilder - Dilated LSTM with special Residual shortcuts, after https://arxiv.org/abs/1701.03360 +- AttentiveDilatedLSTMBuilder - Dilated LSTM with Attention mechanism, as in the second stage of https://arxiv.org/abs/1704.02971 +* +Slawek Smyl, Mar-May 2018 +*/ + +#include "slstm.h" +#include "dynet/lstm.h" +#include "dynet/param-init.h" + +#include +#include +#include +#include + +#if defined DEBUG + #define _DEBUG +#endif + +using namespace std; + +namespace dynet { + + // ResidualDilatedLSTMBuilder based on Vanilla LSTM + enum { _X2I, _H2I, _BI, _X2F, _H2F, _BF, _X2O, _H2O, _BO, _X2G, _H2G, _BG }; + enum { LN_GH, LN_BH, LN_GX, LN_BX, LN_GC, LN_BC }; + + ResidualDilatedLSTMBuilder::ResidualDilatedLSTMBuilder() : has_initial_state(false), layers(0), input_dim(0), hid(0), dropout_rate_h(0), ln_lstm(false), forget_bias(1.f), dropout_masks_valid(false) { } + + ResidualDilatedLSTMBuilder::ResidualDilatedLSTMBuilder(vector dilations, + unsigned input_dim, + unsigned hidden_dim, + ParameterCollection& model, + bool ln_lstm, float forget_bias) : dilations(dilations), layers(unsigned(dilations.size())), + input_dim(input_dim), hid(hidden_dim), ln_lstm(ln_lstm), forget_bias(forget_bias), dropout_masks_valid(false) { + unsigned layer_input_dim = input_dim; + local_model = model.add_subcollection("ResidualDilated-lstm-builder"); + for (unsigned i = 0; i < layers; ++i) { + // i + Parameter p_x2i = local_model.add_parameters({ hidden_dim * 4, layer_input_dim }); + Parameter p_h2i = local_model.add_parameters({ hidden_dim * 4, hidden_dim }); + //Parameter p_c2i = model.add_parameters({hidden_dim, hidden_dim}); + Parameter p_bi = local_model.add_parameters({ hidden_dim * 4 }, ParameterInitConst(0.f)); + + layer_input_dim = hidden_dim; // output (hidden) from 1st layer is input to next + + vector ps = { p_x2i, p_h2i, /*p_c2i,*/ p_bi }; + params.push_back(ps); + + if (ln_lstm) { + Parameter p_gh = model.add_parameters({ hidden_dim * 4 }, ParameterInitConst(1.f)); + Parameter p_bh = model.add_parameters({ hidden_dim * 4 }, ParameterInitConst(0.f)); + Parameter p_gx = model.add_parameters({ hidden_dim * 4 }, ParameterInitConst(1.f)); + Parameter p_bx = model.add_parameters({ hidden_dim * 4 }, ParameterInitConst(0.f)); + Parameter p_gc = model.add_parameters({ hidden_dim }, ParameterInitConst(1.f)); + Parameter p_bc = model.add_parameters({ hidden_dim }, ParameterInitConst(0.f)); + vector ln_ps = { p_gh, p_bh, p_gx, p_bx, p_gc, p_bc }; + ln_params.push_back(ln_ps); + } + } // layers + dropout_rate = 0.f; + dropout_rate_h = 0.f; + } + + void ResidualDilatedLSTMBuilder::new_graph_impl(ComputationGraph& cg, bool update) { + param_vars.clear(); + if (ln_lstm)ln_param_vars.clear(); + for (unsigned i = 0; i < layers; ++i) { + auto& p = params[i]; + vector vars; + for (unsigned j = 0; j < p.size(); ++j) { vars.push_back(update ? parameter(cg, p[j]) : const_parameter(cg, p[j])); } + param_vars.push_back(vars); + if (ln_lstm) { + auto& ln_p = ln_params[i]; + vector ln_vars; + for (unsigned j = 0; j < ln_p.size(); ++j) { ln_vars.push_back(update ? parameter(cg, ln_p[j]) : const_parameter(cg, ln_p[j])); } + ln_param_vars.push_back(ln_vars); + } + } + + _cg = &cg; + } + // layout: 0..layers = c + // layers+1..2*layers = h + void ResidualDilatedLSTMBuilder::start_new_sequence_impl(const vector& hinit) { + h.clear(); + c.clear(); + + if (hinit.size() > 0) { + DYNET_ARG_CHECK(layers * 2 == hinit.size(), + "ResidualDilatedLSTMBuilder must be initialized with 2 times as many expressions as layers " + "(hidden state, and cell for each layer). However, for " << layers << " layers, " << + hinit.size() << " expressions were passed in"); + h0.resize(layers); + c0.resize(layers); + for (unsigned i = 0; i < layers; ++i) { + c0[i] = hinit[i]; + h0[i] = hinit[i + layers]; + } + has_initial_state = true; + } + else { + has_initial_state = false; + } + + dropout_masks_valid = false; + } + + void ResidualDilatedLSTMBuilder::set_dropout_masks(unsigned batch_size) { + masks.clear(); + for (unsigned i = 0; i < layers; ++i) { + std::vector masks_i; + unsigned idim = (i == 0) ? input_dim : hid; + if (dropout_rate > 0.f || dropout_rate_h > 0.f) { + float retention_rate = 1.f - dropout_rate; + float retention_rate_h = 1.f - dropout_rate_h; + float scale = 1.f / retention_rate; + float scale_h = 1.f / retention_rate_h; + // in + masks_i.push_back(random_bernoulli(*_cg, Dim({ idim }, batch_size), retention_rate, scale)); + // h + masks_i.push_back(random_bernoulli(*_cg, Dim({ hid }, batch_size), retention_rate_h, scale_h)); + masks.push_back(masks_i); + } + } + dropout_masks_valid = true; + } + + ParameterCollection & ResidualDilatedLSTMBuilder::get_parameter_collection() { + return local_model; + } + + // TODO - Make this correct + // Copied c from the previous step (otherwise c.size()< h.size()) + // Also is creating a new step something we want? + // wouldn't overwriting the current one be better? + Expression ResidualDilatedLSTMBuilder::set_h_impl(int prev, const vector& h_new) { + DYNET_ARG_CHECK(h_new.empty() || h_new.size() == layers, + "ResidualDilatedLSTMBuilder::set_h expects as many inputs as layers, but got " << + h_new.size() << " inputs for " << layers << " layers"); + const unsigned t = h.size(); + h.push_back(vector(layers)); + c.push_back(vector(layers)); + for (unsigned i = 0; i < layers; ++i) { + Expression h_i = h_new[i]; + Expression c_i = c[t - 1][i]; + h[t][i] = h_i; + c[t][i] = c_i; + } + return h[t].back(); + } + // Current implementation : s_new is either {new_c[0],...,new_c[n]} + // or {new_c[0],...,new_c[n],new_h[0],...,new_h[n]} + Expression ResidualDilatedLSTMBuilder::set_s_impl(int prev, const std::vector& s_new) { + DYNET_ARG_CHECK(s_new.size() == layers || s_new.size() == 2 * layers, + "ResidualDilatedLSTMBuilder::set_s expects either as many inputs or twice as many inputs as layers, but got " << s_new.size() << " inputs for " << layers << " layers"); + bool only_c = s_new.size() == layers; + const unsigned t = c.size(); + h.push_back(vector(layers)); + c.push_back(vector(layers)); + for (unsigned i = 0; i < layers; ++i) { + Expression h_i = only_c ? h[t - 1][i] : s_new[i + layers]; + Expression c_i = s_new[i]; + h[t][i] = h_i; + c[t][i] = c_i; + } + return h[t].back(); + } + + Expression ResidualDilatedLSTMBuilder::add_input_impl(int prev, const Expression& x) { + h.push_back(vector(layers)); + c.push_back(vector(layers)); + vector& ht = h.back(); + vector& ct = c.back(); + Expression in = x; + if ((dropout_rate > 0.f || dropout_rate_h > 0.f) && !dropout_masks_valid) set_dropout_masks(x.dim().bd); + for (unsigned i = 0; i < layers; ++i) { + int dilation_offset = dilations[i] - 1; + const vector& vars = param_vars[i]; + + Expression i_h_tm1, i_c_tm1; + bool has_prev_state = (prev >= 0 || has_initial_state); + if (prev < dilation_offset) { + if (has_initial_state) { + // intial value for h and c at timestep 0 in layer i + // defaults to zero matrix input if not set in add_parameter_edges + i_h_tm1 = h0[i]; + i_c_tm1 = c0[i]; + } + else { + i_h_tm1 = zeros(*_cg, Dim({ vars[_BI].dim()[0] / 4 }, x.dim().bd)); + i_c_tm1 = i_h_tm1; + } + } + else { + i_h_tm1 = h[prev - dilation_offset][i]; + i_c_tm1 = c[prev - dilation_offset][i]; + } + // apply dropout according to https://arxiv.org/abs/1512.05287 (tied weights) + if (dropout_rate > 0.f) { + in = cmult(in, masks[i][0]); + } + if (has_prev_state && dropout_rate_h > 0.f) + i_h_tm1 = cmult(i_h_tm1, masks[i][1]); + // input + Expression tmp; + Expression i_ait; + Expression i_aft; + Expression i_aot; + Expression i_agt; + if (ln_lstm) { + const vector& ln_vars = ln_param_vars[i]; + if (has_prev_state) + tmp = vars[_BI] + layer_norm(vars[_X2I] * in, ln_vars[LN_GX], ln_vars[LN_BX]) + layer_norm(vars[_H2I] * i_h_tm1, ln_vars[LN_GH], ln_vars[LN_BH]); + else + tmp = vars[_BI] + layer_norm(vars[_X2I] * in, ln_vars[LN_GX], ln_vars[LN_BX]); + } + else { + if (has_prev_state) + tmp = affine_transform({ vars[_BI], vars[_X2I], in, vars[_H2I], i_h_tm1 }); + else + tmp = affine_transform({ vars[_BI], vars[_X2I], in }); + } + i_ait = pick_range(tmp, 0, hid); + i_aft = pick_range(tmp, hid, hid * 2); + i_aot = pick_range(tmp, hid * 2, hid * 3); + i_agt = pick_range(tmp, hid * 3, hid * 4); + Expression i_it = logistic(i_ait); + if (forget_bias != 0.0) + tmp = logistic(i_aft + forget_bias); + else + tmp = logistic(i_aft); + + Expression i_ft = tmp; + Expression i_ot = logistic(i_aot); + Expression i_gt = tanh(i_agt); + + ct[i] = has_prev_state ? (cmult(i_ft, i_c_tm1) + cmult(i_it, i_gt)) : cmult(i_it, i_gt); + if (ln_lstm) { + const vector& ln_vars = ln_param_vars[i]; + if (i==0) + in = ht[i] = cmult(i_ot, tanh(layer_norm(ct[i], ln_vars[LN_GC], ln_vars[LN_BC]))); + else + in = ht[i] = cmult(i_ot, in+tanh(layer_norm(ct[i], ln_vars[LN_GC], ln_vars[LN_BC]))); + } + else { + if (i==0) + in = ht[i] = cmult(i_ot, tanh(ct[i])); + else + in = ht[i] = cmult(i_ot, in+tanh(ct[i])); + } + } + return ht.back(); + } + + void ResidualDilatedLSTMBuilder::copy(const RNNBuilder & rnn) { + const ResidualDilatedLSTMBuilder & rnn_lstm = (const ResidualDilatedLSTMBuilder&)rnn; + DYNET_ARG_CHECK(params.size() == rnn_lstm.params.size(), + "Attempt to copy ResidualDilatedLSTMBuilder with different number of parameters " + "(" << params.size() << " != " << rnn_lstm.params.size() << ")"); + for (size_t i = 0; i < params.size(); ++i) + for (size_t j = 0; j < params[i].size(); ++j) + params[i][j] = rnn_lstm.params[i][j]; + for (size_t i = 0; i < ln_params.size(); ++i) + for (size_t j = 0; j < ln_params[i].size(); ++j) + ln_params[i][j] = rnn_lstm.ln_params[i][j]; + } + + void ResidualDilatedLSTMBuilder::set_dropout(float d) { + DYNET_ARG_CHECK(d >= 0.f && d <= 1.f, + "dropout rate must be a probability (>=0 and <=1)"); + dropout_rate = d; + dropout_rate_h = d; + } + + void ResidualDilatedLSTMBuilder::set_dropout(float d, float d_h) { + DYNET_ARG_CHECK(d >= 0.f && d <= 1.f && d_h >= 0.f && d_h <= 1.f, + "dropout rate must be a probability (>=0 and <=1)"); + dropout_rate = d; + dropout_rate_h = d_h; + } + + void ResidualDilatedLSTMBuilder::disable_dropout() { + dropout_rate = 0.f; + dropout_rate_h = 0.f; + } + + + + + //enum { _X2I, _H2I, _BI, _X2F, _H2F, _BF, _X2O, _H2O, _BO, _X2G, _H2G, _BG }; + enum { _X2I_, _H2I_, _BI_, _XA1, _HA1, _SA1, _BA1, _A2, _B2 }; + + +//*************************** + + + + AttentiveDilatedLSTMBuilder::AttentiveDilatedLSTMBuilder() : has_initial_state(false), layers(0), input_dim(0), hid(0), dropout_rate_h(0), weightnoise_std(0), dropout_masks_valid(false) { } + + AttentiveDilatedLSTMBuilder::AttentiveDilatedLSTMBuilder(vector max_dilations, + unsigned input_dim, + unsigned hidden_dim, + unsigned attention_dim, + ParameterCollection& model) + : max_dilations(max_dilations), layers(unsigned(max_dilations.size())), + input_dim(input_dim), hid(hidden_dim), attention_dim(attention_dim), weightnoise_std(0), dropout_masks_valid(false) { + unsigned layer_input_dim = input_dim; + local_model = model.add_subcollection("compact-vanilla-lstm-builder"); + for (unsigned i = 0; i < layers; ++i) { + // i + Parameter p_Wx = local_model.add_parameters({ hidden_dim * 4, layer_input_dim }); + Parameter p_Wh = local_model.add_parameters({ hidden_dim * 4, hidden_dim }); + Parameter p_b = local_model.add_parameters({ hidden_dim * 4 }, ParameterInitConst(0.f)); + + Parameter p_Wxa1 = local_model.add_parameters({ attention_dim, layer_input_dim }); + Parameter p_Wha1 = local_model.add_parameters({ attention_dim, hidden_dim }); + Parameter p_Wsa1 = local_model.add_parameters({ attention_dim, hidden_dim }); + Parameter p_ba1 = local_model.add_parameters({ attention_dim }, ParameterInitConst(0.f)); + + Parameter p_Wa2 = local_model.add_parameters({ max_dilations[i], attention_dim }); + Parameter p_ba2 = local_model.add_parameters({ max_dilations[i] }, ParameterInitConst(0.f)); + + layer_input_dim = hidden_dim; // output (hidden) from 1st layer is input to next + + vector ps = { p_Wx, p_Wh, p_b, p_Wxa1, p_Wha1, p_Wsa1, p_ba1, p_Wa2, p_ba2 }; + params.push_back(ps); + + } // layers + dropout_rate = 0.f; + dropout_rate_h = 0.f; + } + + void AttentiveDilatedLSTMBuilder::new_graph_impl(ComputationGraph& cg, bool update) { + param_vars.clear(); + for (unsigned i = 0; i < layers; ++i) { + auto& p = params[i]; + vector vars; + for (unsigned j = 0; j < p.size(); ++j) { + vars.push_back(update ? parameter(cg, p[j]) : const_parameter(cg, p[j])); + } + param_vars.push_back(vars); + } + + _cg = &cg; + } + // layout: 0..layers = c + // layers+1..2*layers = h + void AttentiveDilatedLSTMBuilder::start_new_sequence_impl(const vector& hinit) { + h.clear(); + c.clear(); + + if (hinit.size() > 0) { + DYNET_ARG_CHECK(layers * 2 == hinit.size(), + "AttentiveDilatedLSTMBuilder must be initialized with 2 times as many expressions as layers " + "(hidden state, and cell for each layer). However, for " << layers << " layers, " << + hinit.size() << " expressions were passed in"); + h0.resize(layers); + c0.resize(layers); + for (unsigned i = 0; i < layers; ++i) { + c0[i] = hinit[i]; + h0[i] = hinit[i + layers]; + } + has_initial_state = true; + } + else { + has_initial_state = false; + } + + dropout_masks_valid = false; + } + + void AttentiveDilatedLSTMBuilder::set_dropout_masks(unsigned batch_size) { + masks.clear(); + for (unsigned i = 0; i < layers; ++i) { + std::vector masks_i; + unsigned idim = (i == 0) ? input_dim : hid; + if (dropout_rate > 0.f || dropout_rate_h > 0.f) { + float retention_rate = 1.f - dropout_rate; + float retention_rate_h = 1.f - dropout_rate_h; + float scale = 1.f / retention_rate; + float scale_h = 1.f / retention_rate_h; + // in + masks_i.push_back(random_bernoulli(*_cg, Dim({ idim }, batch_size), retention_rate, scale)); + // h + masks_i.push_back(random_bernoulli(*_cg, Dim({ hid }, batch_size), retention_rate_h, scale_h)); + masks.push_back(masks_i); + } + } + dropout_masks_valid = true; + } + + ParameterCollection & AttentiveDilatedLSTMBuilder::get_parameter_collection() { + return local_model; + } + + // TODO - Make this correct + // Copied c from the previous step (otherwise c.size()< h.size()) + // Also is creating a new step something we want? + // wouldn't overwriting the current one be better? + Expression AttentiveDilatedLSTMBuilder::set_h_impl(int prev, const vector& h_new) { + DYNET_ARG_CHECK(h_new.empty() || h_new.size() == layers, + "AttentiveDilatedLSTMBuilder::set_h expects as many inputs as layers, but got " << + h_new.size() << " inputs for " << layers << " layers"); + const unsigned t = unsigned(h.size()); + h.push_back(vector(layers)); + c.push_back(vector(layers)); + for (unsigned i = 0; i < layers; ++i) { + Expression h_i = h_new[i]; + Expression c_i = c[t - 1][i]; + h[t][i] = h_i; + c[t][i] = c_i; + } + return h[t].back(); + } + // Current implementation : s_new is either {new_c[0],...,new_c[n]} + // or {new_c[0],...,new_c[n],new_h[0],...,new_h[n]} + Expression AttentiveDilatedLSTMBuilder::set_s_impl(int prev, const std::vector& s_new) { + DYNET_ARG_CHECK(s_new.size() == layers || s_new.size() == 2 * layers, + "AttentiveDilatedLSTMBuilder::set_s expects either as many inputs or twice as many inputs as layers, but got " << s_new.size() << " inputs for " << layers << " layers"); + bool only_c = s_new.size() == layers; + const unsigned t = unsigned(c.size()); + h.push_back(vector(layers)); + c.push_back(vector(layers)); + for (unsigned i = 0; i < layers; ++i) { + Expression h_i = only_c ? h[t - 1][i] : s_new[i + layers]; + Expression c_i = s_new[i]; + h[t][i] = h_i; + c[t][i] = c_i; + } + return h[t].back(); + } + + Expression AttentiveDilatedLSTMBuilder::add_input_impl(int prev, const Expression& x) { + h.push_back(vector(layers)); + c.push_back(vector(layers)); + vector& ht = h.back(); + vector& ct = c.back(); + Expression in = x; + if ((dropout_rate > 0.f || dropout_rate_h > 0.f) && !dropout_masks_valid) set_dropout_masks(x.dim().bd); + for (unsigned i = 0; i < layers; ++i) { + int dilation_offset= max_dilations[i]-1; + const vector& vars = param_vars[i]; + Expression i_h_tm1, i_c_tm1; + if (prev < dilation_offset) { + if (has_initial_state) { + // initial value for h and c at timestep 0 in layer i + // defaults to zero matrix input if not set in add_parameter_edges + i_h_tm1 = h0[i]; + i_c_tm1 = c0[i]; + } + else { + i_h_tm1 = zeros(*_cg, Dim({ vars[_BI].dim()[0] / 4 }, x.dim().bd)); + i_c_tm1 = i_h_tm1; + } + } + else { + if (dilation_offset>0) { + //enum { _X2I, _H2I, _BI, _XA1, _HA1, _SA1, _BA1, _A2, _B2 }; + Expression weights_ex=vars[_XA1]*in+ vars[_HA1]*h[prev][i]+ vars[_SA1]*c[prev][i]+ vars[_BA1]; + weights_ex=tanh(weights_ex); + weights_ex=vars[_A2]* weights_ex+ vars[_B2]; + weights_ex =softmax(weights_ex); + #if defined _DEBUG + vector weights=as_vector(weights_ex.value()); + #endif + + unsigned indx=0; + Expression w_ex = pick(weights_ex, indx); + Expression avg_h= cmult(h[prev][i], w_ex); + for (indx=1; indx <= dilation_offset; indx++) {//dilation_offset==max_dilations[i]-1, so together with indx==0, we cover max_dilations[i] steps + w_ex = pick(weights_ex, indx); + avg_h = avg_h+cmult(h[prev- indx][i], w_ex); + } + i_h_tm1 = avg_h; + } else { + i_h_tm1 = h[prev- dilation_offset][i]; + } + i_c_tm1 = c[prev- dilation_offset][i]; + } + if (dropout_rate > 0.f || dropout_rate_h > 0.f) { + // apply dropout according to https://arxiv.org/abs/1512.05287 (tied weights) + Expression gates_t = vanilla_lstm_gates_dropout({ in }, i_h_tm1, vars[_X2I], vars[_H2I], vars[_BI], masks[i][0], masks[i][1], weightnoise_std); + ct[i] = vanilla_lstm_c(i_c_tm1, gates_t); + in = ht[i] = vanilla_lstm_h(ct[i], gates_t); + } + else { + Expression gates_t = vanilla_lstm_gates({ in }, i_h_tm1, vars[_X2I], vars[_H2I], vars[_BI], weightnoise_std); + ct[i] = vanilla_lstm_c(i_c_tm1, gates_t); + in = ht[i] = vanilla_lstm_h(ct[i], gates_t); + } + } + return ht.back(); + } + + void AttentiveDilatedLSTMBuilder::copy(const RNNBuilder & rnn) { + const AttentiveDilatedLSTMBuilder & rnn_lstm = (const AttentiveDilatedLSTMBuilder&)rnn; + DYNET_ARG_CHECK(params.size() == rnn_lstm.params.size(), + "Attempt to copy AttentiveDilatedLSTMBuilder with different number of parameters " + "(" << params.size() << " != " << rnn_lstm.params.size() << ")"); + for (size_t i = 0; i < params.size(); ++i) + for (size_t j = 0; j < params[i].size(); ++j) + params[i][j] = rnn_lstm.params[i][j]; + } + + void AttentiveDilatedLSTMBuilder::set_dropout(float d) { + DYNET_ARG_CHECK(d >= 0.f && d <= 1.f, + "dropout rate must be a probability (>=0 and <=1)"); + dropout_rate = d; + dropout_rate_h = d; + } + + void AttentiveDilatedLSTMBuilder::set_dropout(float d, float d_h) { + DYNET_ARG_CHECK(d >= 0.f && d <= 1.f && d_h >= 0.f && d_h <= 1.f, + "dropout rate must be a probability (>=0 and <=1)"); + dropout_rate = d; + dropout_rate_h = d_h; + } + + void AttentiveDilatedLSTMBuilder::disable_dropout() { + dropout_rate = 0.f; + dropout_rate_h = 0.f; + } + void AttentiveDilatedLSTMBuilder::set_weightnoise(float std) { + DYNET_ARG_CHECK(std >= 0.f, "weight noise must have standard deviation >=0"); + weightnoise_std = std; + } + + //*/ + + DilatedLSTMBuilder::DilatedLSTMBuilder() : has_initial_state(false), layers(0), input_dim(0), hid(0), dropout_rate_h(0), weightnoise_std(0), dropout_masks_valid(false) { } + + DilatedLSTMBuilder::DilatedLSTMBuilder(vector dilations, + unsigned input_dim, + unsigned hidden_dim, + ParameterCollection& model) + : dilations(dilations), layers(unsigned(dilations.size())), + input_dim(input_dim), hid(hidden_dim), weightnoise_std(0), dropout_masks_valid(false) { + unsigned layer_input_dim = input_dim; + local_model = model.add_subcollection("compact-vanilla-lstm-builder"); + for (unsigned i = 0; i < layers; ++i) { + // i + Parameter p_Wx = local_model.add_parameters({ hidden_dim * 4, layer_input_dim }); + Parameter p_Wh = local_model.add_parameters({ hidden_dim * 4, hidden_dim }); + Parameter p_b = local_model.add_parameters({ hidden_dim * 4 }, ParameterInitConst(0.f)); + + layer_input_dim = hidden_dim; // output (hidden) from 1st layer is input to next + + vector ps = { p_Wx, p_Wh, p_b }; + params.push_back(ps); + + } // layers + dropout_rate = 0.f; + dropout_rate_h = 0.f; + } + + void DilatedLSTMBuilder::new_graph_impl(ComputationGraph& cg, bool update) { + param_vars.clear(); + for (unsigned i = 0; i < layers; ++i) { + auto& p = params[i]; + vector vars; + for (unsigned j = 0; j < p.size(); ++j) { vars.push_back(update ? parameter(cg, p[j]) : const_parameter(cg, p[j])); } + param_vars.push_back(vars); + } + + _cg = &cg; + } + // layout: 0..layers = c + // layers+1..2*layers = h + void DilatedLSTMBuilder::start_new_sequence_impl(const vector& hinit) { + h.clear(); + c.clear(); + + if (hinit.size() > 0) { + DYNET_ARG_CHECK(layers * 2 == hinit.size(), + "DilatedLSTMBuilder must be initialized with 2 times as many expressions as layers " + "(hidden state, and cell for each layer). However, for " << layers << " layers, " << + hinit.size() << " expressions were passed in"); + h0.resize(layers); + c0.resize(layers); + for (unsigned i = 0; i < layers; ++i) { + c0[i] = hinit[i]; + h0[i] = hinit[i + layers]; + } + has_initial_state = true; + } else { + has_initial_state = false; + } + + dropout_masks_valid = false; + } + + void DilatedLSTMBuilder::set_dropout_masks(unsigned batch_size) { + masks.clear(); + for (unsigned i = 0; i < layers; ++i) { + std::vector masks_i; + unsigned idim = (i == 0) ? input_dim : hid; + if (dropout_rate > 0.f || dropout_rate_h > 0.f) { + float retention_rate = 1.f - dropout_rate; + float retention_rate_h = 1.f - dropout_rate_h; + float scale = 1.f / retention_rate; + float scale_h = 1.f / retention_rate_h; + // in + masks_i.push_back(random_bernoulli(*_cg, Dim({ idim }, batch_size), retention_rate, scale)); + // h + masks_i.push_back(random_bernoulli(*_cg, Dim({ hid }, batch_size), retention_rate_h, scale_h)); + masks.push_back(masks_i); + } + } + dropout_masks_valid = true; + } + + ParameterCollection & DilatedLSTMBuilder::get_parameter_collection() { + return local_model; + } + + // TODO - Make this correct + // Copied c from the previous step (otherwise c.size()< h.size()) + // Also is creating a new step something we want? + // wouldn't overwriting the current one be better? + Expression DilatedLSTMBuilder::set_h_impl(int prev, const vector& h_new) { + DYNET_ARG_CHECK(h_new.empty() || h_new.size() == layers, + "DilatedLSTMBuilder::set_h expects as many inputs as layers, but got " << + h_new.size() << " inputs for " << layers << " layers"); + const unsigned t = unsigned(h.size()); + h.push_back(vector(layers)); + c.push_back(vector(layers)); + for (unsigned i = 0; i < layers; ++i) { + Expression h_i = h_new[i]; + Expression c_i = c[t - 1][i]; + h[t][i] = h_i; + c[t][i] = c_i; + } + return h[t].back(); + } + // Current implementation : s_new is either {new_c[0],...,new_c[n]} + // or {new_c[0],...,new_c[n],new_h[0],...,new_h[n]} + Expression DilatedLSTMBuilder::set_s_impl(int prev, const std::vector& s_new) { + DYNET_ARG_CHECK(s_new.size() == layers || s_new.size() == 2 * layers, + "DilatedLSTMBuilder::set_s expects either as many inputs or twice as many inputs as layers, but got " << s_new.size() << " inputs for " << layers << " layers"); + bool only_c = s_new.size() == layers; + const unsigned t = unsigned(c.size()); + h.push_back(vector(layers)); + c.push_back(vector(layers)); + for (unsigned i = 0; i < layers; ++i) { + Expression h_i = only_c ? h[t - 1][i] : s_new[i + layers]; + Expression c_i = s_new[i]; + h[t][i] = h_i; + c[t][i] = c_i; + } + return h[t].back(); + } + + Expression DilatedLSTMBuilder::add_input_impl(int prev, const Expression& x) { + h.push_back(vector(layers)); + c.push_back(vector(layers)); + vector& ht = h.back(); + vector& ct = c.back(); + Expression in = x; + if ((dropout_rate > 0.f || dropout_rate_h > 0.f) && !dropout_masks_valid) set_dropout_masks(x.dim().bd); + for (unsigned i = 0; i < layers; ++i) { + int dilation_offset = dilations[i] - 1; + const vector& vars = param_vars[i]; + Expression i_h_tm1, i_c_tm1; + if (prev < dilation_offset) { + if (has_initial_state) { + // initial value for h and c at timestep 0 in layer i + // defaults to zero matrix input if not set in add_parameter_edges + i_h_tm1 = h0[i]; + i_c_tm1 = c0[i]; + } else { + i_h_tm1 = zeros(*_cg, Dim({ vars[_BI].dim()[0] / 4 }, x.dim().bd)); + i_c_tm1 = i_h_tm1; + } + } else { // t > 0 + i_h_tm1 = h[prev - dilation_offset][i]; + i_c_tm1 = c[prev - dilation_offset][i]; + } + if (dropout_rate > 0.f || dropout_rate_h > 0.f) { + // apply dropout according to https://arxiv.org/abs/1512.05287 (tied weights) + Expression gates_t = vanilla_lstm_gates_dropout({ in }, i_h_tm1, vars[_X2I], vars[_H2I], vars[_BI], masks[i][0], masks[i][1], weightnoise_std); + ct[i] = vanilla_lstm_c(i_c_tm1, gates_t); + in = ht[i] = vanilla_lstm_h(ct[i], gates_t); + } else { + Expression gates_t = vanilla_lstm_gates({ in }, i_h_tm1, vars[_X2I], vars[_H2I], vars[_BI], weightnoise_std); + ct[i] = vanilla_lstm_c(i_c_tm1, gates_t); + in = ht[i] = vanilla_lstm_h(ct[i], gates_t); + } + } + return ht.back(); + } + + void DilatedLSTMBuilder::copy(const RNNBuilder & rnn) { + const DilatedLSTMBuilder & rnn_lstm = (const DilatedLSTMBuilder&)rnn; + DYNET_ARG_CHECK(params.size() == rnn_lstm.params.size(), + "Attempt to copy DilatedLSTMBuilder with different number of parameters " + "(" << params.size() << " != " << rnn_lstm.params.size() << ")"); + for (size_t i = 0; i < params.size(); ++i) + for (size_t j = 0; j < params[i].size(); ++j) + params[i][j] = rnn_lstm.params[i][j]; + } + + void DilatedLSTMBuilder::set_dropout(float d) { + DYNET_ARG_CHECK(d >= 0.f && d <= 1.f, + "dropout rate must be a probability (>=0 and <=1)"); + dropout_rate = d; + dropout_rate_h = d; + } + + void DilatedLSTMBuilder::set_dropout(float d, float d_h) { + DYNET_ARG_CHECK(d >= 0.f && d <= 1.f && d_h >= 0.f && d_h <= 1.f, + "dropout rate must be a probability (>=0 and <=1)"); + dropout_rate = d; + dropout_rate_h = d_h; + } + + void DilatedLSTMBuilder::disable_dropout() { + dropout_rate = 0.f; + dropout_rate_h = 0.f; + } + void DilatedLSTMBuilder::set_weightnoise(float std) { + DYNET_ARG_CHECK(std >= 0.f, "weight noise must have standard deviation >=0"); + weightnoise_std = std; + } + +} // namespace dynet diff --git a/c++/windows_VisualStudio/M41/slstm.h b/c++/windows_VisualStudio/M41/slstm.h new file mode 100644 index 0000000..adb63a7 --- /dev/null +++ b/c++/windows_VisualStudio/M41/slstm.h @@ -0,0 +1,394 @@ +/** +* file slstm.h +* header for my implementation of dilated LSTMs, based on Dynet LSTM builders + - DilatedLSTMBuilder - standard Dilated LSTM (https://papers.nips.cc/paper/6613-dilated-recurrent-neural-networks.pdf) + - ResidualDilatedLSTMBuilder - Dilated LSTM with special Residual shortcuts, after https://arxiv.org/abs/1701.03360 + - AttentiveDilatedLSTMBuilder - Dilated LSTM with Attention mechanism, as in the second stage of https://arxiv.org/abs/1704.02971 +* +Slawek Smyl, Mar-May 2018 +*/ + +#ifndef DYNET_SLSTMS_H_ +#define DYNET_SLSTMS_H_ + +#include "dynet/dynet.h" +#include "dynet/rnn.h" +#include "dynet/expr.h" + +using namespace std; + +namespace dynet { + + //basd on VanillaLSTMBuilder + struct ResidualDilatedLSTMBuilder : public RNNBuilder { + /** + * @brief Default Constructor + */ + ResidualDilatedLSTMBuilder(); + /** + * \brief Constructor for the ResidualDilatedLSTMBuilder + * + * \param dilations Vector of dilations + * \param input_dim Dimention of the input \f$x_t\f$ + * \param hidden_dim Dimention of the hidden states \f$h_t\f$ and \f$c_t\f$ + * \param model ParameterCollection holding the parameters + * \param ln_lstm Whether to use layer normalization + * \param forget_bias value(float) to use as bias for the forget gate(default = 1.0) + */ + explicit ResidualDilatedLSTMBuilder(vector dilations, + unsigned input_dim, + unsigned hidden_dim, + ParameterCollection& model, + bool ln_lstm = false, + float forget_bias = 1.f); + + Expression back() const override { return (cur == -1 ? h0.back() : h[cur].back()); } + std::vector final_h() const override { return (h.size() == 0 ? h0 : h.back()); } + std::vector final_s() const override { + std::vector ret = (c.size() == 0 ? c0 : c.back()); + for (auto my_h : final_h()) ret.push_back(my_h); + return ret; + } + unsigned num_h0_components() const override { return 2 * layers; } + + std::vector get_h(RNNPointer i) const override { return (i == -1 ? h0 : h[i]); } + std::vector get_s(RNNPointer i) const override { + std::vector ret = (i == -1 ? c0 : c[i]); + for (auto my_h : get_h(i)) ret.push_back(my_h); + return ret; + } + + void copy(const RNNBuilder & params) override; + + /** + * \brief Set the dropout rates to a unique value + * \details This has the same effect as `set_dropout(d,d_h)` except that all the dropout rates are set to the same value. + * \param d Dropout rate to be applied on all of \f$x,h\f$ + */ + void set_dropout(float d); + /** + * \brief Set the dropout rates + * \details The dropout implemented here is the variational dropout with tied weights introduced in [Gal, 2016](http://papers.nips.cc/paper/6241-a-theoretically-grounded-application-of-dropout-in-recurrent-neural-networks) + * More specifically, dropout masks \f$\mathbf{z_x}\sim \mathrm{Bernoulli}(1-d_x)\f$,\f$\mathbf{z_h}\sim \mathrm{Bernoulli}(1-d_h)\f$ are sampled at the start of each sequence. + * The dynamics of the cell are then modified to : + * + * \f$ + * \begin{split} + i_t & =\sigma(W_{ix}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ih}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_i)\\ + f_t & = \sigma(W_{fx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{fh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_f)\\ + o_t & = \sigma(W_{ox}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{oh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_o)\\ + \tilde{c_t} & = \tanh(W_{cx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ch}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_c)\\ + c_t & = c_{t-1}\circ f_t + \tilde{c_t}\circ i_t\\ + h_t & = \tanh(c_t)\circ o_t\\ + \end{split} + * \f$ + * + * For more detail as to why scaling is applied, see the "Unorthodox" section of the documentation + * \param d Dropout rate \f$d_x\f$ for the input \f$x_t\f$ + * \param d_h Dropout rate \f$d_h\f$ for the output \f$h_t\f$ + */ + void set_dropout(float d, float d_r); + /** + * \brief Set all dropout rates to 0 + * \details This is equivalent to `set_dropout(0)` or `set_dropout(0,0,0)` + * + */ + void disable_dropout(); + /** + * \brief Set dropout masks at the beginning of a sequence for a specific batch size + * \details If this function is not called on batched input, the same mask will be applied across + * all batch elements. Use this to apply different masks to each batch element + * + * \param batch_size Batch size + */ + void set_dropout_masks(unsigned batch_size = 1); + /** + * \brief Get parameters in ResidualDilatedLSTMBuilder + * \return list of points to ParameterStorage objects + */ + ParameterCollection & get_parameter_collection() override; + protected: + void new_graph_impl(ComputationGraph& cg, bool update) override; + void start_new_sequence_impl(const std::vector& h0) override; + Expression add_input_impl(int prev, const Expression& x) override; + Expression set_h_impl(int prev, const std::vector& h_new) override; + Expression set_s_impl(int prev, const std::vector& s_new) override; + + public: + ParameterCollection local_model; + // first index is layer, then ... + std::vector> params; + // first index is layer, then ... + std::vector> ln_params; + + // first index is layer, then ... + std::vector> param_vars; + // first index is layer, then ... + std::vector> ln_param_vars; + + // first index is layer, then ... + std::vector> masks; + + // first index is time, second is layer + std::vector> h, c; + + // initial values of h and c at each layer + // - both default to zero matrix input + bool has_initial_state; // if this is false, treat h0 and c0 as 0 + std::vector h0; + std::vector c0; + unsigned layers; + unsigned input_dim, hid; + float dropout_rate_h; + bool ln_lstm; + float forget_bias; + bool dropout_masks_valid; + vector dilations; //one int per layer + + private: + ComputationGraph* _cg; // Pointer to current cg + + }; + + + struct DilatedLSTMBuilder : public RNNBuilder { + /** + * @brief Default Constructor + */ + DilatedLSTMBuilder(); + /** + * \brief Constructor for the DilatedLSTMBuilder + * + * \param dilations Vector of dilations + * \param input_dim Dimention of the input \f$x_t\f$ + * \param hidden_dim Dimention of the hidden states \f$h_t\f$ and \f$c_t\f$ + * \param model ParameterCollection holding the parameters + */ + explicit DilatedLSTMBuilder(vector dilations, + unsigned input_dim, + unsigned hidden_dim, + ParameterCollection& model); + + Expression back() const override { return (cur == -1 ? h0.back() : h[cur].back()); } + std::vector final_h() const override { return (h.size() == 0 ? h0 : h.back()); } + std::vector final_s() const override { + std::vector ret = (c.size() == 0 ? c0 : c.back()); + for (auto my_h : final_h()) ret.push_back(my_h); + return ret; + } + unsigned num_h0_components() const override { return 2 * layers; } + + std::vector get_h(RNNPointer i) const override { return (i == -1 ? h0 : h[i]); } + std::vector get_s(RNNPointer i) const override { + std::vector ret = (i == -1 ? c0 : c[i]); + for (auto my_h : get_h(i)) ret.push_back(my_h); + return ret; + } + + void copy(const RNNBuilder & params) override; + + /** + * \brief Set the dropout rates to a unique value + * \details This has the same effect as `set_dropout(d,d_h)` except that all the dropout rates are set to the same value. + * \param d Dropout rate to be applied on all of \f$x,h\f$ + */ + void set_dropout(float d); + /** + * \brief Set the dropout rates + * \details The dropout implemented here is the variational dropout with tied weights introduced in [Gal, 2016](http://papers.nips.cc/paper/6241-a-theoretically-grounded-application-of-dropout-in-recurrent-neural-networks) + * More specifically, dropout masks \f$\mathbf{z_x}\sim \mathrm{Bernoulli}(1-d_x)\f$,\f$\mathbf{z_h}\sim \mathrm{Bernoulli}(1-d_h)\f$ are sampled at the start of each sequence. + * The dynamics of the cell are then modified to : + * + * \f$ + * \begin{split} + i_t & =\sigma(W_{ix}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ih}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_i)\\ + f_t & = \sigma(W_{fx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{fh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_f)\\ + o_t & = \sigma(W_{ox}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{oh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_o)\\ + \tilde{c_t} & = \tanh(W_{cx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ch}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_c)\\ + c_t & = c_{t-1}\circ f_t + \tilde{c_t}\circ i_t\\ + h_t & = \tanh(c_t)\circ o_t\\ + \end{split} + * \f$ + * + * For more detail as to why scaling is applied, see the "Unorthodox" section of the documentation + * \param d Dropout rate \f$d_x\f$ for the input \f$x_t\f$ + */ + void set_dropout(float d, float d_r); + /** + * \brief Set all dropout rates to 0 + * \details This is equivalent to `set_dropout(0)` or `set_dropout(0,0,0)` + * + */ + void disable_dropout(); + /** + * \brief Set dropout masks at the beginning of a sequence for a specific batch size + * \details If this function is not called on batched input, the same mask will be applied across + * all batch elements. Use this to apply different masks to each batch element + * + * \param batch_size Batch size + */ + void set_dropout_masks(unsigned batch_size = 1); + + void set_weightnoise(float std); + ParameterCollection & get_parameter_collection() override; + protected: + void new_graph_impl(ComputationGraph& cg, bool update) override; + void start_new_sequence_impl(const std::vector& h0) override; + Expression add_input_impl(int prev, const Expression& x) override; + Expression set_h_impl(int prev, const std::vector& h_new) override; + Expression set_s_impl(int prev, const std::vector& s_new) override; + + public: + ParameterCollection local_model; + // first index is layer, then ... + std::vector> params; + + // first index is layer, then ... + std::vector> param_vars; + + // first index is layer, then ... + std::vector> masks; + + // first index is time, second is layer + std::vector> h, c; + + // initial values of h and c at each layer + // - both default to zero matrix input + bool has_initial_state; // if this is false, treat h0 and c0 as 0 + std::vector h0; + std::vector c0; + unsigned layers; + unsigned input_dim, hid; + float dropout_rate_h; + float weightnoise_std; + vector dilations; //one int per layer + + bool dropout_masks_valid; + private: + ComputationGraph* _cg; // Pointer to current cg + + }; + + + struct AttentiveDilatedLSTMBuilder : public RNNBuilder { + /** + * @brief Default Constructor + */ + AttentiveDilatedLSTMBuilder(); + /** + * \brief Constructor for the AttentiveDilatedLSTMBuilder + * + * \param max_dilations Vector, maximum dilations (per layer) + * \param input_dim Dimention of the input \f$x_t\f$ + * \param hidden_dim Dimention of the hidden states \f$h_t\f$ and \f$c_t\f$ + * \param model ParameterCollection holding the parameters + */ + explicit AttentiveDilatedLSTMBuilder(vector max_dilations, + unsigned input_dim, + unsigned hidden_dim, + unsigned attention_dim, + ParameterCollection& model); + + Expression back() const override { return (cur == -1 ? h0.back() : h[cur].back()); } + std::vector final_h() const override { return (h.size() == 0 ? h0 : h.back()); } + std::vector final_s() const override { + std::vector ret = (c.size() == 0 ? c0 : c.back()); + for (auto my_h : final_h()) ret.push_back(my_h); + return ret; + } + unsigned num_h0_components() const override { return 2 * layers; } + + std::vector get_h(RNNPointer i) const override { return (i == -1 ? h0 : h[i]); } + std::vector get_s(RNNPointer i) const override { + std::vector ret = (i == -1 ? c0 : c[i]); + for (auto my_h : get_h(i)) ret.push_back(my_h); + return ret; + } + + void copy(const RNNBuilder & params) override; + + /** + * \brief Set the dropout rates to a unique value + * \details This has the same effect as `set_dropout(d,d_h)` except that all the dropout rates are set to the same value. + * \param d Dropout rate to be applied on all of \f$x,h\f$ + */ + void set_dropout(float d); + /** + * \brief Set the dropout rates + * \details The dropout implemented here is the variational dropout with tied weights introduced in [Gal, 2016](http://papers.nips.cc/paper/6241-a-theoretically-grounded-application-of-dropout-in-recurrent-neural-networks) + * More specifically, dropout masks \f$\mathbf{z_x}\sim \mathrm{Bernoulli}(1-d_x)\f$,\f$\mathbf{z_h}\sim \mathrm{Bernoulli}(1-d_h)\f$ are sampled at the start of each sequence. + * The dynamics of the cell are then modified to : + * + * \f$ + * \begin{split} + i_t & =\sigma(W_{ix}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ih}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_i)\\ + f_t & = \sigma(W_{fx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{fh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_f)\\ + o_t & = \sigma(W_{ox}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{oh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_o)\\ + \tilde{c_t} & = \tanh(W_{cx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ch}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_c)\\ + c_t & = c_{t-1}\circ f_t + \tilde{c_t}\circ i_t\\ + h_t & = \tanh(c_t)\circ o_t\\ + \end{split} + * \f$ + * + * For more detail as to why scaling is applied, see the "Unorthodox" section of the documentation + * \param d Dropout rate \f$d_x\f$ for the input \f$x_t\f$ + */ + void set_dropout(float d, float d_r); + /** + * \brief Set all dropout rates to 0 + * \details This is equivalent to `set_dropout(0)` or `set_dropout(0,0,0)` + * + */ + void disable_dropout(); + /** + * \brief Set dropout masks at the beginning of a sequence for a specific batch size + * \details If this function is not called on batched input, the same mask will be applied across + * all batch elements. Use this to apply different masks to each batch element + * + * \param batch_size Batch size + */ + void set_dropout_masks(unsigned batch_size = 1); + + void set_weightnoise(float std); + ParameterCollection & get_parameter_collection() override; + protected: + void new_graph_impl(ComputationGraph& cg, bool update) override; + void start_new_sequence_impl(const std::vector& h0) override; + Expression add_input_impl(int prev, const Expression& x) override; + Expression set_h_impl(int prev, const std::vector& h_new) override; + Expression set_s_impl(int prev, const std::vector& s_new) override; + + public: + ParameterCollection local_model; + // first index is layer, then ... + std::vector> params; + + // first index is layer, then ... + std::vector> param_vars; + + // first index is layer, then ... + std::vector> masks; + + // first index is time, second is layer + std::vector> h, c; + + // initial values of h and c at each layer + // - both default to zero matrix input + bool has_initial_state; // if this is false, treat h0 and c0 as 0 + std::vector h0; + std::vector c0; + unsigned layers; + unsigned input_dim, hid; + unsigned attention_dim; + float dropout_rate_h; + float weightnoise_std; + vector max_dilations; //one int per layer + + bool dropout_masks_valid; + private: + ComputationGraph* _cg; // Pointer to current cg + + }; +} // namespace dynet + +#endif diff --git a/c++/windows_VisualStudio/M42/ES_RNN_PI.cc b/c++/windows_VisualStudio/M42/ES_RNN_PI.cc new file mode 100644 index 0000000..268c654 --- /dev/null +++ b/c++/windows_VisualStudio/M42/ES_RNN_PI.cc @@ -0,0 +1,1246 @@ +/*ES-RNN: ES-RNN Exponential Smoothing Recurrent Neural Network hybrid. Prediction intervals. +Slawek Smyl, Jan-May 2017. + +Dilated LSTMs, with optional shortcuts, attention. +It is meant to be used for Monthly and Quarterly series of M4 competition, becasue the DE (Diversified Ensemble) version is too slow. +The program uses and requires Dynet NN library(https://github.com/clab/dynet); can be compiled and run on Windows, Linux, and Mac. + +It has to be invoked in pair of executables, passing at least two integers: seedForChunks, chunkNo +so e.g. create a script with following lines on Windows +start 10 1 +start 10 2 +Modern computers have at more then 2 cores, so e.g. on 6-core machine create and run the following script with 3 pairs of workers: +# start 10 1 0 +# start 10 2 0 +# start 20 1 5 +# start 20 2 5 +# start 30 1 10 +# start 30 2 10 +seedForChunks have to be the same withion one pair, chunk numbers have to be 1 and 2. +We have added here the third parameter: ibigOffset. The straddle should be equal or bigger than BIG_LOOP. +Each pair goes through BIG_LOOP (by default 3, change in code below if you want) of model fitting and prediction, +so 2 pairs, as above, will produce 6 forecasts to be ensembled later, in R. +By increasing number of pairs, e.g. to 6 on 12-core computer, one can reduce BIG_LOOP to 1, so reduce execution time, and still have 6 forecasts - +a decent number to ensemble (in a separate, supplied R script). + +There are three blocks of parameters below, one active (starting with //PARAMS--------------) and two inactive. +The active block is setup as in the final run of forecasting quarterly series. Similarly Monthly block. +The Daily block is more of a demo, allowing to run quickly forecast for Daily series, although with slightly worse performance (use another program ES_RNN_E.cc for it). It was not used for the final submission. +So, you need comment/uncomment to have one block of interest active. + + +*/ + +//#define USE_ODBC +//define USE_ODBC if you want to +// 1. run the program in backtesting mode (which means you also need to set LBACK>0 below. Read the comment below. +// 2. save forecasts to a datatabase. Mysql and SQL Server were tested. The table creation and some other scripts should be found in \sql directory of the source code. +// Of course setting up ODBC is not that simple, :-), e.g. you need to create DSN=slawek, that points to a database with the output table. +// Saving to the db is convenient, but not necessary - all forecasts are always saved to as csv files in automatically created subdirectory (sorry sometimes two directories, so you have to copy :-)) of OUTPUT_DIR +//If saving to database you need to modify run varaible, for each new run, otherwise you will get the table key error. + +#include "dynet/dynet.h" +#include "dynet/training.h" +#include "dynet/expr.h" +#include "dynet/io.h" +#include "dynet/model.h" +#include "dynet/nodes.h" +#include "dynet/expr.h" +#include "dynet/lstm.h" +#include "slstm.h" //my implementation of dilated LSTMs + + +#if defined USE_ODBC + #if defined _WINDOWS + #include + #endif + #include + #include +#endif + +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace dynet; + + + +string DATA_DIR = "f:\\progs\\data\\M4DataSet\\"; //with the competition data csvs +//string DATA_DIR="/home/uber/progs/data/M4DataSet/"; +string OUTPUT_DIR = "f:\\progs\\data\\M4\\"; +//string OUTPUT_DIR="/home/uber/progs/data/M4/"; + +int LBACK = 0; //LBACK 0 means final mode: learning on all data and forecasting. LBACK=1 would move back by OUTPUT_SIZE, and forecast last known OUTPUT_SIZE points, for backtesting. LBACK could be a larger integer, but then number of series shrinks. + + +//PARAMS-------------- +string VARIABLE = "Quarterly"; +const string run0 = "(1,2),(4,8), LR=1e-3/{7,3e-4f},{11,1e-4f}, EPOCHS=16, LVP=200 40*"; +const string runL = "alpha5L " + run0; +const string runH = "alpha5H " + run0; + +vector> dilations = { { 1,2 },{ 4,8 } };//Each vector represents one chunk of Dilateed LSTMS, connected in resnNet fashion +const float INITIAL_LEARNING_RATE = 1e-3f; +//else +const map LEARNING_RATES = { { 7,3e-4f },{ 11,1e-4f } }; //at which epoch we manually set them up to what +const float PER_SERIES_LR_MULTIP = 1; //multiplier for per-series parameters' learning rate. + +const float ALPHA = 0.05; +const float TAUL = ALPHA / 2; +const float TAUH = 1 - TAUL; +const float ALPHA_MULTIP = 2 / ALPHA; + +//#define USE_RESIDUAL_LSTM +//#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = false; //whether to insert a tanh() layer between the RNN stack and the linear adaptor (output) layer + +const int NUM_OF_TRAIN_EPOCHS = 16; +const unsigned int STATE_HSIZE = 40; + +const int SEASONALITY = 4; +const unsigned int INPUT_SIZE = 4; +const int INPUT_SIZE_I = INPUT_SIZE; +const unsigned int OUTPUT_SIZE = 8; +const int OUTPUT_SIZE_I = OUTPUT_SIZE; +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = INPUT_SIZE_I + OUTPUT_SIZE_I + MIN_INP_SEQ_LEN + 2; +const int MAX_SERIES_LENGTH = 40 * SEASONALITY + MIN_SERIES_LENGTH; //we are chopping longer series, to last, max e.g. 40 years + +const float LEVEL_VARIABILITY_PENALTY = 200; //Multiplier for L" penalty against wigglines of level vector. + + +/* +string VARIABLE = "Monthly"; +const string run0 = "Res(1,3,6,12), LR=1e-3 {8,3e-4f},{13,1e-4f}, EPOCHS=14, LVP=50, 20*"; +const string runL = "alpha5L " + run0; +const string runH = "alpha5H " + run0; + +#define USE_RESIDUAL_LSTM +//#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = false; + +vector> dilations = { { 1,3,6,12 } };//Each vector represents one chunk of Dilateed LSTMS, connected in resnNet fashion^M +const float INITIAL_LEARNING_RATE = 1e-3f; +const map LEARNING_RATES = { { 8,3e-4f },{ 13,1e-4f } }; //at which epoch we set them up to what^M +const float PER_SERIES_LR_MULTIP = 1; + +const int NUM_OF_TRAIN_EPOCHS = 14; +const unsigned int STATE_HSIZE = 50; + +const float LEVEL_VARIABILITY_PENALTY = 50; //Multiplier for L" penalty against wigglines of level vector. + +const int SEASONALITY = 12; +const unsigned int OUTPUT_SIZE = 18; +const unsigned int INPUT_SIZE = 12; +const int INPUT_SIZE_I = INPUT_SIZE; +const int OUTPUT_SIZE_I = OUTPUT_SIZE; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = INPUT_SIZE_I + OUTPUT_SIZE_I + MIN_INP_SEQ_LEN + 2; +const int MAX_SERIES_LENGTH = 40 * SEASONALITY + MIN_SERIES_LENGTH; //we are chopping longer series, to last, max e.g. 40 years + +const float ALPHA = 0.05; +const float TAUL = ALPHA / 2; +const float TAUH = 1 - TAUL; +const float ALPHA_MULTIP = 2 / ALPHA; +*/ + +Expression squash(const Expression& x) { + return log(x); +} + +Expression expand(const Expression& x) { + return exp(x); +} + +string INPUT_PATH = DATA_DIR + VARIABLE + "-train.csv"; +string INFO_INPUT_PATH = DATA_DIR + "M4-info.csv"; + +#if defined _DEBUG + const int MAX_NUM_OF_SERIES = 40; +#else + const int MAX_NUM_OF_SERIES = -1; //use all series +#endif // _DEBUG + +const unsigned int NUM_OF_CATEGORIES = 6;//in data provided +const int BIG_LOOP = 3; +const int NUM_OF_CHUNKS = 2; +const float EPS=1e-6; +const int AVERAGING_LEVEL=5; +const bool USE_MEDIAN = false; +const int MIDDLE_POS_FOR_AVG = 2; //if using medians + +const float NOISE_STD=0.001; +const int FREQ_OF_TEST=1; +const float GRADIENT_CLIPPING=20; +const float C_STATE_PENALTY = 0; + +const float BIG_FLOAT=1e38;//numeric_limits::max(); +const bool PRINT_DIAGN=true; +const unsigned ATTENTION_HSIZE=STATE_HSIZE; + +const bool USE_AUTO_LEARNING_RATE=false; +//if USE_AUTO_LEARNING_RATE, and only if LBACK>0 +const float MIN_LEARNING_RATE = 0.0001f; +const float LR_RATIO = sqrt(10); +const float LR_TOLERANCE_MULTIP = 1.005; +const int L3_PERIOD = 2; +const int MIN_EPOCHS_BEFORE_CHANGING_LRATE = 2; + + +#if defined USE_ODBC + void HandleDiagnosticRecord(SQLHANDLE hHandle, + SQLSMALLINT hType, + RETCODE RetCode); + + #if defined _WINDOWS + WCHAR* pwszConnStr = L"DSN=slawek"; + #else + SQLCHAR* pwszConnStr = (SQLCHAR*) "DSN=slawek"; + #endif + #define TRYODBC(h, ht, x) { RETCODE rc = x;\ + if (rc != SQL_SUCCESS) \ + { \ + HandleDiagnosticRecord (h, ht, rc); \ + } \ + if (rc == SQL_ERROR) \ + { \ + fprintf(stderr, "Error in " #x "\n"); \ + if (hStmt) { \ + SQLFreeHandle(SQL_HANDLE_STMT, hStmt); \ + } \ + if (hDbc) { \ + SQLDisconnect(hDbc); \ + SQLFreeHandle(SQL_HANDLE_DBC, hDbc); \ + } \ + if (hEnv) { \ + SQLFreeHandle(SQL_HANDLE_ENV, hEnv); \ + } \ + exit(-1); \ + } \ + } + +#endif + +struct M4TS {//storing series data + vector < float> categories_vect; + vector vals; + vector testVals;//empty, unless LBACK>0 + float meanAbsSeasDiff; + int n; + + M4TS(string category, stringstream &line_stream) { + array categories = { 0,0,0,0,0,0 }; + if (category == "Demographic") + categories[0] = 1; + else if (category == "Finance") + categories[1] = 1; + else if (category == "Industry") + categories[2] = 1; + else if (category == "Macro") + categories[3] = 1; + else if (category == "Micro") + categories[4] = 1; + else if (category == "Other") + categories[5] = 1; + else { + cerr << "unknown category?"; + exit(-1); + } + for (int i = 0; i < NUM_OF_CATEGORIES; i++) + categories_vect.push_back(categories[i]); + + string tmp_str; + while(getline(line_stream, tmp_str, ',' )) { + string val_str; + for (const auto c : tmp_str) { + if (c != '\"' && c != '\r') //remove quotes and very occasional double end of line + val_str.push_back(c); + } + if (val_str.size() == 0) + break; + float val=(atof(val_str.c_str())); + vals.push_back(val); + } + + meanAbsSeasDiff = 0; + float sumf = 0; + for (int ip = SEASONALITY; ip0) + meanAbsSeasDiff = sumf / (vals.size() - SEASONALITY); + + if (LBACK > 0) { //extract last OUTPUT_SIZE points as the test values + if (vals.size() > LBACK*OUTPUT_SIZE_I) { + auto first = vals.begin() + vals.size() - LBACK*OUTPUT_SIZE_I; + auto pastLast = vals.begin() + vals.size() - (LBACK-1)*OUTPUT_SIZE_I; + vector input_vect(first, pastLast); //[first,pastLast) + testVals= input_vect; + vals.resize(vals.size() - LBACK*OUTPUT_SIZE_I); //remove last LBACK*OUTPUT_SIZE elements + n = vals.size(); + } else + n = 0; + } else { + n = vals.size(); + } + if (n > MAX_SERIES_LENGTH) {//chop long series + vals.erase(vals.begin(), vals.begin() + (n-MAX_SERIES_LENGTH)); //remove some early data + n = vals.size(); + } + } + M4TS(){}; +}; + + +struct AdditionalParams {//Per series, important + Parameter levSm; + Parameter sSm; + array initSeasonality; +}; + +struct AdditionalParamsF {//Used for storing diagnostics + float levSm; + float sSm; + array initSeasonality; + vector levels; + vector seasons; +}; + +//loss function +Expression MSIS(const Expression& out_ex, const Expression& actuals_ex) { + vector losses; + for (unsigned int indx = 0; indx as_scalar(forecH.value())) + loss = loss + (actual - forecH)*ALPHA_MULTIP; + losses.push_back(loss); + } + Expression ret = sum(losses) / OUTPUT_SIZE; + #if defined _DEBUG + float retf = as_scalar(ret.value()); + if (retf>100) { + vector out_vect = as_vector(out_ex.value()); + vector actuals_vect = as_vector(actuals_ex.value()); + for (int i = 0; i0 and PERCENTILE!=50 +float wQuantLoss(vector& out_vect, vector& actuals_vect, float tau, int offset) {//used just for diagnostics, if if LBACK>0 and PERCENTILE!=50 + float sumf = 0; float suma = 0; + for (unsigned int indx = 0; indx forec) + sumf = sumf + (actual - forec)*tau; + else + sumf = sumf + (actual - forec)*(tau - 1); + } + return sumf / suma * 200; +} + +//MSIS operating on floats, used for validation +float errorFunc(vector& out_vect, vector& actuals_vect, float meanAbsSeasDiff) { + float sumf=0; + for (unsigned int indx = 0; indx forecH) + loss = loss + (actualf - forecH)*ALPHA_MULTIP; + sumf+=loss; + } + return sumf / (OUTPUT_SIZE*meanAbsSeasDiff); +} + + + + +int main(int argc, char** argv) { + dynet::initialize(argc, argv); + + int seedForChunks = 10; //Yes it runs, without any params, but it will work only on 1/NUM_OF_CHUNKS of all cases. The system is expected to run in NUM_OF_CHUNKS multiples. + int chunkNo = 1; + int ibigOffset = 0; + if (argc >= 3) { + seedForChunks = atoi(argv[1]); + chunkNo = atoi(argv[2]); + } + if (argc >= 4) + ibigOffset = atoi(argv[3]); + + if (chunkNo > NUM_OF_CHUNKS) { + cerr << "chunkNo > NUM_OF_CHUNKS"; + exit(-1); + } + else if (chunkNo <= 0) { + cerr << "chunkNo <= 0"; + exit(-1); + } + + cout<0) + std::cout<< " ibigOffset:"<< ibigOffset; //if continuing prematurely stopped run + if (LBACK>0) + std::cout<<" lback:"<tm_year+1900; + now_ts.month=now->tm_mon+1; + now_ts.day=now->tm_mday; + now_ts.hour=now->tm_hour; + now_ts.minute=now->tm_min; + now_ts.second=now->tm_sec; + now_ts.fraction=0; //reportedly needed + + const int OFFSET_TO_FIRST_ACTUAL=5; + string insertQuery_str = "insert into M72nn(run, LBack, ibig, series, epoch "; + for (int iq = 1; iq <= OUTPUT_SIZE_I; iq++) { + stringstream ss; + ss << iq; + string iq_str = ss.str(); + insertQuery_str = insertQuery_str +", actual"+iq_str+", forec" + iq_str; + } + insertQuery_str = insertQuery_str +", trainingError, variable, n, dateTimeOfPrediction) \ + values(? , ? , ? , ? , ? "; + for (int iq = 1; iq <= OUTPUT_SIZE_I; iq++) { + insertQuery_str = insertQuery_str + ",?,?"; + } + insertQuery_str = insertQuery_str + ",?,?,?,?)"; + #if defined _WINDOWS + wstring insertQuery(insertQuery_str.begin(), insertQuery_str.end()); + SQLWCHAR* sqlQuery = (SQLWCHAR*)insertQuery.c_str(); + #else + SQLCHAR* sqlQuery =(SQLCHAR*)insertQuery_str.c_str(); + #endif + + + SQLHENV hEnv = NULL; + SQLHDBC hDbc = NULL; + SQLHSTMT hStmt = NULL, hInsertStmt = NULL; + + if (SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv) == SQL_ERROR) { + fprintf(stderr, "Unable to allocate an environment handle\n"); + exit(-1); + } + TRYODBC(hEnv, + SQL_HANDLE_ENV, + SQLSetEnvAttr(hEnv, + SQL_ATTR_ODBC_VERSION, + (SQLPOINTER)SQL_OV_ODBC3, + 0)); + + // Allocate a connection + TRYODBC(hEnv, + SQL_HANDLE_ENV, + SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc)); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLDriverConnect(hDbc, + NULL, + pwszConnStr, + SQL_NTS, + NULL, + 0, + NULL, + SQL_DRIVER_COMPLETE)); + fprintf(stderr, "Connected!\n"); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLSetConnectAttr(hDbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, SQL_IS_INTEGER)); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hInsertStmt)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLPrepare(hInsertStmt, sqlQuery, SQL_NTS)); + + SQLLEN nullTerminatedStringOfRun = SQL_NTS; + SQLLEN nullTerminatedStringOfSeries = SQL_NTS; + SQLLEN nullTerminatedStringOfVariable = SQL_NTS; + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&LBACK, 0, NULL)); + + // variable, n, dateTimeOfPrediction + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL+2*OUTPUT_SIZE_I+2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)VARIABLE.c_str(), 0, &nullTerminatedStringOfVariable)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE_I + 4, SQL_PARAM_INPUT, SQL_C_TYPE_TIMESTAMP, SQL_TYPE_TIMESTAMP, 0, 0, &now_ts, sizeof(TIMESTAMP_STRUCT), NULL)); +#endif + + random_device rd; // only used once to initialise (seed) engine + mt19937 rng(rd()); // random-number engine used (Mersenne-Twister) + mt19937 rngForChunks(seedForChunks); + + vector series_vect; + unordered_map allSeries_map(30000);//max series in one chunk would be 48/2=24k, for monthly series + unordered_map seriesCategories_map(120000);//100k series + + ifstream infoFile(INFO_INPUT_PATH); + string line; + getline(infoFile, line); //header + while (getline(infoFile, line)) { + //cout << string( line)<= MIN_SERIES_LENGTH) { + series_vect.push_back(series); + if (m4Obj.meanAbsSeasDiff==0) { + cout<<"Warning, flat series:"<0 && series_vect.size()>=MAX_NUM_OF_SERIES) + break; + } + + int series_len=(int)series_vect.size(); + int chunkSize= series_len/NUM_OF_CHUNKS; + std::cout << "num of series:" << series_vect.size() <<" size of chunk:"<< chunkSize< uniOnSeries(0, chunkSize -1); // closed interval [a, b] + + unordered_map, AVERAGING_LEVEL+1>> testResults_map((int)chunkSize*1.5); + set diagSeries; + + for (int ibig=0; ibig perfValid_vect; + int epochOfLastChangeOfLRate = -1; + +#if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&ibigDb, 0, NULL)); +#endif + + ParameterCollection pc; + ParameterCollection perSeriesPC; + + float learning_rate= INITIAL_LEARNING_RATE; + AdamTrainer trainer(pc, learning_rate, 0.9, 0.999, EPS); + trainer.clip_threshold = GRADIENT_CLIPPING; + AdamTrainer perSeriesTrainer(perSeriesPC, learning_rate*PER_SERIES_LR_MULTIP, 0.9, 0.999, EPS); + perSeriesTrainer.clip_threshold = GRADIENT_CLIPPING; + + #if defined USE_RESIDUAL_LSTM + vector rNNStack; + rNNStack.emplace_back(ResidualDilatedLSTMBuilder(dilations[0], INPUT_SIZE + NUM_OF_CATEGORIES, STATE_HSIZE, pc)); + for (int il = 1; il rNNStack; + rNNStack.emplace_back(AttentiveDilatedLSTMBuilder(dilations[0], INPUT_SIZE + NUM_OF_CATEGORIES, STATE_HSIZE, ATTENTION_HSIZE, pc)); + for (int il = 1; il rNNStack; + rNNStack.emplace_back(DilatedLSTMBuilder(dilations[0], INPUT_SIZE + NUM_OF_CATEGORIES, STATE_HSIZE, pc)); + for (int il = 1; il oneChunk_vect(start,end); + if (PRINT_DIAGN) { + for (int k = 0; k<10; k++) //diag + cout << oneChunk_vect[k] << " "; + cout << endl; + } + if (chunkNo == NUM_OF_CHUNKS) + cout<<"last chunk size:"<< oneChunk_vect.size()< additionalParams_map((int)oneChunk_vect.size()*1.5); //per series + unordered_map*> historyOfAdditionalParams_map((int)oneChunk_vect.size()*1.5); + for (auto iter = oneChunk_vect.begin(); iter != oneChunk_vect.end(); ++iter) {//setup + string series = *iter; + AdditionalParams addParams; + addParams.levSm = perSeriesPC.add_parameters({ 1 }, 0.5); //level smoothing + addParams.sSm = perSeriesPC.add_parameters({ 1 }, 0.5); //seasonality smoothing + for (int isea = 0; isea(); + } + + for (int iEpoch=0; iEpoch testLosses; //test losses of all series in this epoch + vector testAvgLosses; //test avg (over last few epochs) losses of all series in this epoch + vector testLossesL; //lower quantile loss + vector testAvgLossesL; //lower quantile loss + vector testLossesH; //higher quantile loss + vector testAvgLossesH; //higher quantile loss + vector trainingLosses; //training losses of all series in one epoch + vector forecLosses; vector levVarLosses; vector stateLosses; + #if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&iEpoch, 0, NULL)); + #endif + + for (auto iter = oneChunk_vect.begin() ; iter != oneChunk_vect.end(); ++iter) { + string series=*iter; + auto m4Obj = allSeries_map[series]; + + #if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)series.c_str(), 0, &nullTerminatedStringOfSeries)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE_I + 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&m4Obj.n, 0, NULL)); + #endif + + ComputationGraph cg; + for (int il=0; il season_exVect;//vector, because we do not know how long the series is + for (int iseas=0; iseas seas==1 + season_exVect.push_back(seas);//Expression is a simple struct, without any storage management, so the auto copy constructor works OK. + } + season_exVect.push_back(season_exVect[0]); + + vector logDiffOfLevels_vect; + vector levels_exVect; + Expression lev=cdiv(input(cg, m4Obj.vals[0]), season_exVect[0]); + levels_exVect.push_back(lev); + for (int i=1; i 0) { + vector levelVarLoss_v; + for (int i = 1; iSEASONALITY) { + unsigned long startSeasonalityIndx=season_exVect.size()-SEASONALITY; + for (int i=0;i<(OUTPUT_SIZE_I-SEASONALITY);i++) + season_exVect.push_back(season_exVect[startSeasonalityIndx+i]); + } + vector losses; + for (int i=INPUT_SIZE_I-1; i<(m4Obj.n- OUTPUT_SIZE_I); i++) { + vector::const_iterator firstE = season_exVect.begin() +i+1-INPUT_SIZE_I; + vector::const_iterator pastLastE = season_exVect.begin() +i+1; //not including the last one + vector inputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + Expression inputSeasonality_ex=concatenate(inputSeasonality_exVect); + + vector::const_iterator first = m4Obj.vals.begin() +i+1-INPUT_SIZE_I; + vector::const_iterator pastLast = m4Obj.vals.begin() +i+1; //not including the last one + vector input_vect(first, pastLast); //[first,pastLast) + Expression input0_ex=input(cg,{INPUT_SIZE},input_vect); + Expression input1_ex=cdiv(input0_ex,inputSeasonality_ex); //deseasonalization + vector joinedInput_ex; + input1_ex= cdiv(input1_ex, levels_exVect[i]); + joinedInput_ex.emplace_back(noise(squash(input1_ex), NOISE_STD)); //normalization+noise + joinedInput_ex.emplace_back(input(cg, { NUM_OF_CATEGORIES }, m4Obj.categories_vect)); + Expression input_ex = concatenate(joinedInput_ex); + + Expression rnn_ex; + try { + rnn_ex = rNNStack[0].add_input(input_ex); + for (int il=1; il outputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + Expression outputSeasonality_ex=concatenate(outputSeasonality_exVect); + + first = m4Obj.vals.begin() +i+1; + pastLast = m4Obj.vals.begin() +i+1+OUTPUT_SIZE_I; + vector labels_vect(first, pastLast); //[first,pastLast) + Expression labels0_ex=input(cg,{OUTPUT_SIZE},labels_vect); + Expression labels1_ex=cdiv(labels0_ex,outputSeasonality_ex); //deseasonalization + labels1_ex= cdiv(labels1_ex, levels_exVect[i]);//normalization + Expression labels_ex=squash(labels1_ex); + + Expression loss_ex=MSIS(out_ex, labels_ex);//although out_ex has doubled size, labels_ex have normal size. NB, we do not have duplicated labels during training. + //Expression loss_ex=pinBallLoss(out_ex, labels_ex); + if (i>=INPUT_SIZE_I+MIN_INP_SEQ_LEN) + losses.push_back(loss_ex); + } + + Expression forecLoss_ex= average(losses); + Expression loss_exp = forecLoss_ex; + + float levVarLoss=0; + if (LEVEL_VARIABILITY_PENALTY > 0) { + Expression levelVarLossP_ex = levelVarLoss_ex*LEVEL_VARIABILITY_PENALTY; + levVarLoss = as_scalar(levelVarLossP_ex.value()); + levVarLosses.push_back(levVarLoss); + loss_exp= loss_exp + levelVarLossP_ex; + } + + float cStateLoss=0; + if (C_STATE_PENALTY>0) { + vector cStateLosses_vEx; + for (int irnn = 0; irnn < rNNStack.size(); irnn++) + for (int it = 0; it maxAbs) { + maxAbs = abs(state[iv]); + timeOfMax = it; + layerOfMax = il; + chunkOfMax = irnn; + } + } + } //through layers/states + } //through time + } //through chunks + + cout << "levSm:" << as_scalar(levSm_ex.value()) << endl; + cout << "sSm:" << as_scalar(sSm_ex.value()) << endl; + cout << " min season=" << minSeason << endl; + cout << " min level=" << minLevel << endl; + cout << " max abs:" << maxAbs << " at time:" << timeOfMax << " at layer:" << layerOfMax << " and chunk:" << chunkOfMax << endl; + + //diagSeries.insert(series); + pc.reset_gradient(); + perSeriesPC.reset_gradient(); + } + + //saving per-series values for diagnostics purposes + AdditionalParamsF &histAdditionalParams= historyOfAdditionalParams_map[series]->at(iEpoch); + histAdditionalParams.levSm=as_scalar(levSm_ex.value()); + histAdditionalParams.sSm=as_scalar(sSm_ex.value()); + for (int isea=0; isea::const_iterator firstE = season_exVect.begin() + i + 1 - INPUT_SIZE_I; + vector::const_iterator pastLastE = season_exVect.begin() + i + 1; //not including the last one + vector inputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + Expression inputSeasonality_ex = concatenate(inputSeasonality_exVect); + + vector::const_iterator first = m4Obj.vals.begin() + i + 1 - INPUT_SIZE_I; + vector::const_iterator pastLast = m4Obj.vals.begin() + i + 1; //not including the last one + vector input_vect(first, pastLast); //[first,pastLast) + Expression input0_ex = input(cg, { INPUT_SIZE }, input_vect); + Expression input1_ex = cdiv(input0_ex, inputSeasonality_ex); //deseasonalization + vector joinedInput_ex; + input1_ex= cdiv(input1_ex, levels_exVect[i]);//normalization + joinedInput_ex.emplace_back(squash(input1_ex)); + joinedInput_ex.emplace_back(input(cg, { NUM_OF_CATEGORIES }, m4Obj.categories_vect)); + Expression input_ex = concatenate(joinedInput_ex); + + Expression rnn_ex; + try { + rnn_ex = rNNStack[0].add_input(input_ex); + for (int il=1; il outputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + for (int ios=0; ios out_vect = as_vector(out_ex.value()); + + if (LBACK > 0) { + float qLoss = errorFunc(out_vect, m4Obj.testVals, m4Obj.meanAbsSeasDiff); + testLosses.push_back(qLoss); + + qLoss = wQuantLoss(out_vect, m4Obj.testVals, TAUL, 0); + testLossesL.push_back(qLoss); + + qLoss = wQuantLoss(out_vect, m4Obj.testVals, TAUH, OUTPUT_SIZE); + testLossesH.push_back(qLoss); + } + + testResults_map[series][iEpoch%AVERAGING_LEVEL] = out_vect; + if (iEpoch >= AVERAGING_LEVEL) { + if (USE_MEDIAN) { + if (testResults_map[series][AVERAGING_LEVEL].size() == 0) + testResults_map[series][AVERAGING_LEVEL] = out_vect; //just to initialized, to make space. The values will be overwritten + for (int iii = 0; iii < OUTPUT_SIZE_I*2; iii++) { + vector temp_vect2; + for (int ii = 0; ii firstForec = testResults_map[series][0]; + testResults_map[series][AVERAGING_LEVEL] = firstForec; + for (int ii = 1; ii nextForec = testResults_map[series][ii]; + for (int iii = 0; iii 0) { + float qLoss = errorFunc(testResults_map[series][AVERAGING_LEVEL], m4Obj.testVals, m4Obj.meanAbsSeasDiff); + testAvgLosses.push_back(qLoss); + + qLoss = wQuantLoss(testResults_map[series][AVERAGING_LEVEL], m4Obj.testVals, TAUL, 0); + testAvgLossesL.push_back(qLoss); + + qLoss = wQuantLoss(testResults_map[series][AVERAGING_LEVEL], m4Obj.testVals, TAUH, OUTPUT_SIZE); + testAvgLossesH.push_back(qLoss); + + #if defined USE_ODBC //save + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE_I + 1, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_FLOAT, 0, 0, (SQLPOINTER)&forecastLoss, 0, NULL)); + + for (int iv = 0; iv<2; iv++) { + if (iv == 0) + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)runL.c_str(), 0, &nullTerminatedStringOfRun)) + else + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)runH.c_str(), 0, &nullTerminatedStringOfRun)); + + for (int io = 0; io < OUTPUT_SIZE_I; io++) { + int ipos=OFFSET_TO_FIRST_ACTUAL + 1 + 2*io; + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, ipos, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_FLOAT, 0, 0, (SQLPOINTER)&m4Obj.testVals[io], 0, NULL)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, ipos+1, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_FLOAT, 0, 0, (SQLPOINTER)&testResults_map[series][AVERAGING_LEVEL][io + iv*OUTPUT_SIZE_I], 0, NULL)); + } + if (MAX_NUM_OF_SERIES<0) + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLExecute(hInsertStmt)); + } + #endif + } //lback>0 + } //time to average + }//last anchor point of the series + }//through TEST loop + }//through series + + + if (iEpoch % FREQ_OF_TEST == 0) { + float averageTrainingLoss = accumulate(trainingLosses.begin(), trainingLosses.end(), 0.0) / trainingLosses.size(); + + cout << ibig << " " << iEpoch << " loss:" << averageTrainingLoss * 100; + if (LEVEL_VARIABILITY_PENALTY > 0 || C_STATE_PENALTY > 0) { + float averageForecLoss = accumulate(forecLosses.begin(), forecLosses.end(), 0.0) / forecLosses.size(); + cout << " forecast loss:" << averageForecLoss*100; + } + if (LEVEL_VARIABILITY_PENALTY > 0) { + float averagelevVarLoss = accumulate(levVarLosses.begin(), levVarLosses.end(), 0.0) / levVarLosses.size(); + cout << " levVar loss:" << averagelevVarLoss * 100; + } + if (C_STATE_PENALTY > 0) { + float averageStateLoss = accumulate(stateLosses.begin(), stateLosses.end(), 0.0) / stateLosses.size(); + cout << " state loss:" << averageStateLoss * 100; + } + + float averageTestLoss=0; + if (LBACK > 0) { + float averageTestLoss = accumulate(testLosses.begin(), testLosses.end(), 0.0) / testLosses.size(); + float averageTestLossL = accumulate(testLossesL.begin(), testLossesL.end(), 0.0) / testLossesL.size(); + float averageTestLossH = accumulate(testLossesH.begin(), testLossesH.end(), 0.0) / testLossesH.size(); + cout<<" Test loss:" << averageTestLoss<<" L:"<< averageTestLossL<<" H:"<< averageTestLossH; + if (iEpoch >= AVERAGING_LEVEL) { + float averageTestAvgLoss = accumulate(testAvgLosses.begin(), testAvgLosses.end(), 0.0) / testAvgLosses.size();//of this epoch + float averageTestAvgLossL = accumulate(testAvgLossesL.begin(), testAvgLossesL.end(), 0.0) / testAvgLossesL.size();//of this epoch + float averageTestAvgLossH = accumulate(testAvgLossesH.begin(), testAvgLossesH.end(), 0.0) / testAvgLossesH.size();//of this epoch + cout << " avgLoss:" << averageTestAvgLoss<<" L:"<< averageTestAvgLossL<<" H:"<< averageTestAvgLossH<= 2) { + if (iEpoch < L3_PERIOD) + changeL2Rate = perfValid_vect[perfValid_vect.size() - 2] MIN_LEARNING_RATE && (iEpoch - epochOfLastChangeOfLRate) >= MIN_EPOCHS_BEFORE_CHANGING_LRATE) { + learning_rate /= LR_RATIO; + cout << "decreasing LR to:" << learning_rate << endl; + epochOfLastChangeOfLRate = iEpoch; + trainer.learning_rate = learning_rate; + } + } + #if defined USE_ODBC + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLEndTran( + SQL_HANDLE_DBC, + hDbc, + SQL_COMMIT)); + #endif + }//through epochs + + if (PRINT_DIAGN) {//some diagnostic info + set diagSeries; + for (int i = 0; i<1; i++) {//add a few normal ones + int irand = uniOnSeries(rng); + diagSeries.insert(oneChunk_vect[irand]); + } + for (auto series : diagSeries) { + cout << endl << series << endl; + array* historyOfAdditionalParams_ptrToArr = historyOfAdditionalParams_map[series]; + cout << "lSm:" << endl; + for (int iEpoch = 0; iEpochat(iEpoch).levSm << " "; + cout << endl; + cout << "sSm:" << endl; + for (int iEpoch = 0; iEpochat(iEpoch).sSm << " "; + cout << endl; + cout << "seasons:" << endl; + for (int isea = 0; iseaat(iEpoch).initSeasonality[isea] << " "; + cout << endl; + } + cout << endl; + for (int iEpoch = 0; iEpochat(iEpoch).levels.size()>0) { + cout << "levels:" << iEpoch << " "; + for (int iv = 0; ivat(iEpoch).levels.size(); iv++) + cout << historyOfAdditionalParams_ptrToArr->at(iEpoch).levels[iv] << ", "; + cout << endl; + cout << "seas:" << iEpoch << " "; + for (int iv = 0; ivat(iEpoch).seasons.size(); iv++) + cout << historyOfAdditionalParams_ptrToArr->at(iEpoch).seasons[iv] << ", "; + cout << endl; + } + } + } + } + + //save the forecast to outputFile + ofstream outputFile; + outputFile.open(outputPathL); + for (auto iter = oneChunk_vect.begin(); iter != oneChunk_vect.end(); ++iter) { + string series = *iter; + outputFile<< series; + for (int io=0; io + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + RelWithDebug + Win32 + + + RelWithDebug + x64 + + + + + + + + + + + {A16B5466-E680-43F6-A884-A4A01EB78E50} + Win32Proj + M42 + 8.1 + + + + Application + true + v140 + Unicode + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + Application + true + v140 + Unicode + Sequential + + + Application + true + v140 + Unicode + Sequential + + + Application + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + true + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + + + NotUsing + Level1 + Disabled + WIN32;_WINDOWS;EIGEN_USE_MKL_ALL;EIGEN_FAST_MATH;NOMINMAX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + E:\progs2\dynet;E:\progs\Eigen; + + + Console + true + E:\progs2\dynet\buildMKL\dynet\Debug + dynet.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + NotUsing + Level1 + MaxSpeed + WIN32;_WINDOWS;EIGEN_FAST_MATH;EIGEN_USE_MKL_ALL;NOMINMAX;NDEBUG_;CONSOLE;%(PreprocessorDefinitions) + E:\progs2\dynet;E:\progs\Eigen; + AnySuitable + true + Speed + AdvancedVectorExtensions + Default + MultiThreadedDLL + ProgramDatabase + true + false + + + Console + true + E:\progs2\dynet\buildMKL\dynet\RelWithDebInfo + dynet.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + true + true + + + + + + \ No newline at end of file diff --git a/c++/windows_VisualStudio/M42/M42.vcxproj.filters b/c++/windows_VisualStudio/M42/M42.vcxproj.filters new file mode 100644 index 0000000..b8ac1c3 --- /dev/null +++ b/c++/windows_VisualStudio/M42/M42.vcxproj.filters @@ -0,0 +1,30 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + Source Files + + + + + Header Files + + + \ No newline at end of file diff --git a/c++/windows_VisualStudio/M42/slstm.h b/c++/windows_VisualStudio/M42/slstm.h new file mode 100644 index 0000000..adb63a7 --- /dev/null +++ b/c++/windows_VisualStudio/M42/slstm.h @@ -0,0 +1,394 @@ +/** +* file slstm.h +* header for my implementation of dilated LSTMs, based on Dynet LSTM builders + - DilatedLSTMBuilder - standard Dilated LSTM (https://papers.nips.cc/paper/6613-dilated-recurrent-neural-networks.pdf) + - ResidualDilatedLSTMBuilder - Dilated LSTM with special Residual shortcuts, after https://arxiv.org/abs/1701.03360 + - AttentiveDilatedLSTMBuilder - Dilated LSTM with Attention mechanism, as in the second stage of https://arxiv.org/abs/1704.02971 +* +Slawek Smyl, Mar-May 2018 +*/ + +#ifndef DYNET_SLSTMS_H_ +#define DYNET_SLSTMS_H_ + +#include "dynet/dynet.h" +#include "dynet/rnn.h" +#include "dynet/expr.h" + +using namespace std; + +namespace dynet { + + //basd on VanillaLSTMBuilder + struct ResidualDilatedLSTMBuilder : public RNNBuilder { + /** + * @brief Default Constructor + */ + ResidualDilatedLSTMBuilder(); + /** + * \brief Constructor for the ResidualDilatedLSTMBuilder + * + * \param dilations Vector of dilations + * \param input_dim Dimention of the input \f$x_t\f$ + * \param hidden_dim Dimention of the hidden states \f$h_t\f$ and \f$c_t\f$ + * \param model ParameterCollection holding the parameters + * \param ln_lstm Whether to use layer normalization + * \param forget_bias value(float) to use as bias for the forget gate(default = 1.0) + */ + explicit ResidualDilatedLSTMBuilder(vector dilations, + unsigned input_dim, + unsigned hidden_dim, + ParameterCollection& model, + bool ln_lstm = false, + float forget_bias = 1.f); + + Expression back() const override { return (cur == -1 ? h0.back() : h[cur].back()); } + std::vector final_h() const override { return (h.size() == 0 ? h0 : h.back()); } + std::vector final_s() const override { + std::vector ret = (c.size() == 0 ? c0 : c.back()); + for (auto my_h : final_h()) ret.push_back(my_h); + return ret; + } + unsigned num_h0_components() const override { return 2 * layers; } + + std::vector get_h(RNNPointer i) const override { return (i == -1 ? h0 : h[i]); } + std::vector get_s(RNNPointer i) const override { + std::vector ret = (i == -1 ? c0 : c[i]); + for (auto my_h : get_h(i)) ret.push_back(my_h); + return ret; + } + + void copy(const RNNBuilder & params) override; + + /** + * \brief Set the dropout rates to a unique value + * \details This has the same effect as `set_dropout(d,d_h)` except that all the dropout rates are set to the same value. + * \param d Dropout rate to be applied on all of \f$x,h\f$ + */ + void set_dropout(float d); + /** + * \brief Set the dropout rates + * \details The dropout implemented here is the variational dropout with tied weights introduced in [Gal, 2016](http://papers.nips.cc/paper/6241-a-theoretically-grounded-application-of-dropout-in-recurrent-neural-networks) + * More specifically, dropout masks \f$\mathbf{z_x}\sim \mathrm{Bernoulli}(1-d_x)\f$,\f$\mathbf{z_h}\sim \mathrm{Bernoulli}(1-d_h)\f$ are sampled at the start of each sequence. + * The dynamics of the cell are then modified to : + * + * \f$ + * \begin{split} + i_t & =\sigma(W_{ix}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ih}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_i)\\ + f_t & = \sigma(W_{fx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{fh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_f)\\ + o_t & = \sigma(W_{ox}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{oh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_o)\\ + \tilde{c_t} & = \tanh(W_{cx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ch}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_c)\\ + c_t & = c_{t-1}\circ f_t + \tilde{c_t}\circ i_t\\ + h_t & = \tanh(c_t)\circ o_t\\ + \end{split} + * \f$ + * + * For more detail as to why scaling is applied, see the "Unorthodox" section of the documentation + * \param d Dropout rate \f$d_x\f$ for the input \f$x_t\f$ + * \param d_h Dropout rate \f$d_h\f$ for the output \f$h_t\f$ + */ + void set_dropout(float d, float d_r); + /** + * \brief Set all dropout rates to 0 + * \details This is equivalent to `set_dropout(0)` or `set_dropout(0,0,0)` + * + */ + void disable_dropout(); + /** + * \brief Set dropout masks at the beginning of a sequence for a specific batch size + * \details If this function is not called on batched input, the same mask will be applied across + * all batch elements. Use this to apply different masks to each batch element + * + * \param batch_size Batch size + */ + void set_dropout_masks(unsigned batch_size = 1); + /** + * \brief Get parameters in ResidualDilatedLSTMBuilder + * \return list of points to ParameterStorage objects + */ + ParameterCollection & get_parameter_collection() override; + protected: + void new_graph_impl(ComputationGraph& cg, bool update) override; + void start_new_sequence_impl(const std::vector& h0) override; + Expression add_input_impl(int prev, const Expression& x) override; + Expression set_h_impl(int prev, const std::vector& h_new) override; + Expression set_s_impl(int prev, const std::vector& s_new) override; + + public: + ParameterCollection local_model; + // first index is layer, then ... + std::vector> params; + // first index is layer, then ... + std::vector> ln_params; + + // first index is layer, then ... + std::vector> param_vars; + // first index is layer, then ... + std::vector> ln_param_vars; + + // first index is layer, then ... + std::vector> masks; + + // first index is time, second is layer + std::vector> h, c; + + // initial values of h and c at each layer + // - both default to zero matrix input + bool has_initial_state; // if this is false, treat h0 and c0 as 0 + std::vector h0; + std::vector c0; + unsigned layers; + unsigned input_dim, hid; + float dropout_rate_h; + bool ln_lstm; + float forget_bias; + bool dropout_masks_valid; + vector dilations; //one int per layer + + private: + ComputationGraph* _cg; // Pointer to current cg + + }; + + + struct DilatedLSTMBuilder : public RNNBuilder { + /** + * @brief Default Constructor + */ + DilatedLSTMBuilder(); + /** + * \brief Constructor for the DilatedLSTMBuilder + * + * \param dilations Vector of dilations + * \param input_dim Dimention of the input \f$x_t\f$ + * \param hidden_dim Dimention of the hidden states \f$h_t\f$ and \f$c_t\f$ + * \param model ParameterCollection holding the parameters + */ + explicit DilatedLSTMBuilder(vector dilations, + unsigned input_dim, + unsigned hidden_dim, + ParameterCollection& model); + + Expression back() const override { return (cur == -1 ? h0.back() : h[cur].back()); } + std::vector final_h() const override { return (h.size() == 0 ? h0 : h.back()); } + std::vector final_s() const override { + std::vector ret = (c.size() == 0 ? c0 : c.back()); + for (auto my_h : final_h()) ret.push_back(my_h); + return ret; + } + unsigned num_h0_components() const override { return 2 * layers; } + + std::vector get_h(RNNPointer i) const override { return (i == -1 ? h0 : h[i]); } + std::vector get_s(RNNPointer i) const override { + std::vector ret = (i == -1 ? c0 : c[i]); + for (auto my_h : get_h(i)) ret.push_back(my_h); + return ret; + } + + void copy(const RNNBuilder & params) override; + + /** + * \brief Set the dropout rates to a unique value + * \details This has the same effect as `set_dropout(d,d_h)` except that all the dropout rates are set to the same value. + * \param d Dropout rate to be applied on all of \f$x,h\f$ + */ + void set_dropout(float d); + /** + * \brief Set the dropout rates + * \details The dropout implemented here is the variational dropout with tied weights introduced in [Gal, 2016](http://papers.nips.cc/paper/6241-a-theoretically-grounded-application-of-dropout-in-recurrent-neural-networks) + * More specifically, dropout masks \f$\mathbf{z_x}\sim \mathrm{Bernoulli}(1-d_x)\f$,\f$\mathbf{z_h}\sim \mathrm{Bernoulli}(1-d_h)\f$ are sampled at the start of each sequence. + * The dynamics of the cell are then modified to : + * + * \f$ + * \begin{split} + i_t & =\sigma(W_{ix}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ih}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_i)\\ + f_t & = \sigma(W_{fx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{fh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_f)\\ + o_t & = \sigma(W_{ox}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{oh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_o)\\ + \tilde{c_t} & = \tanh(W_{cx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ch}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_c)\\ + c_t & = c_{t-1}\circ f_t + \tilde{c_t}\circ i_t\\ + h_t & = \tanh(c_t)\circ o_t\\ + \end{split} + * \f$ + * + * For more detail as to why scaling is applied, see the "Unorthodox" section of the documentation + * \param d Dropout rate \f$d_x\f$ for the input \f$x_t\f$ + */ + void set_dropout(float d, float d_r); + /** + * \brief Set all dropout rates to 0 + * \details This is equivalent to `set_dropout(0)` or `set_dropout(0,0,0)` + * + */ + void disable_dropout(); + /** + * \brief Set dropout masks at the beginning of a sequence for a specific batch size + * \details If this function is not called on batched input, the same mask will be applied across + * all batch elements. Use this to apply different masks to each batch element + * + * \param batch_size Batch size + */ + void set_dropout_masks(unsigned batch_size = 1); + + void set_weightnoise(float std); + ParameterCollection & get_parameter_collection() override; + protected: + void new_graph_impl(ComputationGraph& cg, bool update) override; + void start_new_sequence_impl(const std::vector& h0) override; + Expression add_input_impl(int prev, const Expression& x) override; + Expression set_h_impl(int prev, const std::vector& h_new) override; + Expression set_s_impl(int prev, const std::vector& s_new) override; + + public: + ParameterCollection local_model; + // first index is layer, then ... + std::vector> params; + + // first index is layer, then ... + std::vector> param_vars; + + // first index is layer, then ... + std::vector> masks; + + // first index is time, second is layer + std::vector> h, c; + + // initial values of h and c at each layer + // - both default to zero matrix input + bool has_initial_state; // if this is false, treat h0 and c0 as 0 + std::vector h0; + std::vector c0; + unsigned layers; + unsigned input_dim, hid; + float dropout_rate_h; + float weightnoise_std; + vector dilations; //one int per layer + + bool dropout_masks_valid; + private: + ComputationGraph* _cg; // Pointer to current cg + + }; + + + struct AttentiveDilatedLSTMBuilder : public RNNBuilder { + /** + * @brief Default Constructor + */ + AttentiveDilatedLSTMBuilder(); + /** + * \brief Constructor for the AttentiveDilatedLSTMBuilder + * + * \param max_dilations Vector, maximum dilations (per layer) + * \param input_dim Dimention of the input \f$x_t\f$ + * \param hidden_dim Dimention of the hidden states \f$h_t\f$ and \f$c_t\f$ + * \param model ParameterCollection holding the parameters + */ + explicit AttentiveDilatedLSTMBuilder(vector max_dilations, + unsigned input_dim, + unsigned hidden_dim, + unsigned attention_dim, + ParameterCollection& model); + + Expression back() const override { return (cur == -1 ? h0.back() : h[cur].back()); } + std::vector final_h() const override { return (h.size() == 0 ? h0 : h.back()); } + std::vector final_s() const override { + std::vector ret = (c.size() == 0 ? c0 : c.back()); + for (auto my_h : final_h()) ret.push_back(my_h); + return ret; + } + unsigned num_h0_components() const override { return 2 * layers; } + + std::vector get_h(RNNPointer i) const override { return (i == -1 ? h0 : h[i]); } + std::vector get_s(RNNPointer i) const override { + std::vector ret = (i == -1 ? c0 : c[i]); + for (auto my_h : get_h(i)) ret.push_back(my_h); + return ret; + } + + void copy(const RNNBuilder & params) override; + + /** + * \brief Set the dropout rates to a unique value + * \details This has the same effect as `set_dropout(d,d_h)` except that all the dropout rates are set to the same value. + * \param d Dropout rate to be applied on all of \f$x,h\f$ + */ + void set_dropout(float d); + /** + * \brief Set the dropout rates + * \details The dropout implemented here is the variational dropout with tied weights introduced in [Gal, 2016](http://papers.nips.cc/paper/6241-a-theoretically-grounded-application-of-dropout-in-recurrent-neural-networks) + * More specifically, dropout masks \f$\mathbf{z_x}\sim \mathrm{Bernoulli}(1-d_x)\f$,\f$\mathbf{z_h}\sim \mathrm{Bernoulli}(1-d_h)\f$ are sampled at the start of each sequence. + * The dynamics of the cell are then modified to : + * + * \f$ + * \begin{split} + i_t & =\sigma(W_{ix}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ih}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_i)\\ + f_t & = \sigma(W_{fx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{fh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_f)\\ + o_t & = \sigma(W_{ox}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{oh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_o)\\ + \tilde{c_t} & = \tanh(W_{cx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ch}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_c)\\ + c_t & = c_{t-1}\circ f_t + \tilde{c_t}\circ i_t\\ + h_t & = \tanh(c_t)\circ o_t\\ + \end{split} + * \f$ + * + * For more detail as to why scaling is applied, see the "Unorthodox" section of the documentation + * \param d Dropout rate \f$d_x\f$ for the input \f$x_t\f$ + */ + void set_dropout(float d, float d_r); + /** + * \brief Set all dropout rates to 0 + * \details This is equivalent to `set_dropout(0)` or `set_dropout(0,0,0)` + * + */ + void disable_dropout(); + /** + * \brief Set dropout masks at the beginning of a sequence for a specific batch size + * \details If this function is not called on batched input, the same mask will be applied across + * all batch elements. Use this to apply different masks to each batch element + * + * \param batch_size Batch size + */ + void set_dropout_masks(unsigned batch_size = 1); + + void set_weightnoise(float std); + ParameterCollection & get_parameter_collection() override; + protected: + void new_graph_impl(ComputationGraph& cg, bool update) override; + void start_new_sequence_impl(const std::vector& h0) override; + Expression add_input_impl(int prev, const Expression& x) override; + Expression set_h_impl(int prev, const std::vector& h_new) override; + Expression set_s_impl(int prev, const std::vector& s_new) override; + + public: + ParameterCollection local_model; + // first index is layer, then ... + std::vector> params; + + // first index is layer, then ... + std::vector> param_vars; + + // first index is layer, then ... + std::vector> masks; + + // first index is time, second is layer + std::vector> h, c; + + // initial values of h and c at each layer + // - both default to zero matrix input + bool has_initial_state; // if this is false, treat h0 and c0 as 0 + std::vector h0; + std::vector c0; + unsigned layers; + unsigned input_dim, hid; + unsigned attention_dim; + float dropout_rate_h; + float weightnoise_std; + vector max_dilations; //one int per layer + + bool dropout_masks_valid; + private: + ComputationGraph* _cg; // Pointer to current cg + + }; +} // namespace dynet + +#endif diff --git a/c++/windows_VisualStudio/M43/ES_RNN_E.cc b/c++/windows_VisualStudio/M43/ES_RNN_E.cc new file mode 100644 index 0000000..aaf4659 --- /dev/null +++ b/c++/windows_VisualStudio/M43/ES_RNN_E.cc @@ -0,0 +1,1665 @@ +/*ES-RNN-E: Exponential Smoothing Recurrent Neural Network hybrid, Ensemble of specialists. Point forecast. +Slawek Smyl, Jan-May 2017. + +Dilated LSTMs, with optional shortcuts, attention. Non-seasonal, single, or double seasonal. +It is meant to be used for all types of series from M4 competition, except Monthly and Quarterly (for performance reasons - it is slower). +The program uses and requires Dynet NN library(https://github.com/clab/dynet); can be compiled and run on Windows, Linux, and Mac. + +In contradistinction to ES-RNN, each executable uses all series, but in a similar manner repeating the whole learning process BIG_LOOP times (by default 3). +Invocation should pass BIG_LOOP offset +so e.g. create a script with following lines on Windows +start 0 +start 10 +start 20 +start 30 +on 4-core computer. +In this setup, learning and fitting would be repeated 4*3 times, probably unnecessarily too many, 6-8 independent runs should be enough for a good ensemble. +Therefore if running on say 8 core machine , one can extend the above script to 8 concurrent executions and reduce BIG_LOOP to 1. +(Creating final forecasts is done in a supplied R script) + +There are four blocks of parameters below, one active (starting with //PARAMS--------------) and three inactive. +These blocks are as they were during the final forecasting run. You need comment/uncomment to have one block of interest active. +*/ + + +//#define USE_ODBC +//define USE_ODBC if you want to +// 1. run the program in backtesting mode (which means you also need to set LBACK>0 below. Read the comment below. +// 2. save forecasts to a datatabase. Mysql and SQL Server were tested. The table creation and some other scripts should be found in \sql directory of the source code. +// Of course setting up ODBC is not that simple, :-), e.g. you need to create DSN=slawek, that points to a database with the output table. +// Saving to the db is convenient, but not necessary - all forecasts are always saved to as csv files in automatically created subdirectory (sorry sometimes two directories, so you have to copy :-)) of OUTPUT_DIR +//If saving to database you need to modify run varaible, for each new run, otherwise you will get the table key error. + +#include "dynet/dynet.h" +#include "dynet/training.h" +#include "dynet/expr.h" +#include "dynet/io.h" +#include "dynet/model.h" +#include "dynet/nodes.h" +#include "dynet/expr.h" +#include "dynet/lstm.h" +#include "slstm.h" //my implementation of dilated LSTMs + + +#if defined USE_ODBC + #if defined _WINDOWS + #include + #endif + #include + #include +#endif + +#include +#include +#include +//#include +#include +#include +#include +#include + +using namespace std; +using namespace dynet; + + +string DATA_DIR = "f:\\progs\\data\\M4DataSet\\"; //with the competition data csvs +//string DATA_DIR="/home/uber/progs/data/M4DataSet/"; +string OUTPUT_DIR = "f:\\progs\\data\\M4\\"; +//string OUTPUT_DIR="/home/uber/progs/data/M4/"; + +int LBACK = 0; //LBACK 0 means final mode: learning on all data and forecasting. LBACK=1 would move back by OUTPUT_SIZE, and forecast last known OUTPUT_SIZE points, for backtesting. LBACK could be a larger integer, but then number of series shrinks. + + +//PARAMS-------------- +string VARIABLE = "Hourly"; +const string run = "50/49 Att 4/5 1,4)(24,168) LR=0.01,{7,5e-3f},{18,1e-3f},{22,3e-4f} EPOCHS=27, LVP=10, CSP=1"; + +//#define USE_RESIDUAL_LSTM +//#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = false; + +const float PERCENTILE = 50; //we always use Pinball loss. When forecasting point value, we actually forecast median, so PERCENTILE=50 +const float TRAINING_PERCENTILE = 49; //the program has a tendency for positive bias. So, we can reduce it by running smaller TRAINING_PERCENTILE + +const int SEASONALITY_NUM = 2;//0 means no seasonality, for Yearly; 1 - single seasonality for Daily(7), Weekly(52); 2 - dual seaonality for Hourly (24,168) +const int SEASONALITY = 24; +const int SEASONALITY2 = 168; +vector> dilations = { { 1,4 },{ 24, 168 } }; + +const float INITIAL_LEARNING_RATE = 0.01f; +const map LEARNING_RATES = { { 7,5e-3f },{ 18,1e-3f },{ 22,3e-4f } }; //at which epoch we manually set them up to what +const float PER_SERIES_LR_MULTIP = 1; +const int NUM_OF_TRAIN_EPOCHS = 27; + +float LEVEL_VARIABILITY_PENALTY = 10; //Multiplier for L" penalty against wigglines of level vector. +const float C_STATE_PENALTY = 1; + +const unsigned int STATE_HSIZE = 40; + +const unsigned int INPUT_SIZE = 24; +const unsigned int OUTPUT_SIZE = 48; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = OUTPUT_SIZE + INPUT_SIZE + MIN_INP_SEQ_LEN + 2; //this is compared to n==(total length - OUTPUT_SIZE). Total length may be truncated by LBACK +const int MAX_SERIES_LENGTH = 53 * SEASONALITY2 + MIN_SERIES_LENGTH; //==all +const int TOPN = 4; + + +/* +string VARIABLE = "Weekly"; +const string run = "50/47 Att 3/5 (1,52) LR=1e-3 {11,3e-4f}, {17,1e-4f} EPOCHS=23, LVP=100 6y"; + +const int PERCENTILE = 50; //we always use Pinball loss. When forecasting point value, we actually forecast median, so PERCENTILE=50 +const int TRAINING_PERCENTILE = 47; //the program has a tendency for positive bias. So, we can reduce it by running smaller TRAINING_PERCENTILE + +//#define USE_RESIDUAL_LSTM +#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = false; + +const int SEASONALITY_NUM = 0; //0 means no seasonality, for Yearly; 1 - single seasonality for Daily(7), Weekly(52); 2 - dual seaonality for Hourly (24,168) +const int SEASONALITY = 52; +const int SEASONALITY2 = 0; +vector> dilations = { { 1, 52 } }; + +const float INITIAL_LEARNING_RATE = 1e-3; +const map LEARNING_RATES = { { 11,3e-4f },{ 17,1e-4f } }; //at which epoch we manually set them up to what +const int NUM_OF_TRAIN_EPOCHS = 23; + +float LEVEL_VARIABILITY_PENALTY = 100; //Multiplier for L" penalty against wigglines of level vector. +const float C_STATE_PENALTY = 0; +const float PER_SERIES_LR_MULTIP = 1; + +const unsigned int STATE_HSIZE = 40; + +const unsigned int INPUT_SIZE = 10; +const unsigned int OUTPUT_SIZE = 13; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = OUTPUT_SIZE + INPUT_SIZE + MIN_INP_SEQ_LEN + 2; //this is compared to n==(total length - OUTPUT_SIZE). Total length may be truncated by LBACK + //#Min. 1st Qu. Median Mean 3rd Qu. Max. + //#81 380 935 1023 1604 2598 +const int MAX_SERIES_LENGTH = 6 * SEASONALITY + MIN_SERIES_LENGTH; //==all +const int TOPN = 3; +*/ + +/* +string VARIABLE = "Daily"; +const string run = "Final 50/49 730 4/5 (1,3)(7,14) LR=3e-4 {9,1e-4f} EPOCHS=13, LVP=100 13w"; +//#define USE_RESIDUAL_LSTM +//#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = false; + +const int PERCENTILE = 50; //we always use Pinball loss. When forecasting point value, we actually forecast median, so PERCENTILE=50 +const int TRAINING_PERCENTILE = 49; //the program has a tendency for positive bias. So, we can reduce it by running smaller TRAINING_PERCENTILE + +const int SEASONALITY_NUM = 1; //0 means no seasonality, for Yearly; 1 - single seasonality for Daily(7), Weekly(52); 2 - dual seaonality for Hourly (24,168) +const int SEASONALITY = 7; +const int SEASONALITY2 = 0; +vector> dilations = { { 1,3 },{ 7, 14 } }; + +const float INITIAL_LEARNING_RATE = 3e-4; +const map LEARNING_RATES = { { 9,1e-4f } }; //at which epoch we manually set them up to what +const float PER_SERIES_LR_MULTIP = 1; +const int NUM_OF_TRAIN_EPOCHS = 13; + +float LEVEL_VARIABILITY_PENALTY = 100; //Multiplier for L" penalty against wigglines of level vector. +const float C_STATE_PENALTY = 0; + +const unsigned int STATE_HSIZE = 40; + +const unsigned int INPUT_SIZE = 7; +const unsigned int OUTPUT_SIZE = 14; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = OUTPUT_SIZE + INPUT_SIZE + MIN_INP_SEQ_LEN + 2; //this is compared to n==(total length - OUTPUT_SIZE). Total length may be truncated by LBACK + //#Min. 1st Qu. Median Mean 3rd Qu. Max. + //##93 323 2940 2357 4197 9919 +const int MAX_SERIES_LENGTH = 13 * SEASONALITY + MIN_SERIES_LENGTH; +const int TOPN = 4; +*/ + +/* +string VARIABLE = "Yearly"; +const string run = "50 Att 4/5 (1,6) LR=1e-4 EPOCHS=12, 60*"; + +//#define USE_RESIDUAL_LSTM +#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = false; + +const float PERCENTILE = 50; //we always use Pinball loss. When forecasting point value, we actually forecast median, so PERCENTILE=50 +const float TRAINING_PERCENTILE = 50; + +const int SEASONALITY_NUM = 0; //0 means no seasonality, for Yearly; 1 - single seasonality for Daily(7), Weekly(52); 2 - dual seaonality for Hourly (24,168) +const int SEASONALITY = 0; +const int SEASONALITY2 = 0; +vector> dilations = { { 1,6 } }; + +const float INITIAL_LEARNING_RATE = 1e-4; +const map LEARNING_RATES = { { 15,1e-5 } }; //at which epoch we manually set them up to what +const float PER_SERIES_LR_MULTIP = 1; +const int NUM_OF_TRAIN_EPOCHS = 12; + +float LEVEL_VARIABILITY_PENALTY = 0; //Multiplier for L" penalty against wigglines of level vector. +const float C_STATE_PENALTY = 0; + +const unsigned int STATE_HSIZE = 30; + +const unsigned int INPUT_SIZE = 4; +const unsigned int OUTPUT_SIZE = 6; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = OUTPUT_SIZE + INPUT_SIZE + MIN_INP_SEQ_LEN + 2; //this is compared to n==(total length - OUTPUT_SIZE). Total length may be truncated by LBACK + //#Min. 1st Qu. Median Mean 3rd Qu. Max. + //#13.00 20.00 29.00 31.32 40.00 835.00 +const int MAX_SERIES_LENGTH = 60 + MIN_SERIES_LENGTH; +const int TOPN = 4; +*/ + +//end of VARIABLE-specific params + +const int BIG_LOOP = 3; +const int NUM_OF_NETS = 5; +const unsigned int ATTENTION_HSIZE = STATE_HSIZE; + + +#if defined _DEBUG + const int MAX_NUM_OF_SERIES = 20; +#else + const int MAX_NUM_OF_SERIES = -1; +#endif // _DEBUG + +const unsigned int NUM_OF_CATEGORIES = 6; +const int AVERAGING_LEVEL = 5; +const float EPS=1e-6; + +const float NOISE_STD=0.001; +const int FREQ_OF_TEST=1; +const float GRADIENT_CLIPPING=50; +const float BIG_FLOAT=1e38;//numeric_limits::max(); +const bool PRINT_DIAGN = false; +const float TAU = PERCENTILE / 100.; +const float TRAINING_TAU = TRAINING_PERCENTILE / 100.; + +string INPUT_PATH = DATA_DIR + VARIABLE + "-train.csv"; +string INFO_INPUT_PATH = DATA_DIR + "M4-info.csv"; + + +Expression squash(const Expression& x) { + return log(x); +} +float squash(float x) { + return log(x); +} + +Expression expand(const Expression& x) { + return exp(x); +} +float expand(float x) { + return exp(x); +} + + +#if defined USE_ODBC + void HandleDiagnosticRecord(SQLHANDLE hHandle, + SQLSMALLINT hType, + RETCODE RetCode); + + #if defined _WINDOWS + WCHAR* pwszConnStr = L"DSN=slawek"; + #else + SQLCHAR* pwszConnStr = (SQLCHAR*) "DSN=slawek"; + #endif + #define TRYODBC(h, ht, x) { RETCODE rc = x;\ + if (rc != SQL_SUCCESS) \ + { \ + HandleDiagnosticRecord (h, ht, rc); \ + } \ + if (rc == SQL_ERROR) \ + { \ + fprintf(stderr, "Error in " #x "\n"); \ + if (hStmt) { \ + SQLFreeHandle(SQL_HANDLE_STMT, hStmt); \ + } \ + if (hDbc) { \ + SQLDisconnect(hDbc); \ + SQLFreeHandle(SQL_HANDLE_DBC, hDbc); \ + } \ + if (hEnv) { \ + SQLFreeHandle(SQL_HANDLE_ENV, hEnv); \ + } \ + exit(-1); \ + } \ + } + +#endif + +struct M4TS {//storing series data + vector < float> categories_vect; + vector vals; + vector testVals;//empty, unless LBACK>0 + int n; + + M4TS(string category, stringstream &line_stream) { + array categories = { 0,0,0,0,0,0 }; + if (category == "Demographic") + categories[0] = 1; + else if (category == "Finance") + categories[1] = 1; + else if (category == "Industry") + categories[2] = 1; + else if (category == "Macro") + categories[3] = 1; + else if (category == "Micro") + categories[4] = 1; + else if (category == "Other") + categories[5] = 1; + else { + cerr << "unknown category?"; + exit(-1); + } + for (int i = 0; i < NUM_OF_CATEGORIES; i++) + categories_vect.push_back(categories[i]); + + string tmp_str; + while(getline(line_stream, tmp_str, ',' )) { + string val_str; + for (const auto c : tmp_str) { + if (c != '\"' && c != '\r') //remove quotes and very occasional double end of line + val_str.push_back(c); + } + if (val_str.size() == 0) + break; + float val=(atof(val_str.c_str())); + vals.push_back(val); + } + if (LBACK > 0) { //extract last OUTPUT_SIZE points as the test values + if (vals.size() > LBACK*OUTPUT_SIZE) { + auto first = vals.begin() + vals.size() - LBACK*OUTPUT_SIZE; + auto pastLast = vals.begin() + vals.size() - (LBACK-1)*OUTPUT_SIZE; + vector input_vect(first, pastLast); //[first,pastLast) + testVals= input_vect; + vals.resize(vals.size() - LBACK*OUTPUT_SIZE); //remove last LBACK*OUTPUT_SIZE elements + n = vals.size(); + } else + n = 0; + } else { + n = vals.size(); + } + if (n > MAX_SERIES_LENGTH) {//chop long series + vals.erase(vals.begin(), vals.begin() + (n-MAX_SERIES_LENGTH)); //remove some early data + n = vals.size(); + } + } + M4TS(){}; +}; + +#if defined USE_ODBC +void HandleDiagnosticRecord(SQLHANDLE hHandle, + SQLSMALLINT hType, + RETCODE RetCode); +#endif + + + +struct AdditionalParams {//Per series, important + Parameter levSm; + Parameter sSm; + array initSeasonality; + Parameter sSm2; + array initSeasonality2; +}; +struct AdditionalParamsF {//Used for storing diagnostics + float levSm; + float sSm; + array initSeasonality; + float sSm2; + array initSeasonality2; + vector levels; + vector seasons; + vector seasons2; +}; + + +array perfToRanking (array perf_arr) { + array index; + + for (int itop=0; itop losses; + for (unsigned int indx = 0; indx as_scalar(forec.value())) + losses.push_back((actual - forec)*TRAINING_TAU); + else + losses.push_back((actual - forec)*(TRAINING_TAU - 1)); + } + return sum(losses) / OUTPUT_SIZE * 2; +} + + +// weighted quantile Loss, used just for diagnostics, if if LBACK>0 and PERCENTILE!=50 +float wQuantLoss(vector& out_vect, vector& actuals_vect) { + float sumf = 0; float suma=0; + for (unsigned int indx = 0; indx forec) + sumf = sumf + (actual - forec)*TAU; + else + sumf = sumf + (actual - forec)*(TAU - 1); + } + return sumf / suma * 200; +} + +//used just for diagnostics, if LBACK>0 and PERCENTILE==50 +float sMAPE(vector& out_vect, vector& actuals_vect) { + float sumf = 0; + for (unsigned int indx = 0; indx& out_vect, vector& actuals_vect) { + if (PERCENTILE==50) + return sMAPE(out_vect, actuals_vect); + else + return wQuantLoss(out_vect, actuals_vect); +} + +int main(int argc, char** argv) { + dynet::initialize(argc, argv); + + int ibigOffset = 0; + if (argc == 2) + ibigOffset = atoi(argv[1]); + + cout << VARIABLE<<" "< 0) { + cout<<"Warning. LEVEL_VARIABILITY_PENALTY has to be equal zero if SEASONALITY_NUM==0"<tm_year+1900; + now_ts.month=now->tm_mon+1; + now_ts.day=now->tm_mday; + now_ts.hour=now->tm_hour; + now_ts.minute=now->tm_min; + now_ts.second=now->tm_sec; + now_ts.fraction=0; //reportedly needed + + const int OFFSET_TO_FIRST_ACTUAL=5; + string insertQuery_str = "insert into M72nn(run, LBack, ibig, series, epoch "; + for (int iq = 1; iq <= OUTPUT_SIZE; iq++) { + stringstream ss; + ss << iq; + string iq_str = ss.str(); + insertQuery_str = insertQuery_str +", actual"+iq_str+", forec" + iq_str; + } + insertQuery_str = insertQuery_str +", trainingError, variable, n, dateTimeOfPrediction) \ + values(? , ? , ? , ? , ? "; + for (int iq = 1; iq <= OUTPUT_SIZE; iq++) { + insertQuery_str = insertQuery_str + ",?,?"; + } + insertQuery_str = insertQuery_str + ",?,?,?,?)"; + #if defined _WINDOWS + wstring insertQuery(insertQuery_str.begin(), insertQuery_str.end()); + SQLWCHAR* sqlQuery = (SQLWCHAR*)insertQuery.c_str(); + #else + SQLCHAR* sqlQuery =(SQLCHAR*)insertQuery_str.c_str(); + #endif + + SQLHENV hEnv = NULL; + SQLHDBC hDbc = NULL; + SQLHSTMT hStmt = NULL, hInsertStmt = NULL; + + if (SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv) == SQL_ERROR) { + fprintf(stderr, "Unable to allocate an environment handle\n"); + exit(-1); + } + TRYODBC(hEnv, + SQL_HANDLE_ENV, + SQLSetEnvAttr(hEnv, + SQL_ATTR_ODBC_VERSION, + (SQLPOINTER)SQL_OV_ODBC3, + 0)); + + // Allocate a connection + TRYODBC(hEnv, + SQL_HANDLE_ENV, + SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc)); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLDriverConnect(hDbc, + NULL, + pwszConnStr, + SQL_NTS, + NULL, + 0, + NULL, + SQL_DRIVER_COMPLETE)); + fprintf(stderr, "Connected!\n"); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLSetConnectAttr(hDbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, SQL_IS_INTEGER)); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hInsertStmt)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLPrepare(hInsertStmt, sqlQuery, SQL_NTS)); + + SQLLEN nullTerminatedStringOfRun = SQL_NTS; + SQLLEN nullTerminatedStringOfSeries = SQL_NTS; + SQLLEN nullTerminatedStringOfVariable = SQL_NTS; + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)run.c_str(), 0, &nullTerminatedStringOfRun)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&LBACK, 0, NULL)); + + // variable, n, dateTimeOfPrediction + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL+2*OUTPUT_SIZE+2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)VARIABLE.c_str(), 0, &nullTerminatedStringOfVariable)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE + 4, SQL_PARAM_INPUT, SQL_C_TYPE_TIMESTAMP, SQL_TYPE_TIMESTAMP, 0, 0, &now_ts, sizeof(TIMESTAMP_STRUCT), NULL)); +#endif + + random_device rd; // only used once to initialise (seed) engine + mt19937 rng(rd()); // random-number engine used (Mersenne-Twister in this case) + + vector series_vect; + unordered_map allSeries_map(30000);//max series in one chunk would be 24k for yearly series + unordered_map seriesCategories_map(120000);//100k series + + ifstream infoFile(INFO_INPUT_PATH); + string line; + getline(infoFile, line); //header + while (getline(infoFile, line)) { + //cout << string( line)<= MIN_SERIES_LENGTH) { + series_vect.push_back(series); + allSeries_map[series] = m4Obj; + } + if (MAX_NUM_OF_SERIES>0 && series_vect.size()>=MAX_NUM_OF_SERIES) + break; + } + cout << "num of series:" << series_vect.size() << endl; + + unsigned int series_len=(unsigned int)series_vect.size(); + uniform_int_distribution uniOnSeries(0,series_len-1); // closed interval [a, b] + uniform_int_distribution uniOnNets(0,NUM_OF_NETS-1); // closed interval [a, b] + + unordered_map, AVERAGING_LEVEL+1>, NUM_OF_NETS>> testResults_map((int)series_len*1.5);//per series, etc... + unordered_map> finalResults_map((int)series_len*1.5);//per series + set diagSeries; + + unordered_map> netRanking_map; + for (int ibig=0; ibig perfValid_vect; + int epochOfLastChangeOfLRate = -1; + +#if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&ibigDb, 0, NULL)); +#endif + + //create nets + array paramsCollection_arr;//per net + array perSeriesParamsCollection_arr;//per net + array trainers_arr; + array perSeriesTrainers_arr; + + + #if defined USE_RESIDUAL_LSTM + array, NUM_OF_NETS> rnnStack_arr; + #elif defined USE_ATTENTIVE_LSTM + array, NUM_OF_NETS> rnnStack_arr; + #else + array, NUM_OF_NETS> rnnStack_arr; + #endif + + array MLPW_parArr; + array MLPB_parArr; + array adapterW_parArr; + array adapterB_parArr; + + //this is not a history, this is the real stuff + unordered_map* > additionalParams_mapOfArr((int)series_len*1.5); //per series, per net + for (auto iter = series_vect.begin() ; iter != series_vect.end(); ++iter) { + string series=*iter; + additionalParams_mapOfArr[series]=new array(); + } + + for (int inet=0; inetclip_threshold = GRADIENT_CLIPPING; + perSeriesTrainers_arr[inet]=new AdamTrainer (perSeriesPC, INITIAL_LEARNING_RATE*PER_SERIES_LR_MULTIP, 0.9, 0.999, EPS); + perSeriesTrainers_arr[inet]->clip_threshold = GRADIENT_CLIPPING; + + auto& rNNStack=rnnStack_arr[inet]; + #if defined USE_RESIDUAL_LSTM + rNNStack.emplace_back(ResidualDilatedLSTMBuilder(dilations[0], INPUT_SIZE + NUM_OF_CATEGORIES, STATE_HSIZE, pc)); + for (int il = 1; il* additionalParams_arr=additionalParams_mapOfArr[series]; + additionalParams_arr->at(inet).levSm=perSeriesPC.add_parameters({1}, 0.5);//per series, per net + if (SEASONALITY_NUM > 0) { + additionalParams_arr->at(inet).sSm = perSeriesPC.add_parameters({ 1 }, 0.5); + for (int isea = 0; iseaat(inet).initSeasonality[isea] = perSeriesPC.add_parameters({ 1 }, 0.5); + } + if (SEASONALITY_NUM > 1) { + additionalParams_arr->at(inet).sSm2 = perSeriesPC.add_parameters({ 1 }, 0.5); + for (int isea = 0; iseaat(inet).initSeasonality2[isea] = perSeriesPC.add_parameters({ 1 }, 0.5); + } + } + }//seting up, through nets + + //history of params. Series->[NUM_OF_NETS,NUM_OF_TRAIN_EPOCHS] + unordered_map, NUM_OF_NETS>*> historyOfAdditionalParams_map((int)series_len*1.5); + for (auto iter = series_vect.begin() ; iter != series_vect.end(); ++iter) { + string series=*iter; + historyOfAdditionalParams_map[series]=new array, NUM_OF_NETS>(); + } + + //first assignment. Yes, we are using vector , so the very first time the duplicates are possible. But a set can't be sorted + array, NUM_OF_NETS> seriesAssignment;//every net has an array + for (int j=0; j> netPerf_map; + for (int inet=0; inetlearning_rate = LEARNING_RATES.at(iEpoch); + if (inet==0) + cout << "changing LR to:" << trainer->learning_rate << endl; + perSeriesTrainer->learning_rate = LEARNING_RATES.at(iEpoch)*PER_SERIES_LR_MULTIP; + } + + auto& rNNStack=rnnStack_arr[inet]; + Parameter& MLPW_par = MLPW_parArr[inet]; + Parameter& MLPB_par = MLPB_parArr[inet]; + Parameter& adapterW_par=adapterW_parArr[inet]; + Parameter& adapterB_par=adapterB_parArr[inet]; + + vector oneNetAssignments=seriesAssignment[inet]; + random_shuffle (oneNetAssignments.begin(), oneNetAssignments.end()); + + vector epochLosses; + vector forecLosses; vector levVarLosses; vector stateLosses; + for (auto iter = oneNetAssignments.begin() ; iter != oneNetAssignments.end(); ++iter) { + string series=*iter; + auto m4Obj=allSeries_map[series]; + + ComputationGraph cg; + for (int il=0; ilat(inet); + array& historyOfAdditionalParams_arr=historyOfAdditionalParams_map[series]->at(inet); + + Expression MLPW_ex,MLPB_ex; + if (ADD_NL_LAYER) { + MLPW_ex = parameter(cg, MLPW_par); + MLPB_ex = parameter(cg, MLPB_par); + } + Expression adapterW_ex=parameter(cg, adapterW_par); + Expression adapterB_ex=parameter(cg, adapterB_par); + + Expression levSmSerNet0_ex= parameter(cg, additionalParams.levSm); + Expression levSm_ex = logistic(levSmSerNet0_ex); + + vector season_exVect;//vector, because we do not know how long the series is + Expression sSm_ex; + if (SEASONALITY_NUM > 0) { + Expression sSmSerNet0_ex= parameter(cg, additionalParams.sSm); + sSm_ex = logistic(sSmSerNet0_ex); + + for (int isea = 0; isea season2_exVect;//vector, because we do not know how long the series is + Expression sSm2_ex; + if (SEASONALITY_NUM > 1) { + Expression sSm2SerNet0_ex= parameter(cg, additionalParams.sSm2); + sSm2_ex = logistic(sSm2SerNet0_ex); + + for (int isea = 0; isea logDiffOfLevels_vect; + vector levels_exVect; + if (SEASONALITY_NUM == 0) { + levels_exVect.push_back(input(cg, m4Obj.vals[0])); + for (int i = 1; iSEASONALITY) { + unsigned long startSeasonalityIndx = season_exVect.size() - SEASONALITY; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY); i++) + season_exVect.push_back(season_exVect[startSeasonalityIndx + i]); + } + } + else if (SEASONALITY_NUM == 2) { + Expression lev = cdiv(input(cg, m4Obj.vals[0]), season_exVect[0] * season2_exVect[0]); + levels_exVect.push_back(lev); + for (int i = 1; iSEASONALITY) { + unsigned long startSeasonalityIndx = season_exVect.size() - SEASONALITY; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY); i++) + season_exVect.push_back(season_exVect[startSeasonalityIndx + i]); + } + //if prediction horizon is larger than seasonality, so we need to repeat some of the seasonality factors + if (OUTPUT_SIZE>SEASONALITY2) { + unsigned long startSeasonalityIndx = season2_exVect.size() - SEASONALITY2; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY2); i++) + season2_exVect.push_back(season2_exVect[startSeasonalityIndx + i]); + } + } + else { + cerr<<"SEASONALITY_NUM="<< SEASONALITY_NUM; + exit(-1); + } + + Expression levelVarLoss_ex; + if (LEVEL_VARIABILITY_PENALTY > 0) { + vector levelVarLoss_v; + for (int i = 1; i losses;//losses of steps through single time series + for (int i=INPUT_SIZE-1; i<(m4Obj.n- OUTPUT_SIZE); i++) { + vector::const_iterator first = m4Obj.vals.begin() + i + 1 - INPUT_SIZE; + vector::const_iterator pastLast = m4Obj.vals.begin() + i + 1; //not including the last one + vector input_vect(first, pastLast); //[first,pastLast) + + first = m4Obj.vals.begin() + i + 1; + pastLast = m4Obj.vals.begin() + i + 1 + OUTPUT_SIZE; + vector labels_vect(first, pastLast); //[first,pastLast) + + Expression input1_ex = input(cg, { INPUT_SIZE }, input_vect); + Expression labels1_ex = input(cg, { OUTPUT_SIZE }, labels_vect); + + if (SEASONALITY_NUM > 0 ) { + vector::const_iterator firstE = season_exVect.begin() +i+1-INPUT_SIZE; + vector::const_iterator pastLastE = season_exVect.begin() +i+1; //not including the last one + vector inputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + inputSeasonality_ex=concatenate(inputSeasonality_exVect); + + firstE = season_exVect.begin() + i + 1; + pastLastE = season_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + outputSeasonality_ex = concatenate(outputSeasonality_exVect); + + input1_ex = cdiv(input1_ex, inputSeasonality_ex); // input deseasonalization + labels1_ex = cdiv(labels1_ex, outputSeasonality_ex); //output deseasonalization + } + if (SEASONALITY_NUM > 1) { + vector::const_iterator firstE = season2_exVect.begin() + i + 1 - INPUT_SIZE; + vector::const_iterator pastLastE = season2_exVect.begin() + i + 1; //not including the last one + vector inputSeasonality2_exVect(firstE, pastLastE); //[first,pastLast) + inputSeasonality2_ex = concatenate(inputSeasonality2_exVect); + + firstE = season2_exVect.begin() + i + 1; + pastLastE = season2_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality2_exVect(firstE, pastLastE); //[first,pastLast) + Expression outputSeasonality2_ex = concatenate(outputSeasonality2_exVect); + + input1_ex = cdiv(input1_ex, inputSeasonality2_ex); //input deseasonalization + labels1_ex = cdiv(labels1_ex, outputSeasonality2_ex); //output deseasonalization + } + + vector joinedInput_ex; + joinedInput_ex.emplace_back(noise(squash(cdiv(input1_ex, levels_exVect[i])), NOISE_STD)); //input normalization+noise + joinedInput_ex.emplace_back(input(cg, { NUM_OF_CATEGORIES }, m4Obj.categories_vect)); + Expression input_ex = concatenate(joinedInput_ex); + + Expression labels_ex = squash(cdiv(labels1_ex, levels_exVect[i]));//output normalization + + Expression rnn_ex; + try { + rnn_ex = rNNStack[0].add_input(input_ex); + for (int il=1; il=INPUT_SIZE+MIN_INP_SEQ_LEN) + losses.push_back(loss_ex); + }//through points of a series + + Expression forecLoss_ex= average(losses); + Expression loss_exp = forecLoss_ex; + + float levVarLoss=0; + if (LEVEL_VARIABILITY_PENALTY > 0) { + Expression levelVarLossP_ex = levelVarLoss_ex*LEVEL_VARIABILITY_PENALTY; + levVarLoss = as_scalar(levelVarLossP_ex.value()); + levVarLosses.push_back(levVarLoss); + loss_exp= loss_exp + levelVarLossP_ex; + } + + float cStateLoss=0; + if (C_STATE_PENALTY>0) { + vector cStateLosses_vEx; + for (int irnn = 0; irnn < rNNStack.size(); irnn++) + for (int it = 0; itupdate();//update shared weights + perSeriesTrainer->update(); //update params of this series only + } catch (exception& e) { //long diagnostics for this unlikely event :-) + cerr<<"cought exception while doing "< maxAbs) { + maxAbs = abs(state[iv]); + timeOfMax=it; + layerOfMax=il; + chunkOfMax= irnn; + } + } + } //through layers/states + } //through time + } //through chunks + + cout << "levSm:" << as_scalar(levSm_ex.value()) << endl; + if (SEASONALITY_NUM > 0) + cout << "sSm:" << as_scalar(sSm_ex.value()) << endl; + if (SEASONALITY_NUM > 1) + cout << "sSm2:" << as_scalar(sSm2_ex.value()) << endl; + cout << "max abs:" << maxAbs <<" at time:"<< timeOfMax<<" at layer:"<< layerOfMax<<" and chunk:"<< chunkOfMax< 0) { + histAdditionalParams.sSm=as_scalar(sSm_ex.value()); + for (int isea = 0; isea 1) { + histAdditionalParams.sSm2 = as_scalar(sSm2_ex.value()); + for (int isea=0; isea 0 || C_STATE_PENALTY > 0) { + float averageForecLoss = accumulate(forecLosses.begin(), forecLosses.end(), 0.0) / forecLosses.size(); + cout << " forec loss:" << averageForecLoss * 100; + } + if (LEVEL_VARIABILITY_PENALTY > 0) { + float averagelevVarLoss = accumulate(levVarLosses.begin(), levVarLosses.end(), 0.0) / levVarLosses.size(); + cout << " levVar loss:" << averagelevVarLoss * 100; + } + if (C_STATE_PENALTY > 0) { + float averageStateLoss = accumulate(stateLosses.begin(), stateLosses.end(), 0.0) / stateLosses.size(); + cout << " state loss:" << averageStateLoss * 100; + } + cout<at(inet); + Expression MLPW_ex, MLPB_ex; + if (ADD_NL_LAYER) { + MLPW_ex = parameter(cg, MLPW_par); + MLPB_ex = parameter(cg, MLPB_par); + } + Expression adapterW_ex=parameter(cg, adapterW_par); + Expression adapterB_ex=parameter(cg, adapterB_par); + + Expression levSmSerNet0_ex = parameter(cg, additionalParams.levSm); + Expression levSm_ex = logistic(levSmSerNet0_ex); + + vector season_exVect;//vector, because we do not know how long the series is + Expression sSm_ex; + if (SEASONALITY_NUM > 0) { + Expression sSmSerNet0_ex= parameter(cg, additionalParams.sSm); + sSm_ex = logistic(sSmSerNet0_ex); + + for (int isea = 0; isea season2_exVect;//vector, because we do not know how long the series is + Expression sSm2_ex; + if (SEASONALITY_NUM > 1) { + Expression sSm2SerNet0_ex= parameter(cg, additionalParams.sSm2); + sSm2_ex = logistic(sSm2SerNet0_ex); + + for (int isea = 0; isea levels_exVect; + if (SEASONALITY_NUM == 0) { + levels_exVect.push_back(input(cg, m4Obj.vals[0])); + for (int i = 1; i0 then this is shortened, so it always contains data awe have right to access + Expression newLevel_ex = m4Obj.vals[i] * cdiv(levSm_ex, season_exVect[i]) + (1 - levSm_ex)*levels_exVect[i - 1]; + levels_exVect.push_back(newLevel_ex); + + Expression newSeason_ex = m4Obj.vals[i] * cdiv(sSm_ex, newLevel_ex) + (1 - sSm_ex)*season_exVect[i]; + season_exVect.push_back(newSeason_ex); + } + + //if prediction horizon is larger than seasonality, so we need to repeat some of the seasonality factors + if (OUTPUT_SIZE>SEASONALITY) { + unsigned long startSeasonalityIndx = season_exVect.size() - SEASONALITY; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY); i++) + season_exVect.push_back(season_exVect[startSeasonalityIndx + i]); + } + } + else if (SEASONALITY_NUM == 2) { + Expression lev = cdiv(input(cg, m4Obj.vals[0]), season_exVect[0] * season2_exVect[0]); + levels_exVect.push_back(lev); + for (int i = 1; iSEASONALITY) { + unsigned long startSeasonalityIndx = season_exVect.size() - SEASONALITY; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY); i++) + season_exVect.push_back(season_exVect[startSeasonalityIndx + i]); + } + //if prediction horizon is larger than seasonality, so we need to repeat some of the seasonality factors + if (OUTPUT_SIZE>SEASONALITY2) { + unsigned long startSeasonalityIndx = season2_exVect.size() - SEASONALITY2; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY2); i++) + season2_exVect.push_back(season2_exVect[startSeasonalityIndx + i]); + } + } + else { + cerr<<"SEASONALITY_NUM="<< SEASONALITY_NUM; + exit(-1); + } + + + Expression inputSeasonality_ex; Expression inputSeasonality2_ex; + Expression outputSeasonality_ex; Expression outputSeasonality2_ex; + vector losses;//losses of steps through single time series + Expression out_ex;//we declare it here, bcause the last one will be the forecast + for (int i=INPUT_SIZE-1; i::const_iterator first = m4Obj.vals.begin() + i + 1 - INPUT_SIZE; + vector::const_iterator pastLast = m4Obj.vals.begin() + i + 1; //not including the last one + vector input_vect(first, pastLast); //[first,pastLast) + Expression input1_ex = input(cg, { INPUT_SIZE }, input_vect); + + if (SEASONALITY_NUM > 0 ) { + vector::const_iterator firstE = season_exVect.begin() +i+1-INPUT_SIZE; + vector::const_iterator pastLastE = season_exVect.begin() +i+1; //not including the last one + vector inputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + inputSeasonality_ex=concatenate(inputSeasonality_exVect); + input1_ex = cdiv(input1_ex, inputSeasonality_ex); // input deseasonalization + } + if (SEASONALITY_NUM > 1) { + vector::const_iterator firstE = season2_exVect.begin() + i + 1 - INPUT_SIZE; + vector::const_iterator pastLastE = season2_exVect.begin() + i + 1; //not including the last one + vector inputSeasonality2_exVect(firstE, pastLastE); //[first,pastLast) + inputSeasonality2_ex = concatenate(inputSeasonality2_exVect); + input1_ex = cdiv(input1_ex, inputSeasonality2_ex); //input deseasonalization + } + + vector joinedInput_ex; + joinedInput_ex.emplace_back(noise(squash(cdiv(input1_ex, levels_exVect[i])), NOISE_STD)); //input normalization+noise + joinedInput_ex.emplace_back(input(cg, { NUM_OF_CATEGORIES }, m4Obj.categories_vect)); + Expression input_ex = concatenate(joinedInput_ex); + + Expression rnn_ex; + try { + rnn_ex = rNNStack[0].add_input(input_ex); + for (int il=1; il::const_iterator first = m4Obj.vals.begin() + i + 1; + vector::const_iterator pastLast = m4Obj.vals.begin() + i + 1 + OUTPUT_SIZE; + vector labels_vect(first, pastLast); //[first,pastLast) + Expression labels1_ex = input(cg, { OUTPUT_SIZE }, labels_vect); + + if (SEASONALITY_NUM > 0) { + vector::const_iterator firstE = season_exVect.begin() + i + 1; + vector::const_iterator pastLastE = season_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + outputSeasonality_ex = concatenate(outputSeasonality_exVect); + labels1_ex = cdiv(labels1_ex, outputSeasonality_ex); //output deseasonalization + } + if (SEASONALITY_NUM > 1) { + vector::const_iterator firstE = season2_exVect.begin() + i + 1; + vector::const_iterator pastLastE = season2_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality2_exVect(firstE, pastLastE); //[first,pastLast) + Expression outputSeasonality2_ex = concatenate(outputSeasonality2_exVect); + labels1_ex = cdiv(labels1_ex, outputSeasonality2_ex); //output deseasonalization + } + Expression labels_ex = squash(cdiv(labels1_ex, levels_exVect[i]));//output normalization + + Expression loss_ex = pinBallLoss(out_ex, labels_ex); + if (i>=INPUT_SIZE+MIN_INP_SEQ_LEN) + losses.push_back(loss_ex); //training area losses + } + + if (i==(m4Obj.n-1)) {//validation loss + out_ex=expand(out_ex)*levels_exVect[i];//back to original scale + if (SEASONALITY_NUM > 0 ) { + vector::const_iterator firstE = season_exVect.begin() + i + 1; + vector::const_iterator pastLastE = season_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + outputSeasonality_ex = concatenate(outputSeasonality_exVect); + out_ex = cmult(out_ex, outputSeasonality_ex);//reseasonalize + } + if (SEASONALITY_NUM > 1 ) { + vector::const_iterator firstE = season2_exVect.begin() + i + 1; + vector::const_iterator pastLastE = season2_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality2_exVect(firstE, pastLastE); //[first,pastLast) + Expression outputSeasonality2_ex = concatenate(outputSeasonality2_exVect); + out_ex = cmult(out_ex, outputSeasonality2_ex);//reseasonalize + } + //we do not need the matching label here, because we do not bother calculate valid losses of each net across all series. + //We care about best and topn performance + } + }//end of going through all point of a series + + Expression loss_exp = average(losses); + float loss = as_scalar(cg.forward(loss_exp));//training loss of a single series + netPerf_map[series][inet]=loss; + + //unordered_map, AVERAGING_LEVEL+1>, NUM_OF_NETS>, BIG_LOOP>> testResults_map((int)series_len*1.5);//per series, big loop, etc... + //No epoch here, because this will just reflect the current (latest) situation - the last few epochs + vector out_vect=as_vector(out_ex.value()); + testResults_map[series][inet][iEpoch%AVERAGING_LEVEL]=out_vect; + if (iEpoch>=AVERAGING_LEVEL && iEpoch % FREQ_OF_TEST==0) { + vector firstForec=testResults_map[series][inet][0]; + testResults_map[series][inet][AVERAGING_LEVEL]=firstForec; + for (int ii=1; ii nextForec=testResults_map[series][inet][ii]; + for (int iii=0; iii0 && iEpoch % FREQ_OF_TEST==0) { + //now that we have saved outputs of all nets on all series, let's calc how best and topn combinations performed during current epoch. + vector bestEpochLosses; + vector bestEpochAvgLosses; + vector topnEpochLosses; + vector topnEpochAvgLosses; + + for (auto iter = series_vect.begin() ; iter != series_vect.end(); ++iter) { + string series=*iter; + auto m4Obj=allSeries_map[series]; + +#if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)series.c_str(), 0, &nullTerminatedStringOfSeries)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE + 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&m4Obj.n, 0, NULL)); +#endif + + float avgLoss; + vector avgLatest; + vector avgAvg; + + for (int itop=0; itop 0) { + float qLoss = errorFunc(testResults_map[series][inet][iEpoch%AVERAGING_LEVEL], m4Obj.testVals); + bestEpochLosses.push_back(qLoss); + } + avgLatest=testResults_map[series][inet][iEpoch%AVERAGING_LEVEL]; //used later for calculating topn loss + + if (iEpoch>=AVERAGING_LEVEL) { + if (LBACK > 0) { + float qLoss = errorFunc(testResults_map[series][inet][AVERAGING_LEVEL], m4Obj.testVals); + bestEpochAvgLosses.push_back(qLoss); + } + avgAvg=testResults_map[series][inet][AVERAGING_LEVEL]; + } + } else { + for (int iii=0; iii=AVERAGING_LEVEL) + avgAvg[iii]+=testResults_map[series][inet][AVERAGING_LEVEL][iii]; + } + } + }//through topn + + for (int iii=0; iii 0) { + float qLoss = errorFunc(avgLatest, m4Obj.testVals); + topnEpochLosses.push_back(qLoss); + } + + if (iEpoch>=AVERAGING_LEVEL) { + for (int iii = 0; iii 0) { +#if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE + 1, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_FLOAT, 0, 0, (SQLPOINTER)&avgLoss, 0, NULL)); + + for (int iii=0; iii 0) { + float bestEpochLoss=accumulate( bestEpochLosses.begin(), bestEpochLosses.end(), 0.0)/bestEpochLosses.size(); + float topnEpochLoss=accumulate( topnEpochLosses.begin(), topnEpochLosses.end(), 0.0)/topnEpochLosses.size(); + cout<=AVERAGING_LEVEL) { + float bestEpochAvgLoss=accumulate( bestEpochAvgLosses.begin(), bestEpochAvgLosses.end(), 0.0)/bestEpochAvgLosses.size(); + float topnEpochAvgLoss=accumulate( topnEpochAvgLosses.begin(), topnEpochAvgLosses.end(), 0.0)/topnEpochAvgLosses.size(); + cout<<" bestAvg:"<> netRanking_map + netRanking_map[series]=perfToRanking(netPerf_map[series]); + + for (int itop=0; itop diagSeries; + for (int i=0; i<1; i++) {//add a few normal ones + int irand=uniOnSeries(rng); + diagSeries.insert(series_vect[irand]); + } + for(auto series : diagSeries) { + cout<at(inet); + for (int iEpoch=0; iEpoch 0 ) { + cout<<"sSm:"<at(inet); + for (int iEpoch=0; iEpoch 1 ) { + cout<<"sSm2:"<at(inet); + for (int iEpoch=0; iEpochat(inet); + for (int iEpoch = 0; iEpoch0) { + cout << "levels:" << iEpoch<<" "; + for (int iv = 0; iv 0 ) { + cout << "seasons:" << iEpoch<<" "; + for (int iv = 0; iv 1 ) { + cout << "seasons2:" << iEpoch<<" "; + for (int iv = 0; iv + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + + + + Source Files + + + \ No newline at end of file diff --git a/c++/windows_VisualStudio/M43/M43.vcxproj b/c++/windows_VisualStudio/M43/M43.vcxproj new file mode 100644 index 0000000..5da8187 --- /dev/null +++ b/c++/windows_VisualStudio/M43/M43.vcxproj @@ -0,0 +1,227 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + RelWithDebug + Win32 + + + RelWithDebug + x64 + + + + + + + + + + + {BE951571-3F3A-4048-BAA3-0C05F38CFF42} + Win32Proj + M43 + 8.1 + + + + Application + true + v140 + Unicode + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + Application + true + v140 + Unicode + Sequential + + + Application + true + v140 + Unicode + Sequential + + + Application + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + true + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + + + NotUsing + Level1 + Disabled + WIN32;_WINDOWS;EIGEN_USE_MKL_ALL;EIGEN_FAST_MATH;NOMINMAX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + E:\progs2\dynet;E:\progs\Eigen; + + + Console + true + E:\progs2\dynet\buildMKL\dynet\Debug + dynet.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + NotUsing + Level1 + MaxSpeed + WIN32;_WINDOWS;EIGEN_FAST_MATH;EIGEN_USE_MKL_ALL;NOMINMAX;NDEBUG_;CONSOLE;%(PreprocessorDefinitions) + E:\progs2\dynet;E:\progs\Eigen; + AnySuitable + true + Speed + AdvancedVectorExtensions + Default + MultiThreadedDLL + ProgramDatabase + true + false + + + Console + true + E:\progs2\dynet\buildMKL\dynet\RelWithDebInfo + dynet.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + true + true + + + + + + \ No newline at end of file diff --git a/c++/windows_VisualStudio/M43/slstm.h b/c++/windows_VisualStudio/M43/slstm.h new file mode 100644 index 0000000..adb63a7 --- /dev/null +++ b/c++/windows_VisualStudio/M43/slstm.h @@ -0,0 +1,394 @@ +/** +* file slstm.h +* header for my implementation of dilated LSTMs, based on Dynet LSTM builders + - DilatedLSTMBuilder - standard Dilated LSTM (https://papers.nips.cc/paper/6613-dilated-recurrent-neural-networks.pdf) + - ResidualDilatedLSTMBuilder - Dilated LSTM with special Residual shortcuts, after https://arxiv.org/abs/1701.03360 + - AttentiveDilatedLSTMBuilder - Dilated LSTM with Attention mechanism, as in the second stage of https://arxiv.org/abs/1704.02971 +* +Slawek Smyl, Mar-May 2018 +*/ + +#ifndef DYNET_SLSTMS_H_ +#define DYNET_SLSTMS_H_ + +#include "dynet/dynet.h" +#include "dynet/rnn.h" +#include "dynet/expr.h" + +using namespace std; + +namespace dynet { + + //basd on VanillaLSTMBuilder + struct ResidualDilatedLSTMBuilder : public RNNBuilder { + /** + * @brief Default Constructor + */ + ResidualDilatedLSTMBuilder(); + /** + * \brief Constructor for the ResidualDilatedLSTMBuilder + * + * \param dilations Vector of dilations + * \param input_dim Dimention of the input \f$x_t\f$ + * \param hidden_dim Dimention of the hidden states \f$h_t\f$ and \f$c_t\f$ + * \param model ParameterCollection holding the parameters + * \param ln_lstm Whether to use layer normalization + * \param forget_bias value(float) to use as bias for the forget gate(default = 1.0) + */ + explicit ResidualDilatedLSTMBuilder(vector dilations, + unsigned input_dim, + unsigned hidden_dim, + ParameterCollection& model, + bool ln_lstm = false, + float forget_bias = 1.f); + + Expression back() const override { return (cur == -1 ? h0.back() : h[cur].back()); } + std::vector final_h() const override { return (h.size() == 0 ? h0 : h.back()); } + std::vector final_s() const override { + std::vector ret = (c.size() == 0 ? c0 : c.back()); + for (auto my_h : final_h()) ret.push_back(my_h); + return ret; + } + unsigned num_h0_components() const override { return 2 * layers; } + + std::vector get_h(RNNPointer i) const override { return (i == -1 ? h0 : h[i]); } + std::vector get_s(RNNPointer i) const override { + std::vector ret = (i == -1 ? c0 : c[i]); + for (auto my_h : get_h(i)) ret.push_back(my_h); + return ret; + } + + void copy(const RNNBuilder & params) override; + + /** + * \brief Set the dropout rates to a unique value + * \details This has the same effect as `set_dropout(d,d_h)` except that all the dropout rates are set to the same value. + * \param d Dropout rate to be applied on all of \f$x,h\f$ + */ + void set_dropout(float d); + /** + * \brief Set the dropout rates + * \details The dropout implemented here is the variational dropout with tied weights introduced in [Gal, 2016](http://papers.nips.cc/paper/6241-a-theoretically-grounded-application-of-dropout-in-recurrent-neural-networks) + * More specifically, dropout masks \f$\mathbf{z_x}\sim \mathrm{Bernoulli}(1-d_x)\f$,\f$\mathbf{z_h}\sim \mathrm{Bernoulli}(1-d_h)\f$ are sampled at the start of each sequence. + * The dynamics of the cell are then modified to : + * + * \f$ + * \begin{split} + i_t & =\sigma(W_{ix}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ih}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_i)\\ + f_t & = \sigma(W_{fx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{fh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_f)\\ + o_t & = \sigma(W_{ox}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{oh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_o)\\ + \tilde{c_t} & = \tanh(W_{cx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ch}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_c)\\ + c_t & = c_{t-1}\circ f_t + \tilde{c_t}\circ i_t\\ + h_t & = \tanh(c_t)\circ o_t\\ + \end{split} + * \f$ + * + * For more detail as to why scaling is applied, see the "Unorthodox" section of the documentation + * \param d Dropout rate \f$d_x\f$ for the input \f$x_t\f$ + * \param d_h Dropout rate \f$d_h\f$ for the output \f$h_t\f$ + */ + void set_dropout(float d, float d_r); + /** + * \brief Set all dropout rates to 0 + * \details This is equivalent to `set_dropout(0)` or `set_dropout(0,0,0)` + * + */ + void disable_dropout(); + /** + * \brief Set dropout masks at the beginning of a sequence for a specific batch size + * \details If this function is not called on batched input, the same mask will be applied across + * all batch elements. Use this to apply different masks to each batch element + * + * \param batch_size Batch size + */ + void set_dropout_masks(unsigned batch_size = 1); + /** + * \brief Get parameters in ResidualDilatedLSTMBuilder + * \return list of points to ParameterStorage objects + */ + ParameterCollection & get_parameter_collection() override; + protected: + void new_graph_impl(ComputationGraph& cg, bool update) override; + void start_new_sequence_impl(const std::vector& h0) override; + Expression add_input_impl(int prev, const Expression& x) override; + Expression set_h_impl(int prev, const std::vector& h_new) override; + Expression set_s_impl(int prev, const std::vector& s_new) override; + + public: + ParameterCollection local_model; + // first index is layer, then ... + std::vector> params; + // first index is layer, then ... + std::vector> ln_params; + + // first index is layer, then ... + std::vector> param_vars; + // first index is layer, then ... + std::vector> ln_param_vars; + + // first index is layer, then ... + std::vector> masks; + + // first index is time, second is layer + std::vector> h, c; + + // initial values of h and c at each layer + // - both default to zero matrix input + bool has_initial_state; // if this is false, treat h0 and c0 as 0 + std::vector h0; + std::vector c0; + unsigned layers; + unsigned input_dim, hid; + float dropout_rate_h; + bool ln_lstm; + float forget_bias; + bool dropout_masks_valid; + vector dilations; //one int per layer + + private: + ComputationGraph* _cg; // Pointer to current cg + + }; + + + struct DilatedLSTMBuilder : public RNNBuilder { + /** + * @brief Default Constructor + */ + DilatedLSTMBuilder(); + /** + * \brief Constructor for the DilatedLSTMBuilder + * + * \param dilations Vector of dilations + * \param input_dim Dimention of the input \f$x_t\f$ + * \param hidden_dim Dimention of the hidden states \f$h_t\f$ and \f$c_t\f$ + * \param model ParameterCollection holding the parameters + */ + explicit DilatedLSTMBuilder(vector dilations, + unsigned input_dim, + unsigned hidden_dim, + ParameterCollection& model); + + Expression back() const override { return (cur == -1 ? h0.back() : h[cur].back()); } + std::vector final_h() const override { return (h.size() == 0 ? h0 : h.back()); } + std::vector final_s() const override { + std::vector ret = (c.size() == 0 ? c0 : c.back()); + for (auto my_h : final_h()) ret.push_back(my_h); + return ret; + } + unsigned num_h0_components() const override { return 2 * layers; } + + std::vector get_h(RNNPointer i) const override { return (i == -1 ? h0 : h[i]); } + std::vector get_s(RNNPointer i) const override { + std::vector ret = (i == -1 ? c0 : c[i]); + for (auto my_h : get_h(i)) ret.push_back(my_h); + return ret; + } + + void copy(const RNNBuilder & params) override; + + /** + * \brief Set the dropout rates to a unique value + * \details This has the same effect as `set_dropout(d,d_h)` except that all the dropout rates are set to the same value. + * \param d Dropout rate to be applied on all of \f$x,h\f$ + */ + void set_dropout(float d); + /** + * \brief Set the dropout rates + * \details The dropout implemented here is the variational dropout with tied weights introduced in [Gal, 2016](http://papers.nips.cc/paper/6241-a-theoretically-grounded-application-of-dropout-in-recurrent-neural-networks) + * More specifically, dropout masks \f$\mathbf{z_x}\sim \mathrm{Bernoulli}(1-d_x)\f$,\f$\mathbf{z_h}\sim \mathrm{Bernoulli}(1-d_h)\f$ are sampled at the start of each sequence. + * The dynamics of the cell are then modified to : + * + * \f$ + * \begin{split} + i_t & =\sigma(W_{ix}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ih}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_i)\\ + f_t & = \sigma(W_{fx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{fh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_f)\\ + o_t & = \sigma(W_{ox}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{oh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_o)\\ + \tilde{c_t} & = \tanh(W_{cx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ch}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_c)\\ + c_t & = c_{t-1}\circ f_t + \tilde{c_t}\circ i_t\\ + h_t & = \tanh(c_t)\circ o_t\\ + \end{split} + * \f$ + * + * For more detail as to why scaling is applied, see the "Unorthodox" section of the documentation + * \param d Dropout rate \f$d_x\f$ for the input \f$x_t\f$ + */ + void set_dropout(float d, float d_r); + /** + * \brief Set all dropout rates to 0 + * \details This is equivalent to `set_dropout(0)` or `set_dropout(0,0,0)` + * + */ + void disable_dropout(); + /** + * \brief Set dropout masks at the beginning of a sequence for a specific batch size + * \details If this function is not called on batched input, the same mask will be applied across + * all batch elements. Use this to apply different masks to each batch element + * + * \param batch_size Batch size + */ + void set_dropout_masks(unsigned batch_size = 1); + + void set_weightnoise(float std); + ParameterCollection & get_parameter_collection() override; + protected: + void new_graph_impl(ComputationGraph& cg, bool update) override; + void start_new_sequence_impl(const std::vector& h0) override; + Expression add_input_impl(int prev, const Expression& x) override; + Expression set_h_impl(int prev, const std::vector& h_new) override; + Expression set_s_impl(int prev, const std::vector& s_new) override; + + public: + ParameterCollection local_model; + // first index is layer, then ... + std::vector> params; + + // first index is layer, then ... + std::vector> param_vars; + + // first index is layer, then ... + std::vector> masks; + + // first index is time, second is layer + std::vector> h, c; + + // initial values of h and c at each layer + // - both default to zero matrix input + bool has_initial_state; // if this is false, treat h0 and c0 as 0 + std::vector h0; + std::vector c0; + unsigned layers; + unsigned input_dim, hid; + float dropout_rate_h; + float weightnoise_std; + vector dilations; //one int per layer + + bool dropout_masks_valid; + private: + ComputationGraph* _cg; // Pointer to current cg + + }; + + + struct AttentiveDilatedLSTMBuilder : public RNNBuilder { + /** + * @brief Default Constructor + */ + AttentiveDilatedLSTMBuilder(); + /** + * \brief Constructor for the AttentiveDilatedLSTMBuilder + * + * \param max_dilations Vector, maximum dilations (per layer) + * \param input_dim Dimention of the input \f$x_t\f$ + * \param hidden_dim Dimention of the hidden states \f$h_t\f$ and \f$c_t\f$ + * \param model ParameterCollection holding the parameters + */ + explicit AttentiveDilatedLSTMBuilder(vector max_dilations, + unsigned input_dim, + unsigned hidden_dim, + unsigned attention_dim, + ParameterCollection& model); + + Expression back() const override { return (cur == -1 ? h0.back() : h[cur].back()); } + std::vector final_h() const override { return (h.size() == 0 ? h0 : h.back()); } + std::vector final_s() const override { + std::vector ret = (c.size() == 0 ? c0 : c.back()); + for (auto my_h : final_h()) ret.push_back(my_h); + return ret; + } + unsigned num_h0_components() const override { return 2 * layers; } + + std::vector get_h(RNNPointer i) const override { return (i == -1 ? h0 : h[i]); } + std::vector get_s(RNNPointer i) const override { + std::vector ret = (i == -1 ? c0 : c[i]); + for (auto my_h : get_h(i)) ret.push_back(my_h); + return ret; + } + + void copy(const RNNBuilder & params) override; + + /** + * \brief Set the dropout rates to a unique value + * \details This has the same effect as `set_dropout(d,d_h)` except that all the dropout rates are set to the same value. + * \param d Dropout rate to be applied on all of \f$x,h\f$ + */ + void set_dropout(float d); + /** + * \brief Set the dropout rates + * \details The dropout implemented here is the variational dropout with tied weights introduced in [Gal, 2016](http://papers.nips.cc/paper/6241-a-theoretically-grounded-application-of-dropout-in-recurrent-neural-networks) + * More specifically, dropout masks \f$\mathbf{z_x}\sim \mathrm{Bernoulli}(1-d_x)\f$,\f$\mathbf{z_h}\sim \mathrm{Bernoulli}(1-d_h)\f$ are sampled at the start of each sequence. + * The dynamics of the cell are then modified to : + * + * \f$ + * \begin{split} + i_t & =\sigma(W_{ix}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ih}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_i)\\ + f_t & = \sigma(W_{fx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{fh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_f)\\ + o_t & = \sigma(W_{ox}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{oh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_o)\\ + \tilde{c_t} & = \tanh(W_{cx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ch}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_c)\\ + c_t & = c_{t-1}\circ f_t + \tilde{c_t}\circ i_t\\ + h_t & = \tanh(c_t)\circ o_t\\ + \end{split} + * \f$ + * + * For more detail as to why scaling is applied, see the "Unorthodox" section of the documentation + * \param d Dropout rate \f$d_x\f$ for the input \f$x_t\f$ + */ + void set_dropout(float d, float d_r); + /** + * \brief Set all dropout rates to 0 + * \details This is equivalent to `set_dropout(0)` or `set_dropout(0,0,0)` + * + */ + void disable_dropout(); + /** + * \brief Set dropout masks at the beginning of a sequence for a specific batch size + * \details If this function is not called on batched input, the same mask will be applied across + * all batch elements. Use this to apply different masks to each batch element + * + * \param batch_size Batch size + */ + void set_dropout_masks(unsigned batch_size = 1); + + void set_weightnoise(float std); + ParameterCollection & get_parameter_collection() override; + protected: + void new_graph_impl(ComputationGraph& cg, bool update) override; + void start_new_sequence_impl(const std::vector& h0) override; + Expression add_input_impl(int prev, const Expression& x) override; + Expression set_h_impl(int prev, const std::vector& h_new) override; + Expression set_s_impl(int prev, const std::vector& s_new) override; + + public: + ParameterCollection local_model; + // first index is layer, then ... + std::vector> params; + + // first index is layer, then ... + std::vector> param_vars; + + // first index is layer, then ... + std::vector> masks; + + // first index is time, second is layer + std::vector> h, c; + + // initial values of h and c at each layer + // - both default to zero matrix input + bool has_initial_state; // if this is false, treat h0 and c0 as 0 + std::vector h0; + std::vector c0; + unsigned layers; + unsigned input_dim, hid; + unsigned attention_dim; + float dropout_rate_h; + float weightnoise_std; + vector max_dilations; //one int per layer + + bool dropout_masks_valid; + private: + ComputationGraph* _cg; // Pointer to current cg + + }; +} // namespace dynet + +#endif diff --git a/c++/windows_VisualStudio/M44/ES_RNN_E_PI.cc b/c++/windows_VisualStudio/M44/ES_RNN_E_PI.cc new file mode 100644 index 0000000..e9729d5 --- /dev/null +++ b/c++/windows_VisualStudio/M44/ES_RNN_E_PI.cc @@ -0,0 +1,1744 @@ +/*ES-RNN-E: Exponential Smoothing Recurrent Neural Network hybrid, Ensemble of specialists. Prediction Intervals forecast. +Slawek Smyl, Jan-May 2017. + +Dilated LSTMs, with optional shortcuts, attention. Non-seasonal, single, or double seasonal. +It is meant to be used for all types of series from M4 competition, except Monthly and Quarterly (for performance reasons - Ensamble of Specilists is slower). +The program uses and requires Dynet NN library(https://github.com/clab/dynet); can be compiled and run on Windows, Linux, and Mac. + +In contradistinction to ES-RNN, each executable uses all series, but in a similar manner repeating the whole learning process BIG_LOOP times (by default 3). +Invocation should pass BIG_LOOP offset +so e.g. create a script with following lines on Windows +start 0 +start 10 +start 20 +start 30 +on 4-core computer. +In this setup, learning and fitting would be repeated 4*3 times, probably unnecessarily too many, 6-8 independent runs should be enough for a good ensemble. +Therefore if running on say 8 core machine , one can extend the above script to 8 concurrent executions and reduce BIG_LOOP to 1. +(Creating final forecasts is done in a supplied R script) + +There are four blocks of parameters below, one active (starting with //PARAMS--------------) and three inactive. +These blocks are as they were during the final forecasting run. You need comment/uncomment to have one block of interest active. +*/ + + +//#define USE_ODBC +//define USE_ODBC if you want to +// 1. run the program in backtesting mode (which means you also need to set LBACK>0 below. Read the comment below. +// 2. save forecasts to a datatabase. Mysql and SQL Server were tested. The table creation and some other scripts should be found in \sql directory of the source code. +// Of course setting up ODBC is not that simple, :-), e.g. you need to create DSN=slawek, that points to a database with the output table. +// Saving to the db is convenient, but not necessary - all forecasts are always saved to as csv files in automatically created subdirectory (sorry sometimes two directories, so you have to copy :-)) of OUTPUT_DIR +//If saving to database you need to modify run varaible, for each new run, otherwise you will get the table key error. + +#include "dynet/dynet.h" +#include "dynet/training.h" +#include "dynet/expr.h" +#include "dynet/io.h" +#include "dynet/model.h" +#include "dynet/nodes.h" +#include "dynet/expr.h" +#include "dynet/lstm.h" +#include "slstm.h" //my implementation of dilated LSTMs + + +#if defined USE_ODBC + #if defined _WINDOWS + #include + #endif + #include + #include +#endif + +#include +#include +#include +//#include +#include +#include +#include +#include + +using namespace std; +using namespace dynet; + +string DATA_DIR = "f:\\progs\\data\\M4DataSet\\"; //with the competition data csvs +//string DATA_DIR="/home/uber/progs/data/M4DataSet/"; +string OUTPUT_DIR = "f:\\progs\\data\\M4\\"; +//string OUTPUT_DIR="/home/uber/progs/data/M4/"; + +int LBACK = 0; //LBACK 0 means final mode: learning on all data and forecasting. LBACK=1 would move back by OUTPUT_SIZE, and forecast last known OUTPUT_SIZE points, for backtesting. LBACK could be a larger integer, but then number of series shrinks. + + +//PARAMS-------------- + +string VARIABLE = "Hourly"; +const string run0 = "(1,4)(24,168) LR=0.01, {25,3e-3f} EPOCHS=37, LVP=10, CSP=0"; +const string runL = "alpha5L " + run0; +const string runH = "alpha5H " + run0; + +//#define USE_RESIDUAL_LSTM +//#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = false; + +const int SEASONALITY_NUM = 2;//0 means no seasonality, for Yearly; 1 - single seasonality for Daily(7), Weekly(52); 2 - dual seaonality for Hourly (24,168) +const int SEASONALITY = 24; +const int SEASONALITY2 = 168; +vector> dilations = { { 1,4 },{ 24, 168 } }; + +const float INITIAL_LEARNING_RATE = 0.01f; +const map LEARNING_RATES = { { 20,1e-3f } }; //at which epoch we manually set them up to what +const float PER_SERIES_LR_MULTIP = 1; +const int NUM_OF_TRAIN_EPOCHS = 37; + +float LEVEL_VARIABILITY_PENALTY = 10; //Multiplier for L" penalty against wigglines of level vector. +const float C_STATE_PENALTY = 0; + +const unsigned int STATE_HSIZE = 40; + +const unsigned int INPUT_SIZE = 24; +const unsigned int OUTPUT_SIZE = 48; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = OUTPUT_SIZE + INPUT_SIZE + MIN_INP_SEQ_LEN + 2; //this is compared to n==(total length - OUTPUT_SIZE). Total length may be truncated by LBACK +const int MAX_SERIES_LENGTH = 53 * SEASONALITY2 + MIN_SERIES_LENGTH; //==all +const int TOPN = 4; + + +/* +string VARIABLE = "Weekly"; +const string run0 = "Att 4/5 (1,52) LR=1e-3 {15,3e-4f} EPOCHS=31, LVP=100 6y"; +const string runL = "alpha5L " + run0; +const string runH = "alpha5H " + run0; + +//#define USE_RESIDUAL_LSTM +#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = false; + +const int SEASONALITY_NUM = 1; //0 means no seasonality, for Yearly; 1 - single seasonality for Daily(7), Weekly(52); 2 - dual seaonality for Hourly (24,168) +const int SEASONALITY = 52; +const int SEASONALITY2 = 0; +vector> dilations = { { 1, 52 } }; + +const float INITIAL_LEARNING_RATE = 1e-3; +const map LEARNING_RATES = { { 15,3e-4f } }; //at which epoch we manually set them up to what +const float PER_SERIES_LR_MULTIP = 1; +const int NUM_OF_TRAIN_EPOCHS = 31; + +float LEVEL_VARIABILITY_PENALTY = 100; //Multiplier for L" penalty against wigglines of level vector. +const float C_STATE_PENALTY = 0; + +const unsigned int STATE_HSIZE = 40; + +const unsigned int INPUT_SIZE = 10; +const unsigned int OUTPUT_SIZE = 13; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = OUTPUT_SIZE + INPUT_SIZE + MIN_INP_SEQ_LEN + 2; //this is compared to n==(total length - OUTPUT_SIZE). Total length may be truncated by LBACK + //#Min. 1st Qu. Median Mean 3rd Qu. Max. + //#81 380 935 1023 1604 2598 +const int MAX_SERIES_LENGTH = 6 * SEASONALITY + MIN_SERIES_LENGTH; +const int TOPN = 4; +*/ + +/* + +string VARIABLE = "Daily"; +const string run0 = "4/5 (1,3)(7,14) LR=3e-4 {13,1e-4f} EPOCHS=21, LVP=100 13w"; +const string runL = "alpha5L " + run0; +const string runH = "alpha5H " + run0; + +//#define USE_RESIDUAL_LSTM +//#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER=false; + +const int SEASONALITY_NUM = 1; //0 means no seasonality, for Yearly; 1 - single seasonality for Daily(7), Weekly(52); 2 - dual seaonality for Hourly (24,168) +const int SEASONALITY = 7; +const int SEASONALITY2 = 0; +vector> dilations = { { 1,3 },{ 7, 14 } }; + +const float INITIAL_LEARNING_RATE = 3e-4; +const map LEARNING_RATES = { { 13,1e-4f } }; //at which epoch we manually set them up to what +const float PER_SERIES_LR_MULTIP = 1; +const int NUM_OF_TRAIN_EPOCHS = 21; + +float LEVEL_VARIABILITY_PENALTY = 100; //Multiplier for L" penalty against wigglines of level vector. +const float C_STATE_PENALTY = 0; + +const unsigned int STATE_HSIZE = 40; + +const unsigned int INPUT_SIZE = 7; +const unsigned int OUTPUT_SIZE = 14; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = OUTPUT_SIZE + INPUT_SIZE + MIN_INP_SEQ_LEN + 2; //this is compared to n==(total length - OUTPUT_SIZE). Total length may be truncated by LBACK + //#Min. 1st Qu. Median Mean 3rd Qu. Max. + //##93 323 2940 2357 4197 9919 +const int MAX_SERIES_LENGTH = 13 * SEASONALITY + MIN_SERIES_LENGTH; +const int TOPN = 4; +*/ + +/* +string VARIABLE = "Yearly"; +const string run0 = "Att NL 4/5 (1,6) LR=1e-4 {17,3e-5}{22,1e-5} EPOCHS=29, 60*"; +const string runL = "alpha5L " + run0; +const string runH = "alpha5H " + run0; + +//#define USE_RESIDUAL_LSTM +#define USE_ATTENTIVE_LSTM +const bool ADD_NL_LAYER = true; + +const int SEASONALITY_NUM = 0; //0 means no seasonality +const int SEASONALITY = 1; //for no seasonality, set it to 1, important +const int SEASONALITY2 = 0; +vector> dilations = { { 1,6 } }; + +const float INITIAL_LEARNING_RATE = 1e-4; +const map LEARNING_RATES = { { 17,3e-5 },{ 22,1e-5 } }; //at which epoch we manually set them up to what +const float PER_SERIES_LR_MULTIP = 1; +const int NUM_OF_TRAIN_EPOCHS = 29; + +float LEVEL_VARIABILITY_PENALTY = 0; //Multiplier for L" penalty against wigglines of level vector. +const float C_STATE_PENALTY = 0; + +const unsigned int STATE_HSIZE = 30; + +const unsigned int INPUT_SIZE = 4; +const unsigned int OUTPUT_SIZE = 6; + +const int MIN_INP_SEQ_LEN = 0; +const int MIN_SERIES_LENGTH = OUTPUT_SIZE + INPUT_SIZE + MIN_INP_SEQ_LEN + 2; //this is compared to n==(total length - OUTPUT_SIZE). Total length may be truncated by LBACK + //#Min. 1st Qu. Median Mean 3rd Qu. Max. + //#13.00 20.00 29.00 31.32 40.00 835.00 +const int MAX_SERIES_LENGTH = 60 + MIN_SERIES_LENGTH; +const int TOPN = 4; +*/ + +const float ALPHA = 0.05; +const float TAUL = ALPHA / 2; +const float TAUH = 1 - TAUL; +const float ALPHA_MULTIP = 2 / ALPHA; + +const int BIG_LOOP = 3; +const int NUM_OF_NETS = 5; +const unsigned ATTENTION_HSIZE = STATE_HSIZE; + +#if defined _DEBUG + const int MAX_NUM_OF_SERIES = 20; +#else + const int MAX_NUM_OF_SERIES = -1; +#endif // _DEBUG + +const unsigned int NUM_OF_CATEGORIES = 6; +const int AVERAGING_LEVEL = 5; +const float EPS=1e-6; + +const float NOISE_STD=0.001; +const int FREQ_OF_TEST=1; +const float GRADIENT_CLIPPING=50; +const float BIG_FLOAT=1e38;//numeric_limits::max(); +const bool PRINT_DIAGN = false; + +string INPUT_PATH = DATA_DIR + VARIABLE + "-train.csv"; +string INFO_INPUT_PATH = DATA_DIR + "M4-info.csv"; + + +Expression squash(const Expression& x) { + return log(x); +} +float squash(float x) { + return log(x); +} + +Expression expand(const Expression& x) { + return exp(x); +} +float expand(float x) { + return exp(x); +} + + +#if defined USE_ODBC + void HandleDiagnosticRecord(SQLHANDLE hHandle, + SQLSMALLINT hType, + RETCODE RetCode); + + #if defined _WINDOWS + WCHAR* pwszConnStr = L"DSN=slawek"; + #else + SQLCHAR* pwszConnStr = (SQLCHAR*) "DSN=slawek"; + #endif + #define TRYODBC(h, ht, x) { RETCODE rc = x;\ + if (rc != SQL_SUCCESS) \ + { \ + HandleDiagnosticRecord (h, ht, rc); \ + } \ + if (rc == SQL_ERROR) \ + { \ + fprintf(stderr, "Error in " #x "\n"); \ + if (hStmt) { \ + SQLFreeHandle(SQL_HANDLE_STMT, hStmt); \ + } \ + if (hDbc) { \ + SQLDisconnect(hDbc); \ + SQLFreeHandle(SQL_HANDLE_DBC, hDbc); \ + } \ + if (hEnv) { \ + SQLFreeHandle(SQL_HANDLE_ENV, hEnv); \ + } \ + exit(-1); \ + } \ + } + +#endif + +struct M4TS {//storing series data + vector < float> categories_vect; + vector vals; + vector testVals;//empty, unless LBACK>0 + float meanAbsSeasDiff; + int n; + + M4TS(string category, stringstream &line_stream) { + array categories = { 0,0,0,0,0,0 }; + if (category == "Demographic") + categories[0] = 1; + else if (category == "Finance") + categories[1] = 1; + else if (category == "Industry") + categories[2] = 1; + else if (category == "Macro") + categories[3] = 1; + else if (category == "Micro") + categories[4] = 1; + else if (category == "Other") + categories[5] = 1; + else { + cerr << "unknown category?"; + exit(-1); + } + for (int i = 0; i < NUM_OF_CATEGORIES; i++) + categories_vect.push_back(categories[i]); + + string tmp_str; + while(getline(line_stream, tmp_str, ',' )) { + string val_str; + for (const auto c : tmp_str) { + if (c != '\"' && c != '\r') //remove quotes and very occasional double end of line + val_str.push_back(c); + } + if (val_str.size() == 0) + break; + float val=(atof(val_str.c_str())); + vals.push_back(val); + } + + meanAbsSeasDiff = 0; + float sumf = 0; + for (int ip = SEASONALITY; ip0) + meanAbsSeasDiff = sumf / (vals.size() - SEASONALITY); + + if (LBACK > 0) { //extract last OUTPUT_SIZE points as the test values + if (vals.size() > LBACK*OUTPUT_SIZE) { + auto first = vals.begin() + vals.size() - LBACK*OUTPUT_SIZE; + auto pastLast = vals.begin() + vals.size() - (LBACK-1)*OUTPUT_SIZE; + vector input_vect(first, pastLast); //[first,pastLast) + testVals= input_vect; + vals.resize(vals.size() - LBACK*OUTPUT_SIZE); //remove last LBACK*OUTPUT_SIZE elements + n = vals.size(); + } else + n = 0; + } else { + n = vals.size(); + } + if (n > MAX_SERIES_LENGTH) {//chop long series + vals.erase(vals.begin(), vals.begin() + (n-MAX_SERIES_LENGTH)); //remove some early data + n = vals.size(); + } + } + M4TS(){}; +}; + +#if defined USE_ODBC +void HandleDiagnosticRecord(SQLHANDLE hHandle, + SQLSMALLINT hType, + RETCODE RetCode); +#endif + +struct AdditionalParams {//Per series, important + Parameter levSm; + Parameter sSm; + array initSeasonality; + Parameter sSm2; + array initSeasonality2; +}; +struct AdditionalParamsF {//Used for storing diagnostics + float levSm; + float sSm; + array initSeasonality; + float sSm2; + array initSeasonality2; + vector levels; + vector seasons; + vector seasons2; +}; + + +array perfToRanking (array perf_arr) { + array index; + + for (int itop=0; itop losses; + for (unsigned int indx = 0; indx as_scalar(forecH.value())) + loss = loss + (actual - forecH)*ALPHA_MULTIP; + losses.push_back(loss); + } + return sum(losses) / OUTPUT_SIZE; +} + +// weighted quantile Loss +float wQuantLoss(vector& out_vect, vector& actuals_vect, float tau, int offset) {//used just for diagnostics, if if LBACK>0 and PERCENTILE!=50 + float sumf = 0; float suma = 0; + for (unsigned int indx = 0; indx forec) + sumf = sumf + (actual - forec)*tau; + else + sumf = sumf + (actual - forec)*(tau - 1); + } + return sumf / suma * 200; +} + +float errorFunc(vector& out_vect, vector& actuals_vect, float meanAbsSeasDiff) { + float sumf=0; + for (unsigned int indx = 0; indx forecH) + loss = loss + (actualf - forecH)*ALPHA_MULTIP; + sumf+=loss; + } + return sumf / (OUTPUT_SIZE*meanAbsSeasDiff); +} + + + +int main(int argc, char** argv) { + dynet::initialize(argc, argv); + + int ibigOffset = 0; + if (argc == 2) + ibigOffset = atoi(argv[1]); + + cout< 0) { + cout<<"Warning. LEVEL_VARIABILITY_PENALTY has to be equal zero if SEASONALITY_NUM==0"<tm_year+1900; + now_ts.month=now->tm_mon+1; + now_ts.day=now->tm_mday; + now_ts.hour=now->tm_hour; + now_ts.minute=now->tm_min; + now_ts.second=now->tm_sec; + now_ts.fraction=0; //reportedly needed + + const int OFFSET_TO_FIRST_ACTUAL=5; + string insertQuery_str = "insert into M72nn(run, LBack, ibig, series, epoch "; + for (int iq = 1; iq <= OUTPUT_SIZE; iq++) { + stringstream ss; + ss << iq; + string iq_str = ss.str(); + insertQuery_str = insertQuery_str +", actual"+iq_str+", forec" + iq_str; + } + insertQuery_str = insertQuery_str +", trainingError, variable, n, dateTimeOfPrediction) \ + values(? , ? , ? , ? , ? "; + for (int iq = 1; iq <= OUTPUT_SIZE; iq++) { + insertQuery_str = insertQuery_str + ",?,?"; + } + insertQuery_str = insertQuery_str + ",?,?,?,?)"; + #if defined _WINDOWS + wstring insertQuery(insertQuery_str.begin(), insertQuery_str.end()); + SQLWCHAR* sqlQuery = (SQLWCHAR*)insertQuery.c_str(); + #else + SQLCHAR* sqlQuery =(SQLCHAR*)insertQuery_str.c_str(); + #endif + + SQLHENV hEnv = NULL; + SQLHDBC hDbc = NULL; + SQLHSTMT hStmt = NULL, hInsertStmt = NULL; + + if (SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv) == SQL_ERROR) { + fprintf(stderr, "Unable to allocate an environment handle\n"); + exit(-1); + } + TRYODBC(hEnv, + SQL_HANDLE_ENV, + SQLSetEnvAttr(hEnv, + SQL_ATTR_ODBC_VERSION, + (SQLPOINTER)SQL_OV_ODBC3, + 0)); + + // Allocate a connection + TRYODBC(hEnv, + SQL_HANDLE_ENV, + SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc)); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLDriverConnect(hDbc, + NULL, + pwszConnStr, + SQL_NTS, + NULL, + 0, + NULL, + SQL_DRIVER_COMPLETE)); + fprintf(stderr, "Connected!\n"); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLSetConnectAttr(hDbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, SQL_IS_INTEGER)); + + TRYODBC(hDbc, + SQL_HANDLE_DBC, + SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hInsertStmt)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLPrepare(hInsertStmt, sqlQuery, SQL_NTS)); + + SQLLEN nullTerminatedStringOfRun = SQL_NTS; + SQLLEN nullTerminatedStringOfSeries = SQL_NTS; + SQLLEN nullTerminatedStringOfVariable = SQL_NTS; + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&LBACK, 0, NULL)); + + // variable, n, dateTimeOfPrediction + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL+2*OUTPUT_SIZE+2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)VARIABLE.c_str(), 0, &nullTerminatedStringOfVariable)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE + 4, SQL_PARAM_INPUT, SQL_C_TYPE_TIMESTAMP, SQL_TYPE_TIMESTAMP, 0, 0, &now_ts, sizeof(TIMESTAMP_STRUCT), NULL)); +#endif + + random_device rd; // only used once to initialise (seed) engine + mt19937 rng(rd()); // random-number engine used (Mersenne-Twister in this case) + + vector series_vect; + unordered_map allSeries_map(30000);//max series in one chunk would be 24k for yearly series + unordered_map seriesCategories_map(120000);//100k series + + ifstream infoFile(INFO_INPUT_PATH); + string line; + getline(infoFile, line); //header + while (getline(infoFile, line)) { + //cout << string( line)<= MIN_SERIES_LENGTH) { + series_vect.push_back(series); + if (m4Obj.meanAbsSeasDiff==0) { + cout<<"Warning, flat series:"<0 && series_vect.size()>=MAX_NUM_OF_SERIES) + break; + } + cout << "num of series:" << series_vect.size() << endl; + + unsigned int series_len=(unsigned int)series_vect.size(); + uniform_int_distribution uniOnSeries(0,series_len-1); // closed interval [a, b] + uniform_int_distribution uniOnNets(0,NUM_OF_NETS-1); // closed interval [a, b] + + unordered_map, AVERAGING_LEVEL+1>, NUM_OF_NETS>> testResults_map((int)series_len*1.5);//per series, etc... + unordered_map> finalResults_map((int)series_len*1.5);//per series + set diagSeries; + + unordered_map> netRanking_map; + for (int ibig=0; ibig perfValid_vect; + int epochOfLastChangeOfLRate = -1; + +#if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&ibigDb, 0, NULL)); +#endif + + //create nets + array paramsCollection_arr;//per net + array perSeriesParamsCollection_arr;//per net + array trainers_arr; + array perSeriesTrainers_arr; + + + #if defined USE_RESIDUAL_LSTM + array, NUM_OF_NETS> rnnStack_arr; + #elif defined USE_ATTENTIVE_LSTM + array, NUM_OF_NETS> rnnStack_arr; + #else + array, NUM_OF_NETS> rnnStack_arr; + #endif + + array MLPW_parArr; + array MLPB_parArr; + array adapterW_parArr; + array adapterB_parArr; + + //this is not a history, this is the real stuff + unordered_map* > additionalParams_mapOfArr((int)series_len*1.5); //per series, per net + for (auto iter = series_vect.begin() ; iter != series_vect.end(); ++iter) { + string series=*iter; + additionalParams_mapOfArr[series]=new array(); + } + + for (int inet=0; inetclip_threshold = GRADIENT_CLIPPING; + perSeriesTrainers_arr[inet]=new AdamTrainer (perSeriesPC, INITIAL_LEARNING_RATE*PER_SERIES_LR_MULTIP, 0.9, 0.999, EPS); + perSeriesTrainers_arr[inet]->clip_threshold = GRADIENT_CLIPPING; + + auto& rNNStack=rnnStack_arr[inet]; + #if defined USE_RESIDUAL_LSTM + rNNStack.emplace_back(ResidualDilatedLSTMBuilder(dilations[0], INPUT_SIZE + NUM_OF_CATEGORIES, STATE_HSIZE, pc)); + for (int il = 1; il* additionalParams_arr=additionalParams_mapOfArr[series]; + additionalParams_arr->at(inet).levSm=perSeriesPC.add_parameters({1}, 0.5);//per series, per net + if (SEASONALITY_NUM > 0) { + additionalParams_arr->at(inet).sSm = perSeriesPC.add_parameters({ 1 }, 0.5); + for (int isea = 0; iseaat(inet).initSeasonality[isea] = perSeriesPC.add_parameters({ 1 }, 0.5); + } + if (SEASONALITY_NUM > 1) { + additionalParams_arr->at(inet).sSm2 = perSeriesPC.add_parameters({ 1 }, 0.5); + for (int isea = 0; iseaat(inet).initSeasonality2[isea] = perSeriesPC.add_parameters({ 1 }, 0.5); + } + } + }//seting up, through nets + + //history of params. Series->[NUM_OF_NETS,NUM_OF_TRAIN_EPOCHS] + unordered_map, NUM_OF_NETS>*> historyOfAdditionalParams_map((int)series_len*1.5); + for (auto iter = series_vect.begin() ; iter != series_vect.end(); ++iter) { + string series=*iter; + historyOfAdditionalParams_map[series]=new array, NUM_OF_NETS>(); + } + + //first assignment. Yes, we are using vector , so the very first time the duplicates are possible. But a set can't be sorted + array, NUM_OF_NETS> seriesAssignment;//every net has an array + for (int j=0; j> netPerf_map; + for (int inet=0; inetlearning_rate = LEARNING_RATES.at(iEpoch); + if (inet==0) + cout << "changing LR to:" << trainer->learning_rate << endl; + perSeriesTrainer->learning_rate = LEARNING_RATES.at(iEpoch)*PER_SERIES_LR_MULTIP; + } + + auto& rNNStack=rnnStack_arr[inet]; + Parameter& MLPW_par = MLPW_parArr[inet]; + Parameter& MLPB_par = MLPB_parArr[inet]; + Parameter& adapterW_par=adapterW_parArr[inet]; + Parameter& adapterB_par=adapterB_parArr[inet]; + + vector oneNetAssignments=seriesAssignment[inet]; + random_shuffle (oneNetAssignments.begin(), oneNetAssignments.end()); + + vector epochLosses; + vector forecLosses; vector levVarLosses; vector stateLosses; + for (auto iter = oneNetAssignments.begin() ; iter != oneNetAssignments.end(); ++iter) { + string series=*iter; + auto m4Obj=allSeries_map[series]; + + ComputationGraph cg; + for (int il=0; ilat(inet); + array& historyOfAdditionalParams_arr=historyOfAdditionalParams_map[series]->at(inet); + + Expression MLPW_ex,MLPB_ex; + if (ADD_NL_LAYER) { + MLPW_ex = parameter(cg, MLPW_par); + MLPB_ex = parameter(cg, MLPB_par); + } + Expression adapterW_ex=parameter(cg, adapterW_par); + Expression adapterB_ex=parameter(cg, adapterB_par); + + Expression levSmSerNet0_ex= parameter(cg, additionalParams.levSm); + Expression levSm_ex = logistic(levSmSerNet0_ex); + + vector season_exVect;//vector, because we do not know how long the series is + Expression sSm_ex; + if (SEASONALITY_NUM > 0) { + Expression sSmSerNet0_ex= parameter(cg, additionalParams.sSm); + sSm_ex = logistic(sSmSerNet0_ex); + + for (int isea = 0; isea season2_exVect;//vector, because we do not know how long the series is + Expression sSm2_ex; + if (SEASONALITY_NUM > 1) { + Expression sSm2SerNet0_ex= parameter(cg, additionalParams.sSm2); + sSm2_ex = logistic(sSm2SerNet0_ex); + + for (int isea = 0; isea logDiffOfLevels_vect; + vector levels_exVect; + if (SEASONALITY_NUM == 0) { + levels_exVect.push_back(input(cg, m4Obj.vals[0])); + for (int i = 1; iSEASONALITY) { + unsigned long startSeasonalityIndx = season_exVect.size() - SEASONALITY; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY); i++) + season_exVect.push_back(season_exVect[startSeasonalityIndx + i]); + } + } + else if (SEASONALITY_NUM == 2) { + Expression lev = cdiv(input(cg, m4Obj.vals[0]), season_exVect[0] * season2_exVect[0]); + levels_exVect.push_back(lev); + for (int i = 1; iSEASONALITY) { + unsigned long startSeasonalityIndx = season_exVect.size() - SEASONALITY; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY); i++) + season_exVect.push_back(season_exVect[startSeasonalityIndx + i]); + } + //if prediction horizon is larger than seasonality, so we need to repeat some of the seasonality factors + if (OUTPUT_SIZE>SEASONALITY2) { + unsigned long startSeasonalityIndx = season2_exVect.size() - SEASONALITY2; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY2); i++) + season2_exVect.push_back(season2_exVect[startSeasonalityIndx + i]); + } + } + else { + cerr<<"SEASONALITY_NUM="<< SEASONALITY_NUM; + exit(-1); + } + + Expression levelVarLoss_ex; + if (LEVEL_VARIABILITY_PENALTY > 0) { + vector levelVarLoss_v; + for (int i = 1; i losses;//losses of steps through single time series + for (int i=INPUT_SIZE-1; i<(m4Obj.n- OUTPUT_SIZE); i++) { + vector::const_iterator first = m4Obj.vals.begin() + i + 1 - INPUT_SIZE; + vector::const_iterator pastLast = m4Obj.vals.begin() + i + 1; //not including the last one + vector input_vect(first, pastLast); //[first,pastLast) + + first = m4Obj.vals.begin() + i + 1; + pastLast = m4Obj.vals.begin() + i + 1 + OUTPUT_SIZE; + vector labels_vect(first, pastLast); //[first,pastLast) + + Expression input1_ex = input(cg, { INPUT_SIZE }, input_vect); + Expression labels1_ex = input(cg, { OUTPUT_SIZE }, labels_vect); + + if (SEASONALITY_NUM > 0 ) { + vector::const_iterator firstE = season_exVect.begin() +i+1-INPUT_SIZE; + vector::const_iterator pastLastE = season_exVect.begin() +i+1; //not including the last one + vector inputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + inputSeasonality_ex=concatenate(inputSeasonality_exVect); + + firstE = season_exVect.begin() + i + 1; + pastLastE = season_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + outputSeasonality_ex = concatenate(outputSeasonality_exVect); + + input1_ex = cdiv(input1_ex, inputSeasonality_ex); // input deseasonalization + labels1_ex = cdiv(labels1_ex, outputSeasonality_ex); //output deseasonalization + } + if (SEASONALITY_NUM > 1) { + vector::const_iterator firstE = season2_exVect.begin() + i + 1 - INPUT_SIZE; + vector::const_iterator pastLastE = season2_exVect.begin() + i + 1; //not including the last one + vector inputSeasonality2_exVect(firstE, pastLastE); //[first,pastLast) + inputSeasonality2_ex = concatenate(inputSeasonality2_exVect); + + firstE = season2_exVect.begin() + i + 1; + pastLastE = season2_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality2_exVect(firstE, pastLastE); //[first,pastLast) + Expression outputSeasonality2_ex = concatenate(outputSeasonality2_exVect); + + input1_ex = cdiv(input1_ex, inputSeasonality2_ex); //input deseasonalization + labels1_ex = cdiv(labels1_ex, outputSeasonality2_ex); //output deseasonalization + } + + vector joinedInput_ex; + joinedInput_ex.emplace_back(noise(squash(cdiv(input1_ex, levels_exVect[i])), NOISE_STD)); //input normalization+noise + joinedInput_ex.emplace_back(input(cg, { NUM_OF_CATEGORIES }, m4Obj.categories_vect)); + Expression input_ex = concatenate(joinedInput_ex); + + Expression labels_ex = squash(cdiv(labels1_ex, levels_exVect[i]));//output normalization + + Expression rnn_ex; + try { + rnn_ex = rNNStack[0].add_input(input_ex); + for (int il=1; il=INPUT_SIZE+MIN_INP_SEQ_LEN) + losses.push_back(loss_ex); + }//through points of a series + + Expression forecLoss_ex= average(losses); + Expression loss_exp = forecLoss_ex; + + float levVarLoss=0; + if (LEVEL_VARIABILITY_PENALTY > 0) { + Expression levelVarLossP_ex = levelVarLoss_ex*LEVEL_VARIABILITY_PENALTY; + levVarLoss = as_scalar(levelVarLossP_ex.value()); + levVarLosses.push_back(levVarLoss); + loss_exp= loss_exp + levelVarLossP_ex; + } + + float cStateLoss=0; + if (C_STATE_PENALTY>0) { + vector cStateLosses_vEx; + for (int irnn = 0; irnn < rNNStack.size(); irnn++) + for (int it = 0; itupdate();//update shared weights + perSeriesTrainer->update();//update params of this series only + } catch (exception& e) {//it may happen occasionally. I believe it is due to not robust enough implementation of squashing functions in Dynet. When abs(x)>35 NAs appear. + //so the code below is trying to produce some diagnostics, hopefully useful when setting LEVEL_VARIABILITY_PENALTY and C_STATE_PENALTY. + cerr<<"cought exception while doing "< maxAbs) { + maxAbs = abs(state[iv]); + timeOfMax=it; + layerOfMax=il; + chunkOfMax= irnn; + } + } + } //through layers/states + } //through time + } //through chunks + + cout << "levSm:" << as_scalar(levSm_ex.value()) << endl; + if (SEASONALITY_NUM > 0) + cout << "sSm:" << as_scalar(sSm_ex.value()) << endl; + if (SEASONALITY_NUM > 1) + cout << "sSm2:" << as_scalar(sSm2_ex.value()) << endl; + cout << "max abs:" << maxAbs <<" at time:"<< timeOfMax<<" at layer:"<< layerOfMax<<" and chunk:"<< chunkOfMax< 0) { + histAdditionalParams.sSm=as_scalar(sSm_ex.value()); + for (int isea = 0; isea 1) { + histAdditionalParams.sSm2 = as_scalar(sSm2_ex.value()); + for (int isea=0; isea 0 || C_STATE_PENALTY > 0) { + float averageForecLoss = accumulate(forecLosses.begin(), forecLosses.end(), 0.0) / forecLosses.size(); + cout << " forec loss:" << averageForecLoss * 100; + } + if (LEVEL_VARIABILITY_PENALTY > 0) { + float averagelevVarLoss = accumulate(levVarLosses.begin(), levVarLosses.end(), 0.0) / levVarLosses.size(); + cout << " levVar loss:" << averagelevVarLoss * 100; + } + if (C_STATE_PENALTY > 0) { + float averageStateLoss = accumulate(stateLosses.begin(), stateLosses.end(), 0.0) / stateLosses.size(); + cout << " state loss:" << averageStateLoss * 100; + } + cout<at(inet); + Expression MLPW_ex, MLPB_ex; + if (ADD_NL_LAYER) { + MLPW_ex = parameter(cg, MLPW_par); + MLPB_ex = parameter(cg, MLPB_par); + } + Expression adapterW_ex=parameter(cg, adapterW_par); + Expression adapterB_ex=parameter(cg, adapterB_par); + + Expression levSmSerNet0_ex = parameter(cg, additionalParams.levSm); + Expression levSm_ex = logistic(levSmSerNet0_ex); + + vector season_exVect;//vector, because we do not know how long the series is + Expression sSm_ex; + if (SEASONALITY_NUM > 0) { + Expression sSmSerNet0_ex= parameter(cg, additionalParams.sSm); + sSm_ex = logistic(sSmSerNet0_ex); + + for (int isea = 0; isea season2_exVect;//vector, because we do not know how long the series is + Expression sSm2_ex; + if (SEASONALITY_NUM > 1) { + Expression sSm2SerNet0_ex= parameter(cg, additionalParams.sSm2); + sSm2_ex = logistic(sSm2SerNet0_ex); + + for (int isea = 0; isea levels_exVect; + if (SEASONALITY_NUM == 0) { + levels_exVect.push_back(input(cg, m4Obj.vals[0])); + for (int i = 1; i0 then this is shortened, so it always contains data awe have right to access + Expression newLevel_ex = m4Obj.vals[i] * cdiv(levSm_ex, season_exVect[i]) + (1 - levSm_ex)*levels_exVect[i - 1]; + levels_exVect.push_back(newLevel_ex); + + Expression newSeason_ex = m4Obj.vals[i] * cdiv(sSm_ex, newLevel_ex) + (1 - sSm_ex)*season_exVect[i]; + season_exVect.push_back(newSeason_ex); + } + + //if prediction horizon is larger than seasonality, so we need to repeat some of the seasonality factors + if (OUTPUT_SIZE>SEASONALITY) { + unsigned long startSeasonalityIndx = season_exVect.size() - SEASONALITY; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY); i++) + season_exVect.push_back(season_exVect[startSeasonalityIndx + i]); + } + } + else if (SEASONALITY_NUM == 2) { + Expression lev = cdiv(input(cg, m4Obj.vals[0]), season_exVect[0] * season2_exVect[0]); + levels_exVect.push_back(lev); + for (int i = 1; iSEASONALITY) { + unsigned long startSeasonalityIndx = season_exVect.size() - SEASONALITY; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY); i++) + season_exVect.push_back(season_exVect[startSeasonalityIndx + i]); + } + //if prediction horizon is larger than seasonality, so we need to repeat some of the seasonality factors + if (OUTPUT_SIZE>SEASONALITY2) { + unsigned long startSeasonalityIndx = season2_exVect.size() - SEASONALITY2; + for (int i = 0; i<(OUTPUT_SIZE - SEASONALITY2); i++) + season2_exVect.push_back(season2_exVect[startSeasonalityIndx + i]); + } + } + else { + cerr<<"SEASONALITY_NUM="<< SEASONALITY_NUM; + exit(-1); + } + + + Expression inputSeasonality_ex; Expression inputSeasonality2_ex; + Expression outputSeasonality_ex; Expression outputSeasonality2_ex; + vector losses;//losses of steps through single time series + Expression out_ex;//we declare it here, bcause the last one will be the forecast + for (int i=INPUT_SIZE-1; i::const_iterator first = m4Obj.vals.begin() + i + 1 - INPUT_SIZE; + vector::const_iterator pastLast = m4Obj.vals.begin() + i + 1; //not including the last one + vector input_vect(first, pastLast); //[first,pastLast) + Expression input1_ex = input(cg, { INPUT_SIZE }, input_vect); + + if (SEASONALITY_NUM > 0 ) { + vector::const_iterator firstE = season_exVect.begin() +i+1-INPUT_SIZE; + vector::const_iterator pastLastE = season_exVect.begin() +i+1; //not including the last one + vector inputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + inputSeasonality_ex=concatenate(inputSeasonality_exVect); + input1_ex = cdiv(input1_ex, inputSeasonality_ex); // input deseasonalization + } + if (SEASONALITY_NUM > 1) { + vector::const_iterator firstE = season2_exVect.begin() + i + 1 - INPUT_SIZE; + vector::const_iterator pastLastE = season2_exVect.begin() + i + 1; //not including the last one + vector inputSeasonality2_exVect(firstE, pastLastE); //[first,pastLast) + inputSeasonality2_ex = concatenate(inputSeasonality2_exVect); + input1_ex = cdiv(input1_ex, inputSeasonality2_ex); //input deseasonalization + } + + vector joinedInput_ex; + joinedInput_ex.emplace_back(noise(squash(cdiv(input1_ex, levels_exVect[i])), NOISE_STD)); //input normalization+noise + joinedInput_ex.emplace_back(input(cg, { NUM_OF_CATEGORIES }, m4Obj.categories_vect)); + Expression input_ex = concatenate(joinedInput_ex); + + Expression rnn_ex; + try { + rnn_ex = rNNStack[0].add_input(input_ex); + for (int il=1; il::const_iterator first = m4Obj.vals.begin() + i + 1; + vector::const_iterator pastLast = m4Obj.vals.begin() + i + 1 + OUTPUT_SIZE; + vector labels_vect(first, pastLast); //[first,pastLast) + Expression labels1_ex = input(cg, { OUTPUT_SIZE }, labels_vect); + + if (SEASONALITY_NUM > 0) { + vector::const_iterator firstE = season_exVect.begin() + i + 1; + vector::const_iterator pastLastE = season_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + outputSeasonality_ex = concatenate(outputSeasonality_exVect); + labels1_ex = cdiv(labels1_ex, outputSeasonality_ex); //output deseasonalization + } + if (SEASONALITY_NUM > 1) { + vector::const_iterator firstE = season2_exVect.begin() + i + 1; + vector::const_iterator pastLastE = season2_exVect.begin() + i + 1 + OUTPUT_SIZE;//checking if enough elements is in the vecor was done a few pe + vector outputSeasonality2_exVect(firstE, pastLastE); //[first,pastLast) + Expression outputSeasonality2_ex = concatenate(outputSeasonality2_exVect); + labels1_ex = cdiv(labels1_ex, outputSeasonality2_ex); //output deseasonalization + } + Expression labels_ex = squash(cdiv(labels1_ex, levels_exVect[i]));//output normalization + + //Expression loss_ex = pinBallLoss(out_ex, labels_ex); + Expression loss_ex = MSIS(out_ex, labels_ex); + if (i>=INPUT_SIZE+MIN_INP_SEQ_LEN) + losses.push_back(loss_ex); //training area losses + } + + if (i==(m4Obj.n-1)) {//validation loss + out_ex=expand(out_ex)*levels_exVect[i];//back to original scale + if (SEASONALITY_NUM > 0 ) { + vector::const_iterator firstE = season_exVect.begin() + i + 1; + vector::const_iterator pastLastE = season_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality_exVect(firstE, pastLastE); //[first,pastLast) + for (int ios=0; ios 1 ) { + vector::const_iterator firstE = season2_exVect.begin() + i + 1; + vector::const_iterator pastLastE = season2_exVect.begin() + i + 1 + OUTPUT_SIZE; + vector outputSeasonality2_exVect(firstE, pastLastE); //[first,pastLast) + for (int ios = 0; ios, AVERAGING_LEVEL+1>, NUM_OF_NETS>, BIG_LOOP>> testResults_map((int)series_len*1.5);//per series, big loop, etc... + //No epoch here, because this will just reflect the current (latest) situation - the last few epochs + vector out_vect=as_vector(out_ex.value()); + testResults_map[series][inet][iEpoch%AVERAGING_LEVEL]=out_vect; + if (iEpoch>=AVERAGING_LEVEL && iEpoch % FREQ_OF_TEST==0) { + vector firstForec=testResults_map[series][inet][0]; + testResults_map[series][inet][AVERAGING_LEVEL]=firstForec; + for (int ii=1; ii nextForec=testResults_map[series][inet][ii]; + for (int iii=0; iii<2*OUTPUT_SIZE; iii++) + testResults_map[series][inet][AVERAGING_LEVEL][iii]+=nextForec[iii]; + } + for (int iii=0; iii<2*OUTPUT_SIZE; iii++) + testResults_map[series][inet][AVERAGING_LEVEL][iii]/=AVERAGING_LEVEL; + } //time to average + }//through series + } //through nets + + if (iEpoch>0 && iEpoch % FREQ_OF_TEST==0) { + //now that we have saved outputs of all nets on all series, let's calc how best and topn combinations performed during current epoch. + vector bestEpochLosses; + vector bestEpochAvgLosses; + vector topnEpochLosses; + vector topnEpochAvgLosses; + vector bestEpochLossesL; + vector bestEpochAvgLossesL; + vector topnEpochLossesL; + vector topnEpochAvgLossesL; + vector bestEpochLossesH; + vector bestEpochAvgLossesH; + vector topnEpochLossesH; + vector topnEpochAvgLossesH; + + for (auto iter = series_vect.begin() ; iter != series_vect.end(); ++iter) { + string series=*iter; + auto m4Obj=allSeries_map[series]; + +#if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)series.c_str(), 0, &nullTerminatedStringOfSeries)); + + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE + 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&m4Obj.n, 0, NULL)); +#endif + + float avgLoss; + vector avgLatest; + vector avgAvg; + + for (int itop=0; itop 0) { + float qLoss = errorFunc(testResults_map[series][inet][iEpoch%AVERAGING_LEVEL], m4Obj.testVals, m4Obj.meanAbsSeasDiff); + bestEpochLosses.push_back(qLoss); + + qLoss=wQuantLoss(testResults_map[series][inet][iEpoch%AVERAGING_LEVEL], m4Obj.testVals, TAUL, 0); + bestEpochLossesL.push_back(qLoss); + + qLoss = wQuantLoss(testResults_map[series][inet][iEpoch%AVERAGING_LEVEL], m4Obj.testVals, TAUH, OUTPUT_SIZE); + bestEpochLossesH.push_back(qLoss); + } + avgLatest=testResults_map[series][inet][iEpoch%AVERAGING_LEVEL]; //used later for calculating topn loss + + if (iEpoch>=AVERAGING_LEVEL) { + if (LBACK > 0) { + float qLoss = errorFunc(testResults_map[series][inet][AVERAGING_LEVEL], m4Obj.testVals, m4Obj.meanAbsSeasDiff); + bestEpochAvgLosses.push_back(qLoss); + + qLoss = wQuantLoss(testResults_map[series][inet][AVERAGING_LEVEL], m4Obj.testVals, TAUL, 0); + bestEpochAvgLossesL.push_back(qLoss); + + qLoss = wQuantLoss(testResults_map[series][inet][AVERAGING_LEVEL], m4Obj.testVals, TAUH, OUTPUT_SIZE); + bestEpochAvgLossesH.push_back(qLoss); + } + avgAvg=testResults_map[series][inet][AVERAGING_LEVEL]; + } + } else { + for (int iii=0; iii<2*OUTPUT_SIZE; iii++) { + avgLatest[iii]+=testResults_map[series][inet][iEpoch%AVERAGING_LEVEL][iii];//calculate current topn + if (iEpoch>=AVERAGING_LEVEL) + avgAvg[iii]+=testResults_map[series][inet][AVERAGING_LEVEL][iii]; + } + } + }//through topn + + for (int iii=0; iii<2*OUTPUT_SIZE; iii++) + avgLatest[iii]/=TOPN; + + if (LBACK > 0) { + float qLoss = errorFunc(avgLatest, m4Obj.testVals, m4Obj.meanAbsSeasDiff); + topnEpochLosses.push_back(qLoss); + + qLoss = wQuantLoss(avgLatest, m4Obj.testVals, TAUL, 0); + topnEpochLossesL.push_back(qLoss); + + qLoss = wQuantLoss(avgLatest, m4Obj.testVals, TAUH, OUTPUT_SIZE); + topnEpochLossesH.push_back(qLoss); + } + + if (iEpoch>=AVERAGING_LEVEL) { + for (int iii = 0; iii<2*OUTPUT_SIZE; iii++) + avgAvg[iii] /= TOPN; + + finalResults_map[series] = avgAvg; + + if (LBACK > 0) { +#if defined USE_ODBC + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, OFFSET_TO_FIRST_ACTUAL + 2 * OUTPUT_SIZE + 1, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_FLOAT, 0, 0, (SQLPOINTER)&avgLoss, 0, NULL)); + + for (int iv=0; iv<2; iv++) { + if (iv==0) + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)runL.c_str(), 0, &nullTerminatedStringOfRun)) + else + TRYODBC(hInsertStmt, + SQL_HANDLE_STMT, + SQLBindParameter(hInsertStmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLCHAR*)runH.c_str(), 0, &nullTerminatedStringOfRun)); + + for (int iii=0; iii 0) { + float bestEpochLoss=accumulate( bestEpochLosses.begin(), bestEpochLosses.end(), 0.0)/bestEpochLosses.size(); + float topnEpochLoss=accumulate( topnEpochLosses.begin(), topnEpochLosses.end(), 0.0)/topnEpochLosses.size(); + float bestEpochLossL = accumulate(bestEpochLossesL.begin(), bestEpochLossesL.end(), 0.0) / bestEpochLossesL.size(); + float topnEpochLossL = accumulate(topnEpochLossesL.begin(), topnEpochLossesL.end(), 0.0) / topnEpochLossesL.size(); + float bestEpochLossH = accumulate(bestEpochLossesH.begin(), bestEpochLossesH.end(), 0.0) / bestEpochLossesH.size(); + float topnEpochLossH = accumulate(topnEpochLossesH.begin(), topnEpochLossesH.end(), 0.0) / topnEpochLossesH.size(); + cout<=AVERAGING_LEVEL) { + float bestEpochAvgLoss=accumulate( bestEpochAvgLosses.begin(), bestEpochAvgLosses.end(), 0.0)/bestEpochAvgLosses.size(); + float topnEpochAvgLoss=accumulate( topnEpochAvgLosses.begin(), topnEpochAvgLosses.end(), 0.0)/topnEpochAvgLosses.size(); + float bestEpochAvgLossL = accumulate(bestEpochAvgLossesL.begin(), bestEpochAvgLossesL.end(), 0.0) / bestEpochAvgLossesL.size(); + float topnEpochAvgLossL = accumulate(topnEpochAvgLossesL.begin(), topnEpochAvgLossesL.end(), 0.0) / topnEpochAvgLossesL.size(); + float bestEpochAvgLossH = accumulate(bestEpochAvgLossesH.begin(), bestEpochAvgLossesH.end(), 0.0) / bestEpochAvgLossesH.size(); + float topnEpochAvgLossH = accumulate(topnEpochAvgLossesH.begin(), topnEpochAvgLossesH.end(), 0.0) / topnEpochAvgLossesH.size(); + cout<<" bestAvg:"<> netRanking_map + netRanking_map[series]=perfToRanking(netPerf_map[series]); + + for (int itop=0; itop diagSeries; + for (int i=0; i<1; i++) {//add a few normal ones + int irand=uniOnSeries(rng); + diagSeries.insert(series_vect[irand]); + } + for(auto series : diagSeries) { + cout<at(inet); + for (int iEpoch=0; iEpoch 0 ) { + cout<<"sSm:"<at(inet); + for (int iEpoch=0; iEpoch 1 ) { + cout<<"sSm2:"<at(inet); + for (int iEpoch=0; iEpochat(inet); + for (int iEpoch = 0; iEpoch0) { + cout << "levels:" << iEpoch<<" "; + for (int iv = 0; iv 0 ) { + cout << "seasons:" << iEpoch<<" "; + for (int iv = 0; iv 1 ) { + cout << "seasons2:" << iEpoch<<" "; + for (int iv = 0; iv + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + + + + Source Files + + + \ No newline at end of file diff --git a/c++/windows_VisualStudio/M44/M44.vcxproj b/c++/windows_VisualStudio/M44/M44.vcxproj new file mode 100644 index 0000000..b56923a --- /dev/null +++ b/c++/windows_VisualStudio/M44/M44.vcxproj @@ -0,0 +1,227 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + RelWithDebug + Win32 + + + RelWithDebug + x64 + + + + + + + + + + + {7A192E0C-8F58-4D65-998E-3A7010AB5F87} + Win32Proj + M44 + 8.1 + + + + Application + true + v140 + Unicode + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + Application + true + v140 + Unicode + Sequential + + + Application + true + v140 + Unicode + Sequential + + + Application + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + true + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + + + NotUsing + Level1 + Disabled + WIN32;_WINDOWS;EIGEN_USE_MKL_ALL;EIGEN_FAST_MATH;NOMINMAX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + E:\progs2\dynet;E:\progs\Eigen; + + + Console + true + E:\progs2\dynet\buildMKL\dynet\Debug + dynet.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + NotUsing + Level1 + MaxSpeed + WIN32;_WINDOWS;EIGEN_FAST_MATH;EIGEN_USE_MKL_ALL;NOMINMAX;NDEBUG_;CONSOLE;%(PreprocessorDefinitions) + E:\progs2\dynet;E:\progs\Eigen; + AnySuitable + true + Speed + AdvancedVectorExtensions + Default + MultiThreadedDLL + ProgramDatabase + true + false + + + Console + true + E:\progs2\dynet\buildMKL\dynet\RelWithDebInfo + dynet.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + true + true + + + + + + \ No newline at end of file diff --git a/c++/windows_VisualStudio/M44/slstm.h b/c++/windows_VisualStudio/M44/slstm.h new file mode 100644 index 0000000..adb63a7 --- /dev/null +++ b/c++/windows_VisualStudio/M44/slstm.h @@ -0,0 +1,394 @@ +/** +* file slstm.h +* header for my implementation of dilated LSTMs, based on Dynet LSTM builders + - DilatedLSTMBuilder - standard Dilated LSTM (https://papers.nips.cc/paper/6613-dilated-recurrent-neural-networks.pdf) + - ResidualDilatedLSTMBuilder - Dilated LSTM with special Residual shortcuts, after https://arxiv.org/abs/1701.03360 + - AttentiveDilatedLSTMBuilder - Dilated LSTM with Attention mechanism, as in the second stage of https://arxiv.org/abs/1704.02971 +* +Slawek Smyl, Mar-May 2018 +*/ + +#ifndef DYNET_SLSTMS_H_ +#define DYNET_SLSTMS_H_ + +#include "dynet/dynet.h" +#include "dynet/rnn.h" +#include "dynet/expr.h" + +using namespace std; + +namespace dynet { + + //basd on VanillaLSTMBuilder + struct ResidualDilatedLSTMBuilder : public RNNBuilder { + /** + * @brief Default Constructor + */ + ResidualDilatedLSTMBuilder(); + /** + * \brief Constructor for the ResidualDilatedLSTMBuilder + * + * \param dilations Vector of dilations + * \param input_dim Dimention of the input \f$x_t\f$ + * \param hidden_dim Dimention of the hidden states \f$h_t\f$ and \f$c_t\f$ + * \param model ParameterCollection holding the parameters + * \param ln_lstm Whether to use layer normalization + * \param forget_bias value(float) to use as bias for the forget gate(default = 1.0) + */ + explicit ResidualDilatedLSTMBuilder(vector dilations, + unsigned input_dim, + unsigned hidden_dim, + ParameterCollection& model, + bool ln_lstm = false, + float forget_bias = 1.f); + + Expression back() const override { return (cur == -1 ? h0.back() : h[cur].back()); } + std::vector final_h() const override { return (h.size() == 0 ? h0 : h.back()); } + std::vector final_s() const override { + std::vector ret = (c.size() == 0 ? c0 : c.back()); + for (auto my_h : final_h()) ret.push_back(my_h); + return ret; + } + unsigned num_h0_components() const override { return 2 * layers; } + + std::vector get_h(RNNPointer i) const override { return (i == -1 ? h0 : h[i]); } + std::vector get_s(RNNPointer i) const override { + std::vector ret = (i == -1 ? c0 : c[i]); + for (auto my_h : get_h(i)) ret.push_back(my_h); + return ret; + } + + void copy(const RNNBuilder & params) override; + + /** + * \brief Set the dropout rates to a unique value + * \details This has the same effect as `set_dropout(d,d_h)` except that all the dropout rates are set to the same value. + * \param d Dropout rate to be applied on all of \f$x,h\f$ + */ + void set_dropout(float d); + /** + * \brief Set the dropout rates + * \details The dropout implemented here is the variational dropout with tied weights introduced in [Gal, 2016](http://papers.nips.cc/paper/6241-a-theoretically-grounded-application-of-dropout-in-recurrent-neural-networks) + * More specifically, dropout masks \f$\mathbf{z_x}\sim \mathrm{Bernoulli}(1-d_x)\f$,\f$\mathbf{z_h}\sim \mathrm{Bernoulli}(1-d_h)\f$ are sampled at the start of each sequence. + * The dynamics of the cell are then modified to : + * + * \f$ + * \begin{split} + i_t & =\sigma(W_{ix}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ih}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_i)\\ + f_t & = \sigma(W_{fx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{fh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_f)\\ + o_t & = \sigma(W_{ox}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{oh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_o)\\ + \tilde{c_t} & = \tanh(W_{cx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ch}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_c)\\ + c_t & = c_{t-1}\circ f_t + \tilde{c_t}\circ i_t\\ + h_t & = \tanh(c_t)\circ o_t\\ + \end{split} + * \f$ + * + * For more detail as to why scaling is applied, see the "Unorthodox" section of the documentation + * \param d Dropout rate \f$d_x\f$ for the input \f$x_t\f$ + * \param d_h Dropout rate \f$d_h\f$ for the output \f$h_t\f$ + */ + void set_dropout(float d, float d_r); + /** + * \brief Set all dropout rates to 0 + * \details This is equivalent to `set_dropout(0)` or `set_dropout(0,0,0)` + * + */ + void disable_dropout(); + /** + * \brief Set dropout masks at the beginning of a sequence for a specific batch size + * \details If this function is not called on batched input, the same mask will be applied across + * all batch elements. Use this to apply different masks to each batch element + * + * \param batch_size Batch size + */ + void set_dropout_masks(unsigned batch_size = 1); + /** + * \brief Get parameters in ResidualDilatedLSTMBuilder + * \return list of points to ParameterStorage objects + */ + ParameterCollection & get_parameter_collection() override; + protected: + void new_graph_impl(ComputationGraph& cg, bool update) override; + void start_new_sequence_impl(const std::vector& h0) override; + Expression add_input_impl(int prev, const Expression& x) override; + Expression set_h_impl(int prev, const std::vector& h_new) override; + Expression set_s_impl(int prev, const std::vector& s_new) override; + + public: + ParameterCollection local_model; + // first index is layer, then ... + std::vector> params; + // first index is layer, then ... + std::vector> ln_params; + + // first index is layer, then ... + std::vector> param_vars; + // first index is layer, then ... + std::vector> ln_param_vars; + + // first index is layer, then ... + std::vector> masks; + + // first index is time, second is layer + std::vector> h, c; + + // initial values of h and c at each layer + // - both default to zero matrix input + bool has_initial_state; // if this is false, treat h0 and c0 as 0 + std::vector h0; + std::vector c0; + unsigned layers; + unsigned input_dim, hid; + float dropout_rate_h; + bool ln_lstm; + float forget_bias; + bool dropout_masks_valid; + vector dilations; //one int per layer + + private: + ComputationGraph* _cg; // Pointer to current cg + + }; + + + struct DilatedLSTMBuilder : public RNNBuilder { + /** + * @brief Default Constructor + */ + DilatedLSTMBuilder(); + /** + * \brief Constructor for the DilatedLSTMBuilder + * + * \param dilations Vector of dilations + * \param input_dim Dimention of the input \f$x_t\f$ + * \param hidden_dim Dimention of the hidden states \f$h_t\f$ and \f$c_t\f$ + * \param model ParameterCollection holding the parameters + */ + explicit DilatedLSTMBuilder(vector dilations, + unsigned input_dim, + unsigned hidden_dim, + ParameterCollection& model); + + Expression back() const override { return (cur == -1 ? h0.back() : h[cur].back()); } + std::vector final_h() const override { return (h.size() == 0 ? h0 : h.back()); } + std::vector final_s() const override { + std::vector ret = (c.size() == 0 ? c0 : c.back()); + for (auto my_h : final_h()) ret.push_back(my_h); + return ret; + } + unsigned num_h0_components() const override { return 2 * layers; } + + std::vector get_h(RNNPointer i) const override { return (i == -1 ? h0 : h[i]); } + std::vector get_s(RNNPointer i) const override { + std::vector ret = (i == -1 ? c0 : c[i]); + for (auto my_h : get_h(i)) ret.push_back(my_h); + return ret; + } + + void copy(const RNNBuilder & params) override; + + /** + * \brief Set the dropout rates to a unique value + * \details This has the same effect as `set_dropout(d,d_h)` except that all the dropout rates are set to the same value. + * \param d Dropout rate to be applied on all of \f$x,h\f$ + */ + void set_dropout(float d); + /** + * \brief Set the dropout rates + * \details The dropout implemented here is the variational dropout with tied weights introduced in [Gal, 2016](http://papers.nips.cc/paper/6241-a-theoretically-grounded-application-of-dropout-in-recurrent-neural-networks) + * More specifically, dropout masks \f$\mathbf{z_x}\sim \mathrm{Bernoulli}(1-d_x)\f$,\f$\mathbf{z_h}\sim \mathrm{Bernoulli}(1-d_h)\f$ are sampled at the start of each sequence. + * The dynamics of the cell are then modified to : + * + * \f$ + * \begin{split} + i_t & =\sigma(W_{ix}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ih}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_i)\\ + f_t & = \sigma(W_{fx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{fh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_f)\\ + o_t & = \sigma(W_{ox}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{oh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_o)\\ + \tilde{c_t} & = \tanh(W_{cx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ch}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_c)\\ + c_t & = c_{t-1}\circ f_t + \tilde{c_t}\circ i_t\\ + h_t & = \tanh(c_t)\circ o_t\\ + \end{split} + * \f$ + * + * For more detail as to why scaling is applied, see the "Unorthodox" section of the documentation + * \param d Dropout rate \f$d_x\f$ for the input \f$x_t\f$ + */ + void set_dropout(float d, float d_r); + /** + * \brief Set all dropout rates to 0 + * \details This is equivalent to `set_dropout(0)` or `set_dropout(0,0,0)` + * + */ + void disable_dropout(); + /** + * \brief Set dropout masks at the beginning of a sequence for a specific batch size + * \details If this function is not called on batched input, the same mask will be applied across + * all batch elements. Use this to apply different masks to each batch element + * + * \param batch_size Batch size + */ + void set_dropout_masks(unsigned batch_size = 1); + + void set_weightnoise(float std); + ParameterCollection & get_parameter_collection() override; + protected: + void new_graph_impl(ComputationGraph& cg, bool update) override; + void start_new_sequence_impl(const std::vector& h0) override; + Expression add_input_impl(int prev, const Expression& x) override; + Expression set_h_impl(int prev, const std::vector& h_new) override; + Expression set_s_impl(int prev, const std::vector& s_new) override; + + public: + ParameterCollection local_model; + // first index is layer, then ... + std::vector> params; + + // first index is layer, then ... + std::vector> param_vars; + + // first index is layer, then ... + std::vector> masks; + + // first index is time, second is layer + std::vector> h, c; + + // initial values of h and c at each layer + // - both default to zero matrix input + bool has_initial_state; // if this is false, treat h0 and c0 as 0 + std::vector h0; + std::vector c0; + unsigned layers; + unsigned input_dim, hid; + float dropout_rate_h; + float weightnoise_std; + vector dilations; //one int per layer + + bool dropout_masks_valid; + private: + ComputationGraph* _cg; // Pointer to current cg + + }; + + + struct AttentiveDilatedLSTMBuilder : public RNNBuilder { + /** + * @brief Default Constructor + */ + AttentiveDilatedLSTMBuilder(); + /** + * \brief Constructor for the AttentiveDilatedLSTMBuilder + * + * \param max_dilations Vector, maximum dilations (per layer) + * \param input_dim Dimention of the input \f$x_t\f$ + * \param hidden_dim Dimention of the hidden states \f$h_t\f$ and \f$c_t\f$ + * \param model ParameterCollection holding the parameters + */ + explicit AttentiveDilatedLSTMBuilder(vector max_dilations, + unsigned input_dim, + unsigned hidden_dim, + unsigned attention_dim, + ParameterCollection& model); + + Expression back() const override { return (cur == -1 ? h0.back() : h[cur].back()); } + std::vector final_h() const override { return (h.size() == 0 ? h0 : h.back()); } + std::vector final_s() const override { + std::vector ret = (c.size() == 0 ? c0 : c.back()); + for (auto my_h : final_h()) ret.push_back(my_h); + return ret; + } + unsigned num_h0_components() const override { return 2 * layers; } + + std::vector get_h(RNNPointer i) const override { return (i == -1 ? h0 : h[i]); } + std::vector get_s(RNNPointer i) const override { + std::vector ret = (i == -1 ? c0 : c[i]); + for (auto my_h : get_h(i)) ret.push_back(my_h); + return ret; + } + + void copy(const RNNBuilder & params) override; + + /** + * \brief Set the dropout rates to a unique value + * \details This has the same effect as `set_dropout(d,d_h)` except that all the dropout rates are set to the same value. + * \param d Dropout rate to be applied on all of \f$x,h\f$ + */ + void set_dropout(float d); + /** + * \brief Set the dropout rates + * \details The dropout implemented here is the variational dropout with tied weights introduced in [Gal, 2016](http://papers.nips.cc/paper/6241-a-theoretically-grounded-application-of-dropout-in-recurrent-neural-networks) + * More specifically, dropout masks \f$\mathbf{z_x}\sim \mathrm{Bernoulli}(1-d_x)\f$,\f$\mathbf{z_h}\sim \mathrm{Bernoulli}(1-d_h)\f$ are sampled at the start of each sequence. + * The dynamics of the cell are then modified to : + * + * \f$ + * \begin{split} + i_t & =\sigma(W_{ix}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ih}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_i)\\ + f_t & = \sigma(W_{fx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{fh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_f)\\ + o_t & = \sigma(W_{ox}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{oh}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_o)\\ + \tilde{c_t} & = \tanh(W_{cx}(\frac 1 {1-d_x}\mathbf{z_x} \circ x_t)+W_{ch}(\frac 1 {1-d_h}\mathbf{z_h} \circ h_{t-1})+b_c)\\ + c_t & = c_{t-1}\circ f_t + \tilde{c_t}\circ i_t\\ + h_t & = \tanh(c_t)\circ o_t\\ + \end{split} + * \f$ + * + * For more detail as to why scaling is applied, see the "Unorthodox" section of the documentation + * \param d Dropout rate \f$d_x\f$ for the input \f$x_t\f$ + */ + void set_dropout(float d, float d_r); + /** + * \brief Set all dropout rates to 0 + * \details This is equivalent to `set_dropout(0)` or `set_dropout(0,0,0)` + * + */ + void disable_dropout(); + /** + * \brief Set dropout masks at the beginning of a sequence for a specific batch size + * \details If this function is not called on batched input, the same mask will be applied across + * all batch elements. Use this to apply different masks to each batch element + * + * \param batch_size Batch size + */ + void set_dropout_masks(unsigned batch_size = 1); + + void set_weightnoise(float std); + ParameterCollection & get_parameter_collection() override; + protected: + void new_graph_impl(ComputationGraph& cg, bool update) override; + void start_new_sequence_impl(const std::vector& h0) override; + Expression add_input_impl(int prev, const Expression& x) override; + Expression set_h_impl(int prev, const std::vector& h_new) override; + Expression set_s_impl(int prev, const std::vector& s_new) override; + + public: + ParameterCollection local_model; + // first index is layer, then ... + std::vector> params; + + // first index is layer, then ... + std::vector> param_vars; + + // first index is layer, then ... + std::vector> masks; + + // first index is time, second is layer + std::vector> h, c; + + // initial values of h and c at each layer + // - both default to zero matrix input + bool has_initial_state; // if this is false, treat h0 and c0 as 0 + std::vector h0; + std::vector c0; + unsigned layers; + unsigned input_dim, hid; + unsigned attention_dim; + float dropout_rate_h; + float weightnoise_std; + vector max_dilations; //one int per layer + + bool dropout_masks_valid; + private: + ComputationGraph* _cg; // Pointer to current cg + + }; +} // namespace dynet + +#endif diff --git a/c++/windows_VisualStudio/readme.txt b/c++/windows_VisualStudio/readme.txt new file mode 100644 index 0000000..de51078 --- /dev/null +++ b/c++/windows_VisualStudio/readme.txt @@ -0,0 +1,5 @@ +This is Visual Studio 15 solution, with 4 projects, one for each .cc file. +Two targets are defined: Debug and RelWitDebug, which is Release with debug info, that I used normally. +You will need to update include and link paths to point to your installation of Dynet. +In x64\RelWithDebug directory you will find two example scripts to run the executables +in conjunction with one program started interactively inside VS. \ No newline at end of file diff --git a/c++/windows_VisualStudio/x64/RelWithDebug/readme.txt b/c++/windows_VisualStudio/x64/RelWithDebug/readme.txt new file mode 100644 index 0000000..6568116 --- /dev/null +++ b/c++/windows_VisualStudio/x64/RelWithDebug/readme.txt @@ -0,0 +1,5 @@ +These example run scripts. They are meant to be run on 6-core computer and assume that the program, +M41.exe has been started interactively in Visual Studio, so they add 5 processes. +run61.cmd should be run for ES_RNN and ES_RNN_PI, so Monthly and Quarterly series, +although for Monthly you probably want to use computer with more cores, unless you are fine waiting a week or so :-) +run61_e.cmd is for ES_RNN_E and ES_RNN_E_PI, so all other cases. \ No newline at end of file diff --git a/c++/windows_VisualStudio/x64/RelWithDebug/run61.cmd b/c++/windows_VisualStudio/x64/RelWithDebug/run61.cmd new file mode 100644 index 0000000..5ff41dd --- /dev/null +++ b/c++/windows_VisualStudio/x64/RelWithDebug/run61.cmd @@ -0,0 +1,5 @@ +start M41 10 2 +start M41 11 1 5 +start M41 11 2 5 +start M41 12 1 10 +start M41 12 2 10 diff --git a/c++/windows_VisualStudio/x64/RelWithDebug/run61_e.cmd b/c++/windows_VisualStudio/x64/RelWithDebug/run61_e.cmd new file mode 100644 index 0000000..a862afa --- /dev/null +++ b/c++/windows_VisualStudio/x64/RelWithDebug/run61_e.cmd @@ -0,0 +1,5 @@ +start M41 5 +start M41 10 +start M41 15 +start M41 20 +start M41 25 diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..0c926cd --- /dev/null +++ b/readme.txt @@ -0,0 +1,9 @@ +ES-RNN programs, related script, and docs. +M4 Forecasting Competition, 2018 +Slawek Smyl, Uber. + +The programs are in C++ and use Dynet - a Dynamic Graph NN system (https://github.com/clab/dynet) + + + + diff --git a/sql/createM72nn_SQLServer.sql b/sql/createM72nn_SQLServer.sql new file mode 100644 index 0000000..e7ad329 --- /dev/null +++ b/sql/createM72nn_SQLServer.sql @@ -0,0 +1,135 @@ +USE [slawek] +GO + +/****** Object: Table [dbo].[M72nn] Script Date: 6/2/2018 9:37:26 AM ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +SET ANSI_PADDING ON +GO + +CREATE TABLE [dbo].[M72nn]( + [run] [varchar](164) NOT NULL, + [LBack] [smallint] NOT NULL, + [iBig] [smallint] NOT NULL, + [series] [varchar](20) NOT NULL, + [epoch] [smallint] NOT NULL, + [actual1] [real] NULL, + [forec1] [real] NULL, + [actual2] [real] NULL, + [forec2] [real] NULL, + [actual3] [real] NULL, + [forec3] [real] NULL, + [actual4] [real] NULL, + [forec4] [real] NULL, + [actual5] [real] NULL, + [forec5] [real] NULL, + [actual6] [real] NULL, + [forec6] [real] NULL, + [actual7] [real] NULL, + [forec7] [real] NULL, + [actual8] [real] NULL, + [forec8] [real] NULL, + [actual9] [real] NULL, + [forec9] [real] NULL, + [actual10] [real] NULL, + [forec10] [real] NULL, + [actual11] [real] NULL, + [forec11] [real] NULL, + [actual12] [real] NULL, + [forec12] [real] NULL, + [actual13] [real] NULL, + [forec13] [real] NULL, + [actual14] [real] NULL, + [forec14] [real] NULL, + [actual15] [real] NULL, + [forec15] [real] NULL, + [actual16] [real] NULL, + [forec16] [real] NULL, + [actual17] [real] NULL, + [forec17] [real] NULL, + [actual18] [real] NULL, + [forec18] [real] NULL, + [actual19] [real] NULL, + [forec19] [real] NULL, + [actual20] [real] NULL, + [forec20] [real] NULL, + [actual21] [real] NULL, + [forec21] [real] NULL, + [actual22] [real] NULL, + [forec22] [real] NULL, + [actual23] [real] NULL, + [forec23] [real] NULL, + [actual24] [real] NULL, + [forec24] [real] NULL, + [actual25] [real] NULL, + [forec25] [real] NULL, + [actual26] [real] NULL, + [forec26] [real] NULL, + [actual27] [real] NULL, + [forec27] [real] NULL, + [actual28] [real] NULL, + [forec28] [real] NULL, + [actual29] [real] NULL, + [forec29] [real] NULL, + [actual30] [real] NULL, + [forec30] [real] NULL, + [actual31] [real] NULL, + [forec31] [real] NULL, + [actual32] [real] NULL, + [forec32] [real] NULL, + [actual33] [real] NULL, + [forec33] [real] NULL, + [actual34] [real] NULL, + [forec34] [real] NULL, + [actual35] [real] NULL, + [forec35] [real] NULL, + [actual36] [real] NULL, + [forec36] [real] NULL, + [actual37] [real] NULL, + [forec37] [real] NULL, + [actual38] [real] NULL, + [forec38] [real] NULL, + [actual39] [real] NULL, + [forec39] [real] NULL, + [actual40] [real] NULL, + [forec40] [real] NULL, + [actual41] [real] NULL, + [forec41] [real] NULL, + [actual42] [real] NULL, + [forec42] [real] NULL, + [actual43] [real] NULL, + [forec43] [real] NULL, + [actual44] [real] NULL, + [forec44] [real] NULL, + [actual45] [real] NULL, + [forec45] [real] NULL, + [actual46] [real] NULL, + [forec46] [real] NULL, + [actual47] [real] NULL, + [forec47] [real] NULL, + [actual48] [real] NULL, + [forec48] [real] NULL, + [trainingError] [real] NULL, + [variable] [varchar](20) NOT NULL, + [n] [smallint] NOT NULL, + [dateTimeOfPrediction] [datetime] NOT NULL, + CONSTRAINT [M72nn_pk] PRIMARY KEY CLUSTERED +( + [run] ASC, + [LBack] ASC, + [iBig] ASC, + [series] ASC, + [epoch] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] + +GO + +SET ANSI_PADDING OFF +GO + + diff --git a/sql/createM72nn_mysql.txt b/sql/createM72nn_mysql.txt new file mode 100644 index 0000000..f86d1c0 --- /dev/null +++ b/sql/createM72nn_mysql.txt @@ -0,0 +1,54 @@ +CREATE TABLE M72nn( + run varchar(160) NOT NULL, + LBack smallint NOT NULL, + iBig smallint NOT NULL, + series varchar(20) NOT NULL, + epoch smallint NOT NULL, + actual1 float NULL, + forec1 float NULL, + actual2 float NULL, + forec2 float NULL, + actual3 float NULL, + forec3 float NULL, + actual4 float NULL, + forec4 float NULL, + actual5 float NULL, + forec5 float NULL, + actual6 float NULL, + forec6 float NULL, + actual7 float NULL, + forec7 float NULL, + actual8 float NULL, + forec8 float NULL, + actual9 float NULL, + forec9 float NULL, + actual10 float NULL, + forec10 float NULL, + actual11 float NULL, + forec11 float NULL, + actual12 float NULL, + forec12 float NULL, + actual13 float NULL, + forec13 float NULL, + actual14 float NULL, + forec14 float NULL, + actual15 float NULL, + forec15 float NULL, + actual16 float NULL, + forec16 float NULL, + actual17 float NULL, + forec17 float NULL, + actual18 float NULL, + forec18 float NULL, + trainingError float NULL, + variable varchar(20) NOT NULL, + n smallint NOT NULL, + dateTimeOfPrediction datetime NOT NULL, + CONSTRAINT M72nn_pk PRIMARY KEY CLUSTERED +( + run ASC, + LBack ASC, + iBig ASC, + series ASC, + epoch ASC)); + diff --git a/sql/readme.txt b/sql/readme.txt new file mode 100644 index 0000000..e8c186c --- /dev/null +++ b/sql/readme.txt @@ -0,0 +1,4 @@ +I provide just two example table creation scrits, one for SQL Server and one for mysql. +The mysql table is limited to output vector 18, so would not be good for hourly runs. +Anyway, starting using the database is a large investment of time, apart from installationm, you also need to create auxiliary tables with MASE, and a lot of queries. +I do not have time to do all of it here and suspect there will be little interest in ODBC, so this is all what you get :-) From 04da3f645d563d58bf2919552b4d8af9afc50cbf Mon Sep 17 00:00:00 2001 From: slawek Date: Sun, 5 May 2019 17:23:21 -0700 Subject: [PATCH 3/3] putting under directory, as in master --- .../ES_RNN_SlawekSmyl.pdf | Bin {R => 118 - slaweks17/R}/merge.R | 0 {R => 118 - slaweks17/R}/merge_PI.R | 0 {R => 118 - slaweks17/R}/readme.txt | 0 {c++ => 118 - slaweks17/c++}/ES_RNN.cc | 0 {c++ => 118 - slaweks17/c++}/ES_RNN_E.cc | 0 {c++ => 118 - slaweks17/c++}/ES_RNN_E_PI.cc | 0 {c++ => 118 - slaweks17/c++}/ES_RNN_PI.cc | 0 .../c++}/linux_example_scripts/build_mkl | 0 .../c++}/linux_example_scripts/readme.txt | 0 .../c++}/linux_example_scripts/run18 | 0 {c++ => 118 - slaweks17/c++}/readme.txt | 0 {c++ => 118 - slaweks17/c++}/slstm.cpp | 0 {c++ => 118 - slaweks17/c++}/slstm.h | 0 .../c++}/windows_VisualStudio/M4.sln | 0 .../c++}/windows_VisualStudio/M41/ES_RNN.cc | 0 .../c++}/windows_VisualStudio/M41/M41.vcxproj | 0 .../c++}/windows_VisualStudio/M41/slstm.cpp | 0 .../c++}/windows_VisualStudio/M41/slstm.h | 0 .../windows_VisualStudio/M42/ES_RNN_PI.cc | 0 .../c++}/windows_VisualStudio/M42/M42.vcxproj | 0 .../M42/M42.vcxproj.filters | 0 .../c++}/windows_VisualStudio/M42/slstm.h | 0 .../c++}/windows_VisualStudio/M43/ES_RNN_E.cc | 0 .../c++}/windows_VisualStudio/M43/M43.filters | 0 .../c++}/windows_VisualStudio/M43/M43.vcxproj | 0 .../c++}/windows_VisualStudio/M43/slstm.h | 0 .../windows_VisualStudio/M44/ES_RNN_E_PI.cc | 0 .../c++}/windows_VisualStudio/M44/M44.filters | 0 .../c++}/windows_VisualStudio/M44/M44.vcxproj | 0 .../c++}/windows_VisualStudio/M44/slstm.h | 0 .../c++}/windows_VisualStudio/readme.txt | 0 .../x64/RelWithDebug/readme.txt | 0 .../x64/RelWithDebug/run61.cmd | 0 .../x64/RelWithDebug/run61_e.cmd | 0 readme.txt => 118 - slaweks17/readme.txt | 0 .../sql}/createM72nn_SQLServer.sql | 0 .../sql}/createM72nn_mysql.txt | 0 {sql => 118 - slaweks17/sql}/readme.txt | 0 4Theta method.R | 209 ----------- Benchmarks and Evaluation.R | 162 --------- ML_benchmarks.py | 341 ------------------ README.md | 2 - 43 files changed, 714 deletions(-) rename ES_RNN_SlawekSmyl.pdf => 118 - slaweks17/ES_RNN_SlawekSmyl.pdf (100%) rename {R => 118 - slaweks17/R}/merge.R (100%) rename {R => 118 - slaweks17/R}/merge_PI.R (100%) rename {R => 118 - slaweks17/R}/readme.txt (100%) rename {c++ => 118 - slaweks17/c++}/ES_RNN.cc (100%) rename {c++ => 118 - slaweks17/c++}/ES_RNN_E.cc (100%) rename {c++ => 118 - slaweks17/c++}/ES_RNN_E_PI.cc (100%) rename {c++ => 118 - slaweks17/c++}/ES_RNN_PI.cc (100%) rename {c++ => 118 - slaweks17/c++}/linux_example_scripts/build_mkl (100%) rename {c++ => 118 - slaweks17/c++}/linux_example_scripts/readme.txt (100%) rename {c++ => 118 - slaweks17/c++}/linux_example_scripts/run18 (100%) rename {c++ => 118 - slaweks17/c++}/readme.txt (100%) rename {c++ => 118 - slaweks17/c++}/slstm.cpp (100%) rename {c++ => 118 - slaweks17/c++}/slstm.h (100%) rename {c++ => 118 - slaweks17/c++}/windows_VisualStudio/M4.sln (100%) rename {c++ => 118 - slaweks17/c++}/windows_VisualStudio/M41/ES_RNN.cc (100%) rename {c++ => 118 - slaweks17/c++}/windows_VisualStudio/M41/M41.vcxproj (100%) rename {c++ => 118 - slaweks17/c++}/windows_VisualStudio/M41/slstm.cpp (100%) rename {c++ => 118 - slaweks17/c++}/windows_VisualStudio/M41/slstm.h (100%) rename {c++ => 118 - slaweks17/c++}/windows_VisualStudio/M42/ES_RNN_PI.cc (100%) rename {c++ => 118 - slaweks17/c++}/windows_VisualStudio/M42/M42.vcxproj (100%) rename {c++ => 118 - slaweks17/c++}/windows_VisualStudio/M42/M42.vcxproj.filters (100%) rename {c++ => 118 - slaweks17/c++}/windows_VisualStudio/M42/slstm.h (100%) rename {c++ => 118 - slaweks17/c++}/windows_VisualStudio/M43/ES_RNN_E.cc (100%) rename {c++ => 118 - slaweks17/c++}/windows_VisualStudio/M43/M43.filters (100%) rename {c++ => 118 - slaweks17/c++}/windows_VisualStudio/M43/M43.vcxproj (100%) rename {c++ => 118 - slaweks17/c++}/windows_VisualStudio/M43/slstm.h (100%) rename {c++ => 118 - slaweks17/c++}/windows_VisualStudio/M44/ES_RNN_E_PI.cc (100%) rename {c++ => 118 - slaweks17/c++}/windows_VisualStudio/M44/M44.filters (100%) rename {c++ => 118 - slaweks17/c++}/windows_VisualStudio/M44/M44.vcxproj (100%) rename {c++ => 118 - slaweks17/c++}/windows_VisualStudio/M44/slstm.h (100%) rename {c++ => 118 - slaweks17/c++}/windows_VisualStudio/readme.txt (100%) rename {c++ => 118 - slaweks17/c++}/windows_VisualStudio/x64/RelWithDebug/readme.txt (100%) rename {c++ => 118 - slaweks17/c++}/windows_VisualStudio/x64/RelWithDebug/run61.cmd (100%) rename {c++ => 118 - slaweks17/c++}/windows_VisualStudio/x64/RelWithDebug/run61_e.cmd (100%) rename readme.txt => 118 - slaweks17/readme.txt (100%) rename {sql => 118 - slaweks17/sql}/createM72nn_SQLServer.sql (100%) rename {sql => 118 - slaweks17/sql}/createM72nn_mysql.txt (100%) rename {sql => 118 - slaweks17/sql}/readme.txt (100%) delete mode 100644 4Theta method.R delete mode 100644 Benchmarks and Evaluation.R delete mode 100644 ML_benchmarks.py delete mode 100644 README.md diff --git a/ES_RNN_SlawekSmyl.pdf b/118 - slaweks17/ES_RNN_SlawekSmyl.pdf similarity index 100% rename from ES_RNN_SlawekSmyl.pdf rename to 118 - slaweks17/ES_RNN_SlawekSmyl.pdf diff --git a/R/merge.R b/118 - slaweks17/R/merge.R similarity index 100% rename from R/merge.R rename to 118 - slaweks17/R/merge.R diff --git a/R/merge_PI.R b/118 - slaweks17/R/merge_PI.R similarity index 100% rename from R/merge_PI.R rename to 118 - slaweks17/R/merge_PI.R diff --git a/R/readme.txt b/118 - slaweks17/R/readme.txt similarity index 100% rename from R/readme.txt rename to 118 - slaweks17/R/readme.txt diff --git a/c++/ES_RNN.cc b/118 - slaweks17/c++/ES_RNN.cc similarity index 100% rename from c++/ES_RNN.cc rename to 118 - slaweks17/c++/ES_RNN.cc diff --git a/c++/ES_RNN_E.cc b/118 - slaweks17/c++/ES_RNN_E.cc similarity index 100% rename from c++/ES_RNN_E.cc rename to 118 - slaweks17/c++/ES_RNN_E.cc diff --git a/c++/ES_RNN_E_PI.cc b/118 - slaweks17/c++/ES_RNN_E_PI.cc similarity index 100% rename from c++/ES_RNN_E_PI.cc rename to 118 - slaweks17/c++/ES_RNN_E_PI.cc diff --git a/c++/ES_RNN_PI.cc b/118 - slaweks17/c++/ES_RNN_PI.cc similarity index 100% rename from c++/ES_RNN_PI.cc rename to 118 - slaweks17/c++/ES_RNN_PI.cc diff --git a/c++/linux_example_scripts/build_mkl b/118 - slaweks17/c++/linux_example_scripts/build_mkl similarity index 100% rename from c++/linux_example_scripts/build_mkl rename to 118 - slaweks17/c++/linux_example_scripts/build_mkl diff --git a/c++/linux_example_scripts/readme.txt b/118 - slaweks17/c++/linux_example_scripts/readme.txt similarity index 100% rename from c++/linux_example_scripts/readme.txt rename to 118 - slaweks17/c++/linux_example_scripts/readme.txt diff --git a/c++/linux_example_scripts/run18 b/118 - slaweks17/c++/linux_example_scripts/run18 similarity index 100% rename from c++/linux_example_scripts/run18 rename to 118 - slaweks17/c++/linux_example_scripts/run18 diff --git a/c++/readme.txt b/118 - slaweks17/c++/readme.txt similarity index 100% rename from c++/readme.txt rename to 118 - slaweks17/c++/readme.txt diff --git a/c++/slstm.cpp b/118 - slaweks17/c++/slstm.cpp similarity index 100% rename from c++/slstm.cpp rename to 118 - slaweks17/c++/slstm.cpp diff --git a/c++/slstm.h b/118 - slaweks17/c++/slstm.h similarity index 100% rename from c++/slstm.h rename to 118 - slaweks17/c++/slstm.h diff --git a/c++/windows_VisualStudio/M4.sln b/118 - slaweks17/c++/windows_VisualStudio/M4.sln similarity index 100% rename from c++/windows_VisualStudio/M4.sln rename to 118 - slaweks17/c++/windows_VisualStudio/M4.sln diff --git a/c++/windows_VisualStudio/M41/ES_RNN.cc b/118 - slaweks17/c++/windows_VisualStudio/M41/ES_RNN.cc similarity index 100% rename from c++/windows_VisualStudio/M41/ES_RNN.cc rename to 118 - slaweks17/c++/windows_VisualStudio/M41/ES_RNN.cc diff --git a/c++/windows_VisualStudio/M41/M41.vcxproj b/118 - slaweks17/c++/windows_VisualStudio/M41/M41.vcxproj similarity index 100% rename from c++/windows_VisualStudio/M41/M41.vcxproj rename to 118 - slaweks17/c++/windows_VisualStudio/M41/M41.vcxproj diff --git a/c++/windows_VisualStudio/M41/slstm.cpp b/118 - slaweks17/c++/windows_VisualStudio/M41/slstm.cpp similarity index 100% rename from c++/windows_VisualStudio/M41/slstm.cpp rename to 118 - slaweks17/c++/windows_VisualStudio/M41/slstm.cpp diff --git a/c++/windows_VisualStudio/M41/slstm.h b/118 - slaweks17/c++/windows_VisualStudio/M41/slstm.h similarity index 100% rename from c++/windows_VisualStudio/M41/slstm.h rename to 118 - slaweks17/c++/windows_VisualStudio/M41/slstm.h diff --git a/c++/windows_VisualStudio/M42/ES_RNN_PI.cc b/118 - slaweks17/c++/windows_VisualStudio/M42/ES_RNN_PI.cc similarity index 100% rename from c++/windows_VisualStudio/M42/ES_RNN_PI.cc rename to 118 - slaweks17/c++/windows_VisualStudio/M42/ES_RNN_PI.cc diff --git a/c++/windows_VisualStudio/M42/M42.vcxproj b/118 - slaweks17/c++/windows_VisualStudio/M42/M42.vcxproj similarity index 100% rename from c++/windows_VisualStudio/M42/M42.vcxproj rename to 118 - slaweks17/c++/windows_VisualStudio/M42/M42.vcxproj diff --git a/c++/windows_VisualStudio/M42/M42.vcxproj.filters b/118 - slaweks17/c++/windows_VisualStudio/M42/M42.vcxproj.filters similarity index 100% rename from c++/windows_VisualStudio/M42/M42.vcxproj.filters rename to 118 - slaweks17/c++/windows_VisualStudio/M42/M42.vcxproj.filters diff --git a/c++/windows_VisualStudio/M42/slstm.h b/118 - slaweks17/c++/windows_VisualStudio/M42/slstm.h similarity index 100% rename from c++/windows_VisualStudio/M42/slstm.h rename to 118 - slaweks17/c++/windows_VisualStudio/M42/slstm.h diff --git a/c++/windows_VisualStudio/M43/ES_RNN_E.cc b/118 - slaweks17/c++/windows_VisualStudio/M43/ES_RNN_E.cc similarity index 100% rename from c++/windows_VisualStudio/M43/ES_RNN_E.cc rename to 118 - slaweks17/c++/windows_VisualStudio/M43/ES_RNN_E.cc diff --git a/c++/windows_VisualStudio/M43/M43.filters b/118 - slaweks17/c++/windows_VisualStudio/M43/M43.filters similarity index 100% rename from c++/windows_VisualStudio/M43/M43.filters rename to 118 - slaweks17/c++/windows_VisualStudio/M43/M43.filters diff --git a/c++/windows_VisualStudio/M43/M43.vcxproj b/118 - slaweks17/c++/windows_VisualStudio/M43/M43.vcxproj similarity index 100% rename from c++/windows_VisualStudio/M43/M43.vcxproj rename to 118 - slaweks17/c++/windows_VisualStudio/M43/M43.vcxproj diff --git a/c++/windows_VisualStudio/M43/slstm.h b/118 - slaweks17/c++/windows_VisualStudio/M43/slstm.h similarity index 100% rename from c++/windows_VisualStudio/M43/slstm.h rename to 118 - slaweks17/c++/windows_VisualStudio/M43/slstm.h diff --git a/c++/windows_VisualStudio/M44/ES_RNN_E_PI.cc b/118 - slaweks17/c++/windows_VisualStudio/M44/ES_RNN_E_PI.cc similarity index 100% rename from c++/windows_VisualStudio/M44/ES_RNN_E_PI.cc rename to 118 - slaweks17/c++/windows_VisualStudio/M44/ES_RNN_E_PI.cc diff --git a/c++/windows_VisualStudio/M44/M44.filters b/118 - slaweks17/c++/windows_VisualStudio/M44/M44.filters similarity index 100% rename from c++/windows_VisualStudio/M44/M44.filters rename to 118 - slaweks17/c++/windows_VisualStudio/M44/M44.filters diff --git a/c++/windows_VisualStudio/M44/M44.vcxproj b/118 - slaweks17/c++/windows_VisualStudio/M44/M44.vcxproj similarity index 100% rename from c++/windows_VisualStudio/M44/M44.vcxproj rename to 118 - slaweks17/c++/windows_VisualStudio/M44/M44.vcxproj diff --git a/c++/windows_VisualStudio/M44/slstm.h b/118 - slaweks17/c++/windows_VisualStudio/M44/slstm.h similarity index 100% rename from c++/windows_VisualStudio/M44/slstm.h rename to 118 - slaweks17/c++/windows_VisualStudio/M44/slstm.h diff --git a/c++/windows_VisualStudio/readme.txt b/118 - slaweks17/c++/windows_VisualStudio/readme.txt similarity index 100% rename from c++/windows_VisualStudio/readme.txt rename to 118 - slaweks17/c++/windows_VisualStudio/readme.txt diff --git a/c++/windows_VisualStudio/x64/RelWithDebug/readme.txt b/118 - slaweks17/c++/windows_VisualStudio/x64/RelWithDebug/readme.txt similarity index 100% rename from c++/windows_VisualStudio/x64/RelWithDebug/readme.txt rename to 118 - slaweks17/c++/windows_VisualStudio/x64/RelWithDebug/readme.txt diff --git a/c++/windows_VisualStudio/x64/RelWithDebug/run61.cmd b/118 - slaweks17/c++/windows_VisualStudio/x64/RelWithDebug/run61.cmd similarity index 100% rename from c++/windows_VisualStudio/x64/RelWithDebug/run61.cmd rename to 118 - slaweks17/c++/windows_VisualStudio/x64/RelWithDebug/run61.cmd diff --git a/c++/windows_VisualStudio/x64/RelWithDebug/run61_e.cmd b/118 - slaweks17/c++/windows_VisualStudio/x64/RelWithDebug/run61_e.cmd similarity index 100% rename from c++/windows_VisualStudio/x64/RelWithDebug/run61_e.cmd rename to 118 - slaweks17/c++/windows_VisualStudio/x64/RelWithDebug/run61_e.cmd diff --git a/readme.txt b/118 - slaweks17/readme.txt similarity index 100% rename from readme.txt rename to 118 - slaweks17/readme.txt diff --git a/sql/createM72nn_SQLServer.sql b/118 - slaweks17/sql/createM72nn_SQLServer.sql similarity index 100% rename from sql/createM72nn_SQLServer.sql rename to 118 - slaweks17/sql/createM72nn_SQLServer.sql diff --git a/sql/createM72nn_mysql.txt b/118 - slaweks17/sql/createM72nn_mysql.txt similarity index 100% rename from sql/createM72nn_mysql.txt rename to 118 - slaweks17/sql/createM72nn_mysql.txt diff --git a/sql/readme.txt b/118 - slaweks17/sql/readme.txt similarity index 100% rename from sql/readme.txt rename to 118 - slaweks17/sql/readme.txt diff --git a/4Theta method.R b/4Theta method.R deleted file mode 100644 index e5a8294..0000000 --- a/4Theta method.R +++ /dev/null @@ -1,209 +0,0 @@ -#This code can be used to reproduce the forecasts submitted to the M4 competition for the 4Theta method - -#Authors: E. Spiliotis and V. Assimakopoulos (2017) / Forecasting & Strategy Unit - NTUA - -#Method Description: Generalizing the Theta model for automatic forecasting -#Method Type: Statistical - Decomposition - -library(forecast) #requires version 8.2 - -SeasonalityTest <- function(input, ppy){ - #Used for determining whether the time series is seasonal - tcrit <- 1.645 - if (length(input)<3*ppy){ - test_seasonal <- FALSE - }else{ - xacf <- acf(input, plot = FALSE)$acf[-1, 1, 1] - clim <- tcrit/sqrt(length(input)) * sqrt(cumsum(c(1, 2 * xacf^2))) - test_seasonal <- ( abs(xacf[ppy]) > clim[ppy] ) - - if (is.na(test_seasonal)==TRUE){ test_seasonal <- FALSE } - } - - return(test_seasonal) -} - -Theta.fit <- function(input, fh, theta, curve, model, seasonality , plot=FALSE){ - #Used to fit a Theta model - - #Check if the inputs are valid - if (theta<0){ theta <- 2 } - if (fh<1){ fh <- 1 } - #Estimate theta line weights - outtest <- naive(input, h=fh)$mean - if (theta==0){ - wses <- 0 - }else{ - wses <- (1/theta) - } - wlrl <- (1-wses) - #Estimate seasonaly adjusted time series - ppy <- frequency(input) - if (seasonality=="N"){ - des_input <- input ; SIout <- rep(1, fh) ; SIin <- rep(1, length(input)) - }else if (seasonality=="A"){ - Dec <- decompose(input, type="additive") - des_input <- input-Dec$seasonal - SIin <- Dec$seasonal - SIout <- head(rep(Dec$seasonal[(length(Dec$seasonal)-ppy+1):length(Dec$seasonal)], fh), fh) - }else{ - Dec <- decompose(input, type="multiplicative") - des_input <- input/Dec$seasonal - SIin <- Dec$seasonal - SIout <- head(rep(Dec$seasonal[(length(Dec$seasonal)-ppy+1):length(Dec$seasonal)], fh), fh) - } - - #If negative values, force to linear model - if (min(des_input)<=0){ curve <- "Lrl" ; model <- "A" } - #Estimate theta line zero - observations <- length(des_input) - xs <- c(1:observations) - xf = xff <- c((observations+1):(observations+fh)) - dat=data.frame(des_input=des_input, xs=xs) - newdf <- data.frame(xs = xff) - - if (curve=="Exp"){ - estimate <- lm(log(des_input)~xs) - thetaline0In <- exp(predict(estimate))+input-input - thetaline0Out <- exp(predict(estimate, newdf))+outtest-outtest - }else{ - estimate <- lm(des_input ~ poly(xs, 1, raw=TRUE)) - thetaline0In <- predict(estimate)+des_input-des_input - thetaline0Out <- predict(estimate, newdf)+outtest-outtest - } - - #Estimete Theta line (theta) - if (model=="A"){ - thetalineT <- theta*des_input+(1-theta)*thetaline0In - }else if ((model=="M")&(all(thetaline0In>0)==T)&(all(thetaline0Out>0)==T)){ - thetalineT <- (des_input^theta)*(thetaline0In^(1-theta)) - }else{ - model<-"A" - thetalineT <- theta*des_input+(1-theta)*thetaline0In - } - - #forecasting TL2 - sesmodel <- ses(thetalineT, h=fh) - thetaline2In <- sesmodel$fitted - thetaline2Out <- sesmodel$mean - - #Theta forecasts - if (model=="A"){ - forecastsIn <- as.numeric(thetaline2In*wses)+as.numeric(thetaline0In*wlrl)+des_input-des_input - forecastsOut <- as.numeric(thetaline2Out*wses)+as.numeric(thetaline0Out*wlrl)+outtest-outtest - }else if ((model=="M")& - (all(thetaline2In>0)==T)&(all(thetaline2Out>0)==T)& - (all(thetaline0In>0)==T)&(all(thetaline0Out>0)==T)){ - forecastsIn <- ((as.numeric(thetaline2In)^(1/theta))*(as.numeric(thetaline0In)^(1-(1/theta))))+des_input-des_input - forecastsOut <- ((as.numeric(thetaline2Out)^(1/theta))*(as.numeric(thetaline0Out)^(1-(1/theta))))+outtest-outtest - }else{ - model<-"A" - thetalineT <- theta*des_input+(1-theta)*thetaline0In - sesmodel <- ses(thetalineT,h=fh) - thetaline2In <- sesmodel$fitted - thetaline2Out <- sesmodel$mean - forecastsIn <- as.numeric(thetaline2In*wses)+as.numeric(thetaline0In*wlrl)+des_input-des_input - forecastsOut <- as.numeric(thetaline2Out*wses)+as.numeric(thetaline0Out*wlrl)+outtest-outtest - } - - #Seasonal adjustments - if (seasonality=="A"){ - forecastsIn <- forecastsIn+SIin - forecastsOut <- forecastsOut+SIout - }else{ - forecastsIn <- forecastsIn*SIin - forecastsOut <- forecastsOut*SIout - } - - #Zero forecasts become positive - for (i in 1:length(forecastsOut)){ - if (forecastsOut[i]<0){ forecastsOut[i] <- 0 } - } - - if (plot==TRUE){ - united <- cbind(input,forecastsOut) - for (ik in 1:(observations+fh)){ united[ik,1] = sum(united[ik,2],united[ik,1], na.rm = TRUE) } - plot(united[,1],col="black",type="l",main=paste("Model:",model,",Curve:",curve,",Theta:",theta),xlab="Time",ylab="Values", - ylim=c(min(united[,1])*0.85,max(united[,1])*1.15)) - lines(forecastsIn, col="green") ; lines(forecastsOut, col="green") - lines(thetaline2In, col="blue") ; lines(thetaline2Out, col="blue") - lines(thetaline0In, col="red") ; lines(thetaline0Out, col="red") - } - - output=list(fitted=forecastsIn,mean=forecastsOut, - fitted0=thetaline0In,mean0=thetaline0Out, - fitted2=thetaline2In,mean2=thetaline2Out, - model=paste(seasonality,model,curve,c(round(theta,2)))) - - return(output) -} - -FourTheta<- function(input, fh){ - #Used to automatically select the best Theta model - - #Scale - base <- mean(input) ; input <- input/base - - molist <- c("M","A") ; trlist <- c("Lrl","Exp") - - #Check seasonality & Create list of models - ppy <- frequency(input) ; ST <- F - if (ppy>1){ ST <- SeasonalityTest(input, ppy) } - if (ST==T){ - - selist <- c("M","A") - listnames <- c() - for (i in 1:length(selist)){ - for (ii in 1:length(molist)){ - for (iii in 1:length(trlist)){ - listnames <- c(listnames,paste(selist[i], molist[ii], trlist[iii])) - } - } - } - - }else{ - - listnames <- c() - for (ii in 1:length(molist)){ - for (iii in 1:length(trlist)){ - listnames <- c(listnames, paste("N", molist[ii], trlist[iii])) - } - } - - } - - modellist <- NULL - for (i in 1:length(listnames)){ - modellist[length(modellist)+1] <- list(c(substr(listnames,1,1)[i], substr(listnames,3,3)[i], - substr(listnames,5,7)[i])) - } - - #Start validation - errorsin <- c() ; models <- NULL - - #With this function determine opt theta per case - optfun <- function(x, input, fh, curve, model, seasonality){ - mean(abs(Theta.fit(input=input, fh, theta=x, curve, model, seasonality , plot=FALSE)$fitted-input)) - } - - for (j in 1:length(listnames)){ - optTheta <- optimize(optfun, c(1:3), - input=input, fh=fh, curve=modellist[[j]][3], model=modellist[[j]][2], - seasonality=modellist[[j]][1])$minimum - - fortheta <- Theta.fit(input=input, fh=fh, theta=optTheta, curve=modellist[[j]][3], model=modellist[[j]][2], - seasonality=modellist[[j]][1], plot=F) - models[length(models)+1] <- list(fortheta) - errorsin <- c(errorsin, mean(abs(input-fortheta$fitted))) - } - - #Select model and export - selected.model <- models[[which.min(errorsin)]] - description <- selected.model$model - output <- list(fitted=selected.model$fitted*base,mean=selected.model$mean*base, - description=description) - #Returns the fitted and forecasted values, as well as the model used (Type of seasonality, Type of Model, Type of Trend, Theta coef.) - - return(output) - -} diff --git a/Benchmarks and Evaluation.R b/Benchmarks and Evaluation.R deleted file mode 100644 index 07469ad..0000000 --- a/Benchmarks and Evaluation.R +++ /dev/null @@ -1,162 +0,0 @@ -#This code can be used to reproduce the forecasts of the M4 Competition STATISTICAL Benchmarks and evaluate their accuracy - -library(forecast) #Requires v8.2 - -################################################################################# -#In this example let us produce forecasts for 100 randomly generated timeseries -fh <- 6 #The forecasting horizon examined -frq <- 1 #The frequency of the data -data_train = data_test <- NULL #Train and test sample -for (i in 1:100){ - data_all <- 2+ 0.15*(1:20) + rnorm(20) - data_train[length(data_train)+1] <- list(ts(head(data_all,length(data_all)-fh),frequency = frq)) - data_test[length(data_test)+1] <- list(tail(data_all,fh)) -} -################################################################################# - -smape_cal <- function(outsample, forecasts){ - #Used to estimate sMAPE - outsample <- as.numeric(outsample) ; forecasts<-as.numeric(forecasts) - smape <- (abs(outsample-forecasts)*200)/(abs(outsample)+abs(forecasts)) - return(smape) -} - -mase_cal <- function(insample, outsample, forecasts){ - #Used to estimate MASE - frq <- frequency(insample) - forecastsNaiveSD <- rep(NA,frq) - for (j in (frq+1):length(insample)){ - forecastsNaiveSD <- c(forecastsNaiveSD, insample[j-frq]) - } - masep<-mean(abs(insample-forecastsNaiveSD),na.rm = TRUE) - - outsample <- as.numeric(outsample) ; forecasts <- as.numeric(forecasts) - mase <- (abs(outsample-forecasts))/masep - return(mase) -} - -naive_seasonal <- function(input, fh){ - #Used to estimate Seasonal Naive - frcy <- frequency(input) - frcst <- naive(input, h=fh)$mean - if (frcy>1){ - frcst <- head(rep(as.numeric(tail(input,frcy)), fh), fh) + frcst - frcst - } - return(frcst) -} - -Theta.classic <- function(input, fh){ - #Used to estimate Theta classic - - #Set parameters - wses <- wlrl<-0.5 ; theta <- 2 - #Estimate theta line (0) - observations <- length(input) - xt <- c(1:observations) - xf <- c((observations+1):(observations+fh)) - train <- data.frame(input=input, xt=xt) - test <- data.frame(xt = xf) - - estimate <- lm(input ~ poly(xt, 1, raw=TRUE)) - thetaline0In <- as.numeric(predict(estimate)) - thetaline0Out <- as.numeric(predict(estimate,test)) - - #Estimate theta line (2) - thetalineT <- theta*input+(1-theta)*thetaline0In - sesmodel <- ses(thetalineT, h=fh) - thetaline2In <- sesmodel$fitted - thetaline2Out <- sesmodel$mean - - #Theta forecasts - forecastsIn <- (thetaline2In*wses)+(thetaline0In*wlrl) - forecastsOut <- (thetaline2Out*wses)+(thetaline0Out*wlrl) - - #Zero forecasts become positive - for (i in 1:length(forecastsOut)){ - if (forecastsOut[i]<0){ forecastsOut[i]<-0 } - } - - output=list(fitted = forecastsIn, mean = forecastsOut, - fitted0 = thetaline0In, mean0 = thetaline0Out, - fitted2 = thetaline2In, mean2 = thetaline2Out) - - return(output) -} - -SeasonalityTest <- function(input, ppy){ - #Used to determine whether a time series is seasonal - tcrit <- 1.645 - if (length(input)<3*ppy){ - test_seasonal <- FALSE - }else{ - xacf <- acf(input, plot = FALSE)$acf[-1, 1, 1] - clim <- tcrit/sqrt(length(input)) * sqrt(cumsum(c(1, 2 * xacf^2))) - test_seasonal <- ( abs(xacf[ppy]) > clim[ppy] ) - - if (is.na(test_seasonal)==TRUE){ test_seasonal <- FALSE } - } - - return(test_seasonal) -} - -Benchmarks <- function(input, fh){ - #Used to estimate the statistical benchmarks of the M4 competition - - #Estimate seasonaly adjusted time series - ppy <- frequency(input) ; ST <- F - if (ppy>1){ ST <- SeasonalityTest(input,ppy) } - if (ST==T){ - Dec <- decompose(input,type="multiplicative") - des_input <- input/Dec$seasonal - SIout <- head(rep(Dec$seasonal[(length(Dec$seasonal)-ppy+1):length(Dec$seasonal)], fh), fh) - }else{ - des_input <- input ; SIout <- rep(1, fh) - } - - f1 <- naive(input, h=fh)$mean #Naive - f2 <- naive_seasonal(input, fh=fh) #Seasonal Naive - f3 <- naive(des_input, h=fh)$mean*SIout #Naive2 - f4 <- ses(des_input, h=fh)$mean*SIout #Ses - f5 <- holt(des_input, h=fh, damped=F)$mean*SIout #Holt - f6 <- holt(des_input, h=fh, damped=T)$mean*SIout #Damped - f7 <- Theta.classic(input=des_input, fh=fh)$mean*SIout #Theta - f8 <- (f4+f5+f6)/3 #Comb - - return(list(f1,f2,f3,f4,f5,f6,f7,f8)) -} - -Names_benchmarks <- c("Naive", "sNaive", "Naive2", "SES", "Holt", "Damped", "Theta", "Com") -Total_smape=Total_mase <- array(NA,dim = c(length(Names_benchmarks), fh, length(data_train))) -#Methods, Horizon, time-series -for (i in 1:length(data_train)){ - - insample <- data_train[[i]] - outsample <- data_test[[i]] - forecasts <- Benchmarks(input=insample, fh=fh) - - #sMAPE - for (j in 1:length(Names_benchmarks)){ - Total_smape[j,,i] <- smape_cal(outsample, forecasts[[j]]) #j the # of the benchmark - } - #MASE - for (j in 1:length(Names_benchmarks)){ - Total_mase[j,,i] <- mase_cal(insample, outsample, forecasts[[j]]) #j the # of the benchmark - } - -} - -print("########### sMAPE ###############") -for (i in 1:length(Names_benchmarks)){ - print(paste(Names_benchmarks[i], round(mean(Total_smape[i,,]), 3))) -} -print("########### MASE ################") -for (i in 1:length(Names_benchmarks)){ - print(paste(Names_benchmarks[i], round(mean(Total_mase[i,,]), 3))) -} -print("########### OWA ################") -for (i in 1:length(Names_benchmarks)){ - print(paste(Names_benchmarks[i], - round(((mean(Total_mase[i,,])/mean(Total_mase[3,,]))+(mean(Total_smape[i,,])/mean(Total_smape[3,,])))/2, 3))) -} - - diff --git a/ML_benchmarks.py b/ML_benchmarks.py deleted file mode 100644 index 0bc61aa..0000000 --- a/ML_benchmarks.py +++ /dev/null @@ -1,341 +0,0 @@ -# This code can be used to reproduce the forecasts of M4 Competition NN benchmarks and evaluate their accuracy - -from numpy.random import seed -seed(42) -from tensorflow import set_random_seed -set_random_seed(42) -from sklearn.neural_network import MLPRegressor -from keras.models import Sequential -from keras.layers import Dense, SimpleRNN -from keras.optimizers import rmsprop -from keras import backend as ker -from math import sqrt -import numpy as np -import tensorflow as tf -import pandas as pd -import gc - - -def detrend(insample_data): - """ - Calculates a & b parameters of LRL - - :param insample_data: - :return: - """ - x = np.arange(len(insample_data)) - a, b = np.polyfit(x, insample_data, 1) - return a, b - - -def deseasonalize(original_ts, ppy): - """ - Calculates and returns seasonal indices - - :param original_ts: original data - :param ppy: periods per year - :return: - """ - """ - # === get in-sample data - original_ts = original_ts[:-out_of_sample] - """ - if seasonality_test(original_ts, ppy): - # print("seasonal") - # ==== get moving averages - ma_ts = moving_averages(original_ts, ppy) - - # ==== get seasonality indices - le_ts = original_ts * 100 / ma_ts - le_ts = np.hstack((le_ts, np.full((ppy - (len(le_ts) % ppy)), np.nan))) - le_ts = np.reshape(le_ts, (-1, ppy)) - si = np.nanmean(le_ts, 0) - norm = np.sum(si) / (ppy * 100) - si = si / norm - else: - # print("NOT seasonal") - si = np.full(ppy, 100) - - return si - - -def moving_averages(ts_init, window): - """ - Calculates the moving averages for a given TS - - :param ts_init: the original time series - :param window: window length - :return: moving averages ts - """ - if len(ts_init) % 2 == 0: - ts_ma = pd.rolling_mean(ts_init, window, center=True) - ts_ma = pd.rolling_mean(ts_ma, 2, center=True) - ts_ma = np.roll(ts_ma, -1) - else: - ts_ma = pd.rolling_mean(ts_init, window, center=True) - - return ts_ma - - -def seasonality_test(original_ts, ppy): - """ - Seasonality test - - :param original_ts: time series - :param ppy: periods per year - :return: boolean value: whether the TS is seasonal - """ - s = acf(original_ts, 1) - for i in range(2, ppy): - s = s + (acf(original_ts, i) ** 2) - - limit = 1.645 * (sqrt((1 + 2 * s) / len(original_ts))) - - return (abs(acf(original_ts, ppy))) > limit - - -def acf(data, k): - """ - Autocorrelation function - - :param data: time series - :param k: lag - :return: - """ - m = np.mean(data) - s1 = 0 - for i in range(k, len(data)): - s1 = s1 + ((data[i] - m) * (data[i - k] - m)) - - s2 = 0 - for i in range(0, len(data)): - s2 = s2 + ((data[i] - m) ** 2) - - return float(s1 / s2) - - -def split_into_train_test(data, in_num, fh): - """ - Splits the series into train and test sets. Each step takes multiple points as inputs - - :param data: an individual TS - :param fh: number of out of sample points - :param in_num: number of input points for the forecast - :return: - """ - train, test = data[:-fh], data[-(fh + in_num):] - x_train, y_train = train[:-1], np.roll(train, -in_num)[:-in_num] - x_test, y_test = train[-in_num:], np.roll(test, -in_num)[:-in_num] - - # reshape input to be [samples, time steps, features] (N-NF samples, 1 time step, 1 feature) - x_train = np.reshape(x_train, (-1, 1)) - x_test = np.reshape(x_test, (-1, 1)) - temp_test = np.roll(x_test, -1) - temp_train = np.roll(x_train, -1) - for x in range(1, in_num): - x_train = np.concatenate((x_train[:-1], temp_train[:-1]), 1) - x_test = np.concatenate((x_test[:-1], temp_test[:-1]), 1) - temp_test = np.roll(temp_test, -1)[:-1] - temp_train = np.roll(temp_train, -1)[:-1] - - return x_train, y_train, x_test, y_test - - -def rnn_bench(x_train, y_train, x_test, fh, input_size): - """ - Forecasts using 6 SimpleRNN nodes in the hidden layer and a Dense output layer - - :param x_train: train data - :param y_train: target values for training - :param x_test: test data - :param fh: forecasting horizon - :param input_size: number of points used as input - :return: - """ - # reshape to match expected input - x_train = np.reshape(x_train, (-1, input_size, 1)) - x_test = np.reshape(x_test, (-1, input_size, 1)) - - # create the model - model = Sequential([ - SimpleRNN(6, input_shape=(input_size, 1), activation='linear', - use_bias=False, kernel_initializer='glorot_uniform', - recurrent_initializer='orthogonal', bias_initializer='zeros', - dropout=0.0, recurrent_dropout=0.0), - Dense(1, use_bias=True, activation='linear') - ]) - opt = rmsprop(lr=0.001) - model.compile(loss='mean_squared_error', optimizer=opt) - - # fit the model to the training data - model.fit(x_train, y_train, epochs=100, batch_size=1, verbose=0) - - # make predictions - y_hat_test = [] - last_prediction = model.predict(x_test)[0] - for i in range(0, fh): - y_hat_test.append(last_prediction) - x_test[0] = np.roll(x_test[0], -1) - x_test[0, (len(x_test[0]) - 1)] = last_prediction - last_prediction = model.predict(x_test)[0] - - return np.asarray(y_hat_test) - - -def mlp_bench(x_train, y_train, x_test, fh): - """ - Forecasts using a simple MLP which 6 nodes in the hidden layer - - :param x_train: train input data - :param y_train: target values for training - :param x_test: test data - :param fh: forecasting horizon - :return: - """ - y_hat_test = [] - - model = MLPRegressor(hidden_layer_sizes=6, activation='identity', solver='adam', - max_iter=100, learning_rate='adaptive', learning_rate_init=0.001, - random_state=42) - model.fit(x_train, y_train) - - last_prediction = model.predict(x_test)[0] - for i in range(0, fh): - y_hat_test.append(last_prediction) - x_test[0] = np.roll(x_test[0], -1) - x_test[0, (len(x_test[0]) - 1)] = last_prediction - last_prediction = model.predict(x_test)[0] - - return np.asarray(y_hat_test) - - -def smape(a, b): - """ - Calculates sMAPE - - :param a: actual values - :param b: predicted values - :return: sMAPE - """ - a = np.reshape(a, (-1,)) - b = np.reshape(b, (-1,)) - return np.mean(2.0 * np.abs(a - b) / (np.abs(a) + np.abs(b))).item() - - -def mase(insample, y_test, y_hat_test, freq): - """ - Calculates MAsE - - :param insample: insample data - :param y_test: out of sample target values - :param y_hat_test: predicted values - :param freq: data frequency - :return: - """ - y_hat_naive = [] - for i in range(freq, len(insample)): - y_hat_naive.append(insample[(i - freq)]) - - masep = np.mean(abs(insample[freq:] - y_hat_naive)) - - return np.mean(abs(y_test - y_hat_test)) / masep - - -def main(): - fh = 6 # forecasting horizon - freq = 1 # data frequency - in_size = 3 # number of points used as input for each forecast - - err_MLP_sMAPE = [] - err_MLP_MASE = [] - err_RNN_sMAPE = [] - err_RNN_MASE = [] - - # ===== In this example we produce forecasts for 100 randomly generated timeseries ===== - data_all = np.array(np.random.random_integers(0, 100, (100, 20)), dtype=np.float32) - for i in range(0, 100): - for j in range(0, 20): - data_all[i, j] = j * 10 + data_all[i, j] - - counter = 0 - # ===== Main loop which goes through all timeseries ===== - for j in range(len(data_all)): - ts = data_all[j, :] - - # remove seasonality - seasonality_in = deseasonalize(ts, freq) - - for i in range(0, len(ts)): - ts[i] = ts[i] * 100 / seasonality_in[i % freq] - - # detrending - a, b = detrend(ts) - - for i in range(0, len(ts)): - ts[i] = ts[i] - ((a * i) + b) - - x_train, y_train, x_test, y_test = split_into_train_test(ts, in_size, fh) - - # RNN benchmark - Produce forecasts - y_hat_test_RNN = np.reshape(rnn_bench(x_train, y_train, x_test, fh, in_size), (-1)) - - # MLP benchmark - Produce forecasts - y_hat_test_MLP = mlp_bench(x_train, y_train, x_test, fh) - for i in range(0, 29): - y_hat_test_MLP = np.vstack((y_hat_test_MLP, mlp_bench(x_train, y_train, x_test, fh))) - y_hat_test_MLP = np.median(y_hat_test_MLP, axis=0) - - # add trend - for i in range(0, len(ts)): - ts[i] = ts[i] + ((a * i) + b) - - for i in range(0, fh): - y_hat_test_MLP[i] = y_hat_test_MLP[i] + ((a * (len(ts) + i + 1)) + b) - y_hat_test_RNN[i] = y_hat_test_RNN[i] + ((a * (len(ts) + i + 1)) + b) - - # add seasonality - for i in range(0, len(ts)): - ts[i] = ts[i] * seasonality_in[i % freq] / 100 - - for i in range(len(ts), len(ts) + fh): - y_hat_test_MLP[i - len(ts)] = y_hat_test_MLP[i - len(ts)] * seasonality_in[i % freq] / 100 - y_hat_test_RNN[i - len(ts)] = y_hat_test_RNN[i - len(ts)] * seasonality_in[i % freq] / 100 - - # check if negative or extreme - for i in range(len(y_hat_test_MLP)): - if y_hat_test_MLP[i] < 0: - y_hat_test_MLP[i] = 0 - if y_hat_test_RNN[i] < 0: - y_hat_test_RNN[i] = 0 - - if y_hat_test_MLP[i] > (1000 * max(ts)): - y_hat_test_MLP[i] = max(ts) - if y_hat_test_RNN[i] > (1000 * max(ts)): - y_hat_test_RNN[i] = max(ts) - - x_train, y_train, x_test, y_test = split_into_train_test(ts, in_size, fh) - - # Calculate errors - err_MLP_sMAPE.append(smape(y_test, y_hat_test_MLP)) - err_RNN_sMAPE.append(smape(y_test, y_hat_test_RNN)) - err_MLP_MASE.append(mase(ts[:-fh], y_test, y_hat_test_MLP, freq)) - err_RNN_MASE.append(mase(ts[:-fh], y_test, y_hat_test_RNN, freq)) - - # memory handling - ker.clear_session() - tf.reset_default_graph() - gc.collect() - - counter = counter + 1 - print("-------------TS ID: ", counter, "-------------") - - print("\n\n---------FINAL RESULTS---------") - print("=============sMAPE=============\n") - print("#### MLP ####\n", np.mean(err_MLP_sMAPE), "\n") - print("#### RNN ####\n", np.mean(err_RNN_sMAPE), "\n") - print("==============MASE=============") - print("#### MLP ####\n", np.mean(err_MLP_MASE), "\n") - print("#### RNN ####\n", np.mean(err_RNN_MASE), "\n") - - -main() diff --git a/README.md b/README.md deleted file mode 100644 index 9b7ceb1..0000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# M4-methods -Includes the source code to reproduce the forecasts of the methods which participated in the M4 Competition

    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 literal 0 HcmV?d00001 From a007877c9bed5a829dafe46059d5abb64f468ea3 Mon Sep 17 00:00:00 2001 From: slawek Date: Sun, 5 May 2019 12:52:44 -0700 Subject: [PATCH 2/3] unzipping, 2 small bug fixes in c++, bugs that bite occasionally --- ES_RNN.zip | Bin 488443 -> 0 bytes R/merge.R | 143 ++ R/merge_PI.R | 210 ++ R/readme.txt | 8 + c++/ES_RNN.cc | 1193 +++++++++++ c++/ES_RNN_E.cc | 1665 ++++++++++++++++ c++/ES_RNN_E_PI.cc | 1744 +++++++++++++++++ c++/ES_RNN_PI.cc | 1246 ++++++++++++ c++/linux_example_scripts/build_mkl | 3 + c++/linux_example_scripts/readme.txt | 13 + c++/linux_example_scripts/run18 | 20 + c++/readme.txt | 8 + c++/slstm.cpp | 729 +++++++ c++/slstm.h | 394 ++++ c++/windows_VisualStudio/M4.sln | 58 + c++/windows_VisualStudio/M41/ES_RNN.cc | 1193 +++++++++++ c++/windows_VisualStudio/M41/M41.vcxproj | 227 +++ c++/windows_VisualStudio/M41/slstm.cpp | 729 +++++++ c++/windows_VisualStudio/M41/slstm.h | 394 ++++ c++/windows_VisualStudio/M42/ES_RNN_PI.cc | 1246 ++++++++++++ c++/windows_VisualStudio/M42/M42.vcxproj | 227 +++ .../M42/M42.vcxproj.filters | 30 + c++/windows_VisualStudio/M42/slstm.h | 394 ++++ c++/windows_VisualStudio/M43/ES_RNN_E.cc | 1665 ++++++++++++++++ c++/windows_VisualStudio/M43/M43.filters | 25 + c++/windows_VisualStudio/M43/M43.vcxproj | 227 +++ c++/windows_VisualStudio/M43/slstm.h | 394 ++++ c++/windows_VisualStudio/M44/ES_RNN_E_PI.cc | 1744 +++++++++++++++++ c++/windows_VisualStudio/M44/M44.filters | 25 + c++/windows_VisualStudio/M44/M44.vcxproj | 227 +++ c++/windows_VisualStudio/M44/slstm.h | 394 ++++ c++/windows_VisualStudio/readme.txt | 5 + .../x64/RelWithDebug/readme.txt | 5 + .../x64/RelWithDebug/run61.cmd | 5 + .../x64/RelWithDebug/run61_e.cmd | 5 + readme.txt | 9 + sql/createM72nn_SQLServer.sql | 135 ++ sql/createM72nn_mysql.txt | 54 + sql/readme.txt | 4 + 39 files changed, 16797 insertions(+) delete mode 100644 ES_RNN.zip create mode 100644 R/merge.R create mode 100644 R/merge_PI.R create mode 100644 R/readme.txt create mode 100644 c++/ES_RNN.cc create mode 100644 c++/ES_RNN_E.cc create mode 100644 c++/ES_RNN_E_PI.cc create mode 100644 c++/ES_RNN_PI.cc create mode 100644 c++/linux_example_scripts/build_mkl create mode 100644 c++/linux_example_scripts/readme.txt create mode 100644 c++/linux_example_scripts/run18 create mode 100644 c++/readme.txt create mode 100644 c++/slstm.cpp create mode 100644 c++/slstm.h create mode 100644 c++/windows_VisualStudio/M4.sln create mode 100644 c++/windows_VisualStudio/M41/ES_RNN.cc create mode 100644 c++/windows_VisualStudio/M41/M41.vcxproj create mode 100644 c++/windows_VisualStudio/M41/slstm.cpp create mode 100644 c++/windows_VisualStudio/M41/slstm.h create mode 100644 c++/windows_VisualStudio/M42/ES_RNN_PI.cc create mode 100644 c++/windows_VisualStudio/M42/M42.vcxproj create mode 100644 c++/windows_VisualStudio/M42/M42.vcxproj.filters create mode 100644 c++/windows_VisualStudio/M42/slstm.h create mode 100644 c++/windows_VisualStudio/M43/ES_RNN_E.cc create mode 100644 c++/windows_VisualStudio/M43/M43.filters create mode 100644 c++/windows_VisualStudio/M43/M43.vcxproj create mode 100644 c++/windows_VisualStudio/M43/slstm.h create mode 100644 c++/windows_VisualStudio/M44/ES_RNN_E_PI.cc create mode 100644 c++/windows_VisualStudio/M44/M44.filters create mode 100644 c++/windows_VisualStudio/M44/M44.vcxproj create mode 100644 c++/windows_VisualStudio/M44/slstm.h create mode 100644 c++/windows_VisualStudio/readme.txt create mode 100644 c++/windows_VisualStudio/x64/RelWithDebug/readme.txt create mode 100644 c++/windows_VisualStudio/x64/RelWithDebug/run61.cmd create mode 100644 c++/windows_VisualStudio/x64/RelWithDebug/run61_e.cmd create mode 100644 readme.txt create mode 100644 sql/createM72nn_SQLServer.sql create mode 100644 sql/createM72nn_mysql.txt create mode 100644 sql/readme.txt diff --git a/ES_RNN.zip b/ES_RNN.zip deleted file mode 100644 index ef07091e95729b9af62d69774bbd2833d003fa4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 488443 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 E;Nup`8uV1 zl9<6b!WQnS8&I-ihu%33VWGy)LQFz|8bv9i+gsX;B-pYbydwI|?xO=G4FDui{ zibP_Azj4zD#ZkAXH0E*PX8~#6{ZlSX%0Q0RL_;xM3 zJJmfzBVCKHRct+clk#WLnW5O3lu?p&m7tyqdjw||V&EVUu{#Z_6f~$yQhajUSgsSTHF*Ganp@oGhu9Q@5xaz#ur*y!_}J)h`24O2cj^e z>s!A2o>{Uv#U(0vn*Ce;46zDtj(J7!A+va!wkY)DIACtBqzuA$U_E7|NC8;pIzn4b zG(H%!93V`Eqm>)-+RkR54lwQ?CAG5yzzm#}U?T$l9rz{qR<=9IXGUKP*j1|c0qd;Q zGP|~6g=q`W31eC8PrcZ$dV$?yA1o~Rubi*L5TQDUydB*Ek@8W_E_Z?* zHCfY+a5(OEBwzDt7z1UKru@M7!tvnH_XN&7Ic$#BOMgP@EoT{FbS5{=i!Od(F|H_v zRxyOm_>6C(fhYl+`}F8vf85tt6F5t&=8g*Wf?BnZvDgx%B}qrrfCOK#H0o&^#J%{+ z4T=82z#;aq@Vk@@FAj{4IS0A816wv3yhCsu=#!GxvN==0_4P5PNHQF9A=X+Cl9V&= zEu&X@uFg_IUbk^v?)`{9EO!P(^^uyvl$-8bk}e;RF{LipcM`y@?-Kk$kb) z3Ke||9tQ?AM9XbXD<93;lNU8XgREQ~oP#w;9d}7xf2wo=6=AI44U;uVQ;_4tY6MkD z@suSGJ*=uJ?>;(KKU{f;C#kt{ayv-aIIv;J<|v^UV7JG#Y+b(|C-Fz`ym3hyuS?v+ zE>of&9Cd4S@H>roB$W@z@$(kl=@T1EVz=uv-WMOo^!^&{kX9|wo)s^U^I`w%3e60d zgPcg0MLG@H%*H+TyX8Kit^ZUEJI0RAzChemmg&dRCF{HJ3^yR;Hk(@37iYIhAfJ?G zK!~D^FqwE3uY_@@Au{U{<|T?>AGGt^FjLli3DhuG6PB&r!>z(4AP_^I@ij~hINGQl zwRMgxn_bDW$}v3VD#-LRJKkD;yG%Kqd?(EaTl%MbeiaS&2jm5rO_1_1Z11@Kq%+PS!ERTNW{FU2#e)8H!HO1d(6eW zB+N)SH-9^`mFOqF33F_PrG9koGa;onT{`m>M?n%w5oI`Ae2&kWlW?&B32^>bHE~PFz^52H)jAfGiuKqoIU)mpclD8y|F7lAP4Q9{4pTt()H{(pFw*X z$rOxQyrVFAdhnaWf63`FD(r#aR66DKSLhUZhkXL)?Mv~P+e)sd;5EPfScd4^KYZXZ zzm1eqC;t~>j{kdN?Eo#Z`Pp1t>{d_FugzeT!Q40<3pMFCzIS# zz`pJT|4r57kds>+&%Nc$48A)Op{K&jEe@a|N@q#QMk!S~s3|7-jPp-0dD{124)LGi zm-*zRLBleBXSlGX;VXWdIM5fmS;^nfJ1Y0LmO)UgsRri#5`wF_`^C+ET0%#up- z^-IT69N9dcEb-E677x_aE~#MEKxU`Zv2laga4Y*!?Y{wZ>CuD43{uyFIY*GCd2+dr z5uW8~H(_JYCD)o!XEW=;-b_qUEJBxF1A@u)8cjBbQurFU+qS(tc1u|kKBj;ry5^E} zBah{h{J2$rc6f0*5L7^226rf2>gxw2gm2ghg!bVeEm634DDY# z16yY=&OCc=SQ!^F^Mdo^RU|;*TuR*Q%OAt_95i;xic`ooD81?*JMn zY6J#$3@1{BAqyx#90D-cm6vCDde5*)$)0FVDkpvVS`Pavc~3q zgMD|MVRLeEa^hl6o)t;RRcrubQ3`ezgnDViAGN$XJLc{Zp7vM~oY1`J!BZ*zXtQ9! zVp9@7&h#*3#_94hC=3##m^qg2@X6J5bzsI7x+BDDAi&5DN@~vDQdWokxohep9zeUL zr7M03Ew8~A+1NYUUUB=fi-&`W@SZ9>8{K9#0%R)0?7k%zdoc=)n*OHx@>j-!9wE?k z;d03LCUl&Tq>vG>RyXE4%zH>zXXiTEaw5=}MgmeRA<4F!jtAOHXMzlRDLsgfDq4EkWzrE^LMhS_-_6W?PbF@d=r z7_qtrE!s(W{v1ZGxCebYZ&UW$RN1)rNe6)W2RCQV*Z}?Sm!QUW15X|7D{XT=-zuVn|RJBwKdozpoB>*$;J5>;D?Xz2IIrgaOLC;3^%8uJMqWR$L-_c8mjlB$dHI- z9?$ew3mBdlME`5l2}i0xLP;-1qr-is{NcVX#~YV3pWqEJ;69x73tIZmY?%?Mv<^&%vytpZE_7`b~>jB_FoO+LIQvS2Xnv7`7DrPclMemC?n?Is_cV!n_8#`KAhUN00+u^5KStB z0svX?#0|WdiK(_mzi?h1uMT8N%PbQTPsg2CM<#=xfA!PTQWO%$9ZG{4-v{ z*nO_D-3R|=D1ciY#0Wz~1BAaDA&e0{a7Tj1Ofb1gqqJ7iRaXHf*6B_Hs?jOi3&V1X zyx?}RtG8M5V#>D&^}cP{J~2VuEB05Np)%Jj?6OR3OU&88iaYpCLp+h9>8i8>qADGRvH%#1cUhr~X}idpd8JLV@&}S-Zk0!QAef zkB`5k{n)ZGO3jkUqlNV1EORs3ICAOAx>3up zZO!>lgUB<~rVV1IGmm7UBnjB5|FN6p4KCtSk&2MAEcJkg1>iO>lKzm=lTOOgH1I&f zEqEdf^3QY2@QV(d`ZA_YSKp={af@SoL_$e9Tq^FS(J z%71R*?^b%MoQm`6gKcfiMFY5nZ5_1m)=pczhry3=l*Qs6yKiLe0!zXoeb08+am3Lf|e5_8+=koua zUb^ML6yuNL-J|d;buTr4G~mGvg3W&&S^1@=QX4;(daQdkd%L)J=!m}W$|rxC-4t~H zJxQ%0_8V*deq;y}p8NG+MP5W=%Jw4O)d-p418C;v{e|T5BI)S9*|$HUx%Q8kXJ=;9 z@(SYDLl9komIV3IG$zrl9CTvptI1@_D9Oho%2iYA(OSHM!kePta@o7P$9Lh10Wk9V zOTzJc)jj6EDf*&{w%UhP2Z6N0`f+VjaplCJ&Z3&;VCEyaw!;sC>^9L@lK|Vx^lKag zQ8GZ^56hfLE4O*_ga5z4JUd-78U8Qam(zdJ5YRtqi2nab8e;wj<}v?IVJJ6wFm9Ov zA?#kFM>wVXnnf}>MY3CJ3(QMEsKG%Vhujf$d(bVdMvVs(94}IRKzB+>V?j-VIn9ja z=hmL*zkDGt*2lfhLMdiSwL71)PB>JNHJKJ_cNSQwo$5c&=9k!{@F^JQT2p%d@0$2{ z*R??l)a}e>9)XQyxTmFgj$$b*O^nP$oOPG5x2FQAXI)sD`o{auKc^& z1aS&yqKHq;1N&pp{Lj%x&QbWbJ_$RrVNt}{ddY?WKqFf$g0k2NuJAKn>^KEfuqj#i zzEY2yb;y7}fe-Wr>Mb?4Un~nu8g%G_M};Pt_KF&wgi=YmaYX)#C*7g_)6ri_1#n!} zX;sYvxZq?o@dON)fB6yilzcC%MIPCrn|Opok31cLhd4D%6Chu{dCAUA_7PioAfTH*wH0M4d#hWmS*L9_gg*DO`+`Lh z<4=Rdwv@G43Nw>$j;xDu<4s5SyhVW%DIwt?8bB_!EI!SDlMnlZ1Q7~EGLvM*)0EZG zvvqFh_1%5CvYER^WY_vaiLa(=8jBm1})3b2E85Z;RWoVo*{#W?DhP2VAlBuAuHSyG6OHf z#9V3hoS`cPG}Ughu0J-wGGBxaxt6l=c`nYeg|(2 zW}7{Btl6Z+{lsvhur1AkXZX4KQb)x#=&q+oSmkunT@!&H|)%_ zOg&lsHSuDPgAVU%QzAAZVsw$LIqu|}mb^**s@{!f?M%%fWZUe%8|fCFeTH&sru5iB zj-`}SnhKs6lCk0DuK#z1(famhwJxZwUAgjRhIS;kCo3jIl7|%Xa&!f__{x)wZS+%U zC)&)?T~hF6X-pXZ1EXT_E1*2D+lloJsbE7e5R*N;GS$|#6615?(i4XJT{@+u_)>H0t7c@} zd-F`fKg=T5p#=iC`?=8evAyM`W<&AL7sk~!#LG!d01i6p+^FD{B(_Z>FCs4jN0Jgw2+ zgNG!z%_bVn6uMeQym&HOVJ|lYO3v%ehMigTec+OoUHe9JO#yp^1*!jGEM7AViTq#2 z;`aYE7VrNVi}P76sJ80=-B=9QkB50|pO{B{9@1cSEUGY$3fsxAE5%_U;@}C*6sWwO z50j6rR%`cA!CS#5PcJ_etX;o-+lqa<-X;C(4dhcrE*aW35t`A6nc&B8BTtzR68tRl z@gcEpR-|!_0`UMDF=s)G)Wq-KptV&aFybq=z6OolmnWf-dfW#1$PW{dV)9eKanW^? z^mI9c0Un+m0sK?H*L{_aUArvi?yzYO!-c;UY}HLmI&1Z7v{0$nL+|dLtJbdk?Hb!S ze5hI*;aAe9{Ad)L9$44WWZBbuwr1?*Vk-;T(B#!`cfgp?R9D;b6L-YSxNsq5)n!z$ zegqEcLv&L8z{S6Xf=-FMItXk8$T;kFSZQ!<_<{T$VxCF-h=kVvtC#$6?=0j>2%tH=st+8dj!s5MM^FuXkT|yqk@0XGD;#^Eh4I zajyT4>$3f3APeo^HgiuFqkz~m~Kr@rg z)&>uJcRkFcS_b%n)WO2}qaguQ-$Ouz6vN`vWCcQ;`i4F>thG68~!T!U8FgM7%^ zLss|XiXO!uB{=5Zsj{w?H99Ac5blYGfJdQ_9q z3LXV|IlW0^#!2ncyUUtqx-P+OQEr2Y8TBiUN6%!7NfjSiCtSt>gV|guyPrm+Zm+Q0 zs+wu7wW3&5`-kh#mFRM7Ehf7qZ8S2#IRj8WxbYVvN2#GKq)D@)pT1^G>|@Hrj@X;B zxO?0DIgORq0=Ua1*|)XF*R$BM{{ISmwDY?DUx;}Bk7Mlrk0KuPe?+|hh{2me?+|hhiFhpkn}`Q3Gb96&hbzp*`%k830R&+B zKT1Hd{NEy;zJla`NAbL!wltR6(@*bCMown)8RrhTW!QQ5r<(hx z%EE83+eWt2=XbegUN&akI_o_AzfYqJD{5b8XXH z^IdJH^)sx?G?icZ7IY9$>y{*@4(WVo{)@*e9pz0EjFl~<-q!%yeKDCW^C<%@o2RNMZgVxi#(D(#LC8=(v$$gMW_#}VeF`;a z&dWc~gd=<4WGe0k!-&(dGRrP-(OF}mY4I#U%(w_<)r18a#2#15Yd-p^TO#&775_`M z04|Mx>H>k#qzvFEBE*CPgY^fP9Ge<)mWA18=`boJ-=R{i;eJt2)Pgp8D`x=98ZF>V zu|CUsAk}``BE~f>_hc_1wu}MQPmm)(-=k3IACh-t(1(yXc-F=niiY?&B&!?8I2(g0 zN3ynnhcIc6G1&xy4>-#NA@Uv@H*rsBRBqyFYqbBkfOnw5F%AVNelb2!fVjsGOAu#N z-=GPpA)()~lxhYhBpktjqM)p!%wcfAQ3hCrIdRH#aWKNaeDIrz+hJq0^_Oywq7=!N<*XB4&Q%=s87LN3wiVx3wgujN z^WD~`Rnl7cJ+}=6CU`>FN|eo`WgcM_R0$D{z{$X2UN1=P;85KQ?CS3zqXEQ(d+AUz`o(7s*}+bafFT2Js&uw)HQ%Xzm$ zU{u-x9IFV4^c2bgW(DArfeOHF&0;5}iu3Ag#a}NLyEbqNRqwDGiB2NgiYwrIW;5%j zMeYb=<)9IXycU&n6f{n+~&+bPO*dZoyZj zRygE|2WSC-gAo>R=$Ge55M!(VSL3d=o-d9O_v?hIHFcuNbF_07AS58!7m@6jVctG8-RDyZYbOdG2--YX&Vgm3nCN~#TpAz)IKQi?&0*M$SvD%X`mKtoLkG9B6kOQ1M<5fJD~s}ZRj zNN@ke<5iC!zt#&w_xJ!VkRbsj&=pY}6;U8ZOoU^=nmeL~0KgeaKPif$lu!2%sL@Y8 zSwyCSol$_fmY7&?{M@UtG5+K6uGgB>)3_vv>ID!<7bis#9!1+00s^?hMS?uh`9Q~l zcxk}=Ad0B7q3i*vy8b*Fa_y;#QrJBdGFq_v-L@z^rzaTBuwKC);9#T)1FS`D@yY*kU22r33-kHsh%O12 zq%w0(i2JSqg}cPmEv7qWT(|0&O*&T4dc#hSoy#~RWp-}NV&y7!3ty{AorbB=HkmbR z))C%}m9KT-+e|^ufrx&r;1@d`7V7N9T4DvCvp=+c-1NV(cTYi<1>2&q%eHOXw(YL!vTfV8ZQJg$ zZQJNB+f{${KG^sC=jFtCym!x-8L^%+GjfiIHCL`2-&j>j*6(NO?V?y&oa<+yS^UJi zjB70XlQYe9->-GrT?nF{h_8@_?Fg`R=jcDKg0-^7{tOOg3cqG6z!Isv2JESz!pv-4 zhPU4JSQc$z%L>-za<%0)i;>Ts?>I@Mlais#T*r|oc|ybJL6J(0-bm_1q5&?1S{7*# z%gy%w4RP9ns=&Ju71Pzj1Z;K&aFLCv_ON2WYX-Vla$Ld;Z=Fq-ZHa@DGyxCe=yu`8 zfJ` zca&JeyM#P(Y)8xjoZPfeggiP)l+ld}C7um!5K)|SHKWk~iRC8ApkylUInwNjxK5Hq z%qTHLLhxuZ@YRurn+N>r1#faG*^=;)U!&RON(`f(e3(Bzw1?I%3_-p~d?8VuqSY@Z ziK4CAmGfwg57d9SjFX@sSDfX)uX&->4~Doq4<0sK-U*;UMj>mr@mx!56H9$gfJq&? zp@f+D!1esi)HyAQN8|h;-Nic(Qbj!Q%x~U%J1?`F1TX*uL(pVISZzfTJc|daE=JIZ zJU1fm;>S??l2D=5pZ#Lhe`tHhs6y+3SMgtW6{LLaeD7C(FD# zw>XJ#f)D~YNPt#Sk%lHE<0w^BeFl--c0}C0e!Y?0zJedeL7^Vk%~9cctI-MOK2K{A zeVoWolOFl*X(4eB8R73AVQRy-a%O2+LF4$vq5MBF9UM#>54N|Gk4V`%LDeqF64_LC!~aojv58wLI|$m*8c z0g?t}``L+!@=~7cO+SYTL1^0KQP7R$Gz8s9&+zwZO|AMTo=^`ld6t(N8HKkm8A1!X zxKRJQuZt3gw~5m8Sy9mVol<|JoQ2$HHe$}}3$;;@5-EH!TajPEI}d7ZvQoEF$PDq^ zXNdz$u6%J&;{Fpk;F3Ld_NQ^++{?K=>l&+t7O_esBB<*2Wl0uD$x!?fuG7IOEij