commit 1858d47a3fa2a768b36f299ac81eaff382c40bc1 Author: SzamanFL Date: Sun Dec 13 00:12:06 2020 +0100 Adding whats important for now diff --git a/src/.predict.py.swp b/src/.predict.py.swp new file mode 100644 index 0000000..a11471c Binary files /dev/null and b/src/.predict.py.swp differ diff --git a/src/.train.py.swp b/src/.train.py.swp new file mode 100644 index 0000000..4e41e25 Binary files /dev/null and b/src/.train.py.swp differ diff --git a/src/Network.py b/src/Network.py new file mode 100644 index 0000000..a04048a --- /dev/null +++ b/src/Network.py @@ -0,0 +1,10 @@ +import torch + +class Network(torch.nn.Module): + def __init__(self, input_size): + super(Network, self).__init__() + self.regression = torch.nn.Linear(input_size, 1) + + def forward(self, x): + y_pred = torch.sigmoid(self.regression(x)) + return y_pred diff --git a/src/__pycache__/Network.cpython-38.pyc b/src/__pycache__/Network.cpython-38.pyc new file mode 100644 index 0000000..761d17d Binary files /dev/null and b/src/__pycache__/Network.cpython-38.pyc differ 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()