рдЧрд╣рд░реА рд╕реАрдЦред рд▓рд░реНрдирд┐рдВрдЧ рдлреЗрдбрд░реЗрдЯреЗрдб

рдЫрд╡рд┐ рд╣рд╛рдп, рд╣рдмреНрд░реЛрдЬрд╝рд┐рддреЗрд▓реА! рд╣рдордиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдВрдбреНрд░рдпреВ рдбрдмреНрд▓реВред рдЯрд╕реНрдХ рдХреЛ рдПрдХ рдкреБрд╕реНрддрдХ рд╕реМрдВрдкреА, рдЬреЛ рдЧрд╣рди рд╢рд┐рдХреНрд╖рдг рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреА рдЖрдЧреЗ рдХреА рдорд╣рд╛рд░рдд рдХреА рдиреАрдВрд╡ рд░рдЦрддрд╛ рд╣реИред рдпрд╣ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рддреЛрдВ рдФрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреА рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред

рд╣рдо "рдлреЗрдбрд░реЗрдЯреЗрдб рд▓рд░реНрдирд┐рдВрдЧ" рдкрд╛рд╕ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреЗ рд╣реИрдВ

рд╕рдВрдШрдмрджреНрдз рд╢рд┐рдХреНрд╖рд╛ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЗрд╕ рддрдереНрдп рд╕реЗ рдкреИрджрд╛ рд╣реБрдЖ рдерд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рд▓реЗ рдХрдИ рдбреЗрдЯрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдордЖрд░рдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрдВрд╕рд░ рдХреЗ рдирд┐рджрд╛рди рдХреЗ рд▓рд┐рдП) рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЧрд╣рди рд╢рд┐рдХреНрд╖рдг рдореЙрдбрд▓ рд╕рд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреЗрдЯрд╛ рд╕реЗрдЯ рдореЗрдВ рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рднреА рд╣реЛрддреА рд╣реИ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╣рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рд╕рдВрднрд╡рддрдГ рд╣рд╛рдирд┐рдХрд╛рд░рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдлреЗрдбрд░реЗрдЯреЗрдб рд▓рд░реНрдирд┐рдВрдЧ рдПрдХ рдореЙрдбрд▓ рдХреЛ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдХрд╣реАрдВ рднреА рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рд╕рд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдХрдиреАрдХ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

import numpy as np from collections import Counter import random import sys import codecsnp.random.seed(12345) with codecs.open('spam.txt',"r",encoding='utf-8',errors='ignore') as f: тЖР     http://www2.aueb.gr/users/ion/data/enron-spam/ raw = f.readlines() vocab, spam, ham = (set(["<unk>"]), list(), list()) for row in raw: spam.append(set(row[:-2].split(" "))) for word in spam[-1]: vocab.add(word) with codecs.open('ham.txt',"r",encoding='utf-8',errors='ignore') as f: raw = f.readlines() for row in raw: ham.append(set(row[:-2].split(" "))) for word in ham[-1]: vocab.add(word) vocab, w2i = (list(vocab), {}) for i,w in enumerate(vocab): w2i[w] = i def to_indices(input, l=500): indices = list() for line in input: if(len(line) < l): line = list(line) + ["<unk>"] * (l - len(line)) idxs = list() for word in line: idxs.append(w2i[word]) indices.append(idxs) return indices 

рд╕реНрдкреИрдо рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╕реАрдЦрдирд╛ред


рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреЗ рдИрдореЗрд▓ рд╕реЗ рд╕реНрдкреИрдо рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдИрдореЗрд▓ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдПрдирд░реЙрди рдирд╛рдордХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдПрдирд░реЙрди рд╕реБрдирд╡рд╛рдИ (рдЕрдм рдПрдХ рдорд╛рдирдХ рдИрдореЗрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдирд┐рдХрд╛рдп) рдХреЗ рджреМрд░рд╛рди рдкреНрд░рдХрд╛рд╢рд┐рдд рдИрдореЗрд▓ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдирд┐рдХрд╛рдп рд╣реИред рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддрдереНрдп: рдореИрдВ рдРрд╕реЗ рд▓реЛрдЧреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдерд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдЙрдирдХреА рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдкреНрд░рдХреГрддрд┐ рд╕реЗ, рдЗрд╕ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдкрдврд╝рдирд╛ / рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛ рдерд╛, рдФрд░ рд╡реЗ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд▓реЛрдЧреЛрдВ рдиреЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдЗрди рдкрддреНрд░реЛрдВ рдореЗрдВ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА (рдЕрдХреНрд╕рд░ рдмрд╣реБрдд рд╡реНрдпрдХреНрддрд┐рдЧрдд) рднреЗрдЬреА рдереАред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдЗрд╕ рд▓рд╛рд╢ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЕрдм рдЗрд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкрд╣рд▓реЗ рдФрд░ рдЗрд╕ рдЦрдВрдб рдореЗрдВ рдХреЛрдб рдХреЗрд╡рд▓ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЗрдирдкреБрдЯ рдлрд╛рдЗрд▓реЗрдВ (рд╣реИрдордЯреЗрдХреНрд╕ рдФрд░ рд╕реНрдкреИрдордЯреИрдХреНрд╕) рдкреБрд╕реНрддрдХ рдХреЗ рд╡реЗрдм рдкреЗрдЬ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ: www.manning.com/books/grokking-deep-learning рдФрд░ GitHub рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ: github.com/iamtrask/Gotkking-Deep-Learning ред рд╣рдореЗрдВ рдЗрд╕реЗ рдЕрдзреНрдпрд╛рдп 13 рд╕реЗ рдПрдВрдмреЗрдбрд┐рдВрдЧ рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡-рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдЕрдкрдиреЗ рдЧрд╣рди рд╢рд┐рдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ред рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рдЗрд╕ рдХреЙрд░реНрдкрд╕ рдХреЗ рд╕рднреА рд╢рдмреНрдж рдЗрдВрдбреЗрдХреНрд╕ рд▓рд┐рд╕реНрдЯ рдореЗрдВ рдмрджрд▓ рджрд┐рдП рдЧрдП рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рд╕рднреА рдЕрдХреНрд╖рд░реЛрдВ рдХреЛ 500 рд╢рдмреНрджреЛрдВ рдХреА рд╕рдорд╛рди рд▓рдВрдмрд╛рдИ рдореЗрдВ рд▓рд╛рддреЗ рд╣реИрдВ, рдпрд╛ рддреЛ рдЙрдиреНрд╣реЗрдВ рдЯреНрд░рд┐рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдЯреЛрдХрди рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдореЗрдВ рдПрдХ рдЖрдпрддрд╛рдХрд╛рд░ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдорд┐рд▓рддрд╛ рд╣реИред

 spam_idx = to_indices(spam) ham_idx = to_indices(ham) train_spam_idx = spam_idx[0:-1000] train_ham_idx = ham_idx[0:-1000] test_spam_idx = spam_idx[-1000:] test_ham_idx = ham_idx[-1000:] train_data = list() train_target = list() test_data = list() test_target = list() for i in range(max(len(train_spam_idx),len(train_ham_idx))): train_data.append(train_spam_idx[i%len(train_spam_idx)]) train_target.append([1]) train_data.append(train_ham_idx[i%len(train_ham_idx)]) train_target.append([0]) for i in range(max(len(test_spam_idx),len(test_ham_idx))): test_data.append(test_spam_idx[i%len(test_spam_idx)]) test_target.append([1]) test_data.append(test_ham_idx[i%len(test_ham_idx)]) test_target.append([0]) def train(model, input_data, target_data, batch_size=500, iterations=5): n_batches = int(len(input_data) / batch_size) for iter in range(iterations): iter_loss = 0 for b_i in range(n_batches): #         model.weight.data[w2i['<unk>']] *= 0 input = Tensor(input_data[b_i*bs:(b_i+1)*bs], autograd=True) target = Tensor(target_data[b_i*bs:(b_i+1)*bs], autograd=True) pred = model.forward(input).sum(1).sigmoid() loss = criterion.forward(pred,target) loss.backward() optim.step() iter_loss += loss.data[0] / bs sys.stdout.write("\r\tLoss:" + str(iter_loss / (b_i+1))) print() return model def test(model, test_input, test_output): model.weight.data[w2i['<unk>']] *= 0 input = Tensor(test_input, autograd=True) target = Tensor(test_output, autograd=True) pred = model.forward(input).sum(1).sigmoid() return ((pred.data > 0.5) == target.data).mean() 

рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЯреНрд░реЗрди () рдФрд░ рдкрд░реАрдХреНрд╖рдг () рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд▓рд┐рдЦрдХрд░ рдЗрд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреАрди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рдж, рдиреЗрдЯрд╡рд░реНрдХ 99.45% рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдирд┐рдпрдВрддреНрд░рдг рдбреЗрдЯрд╛ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ (рдирд┐рдпрдВрддреНрд░рдг рдбреЗрдЯрд╛ рд╕реЗрдЯ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрддреБрд▓рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЙрддреНрдХреГрд╖реНрдЯ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ):

 model = Embedding(vocab_size=len(vocab), dim=1) model.weight.data *= 0 criterion = MSELoss() optim = SGD(parameters=model.get_parameters(), alpha=0.01) for i in range(3): model = train(model, train_data, train_target, iterations=1) print("% Correct on Test Set: " + \ str(test(model, test_data, test_target)*100)) ______________________________________________________________________________ Loss:0.037140416860871446 % Correct on Test Set: 98.65 Loss:0.011258669226059114 % Correct on Test Set: 99.15 Loss:0.008068268387986223 % Correct on Test Set: 99.45 

