From 1858d47a3fa2a768b36f299ac81eaff382c40bc1 Mon Sep 17 00:00:00 2001 From: SzamanFL Date: Sun, 13 Dec 2020 00:12:06 +0100 Subject: [PATCH] Adding whats important for now --- src/.predict.py.swp | Bin 0 -> 12288 bytes src/.train.py.swp | Bin 0 -> 12288 bytes src/Network.py | 10 +++ src/__pycache__/Network.cpython-38.pyc | Bin 0 -> 757 bytes src/exp.tsv | 10 +++ src/in.tsv | 10 +++ src/predict.py | 55 ++++++++++++++++ src/train.py | 87 +++++++++++++++++++++++++ 8 files changed, 172 insertions(+) create mode 100644 src/.predict.py.swp create mode 100644 src/.train.py.swp create mode 100644 src/Network.py create mode 100644 src/__pycache__/Network.cpython-38.pyc create mode 100644 src/exp.tsv create mode 100644 src/in.tsv create mode 100644 src/predict.py create mode 100644 src/train.py diff --git a/src/.predict.py.swp b/src/.predict.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..a11471ce5466f29bf69b71dbeb5f5590fca72d2d GIT binary patch literal 12288 zcmeI2%a7Yc9LJ}WM}f9f6d^8%*|a4|H*u2fgH<84m9|V_W0# zK3YK~RB@JI;IdDVb00$o8REZ)U7YB6UX~nSK6+qv?^1c8Mc`#f{J6i;ZoDG9TrrC5mtOAY{AMc+p-vEuF1;goZ&dk zJ;Np{0XHi?XD!9&l?5AwPm^;3IGqTmUvW0LH;?uo2wcOvta`Yw#fuU_aOg zc7n&icMlWt8Mp`zflc5y%;QUN6`Th;m;@9&1>`($W4_nGWv~D=@W&?10bBv+z**1$ zhrwoW;{ifG0T;m`uoe7tKOxt_=ip;-8C(MMKm%LB7Vy`7gxmpNfH%M^;2_ur?%a!* z!8hQ2a28C15*P>D!S#)VyalE~8I-`2;7|O~<|g<7d;s1COW-v4caOGVyM-d5IE2T| zIV~_2SfTB;n4<;45UjaAi{aMtwU9!wM6FyjN~S|vNYDDkmGRSM-tH=|npXdo&V)0L znNzlG*Kjm*-WR!8sEk;5?eDHTrh)WxF<|;mzdq@L_soACT}Ch+Y?8L7XKQD`uy)qW zOk{}pkY?&r*A`a;~d;7Z>y{HkT=`z`02fbvK{h8Kn_(;AOd)yadWx z^f~y@_6_t>>+#a%nOdVrjeuIEuKI~aiRKr_^HD4Gj~#Rt3kpY(#m{bR!Eo?g7uD?W zd||ikvq*@}Orsj@8ck3(!#!tO5Y85Op3?C= zR*~W(4I?p%Tyf?*hRF(HUSBe*Fbk#IHGR$Knx4~jy`mq~$Mlk3)_3Z=^aJ{{`fGY# ze_G$I7xh9zj+djkzT+ja%c~L+aFKCrC%MMGl40T&_u8Fwr*_--xabr~QjB&?rw}K0 fr-U@?oN|UYe#a_dz$>%1TVd`3^_Rt*=aRnxB#@_U literal 0 HcmV?d00001 diff --git a/src/.train.py.swp b/src/.train.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..4e41e2544ac968c57e471a0ec3009f2e21771cc4 GIT binary patch literal 12288 zcmeI2%WvF79LJ};A1y5)acPC7TgrOdUGF9>s7e)8&{S#FM4khzQ5m$8`bs7`BP`<5q*r{+C|94vtQM&zO$Wtwu6v{$pcTeZ*fhXm^(c`Gg}&; zojUT=?99l~<)$ync6lnWT21DQsO-6ZYqjRM9*fGtY?VVMT)|4V>o|-v-(n?e$@Dzt zFS7A+#I3U6rt9lrd*l*XN2Wlgz%T_`!YLiuK@N?NRb=fWJyTMNI{dPjGfveyZa2dP= zeDEmv`F=uP122Qizz0XcF7V5JgnR)$0dIn3Z~>IT@Ask|d<@22$r^U>Er5 z4njTzo8TjG1vJ2Eum-X#Q{Wa-powpDv;v{HM8K^jJu;V>)(mXs>5(wSR{gAIyOz)j zMe5|5K@-;&2GxYE25r^fzpDM;4rgA;`IjrmDXwpNy446pE|zzs!~?-#uImfNc`Fpm z?zO;HEfxxTnzieJ$?a3=s0o!mXY|FzWbA{|OLBdri8T<~^$lNK;aL9HJjM(QiVBqeb@8a%O3r%h|8FGy&Me6ZMkH^t@ z9CIr8_!64LDaG?SCRPI8&|E)kiCTmLOMK}zU=+TJjMYjyrG>P(&r20iUQ$|H$|XOs zoS;hFfie$WtKl)-ZZ*SHe5Xj0)|02EPo9{YugyL)Ge2{D=1eywE3R0gK?oo6%4)ty z^DFg(`2sZ~>U6hVB5$8VJszmJ2qt#5rXDq!{NCJlS52%Pmx0M-squ+9=0)tLbda- zMdmK;DaeEB@I+i~X#%HAVNyhC_h==Z9+akvFKAiK^%tO_JV4bWTMcy{3GRkk-thB1 z$B5iW$qbaCoQkosKGrZ+)(A}D?JIB4k!+?RN{lHb5+TxQsv6R$s^f!0U@+O71L=k9 z>l<726W)u-=VW{3z zDlwRaLleYi4vk;XNk(FKXtnAtP${1)|JZAD*+@-ca98~wDRR1_qRa;PQCVOVs$=UC_n$z)6dZ}7cAJel@ zc8qjWcE-Mqc2!MAa#e@}N!A;z-8r7qt%tNrz5jXh_s1eP0N%E$wrRegN1^8mEstBG zT$IaCqK5RSRo8f)(u4A3qWIB$rN}!BQl>ZyJ=0=ZD{rit6%1>Qv{f~9BWD;!**IqG zHHt>bc+A*uOc+Ovi$>mf+&Ewq3~fQKm!r9n>-FqQ-3wM2$4f+sa8vpbxH?0U*8z2# tVZcTDb|A^4dd;Q}@mZEWVK1h)oZ&C=z2#QK%XQZ;Gk=+eZLt*iF#*J9j7cpWV?J@MsjofN+NW1ii^}++5mO_qm95UHkF8LRA4(7c1#IYiM*jgSeyq;` literal 0 HcmV?d00001 diff --git a/src/exp.tsv b/src/exp.tsv new file mode 100644 index 0000000..42bbdad --- /dev/null +++ b/src/exp.tsv @@ -0,0 +1,10 @@ +1 +0 +0 +0 +0 +0 +1 +0 +0 +1 diff --git a/src/in.tsv b/src/in.tsv new file mode 100644 index 0000000..6d5b855 --- /dev/null +++ b/src/in.tsv @@ -0,0 +1,10 @@ +Najbardziej ktretyński pomysł, o jakim słyszałem. Tym japończykom się na mózg ta technologia rzuciła. Nie wiem, czy mają za dużo kasy, czy są po prostu głupi. +Byłeś wszystkim co kiedykolwiek miałem. +             staniku . hahaha przez miasto tak wracałem dobrze że Bartek mi spodenki porzyczył bo tak to by była masakra  .  +A ja dokladnie pamietam swoja pierwsza randke:)....nie zebymi sie nie podobalo tylko e osoba towarzyszaca średnio przypadała mi do gustu:)...ale umowilem sie z nim...bo bylem zakochany w innym i potrzebowalem lekarstwa:):P Wiem ze to moze bylo glupie i eg +zazwyczaj używanych do oświetlania wnętrz i wystawiłem je na najwyższy +Do yoku i nie tylko ;)Wyczytałem w jednym z postów, że jednym z objawów cytomegalii sąpowiększone węzły chłonne, gardło podobne do anginy. Ja w ciąguostatnich 2 tyg przeszedłem coś takiego już 2 razy i nie ukrywam, żesie martwie. Do tej pory tłumaczyłem sobie, że te moje wyniki mogąbyć podwyższone ze względu na ciąże, a teraz zaczynam się martwić.Czy to może mieć jakieś złe skutki dla dziecka .....?Nadmienie, że jestem obecnie w 17/18 tc. +Gorąco polecam ... Świetny film , w tle słucham jeszcze końcowej muzyki , mógłbym tu się rozpisywać ale to jeden z tych filmów do którego będziemy wracać co jakiś czas +a to Wy jakoś strasznie szybko. Ja to wszystko będe miał chyba dopiero pod koniec stycznia. +jestem zainteresowany stałą współpraca przy prasowaniu koszul, mieszkam na piątkowie więc żabi skok do odbioru. Proszę o kontakt mailowy wera123@o2.pl lub 661-573-524 +bym to załatwił w sekund dziewięć i 3/4. Ale zimno było a że kurteczkę narciarską mam z jakiegoś techcośtam 15 000 co daje ciepełko i ogólny komforcik, więc zamiast w płaszczyku poszedłem ubrany jak pracownik pobliskiego Sainsbury. diff --git a/src/predict.py b/src/predict.py new file mode 100644 index 0000000..bd365cc --- /dev/null +++ b/src/predict.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python + +import re +import sys +import pickle +import torch +from Network import Network + +def clear_tokens(text): + text = text.rstrip('\n').lower() + text = re.sub(r'[\.\"\\\/\?\!\,\-\$\%\:\;\~\'\&\*\)\(]+', " ", text) + text = text.replace(u'\xa0', u' ') + text = re.sub(r' +', ' ', text) + return text.strip(' ').split(' ') + +def create_one_hot(vocab, text): + one_hot = dict(vocab) + tokens = clear_tokens(text) + for token in tokens: + try: + one_hot[token] += 1 + except KeyError: + pass + return [[i] for i in one_hot.values()] + +def main(): + # in, out, vocab, model + if len(sys.argv) != 5: + print('Not sufficient number of args') + return + + with open(sys.argv[3], 'rb') as f: + vocab = pickle.load(f) + + input_size = len(vocab) + model = Network(input_size) + model.load_state_dict(torch.load(sys.argv[4])) + #optimizer = torch.optim.SGD(model.parameters(), lr=0.01) + + model.eval() + counter = 0 + with open(sys.argv[1]) as f, open(sys.argv[2], 'w+') as out: + for line in f: + one_hot = create_one_hot(vocab, line) + one_hot_tensor = torch.tensor(one_hot, dtype=torch.float64).T + y_predicted = model(one_hot_tensor.float()) + if y_predicted > 0.5: + out.write('1\n') + elif y_predicted <= 0.5: + out.write('0\n') + if counter % 100 == 0: + print(f"{counter}") + counter +=1 + +main() diff --git a/src/train.py b/src/train.py new file mode 100644 index 0000000..865a9bd --- /dev/null +++ b/src/train.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python + +import re +import sys +import pickle +import torch +from Network import Network + +def clear_tokens(text): + text = text.rstrip('\n').lower() + text = re.sub(r'[\.\"\\\/\?\!\,\-\$\%\:\;\~\'\&\*\)\(]+', " ", text) + text = text.replace(u'\xa0', u' ') + text = re.sub(r' +', ' ', text) + return text.strip(' ').split(' ') + +def create_vocab(texts_and_scores): + vocab = {} + for text in texts_and_scores.keys(): + tokens = clear_tokens(text) + for token in tokens: + vocab[token] = 0 + return vocab + +def create_one_hot(vocab, text): + one_hot = dict(vocab) + tokens = clear_tokens(text) + for token in tokens: + one_hot[token] += 1 + return [[i] for i in one_hot.values()] + +def main(): + if len(sys.argv) == 4 or len(sys.argv) == 3: + pass + else: + print('Not sufficient number of args') + return + + texts_and_scores = {} + with open(sys.argv[1], 'r') as file_in, open(sys.argv[2], 'r') as file_exp: + for line_in, line_exp in zip(file_in, file_exp): + texts_and_scores[line_in] = int(line_exp.rstrip('\n')) + print(f"Data read") + + if len(sys.argv) == 4: + print(f"Loading vocab from {sys.argv[3]}") + with open(sys.argv[3], 'rb') as f: + vocab = pickle.load(f) + print("Loaded vocab") + else: + print("Creating vocab") + vocab = create_vocab(texts_and_scores) + print("Vocab created") + with open('vocab', 'wb+') as f: + pickle.dump(vocab, f, pickle.HIGHEST_PROTOCOL) + print(f"Vocab created in file: vocab") + + input_size = len(vocab) + + model = Network(input_size) + lr = 0.1 + optimizer = torch.optim.SGD(model.parameters(), lr=lr) + criterion = torch.nn.BCELoss() + + print("Starting training") + model.train() + counter = 0 + try: + for text, score in texts_and_scores.items(): + one_hot = create_one_hot(vocab, text) + one_hot_tensor = torch.tensor(one_hot, dtype=torch.float64).T + y = torch.tensor([[score]]) + optimizer.zero_grad() + y_predicted = model(one_hot_tensor.float()) + loss = criterion(y_predicted, y.float()) + loss.backward() + optimizer.step() + + if counter % 50 == 0: + print(f"{counter} : {loss}") + if counter % 100 == 0: + print(f"Saving checkpoint model-{counter}-{lr}.ckpt") + torch.save(model.state_dict(), f"model-{counter}-{lr}.ckpt") + counter += 1 + except KeyboardInterrupt: + torch.save(model.state_dict(), f"model-interrupted.ckpt") + torch.save(model.state_dict(), f"model-final.ckpt") +main()