def test_model(XOR): """Just makes sure that this code will run; it doesn't check that it is creating good models. """ X, y = XOR model = TorchShallowNeuralClassifier(hidden_dim=4, hidden_activation=nn.ReLU(), max_iter=100, eta=0.01) model.fit(X, y) model.predict(X) model.predict_proba(X)
def test_save_load(XOR): X, y = XOR mod = TorchShallowNeuralClassifier(hidden_dim=4, hidden_activation=nn.ReLU(), max_iter=100, eta=0.01) mod.fit(X, y) mod.predict(X) with tempfile.NamedTemporaryFile(mode='wb') as f: name = f.name mod.to_pickle(name) mod2 = TorchShallowNeuralClassifier.from_pickle(name) mod2.predict(X) mod2.fit(X, y)
def test_simple_example_params(digits, param, expected): X_train, X_test, y_train, y_test = digits mod = TorchShallowNeuralClassifier(**{param: expected}) mod.fit(X_train, y_train) preds = mod.predict(X_test) acc = accuracy_score(y_test, preds) if not (param in ["max_iter", "batch_size"] and expected <= 1): assert acc >= 0.86
# In[25]: hf_mod = TorchShallowNeuralClassifier(max_iter=100, hidden_dim=300) # In[26]: get_ipython().run_line_magic('time', '_ = hf_mod.fit(X_hf_train, y_hf_train)') # In[27]: hf_preds = hf_mod.predict(X_hf_dev) # In[28]: print(classification_report(y_hf_dev, hf_preds, digits=3)) # #### A feed-forward experiment with the sst module # # It is straightforward to conduct experiments like the above using `sst.experiment`, which will enable you to do a wider range of experiments without writing or copy-pasting a lot of code. # In[29]:
class Shallow_Neural_Classifier: ''' Modified torch shallow neural classifier wrapper class for initial fitting and then fine tuning of weights. ''' def __init__(self, sent140_train_X, sent140_dev_X, sent140_train_Y, sent140_dev_Y, emoji_train_X, emoji_dev_X, emoji_test_X, emoji_train_Y, emoji_dev_Y, emoji_test_Y, emojiless_train_X, emojiless_dev_X, emojiless_test_X, emojiless_train_Y, emojiless_dev_Y, emojiless_test_Y, testing): ''' Pass in initial data for fitting to constructor. Later adding passing logisitic regression parameters into constructor. ''' self.testing = testing self.sent140_train_X = sent140_train_X self.sent140_train_Y = sent140_train_Y self.sent140_dev_X = sent140_dev_X self.sent140_dev_Y = sent140_dev_Y self.emoji_train_X = emoji_train_X self.emoji_train_Y = emoji_train_Y self.emoji_dev_X = emoji_dev_X self.emoji_dev_Y = emoji_dev_Y if self.testing: self.emoji_test_X = emoji_test_X self.emoji_test_Y = emoji_test_Y self.emojiless_train_X = emojiless_train_X self.emojiless_train_Y = emojiless_train_Y self.emojiless_dev_X = emojiless_dev_X self.emojiless_dev_Y = emojiless_dev_Y if self.testing: self.emojiless_test_X = emojiless_test_X self.emojiless_test_Y = emojiless_test_Y # pass in model parameters for to constructor? def run_sent140(self): ''' Trained on sent140, predict on emoji Report score on sent 140 too, just because it's intersting ''' # model self.model_sent140 = TorchShallowNeuralClassifier() # train self.model_sent140.fit(self.sent140_train_X, self.sent140_train_Y) # test on sent140 sent140_train_preds = self.model_sent140.predict(self.sent140_train_X) sent140_dev_preds = self.model_sent140.predict(self.sent140_dev_X) # test on emoji emoji_train_preds = self.model_sent140.predict(self.emoji_train_X) emoji_dev_preds = self.model_sent140.predict(self.emoji_dev_X) if self.testing: emoji_test_preds = self.model_sent140.predict(self.emoji_test_X) else: emoji_test_preds = None return (sent140_train_preds, sent140_dev_preds, emoji_train_preds, emoji_dev_preds, emoji_test_preds) def run_sent140_emojiless(self): ''' Trained on sent140, fine-tuned on emojiless, predict on emoji Report score on sent 140 too, just because it's intersting ''' # model self.model_sent140_emojiless = TorchShallowNeuralClassifier() # train # combine features combined_train_X = np.vstack((self.sent140_train_X, self.emojiless_train_X)) combined_train_Y = self.sent140_train_Y + self.emojiless_train_Y self.model_sent140_emojiless.fit(combined_train_X, combined_train_Y) # test on sent140 sent140_train_preds = self.model_sent140_emojiless.predict(self.sent140_train_X) sent140_dev_preds = self.model_sent140_emojiless.predict(self.sent140_dev_X) # test on emoji emoji_train_preds = self.model_sent140_emojiless.predict(self.emoji_train_X) emoji_dev_preds = self.model_sent140_emojiless.predict(self.emoji_dev_X) if self.testing: emoji_test_preds = self.model_sent140_emojiless.predict(self.emoji_test_X) else: emoji_test_preds = None return (sent140_train_preds, sent140_dev_preds, emoji_train_preds, emoji_dev_preds, emoji_test_preds) def run_sent140_emoji(self): ''' Trained on sent140, fine-tuned on emoji, predict on emoji Report score on sent 140 too, just because it's intersting ''' # model self.model_sent140_emoji = TorchShallowNeuralClassifier() # train combined_train_X = np.vstack((self.sent140_train_X, self.emoji_train_X)) combined_train_Y = self.sent140_train_Y + self.emoji_train_Y self.model_sent140_emoji.fit(combined_train_X, combined_train_Y) # test on sent140 sent140_train_preds = self.model_sent140_emoji.predict(self.sent140_train_X) sent140_dev_preds = self.model_sent140_emoji.predict(self.sent140_dev_X) # test on emoji emoji_train_preds = self.model_sent140_emoji.predict(self.emoji_train_X) emoji_dev_preds = self.model_sent140_emoji.predict(self.emoji_dev_X) if self.testing: emoji_test_preds = self.model_sent140_emoji.predict(self.emoji_test_X) else: emoji_test_preds = None return (sent140_train_preds, sent140_dev_preds, emoji_train_preds, emoji_dev_preds, emoji_test_preds)