рдЪрд▓реЛ рдореЙрдбрд▓ рдХреЛ рд╕рдВрдШреАрдп рдмрдирд╛рддреЗ рд╣реИрдВ


рдКрдкрд░, рд╕рдмрд╕реЗ рдЖрдо рдЧрд╣рд░реА рд╢рд┐рдХреНрд╖рд╛ рд╣реБрдИ рдереАред рдЕрдм рдЧреЛрдкрдиреАрдпрддрд╛ рдЬреЛрдбрд╝реЗрдВ

рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рдИрдореЗрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдЕрдм рд╕рднреА рдИрдореЗрд▓ рдХреЛ рдПрдХ рдЬрдЧрд╣ рдкрд░ рд░рдЦ рджреЗрдВред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреБрд░рд╛рдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИ (рдЬреЛ рдЕрднреА рднреА рджреБрдирд┐рдпрд╛ рднрд░ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдВрдШреАрдп рд╢рд┐рдХреНрд╖рд╛ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рдирдХрд▓ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рдкрддреНрд░реЛрдВ рдХреЗ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрдЧреНрд░рд╣ рд╣реИрдВ:

 bob = (train_data[0:1000], train_target[0:1000]) alice = (train_data[1000:2000], train_target[1000:2000]) sue = (train_data[2000:], train_target[2000:]) 

рдЕрднреА рддрдХ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдЕрдм рд╣рдо рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рд╣реА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ред рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдмрд╛рдж, рд╣рдо рдмреЙрдм, рдПрд▓рд┐рд╕ рдФрд░ рд╕реВ рдХреЗ рдореЙрдбрд▓ рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдФрд╕рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВрдЧреЗред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреБрдЫ рд╕рдВрдШрдирд┐рдд рд╢рд┐рдХреНрд╖рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреИрдХреЗрдЬ (рдпрд╛ рдкреИрдХреЗрдЬ рд╕рдВрдЧреНрд░рд╣) рдХреЗ рдмрд╛рдж рд╕рдВрдпреЛрдЬрди рд╢рд╛рдорд┐рд▓ рд╣реИ; рдореИрдВрдиреЗ рдХреЛрдб рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рд░рдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛:

 for i in range(3): print("Starting Training Round...") print("\tStep 1: send the model to Bob") bob_model = train(copy.deepcopy(model), bob[0], bob[1], iterations=1) print("\n\tStep 2: send the model to Alice") alice_model = train(copy.deepcopy(model), alice[0], alice[1], iterations=1) print("\n\tStep 3: Send the model to Sue") sue_model = train(copy.deepcopy(model), sue[0], sue[1], iterations=1) print("\n\tAverage Everyone's New Models") model.weight.data = (bob_model.weight.data + \ alice_model.weight.data + \ sue_model.weight.data)/3 print("\t% Correct on Test Set: " + \ str(test(model, test_data, test_target)*100)) print("\nRepeat!!\n") 


рдиреАрдЪреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдирд┐рдкреЗрдЯ рд╣реИред рдпрд╣ рдореЙрдбрд▓ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рд╕рдЯреАрдХрддрд╛ рдХреЗ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╕реНрддрд░ рддрдХ рдкрд╣реБрдВрдЪ рдЧрдпрд╛, рдФрд░ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рдереА - рдпрд╛ рдирд╣реАрдВ? рд╡реИрд╕реЗ рднреА, рд▓реЗрдХрд┐рди рд╣рд░ рд╡реНрдпрдХреНрддрд┐ рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдореЙрдбрд▓ рдмрджрд▓рддрд╛ рд╣реИ, рд╣реИ рдирд╛? рдХреНрдпрд╛ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдирдХреЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рд╕реЗ рдХреБрдЫ рднреА рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

 Starting Training Round... Step 1: send the model to Bob Loss:0.21908166249699718 ...... Step 3: Send the model to Sue Loss:0.015368461608470256 Average Everyone's New Models % Correct on Test Set: 98.8 

рдПрдХ рдлрд╝реЗрдбрд░реЗрдЯреЗрдб рдореЙрдбрд▓ рдХреЛ рд╣реИрдХ рдХрд░реЗрдВ


рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛рд╕реЗрдЯ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдХреИрд╕реЗ рдирд┐рдХрд╛рд▓реЗрдВред

рд╕рдВрдШреАрдп рд╢рд┐рдХреНрд╖рд╛ рджреЛ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдЧреНрд░рд╕реНрдд рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЬрдм рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдореБрдЯреНрдареА рднрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ - рдЧрддрд┐ рдФрд░ рдЧреЛрдкрдиреАрдпрддрд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдХреБрдЫ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ (рдпрд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рднреЗрдЬрд╛ рдЧрдпрд╛ рдореЙрдбрд▓ рдХреЗрд╡рд▓ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреИрдХреЗрдЬ), рддреЛ рдЖрдк рдЕрднреА рднреА рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ 10,000 рд▓реЛрдЧ рд╣реИрдВ (рдФрд░ рд╕рднреА рдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рдХрдо рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рд╣реИ), рддреЛ рдЖрдк рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рдореЙрдбрд▓ рдХреЛ рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ рднреЗрдЬрдиреЗ рдореЗрдВ рдмрд┐рддрд╛рдПрдВрдЧреЗ рдФрд░ рдЗрддрдирд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдирд╣реАрдВ рд▓реЗрдВрдЧреЗ (рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдореЙрдбрд▓ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ)ред

рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдЦреБрдж рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдПрдХ рдкреИрдХреЗрдЬ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╡рдЬрди рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рдж рдЖрдк рдХреНрдпрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 import copy bobs_email = ["my", "computer", "password", "is", "pizza"] bob_input = np.array([[w2i[x] for x in bobs_email]]) bob_target = np.array([[0]]) model = Embedding(vocab_size=len(vocab), dim=1) model.weight.data *= 0 bobs_model = train(copy.deepcopy(model), bob_input, bob_target, iterations=1, batch_size=1) 

рдмреЙрдм рдЕрдкрдиреЗ рдЗрдирдмреЙрдХреНрд╕ рдореЗрдВ рдИрдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рдореЙрдбрд▓ рдмрдирд╛рддрд╛ рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдЙрд╕рдиреЗ рдЦреБрдж рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдкрддреНрд░ рднреЗрдЬрдХрд░ рдЕрдкрдирд╛ рдкрд╛рд╕рд╡рд░реНрдб рдмрдЪрд╛рдпрд╛: "рдореЗрд░рд╛ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд╛рд╕рд╡рд░реНрдб рдкрд┐рдЬреНрдЬрд╛ рд╣реИред" рднреЛрд▓реЗ рдмрд╛рдмрд╛! рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рдХреМрди рд╕рд╛ рд╡рдЬрд╝рди рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдмреЙрдм рдХреЗ рдкрддреНрд░ рдХрд╛ рд╢рдмреНрджрдХреЛрд╖ (рдФрд░ рдЕрд░реНрде рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ):

 for i, v in enumerate(bobs_model.weight.data - model.weight.data): if(v != 0): print(vocab[i]) 

рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ, рд╣рдордиреЗ рдмреЙрдм рдХреЗ рдЯреЙрдк-рд╕реАрдХреНрд░реЗрдЯ рдкрд╛рд╕рд╡рд░реНрдб (рдФрд░ рд╕рдВрднрд╡рддрдГ рдЙрд╕рдХреА рдкрд╛рдХ рд╡рд░реАрдпрддрд╛рдУрдВ) рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ред рдФрд░ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ? рдлрд╝реЗрдбрд░реЗрдЯреЗрдб рд▓рд░реНрдирд┐рдВрдЧ рдкрд░ рднрд░реЛрд╕рд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ рдЕрдЧрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдХрд┐ рдХрд┐рд╕ рдЯреНрд░реЗрдирд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреЗ рдХрд╛рд░рдг рд╡рдЬрд╝рди рдореЗрдВ рдмрджрд▓рд╛рд╡ рдЖрдпрд╛?

 is pizza computer password my 

┬╗рдкреБрд╕реНрддрдХ рдХреА рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рдХрд╛рд╢рдХ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ
┬╗ рд╕рд╛рдордЧреНрд░реА
┬╗ рдЕрдВрд╢

рдПрдХ рдХреВрдкрди рдкрд░ Habrozhiteli рдкреВрд░реНрд╡-рдСрд░реНрдбрд░ рдкреБрд╕реНрддрдХреЛрдВ рдХреЗ рд▓рд┐рдП 30% рдЫреВрдЯ - рдЧреНрд░реЙрдХрд┐рдВрдЧ рдбреАрдк рд▓рд░реНрдирд┐рдВрдЧ

Source: https://habr.com/ru/post/hi458800/


All Articles