def test_fit_methods( X_wide, X_deep, target, method, X_wide_test, X_deep_test, X_test, pred_dim, probs_dim, ): wide = Wide(np.unique(X_wide).shape[0], pred_dim) deepdense = DeepDense( hidden_layers=[32, 16], dropout=[0.5, 0.5], deep_column_idx=deep_column_idx, embed_input=embed_input, continuous_cols=colnames[-5:], ) model = WideDeep(wide=wide, deepdense=deepdense, pred_dim=pred_dim) model.compile(method=method, verbose=0) model.fit(X_wide=X_wide, X_deep=X_deep, target=target) preds = model.predict(X_wide=X_wide, X_deep=X_deep, X_test=X_test) if method == "binary": pass else: probs = model.predict_proba(X_wide=X_wide, X_deep=X_deep, X_test=X_test) assert preds.shape[0] == 100, probs.shape[1] == probs_dim
def test_fit_with_deephead(): wide = Wide(np.unique(X_wide).shape[0], 1) deepdense = DeepDense( hidden_layers=[32, 16], deep_column_idx=deep_column_idx, embed_input=embed_input, continuous_cols=colnames[-5:], ) deephead = nn.Sequential(nn.Linear(16, 8), nn.Linear(8, 4)) model = WideDeep(wide=wide, deepdense=deepdense, pred_dim=1, deephead=deephead) model.compile(method="binary", verbose=0) model.fit(X_wide=X_wide, X_deep=X_deep, target=target_binary, batch_size=16) preds = model.predict(X_wide=X_wide, X_deep=X_deep, X_test=X_test) probs = model.predict_proba(X_wide=X_wide, X_deep=X_deep, X_test=X_test) assert preds.shape[0] == 32, probs.shape[1] == 2
def test_predict_with_individual_component(wide, deepdense, deeptext, deepimage, X_wide, X_deep, X_text, X_img, target): model = WideDeep(wide=wide, deepdense=deepdense, deeptext=deeptext, deepimage=deepimage) model.compile(method="binary", verbose=0) model.fit( X_wide=X_wide, X_deep=X_deep, X_text=X_text, X_img=X_img, target=target, batch_size=16, ) # simply checking that runs and produces outputs preds = model.predict(X_wide=X_wide, X_deep=X_deep, X_text=X_text, X_img=X_img) assert preds.shape[0] == 32 and "train_loss" in model.history._history
metrics=metrics, ) X_wide_train, X_wide_test, X_deep_train, X_deep_test, y_train, y_test = train_test_split( X_wide, X_deep, target, test_size=0.2) model.fit( X_wide=X_wide_train, X_deep=X_deep_train, target=y_train, n_epochs=4, batch_size=64, val_split=0.2, ) # # to save/load the model # torch.save(model, "model_weights/model.t") # model = torch.load("model_weights/model.t") preds = model.predict(X_wide_test, X_deep_test) accuracy = accuracy_score(y_test, preds) print(accuracy) # # to save/load the model # torch.save(model, "model_weights/model.t") # model = torch.load("model_weights/model.t") # # or via state dictionaries # torch.save(model.state_dict(), "model_weights/model_dict.t") # model = WideDeep(wide=wide, deepdense=deepdense) # model.load_state_dict(torch.load("model_weights/model_dict.t")) # # <All keys matched successfully>